C语言程序题,麻烦看一下它的功能

#include<stdio.h>
#include<string.h>
void main()
{ char a[]="acfijk";
char b[]="befijklqswz";
char c[80],*p;
int i=0,j=0,k=0;
while(a[i]!='\0'&&b[j]!='\0')
{if(a[i]<b[j])c[k++]=a[i++];
else if(a[i]>b[j])c[k++]=b[j++];
else {c[k++]=b[j++];
i++;}}
while(a[i]=='\0'&&b[j]!='\0')
c[k++]=b[j++];
while(a[i]!='\0'&&b[j]=='\0')
c[k++]=a[i++];
c[k]='\0';
puts(c);}输出结果是什么?求详细过程。

输出结果为abcefijklqswz
功能是这样的
while(a[i]!='\0'&&b[j]!='\0')
{if(a[i]<b[j])c[k++]=a[i++];
else if(a[i]>b[j] )c[k++]=b[j++];
else {c[k++]=b[j++];
i++;}}
这一段话的意思是:将字符串a与字符串b各个元素进行比较直到a或b其中有个出现'\0'为止,然后将比较出的较小的那个字母(元素)存入到字符串c中。
过程举例:a由:a,c,f,i,j,k组成
b由:b,e,f,i,j,k,l,q,s,w,z组成
首先:i=0,j=0,k=0,且a[i]!='\0'&&b[j]!='\0’
所以执行:if(a[i]<b[j])c[k++]=a[i++];
else if(a[i]>b[j] )c[k++]=b[j++];
else {c[k++]=b[j++];
i++;}}
发现a(a[0])<b(b[0])所以要执行c[k++]=a[i++];
即c[0]=a[0]=a;不过要注意的是同时也执行了“k++”与“i++”,也就是说下一次循环k=1,i=1了。

第二次循环时:i=1,j=0,k=1,且a[i]!='\0'&&b[j]!='\0
循环条件为真,所以执行循环体
发现c(a[1])>b(b[0])所以要执行c[k++]=b[j++];
即c[1]=b[0]=b;

就像上述这般如此循环下去,直到a或b中有一个结束为止。如果说中途遇到a与b中的某个字母相同的时候,比如说a[2]=f,b[2]=f;这时就执行
{c[k++]=b[j++];
i++;}
即将b中的字母存入到c中。
这就是你第一个循环的功能,而第二个循环
while(a[i]=='\0'&&b[j]!='\0')
c[k++]=b[j++];
while(a[i]!='\0'&&b[j]=='\0')
c[k++]=a[i++];
c[k]='\0';
这个功能是,如果a或b中有一个先结束了,比如a它在上一次循环中循环到最后一个字母k的时候就循环就停止了,这时候b还没有停止所以满足(a[i]=='\0'&&b[j]!='\0')
于是执行c[k++]=b[j++];也就是将b中剩余的字母全部复制到a中。反之,如果a比b长的话就把a中剩余的字母复制到c中。

在输出结果中的“lqswz”实际上就是b比a多出的那些字母。

到这里我想我已经讲的很详细了,这道题目很简单的,只要楼主细心的去分析它,就明白一切了。
呵呵,希望我的回答能对你有所帮助哦~~~
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-08-14
学习C语言我建议你去败笔网络安全小组

参考资料:败笔网络安全小组

第2个回答  2010-08-14
最终运行结果是: abcefijklqswz
函数执行含义:
#include<stdio.h>
#include<string.h>
void main()
{ char a[]="acfijk"; /*定义字符串a*/
char b[]="befijklqswz"; /*定义字符串b*/
char c[80],*p; /*定义字符串c*/
int i=0,j=0,k=0;
while(a[i]!='\0'&&b[j]!='\0')
/*该循环的作用是将字符串a和字符串b中的字母进行ASCII码比较ASCII码小的那个字母赋值给字符串c*/
{
if(a[i]<b[j]) c[k++]=a[i++];
else if(a[i]>b[j]) c[k++]=b[j++];
else {
c[k++]=b[j++];
i++;
}
}
while(a[i]=='\0'&&b[j]!='\0') c[k++]=b[j++];
/*该循环的作用是将字符串b剩下的字母赋值到字符串c中*/

while(a[i]!='\0'&&b[j]=='\0') c[k++]=a[i++];
/*此时i=6,a[6]='\0',j=11,b[11]='\0',不满足循环条件,循环不执行*/

c[k]='\0';
/*由于下面使用puts函数,所以字符串c最后一位必须人工赋值'\0'*/
puts(c); /*输出字符串c*/
}

完整的循环执行过程:
开始→第一个while循环开始→
i=0, j=0, a[0]=a, b[0]=b, c[0]=a, k=1, i=1, j=0
i=1, j=0, a[1]=c, b[0]=b, c[1]=b, k=2, i=1, j=1
i=1, j=1, a[1]=c, b[1]=e, c[2]=c, k=3, i=2, j=1
i=2, j=1, a[2]=f, b[1]=e, c[3]=e, k=4, i=2, j=2
i=2, j=2, a[2]=f, b[2]=f, c[4]=f, k=5, i=3, j=3
i=3, j=3, a[3]=i, b[3]=i, c[5]=i, k=6, i=4, j=4
i=4, j=4, a[4]=j, b[4]=j, c[6]=j, k=7, i=5, j=5
i=5, j=5, a[5]=k, b[5]=k, c[7]=k, k=8, i=6, j=6
i=6, j=6, a[6]='\0’, b[6]=l
→第一个while循环结束 此时 c[]=abcefijk

→第二个while循环开始
i=6, j=6, a[6]='\0’, b[6]=l, c[8]=l, k=9, i=6,j=7
i=6, j=7, a[6]='\0’, b[7]=q, c[9]=q, k=10, i=6,j=8
i=6, j=8, a[6]='\0’, b[8]=s, c[10]=s, k=11, i=6,j=9
i=6, j=9, a[6]='\0’, b[9]=w, c[11]=w, k=12, i=6,j=10
i=6, j=10, a[6]='\0’, b[10]=z, c[12]=z, k=13, i=6,j=11
i=6, j=11, a[6]='\0’, b[11]='\0’
→第二个while循环结束 此时 c[]=abcefijklqawz

→第三个while循环开始
i=6,j=11,a[6]='\0’, b[11]='\0’
→第三个while循环结束

c[13]='\0';

→输出字符串c
→结束
相似回答