C语言问题???急。。。。在线等!!!

来源:百度知道 编辑:UC知道 时间:2024/05/26 16:01:43
main()
{ int a=10,y=0;
do
{a+=2,y+=a;
printf("a=%d y=%d\n",a,y);
if(y>20) break;
}
while(a=14);
};
结果是多少,答案是a=12 y=12
a=16 y=28

A=12 Y=12我知道。我不明白16与28怎么算的呀。高手请教下。要请细0呀! <以上为课本上的试题>

do while结构是先do后判断while表达式。

第一次: a=12,y=12, 此时,执行while里面的(a=14),注意这里是=,不是==,所以返回14,为TRUE,且a=14;

第二次: a=14+2=16,y=12+16=28 ,由于y>20,break,循环结束!

这是个do-while循环啊
循环开始a=10,y=0;
循环第一次a=12 y=12
到while那,把a赋值了14
所以,循环第二次的时候a=16 y=28
这个时候if(y>20) break; 退出循环了
也就是说,这个循环不是靠while中的条件退出的,因为它一直为真
而是靠if(y>20) break;退出的

do
{
a+=2,y+=a;
printf("a=%d y=%d\n",a,y);
if(y>20) break;
}
while(a=14);

你现在的程序得到的结果理论上就是a=12 y=12 :但因为while(a=14); 这个条件不是问a等于14吗,而是将14付值给a,所以循环执行有a=14+2=16啊y=14+12=28了(12是第一次付给y的值)要想得到a=12 y=12 需改while(a==14);就可以了

你的程序中有"while(a=14)"
当程序运行到这里的时候系统会对a赋值
当运行完第一次循环后出现a=12 y= 12
到while(a=14),a被赋值为14然后进入第二次循环
第二次printf出来的是a=16 y=28然后if(y>20) break执行,循环跳出
如果你将while(a=14)改为while(a==14)就可以得到a=12 y=12、这个唯一的结果

呵呵。看来你是学c的新手哦,这个问题是个比较容易错的位子,=是赋值表达式,==才相当于数学中的等于号,while()括号里一般是关系表达式和逻辑表达式。但也可以是其他的合法表达式。a=14