有以下程序 int a=0,b=0,c=0,d=0; if(a=1) b=1;c=2; .....

有以下程序 int a=0,b=0,c=0,d=0; if(a=1) b=1;c=2; .....,第1张

if(a=1)

b=1c=2

这一行有问题

if和else之间永远只能有一条语句,而b=1c=2是两条语句!

c语言一条语句可以写在多行,多条语句也可以写在一行,关键是就分号,一个分号到上一个分号(或者是{,左半花括号)之间的内容都被认为是一条语句

所以想在if和else之间执行多条语句的时候,必须用花括号{},使多条语句组成一条复合语句。

如果把b=1c=2改为b=1,c=2就可以编译通过了,它的结果是1,1,2,0

原因是if(a=1)是先给a赋值,然后判断a的值,非0则执行if后紧跟的语句,若为0则执行else后跟的语句,这里给a赋值为1,非0,因此执行给b,c赋值的语句,所以结果是1,1,2,0

进一步,如果把if(a=1)改为if(a=0),程序执行流程跟刚才说的一样,但是由于a值为0,因此执行else后的语句,所以最后结果会是0,0,0,3

再进一步,如果把if(a=1)改为if(a==1),那么程序执行的时候,判断a是否等于1,若等于则给bc赋值,否则给d赋值,这里a==0,因此执行else后的语句,结果跟前一种情况一样,会是0,0,0,3

结果是60,这个是由于函数中sum定义为staic的缘故。

一旦定义为static,那么定义的参数值不会随着调用结束而释放,而是储存起来。

函数的计算就是从数组的第0个数累加到最后一个数。

主函数调用函数fun(a,5),累加结果为1+2+3+4+5=15,这时15就被保存起来。

当主函数再调用fun(b,4)时,已经不是从0开始累加,而是从15开始,那么就是:

15+6+7+8+9=45

因此最后的结果就是:s=fun(a,5)+fun(b,4)=15+45=60

C中非零的值为真,0为假,这样实际上if(a++&&b++)

因为a初始为零,执行完这行才自加1,所以相当于if(false),又因为&&多条件逻辑判断的时候,

前面的为假后面的就不再执行,所以b++是没有执行的,最终的结果就是a为1,b也为1,答案就是A)

FALSE_OUT:

a=1,b=1


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12064008.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存