这里最主要的问题在于对while (a[i++]!='\0') b[i]=a[i];这句话没有理解清楚。strcat(a,b)所以
:a="ABLMNP"; b=“LMNP”
while (a[i++]!='\0') i=0表达式i++=0判断a[0]!='\0'后,i自增1,即i=1;所以进入循环体执行b[i]=a[i]时,i=1的,b[1]=a[1]='B';b[0]的值并未改变,b[0]=L;
因此将a[i]后面的值赋给b[i],所以结束的时候b="LBLMNP"。//
while (a[i]!='\0')
{
b[i]=a[i];
i++;
}改成这样就是
"ABLMNP"应该是B吧,
循环次数 i aa_score total
初始 0 无 0 //初始就是进入循环前
1 1 50 50 //第一次循环后,Each aa_score In score 就是把score第一个元素赋给aa_score 所以aa_score=50,之后执行i = i+1 所以i =1 ,total=total + aa_score,所以total = 50 ,之后就打印了
2 2 14 64 //第二次循环一样道理
3 3 36 100
i从1到5循环,对应的b初始为1,0,1,0,1。
b-->=0是先取b的值判断是否>=0,再将b减1。
所以当b=0时,b-->=0成立,之后b=-1,b>=0不成立,但b--还会执行,b变成-2。
所以当b=0时,while(b-->=0)会执行一次,当b=1时,会执行两次。所以k++总共执行了2+1+2+1+2=8次。
一开始,s被赋值,为2
接着3次循环,
第一次,i= 0,%2求余为0做了else t= 5,a= 5,返回值8 (因为在内部调用,到了外面还是用a=3)
第二次,i= 1,a= 4,t= 4返回值8(外部a因前一次a++,所以为4)
第三次i= 2,a= 6,t= 6,返回值11(外部a因前一次a++,所以为5)[ 同理第一次使用else的时候a++了,所以不是5而是6了 ]
把三次返回值加起来,就是所输出s 29= 8+8+11+2
注意static的用法,区分局部和全局~
它是不能运行的。#include<stdioh>
int main( )
{ int y=2,a=1;
while(y--!=-1)
{ do{a =y; a++;} while(y--); }
printf("%d,%d",a,y);
return 0;
}运行后的输出是:
1,-2
分析运行过程:
y=2,a=1;
判断,为真,y变为1
进入do循环:
a=11=1; a++变为2
内循环判断y--为真,y变为0;
再次内循环:
a=20=0; a++变为1
内循环判断y--为假,y变为-1;
外循环判断为假,y变为-2;
所以,最后的输出是1,-2
评论列表(0条)