第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
→结束