C语言两道小题

来源:百度知道 编辑:UC知道 时间:2024/06/20 01:07:37
不明白题目的意思
第一
int x=3;
do
{printf("%3d",x-=2);
}
while(!(--x));
程序段输出的结果是( )

答案是1 -2

第二
int i,j,m=0; 补充问下i j m 三个都是0还就只m是0
for(i=1;i<=15;i+=4)
for(j=3;j<=19;j+=4)m++; 此m++和i j有什么关系啊
printf("%d\n",m);
程序的输出结果是
答案是20

1
int x=3;
do
{printf("%3d",x-=2); /*x=x-2;输出x*/
}
while(!(--x));/*当x=x-1;若x=0,则循环 为非0数则跳出循环*/
第1步输出3-2=1,1-1=0所以循环 输出-1 !(-1)==0跳出循环 结束`` `

2
只有m=0;
for(i=1;i<=15;i+=4)
for(j=3;j<=19;j+=4)m++; 此m++和i j有什么关系啊

此处m++是为了统计循环的次数
i=1 5 9 13`外层循环4次
j=3 7 11 15 19内层循环5次`
所以一共为4*5次 答案为20

x-=2 x=3 得x=1 printf("") 1
--x 得x=0 !(--x)=1;
x-=2 x=0 得x=-2 printf("") -2
--x 得x=-3 !(--x)=0; 退出循环

第一题是一个do-while循环.当x<0时循环结束!
第二题:两层for循环,m++被为循环体,要执行两次for循环!写的更明显点就是:
for(i=1;i<=15;i+=4){
for(j=3;j<=19;j+=4){
m++;
}
}内层执行5次,外层4次,所以m++ 一共执行20次.最后m=20
刚开始定义的int i,j,m=0;只有m=0,i和j只是定义了,还没有初始化,在使用要先符值才行.