main()
{ char a[ ]="morning",t;
int i,j=0
for(i=1;i<7;i++)
if(a[j]<a[i]) j=i;
t=a[j]; a[j]=a[7];
a[7]=a[j]; puts(a);
}
这个程序的输出结果是mo
为什么?
当做for(i=1;i<7;i++) if(a[j]<a[i]) j=i;时
j=0 i=1 比较a[0]和a[1]中的ASCII值,若a[j]<a[i]做j=i,因为m的ASCII小于o所以j=1;
j=1 i=2 同上o<r所以j=2;
j=2 i=3 同上r>n所以j=2;
……
j=2 i=6 同上r<g所以j=2;
然后把原程序中的j用2改写
t=a[2]; a[2]=a[7];/*这时a[2]里的内容就是\0*/
a[7]=a[j];/*a[7]内容也是\0*/
puts(a);遇到\0就输出结束,于是就输出mo
a[7]为什么不是g?
[此贴子已经被作者于2006-10-3 15:54:24编辑过]
t=a[j]; a[j]=a[7];
a[7]=a[j];
的意思是不是把a[j]与a[7]的值互换?
还有,程序要求输出a,那么意思是不是把"morning"的第2个字母r与第7个\0对换其他维持不变输出?
为什么答案只有两个字母?
当k=5时,str[k]='I',这个时候k进行自加后遇到break,跳出switch,执行putchar('*'),此时k=6.执行完putchar('*')后,k再自加,变成7,所以不输出A
谢谢!
再请教一道题目
main()
{ int i,f[10];
f[0]=f[1]=1;
for(i=2;i<10;i++)
f[i]=f[i-2]+f[i-1];
for(i=0;i<10;i++)
{ if(i%4==0) printf("\n");
printf(%3d",f[i]);
}
输出答案是 1 2 3
5 8 13
21 34 55
首先我想知道printf(%3d)是什么意思?