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

有以下程序
main()
{
int a=0,b=0,c=0,d=0;
if(a=1) b=1;c=2;
else d=3;
printf(“%d,%d,%d,%d\n”,a,b,c,d);
}
程序输出
A)0,1,2,0 B) 0,0,0,3 C)1,1,2,0 D)编译有错
答案是D 请告诉我哪里有编译错误

if(a=1) b=1;c=2;
这一行有问题
if和else之间永远只能有一条语句,而b=1;c=2;是两条语句!

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

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

如果把b=1;c=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
温馨提示:内容为网友见解,仅供参考
第1个回答  2020-02-15
int
a=0,b=1,c=2;
//
不需要解释吧
++a>0
//
a成了1,然后做了次1>0的比较,结果为真
++a>0||++b>0
//
由于||之前已经为真,||之后的表达式就不执行了,b的值不变
++c;
//
if成功,执行下面的语句
你应该是没理解||和&&的估值规则吧。他们的左边是必然会被执行的,但左边执行完之后,右边就不一定了。上面是||,如果&&的话,左边为假则&&右边不执行。
第2个回答  2009-09-16
if(a=1) b=1;c=2; -------------{b=1;c=2;}

printf(“%d,%d,%d,%d\n”,a,b,c,d);------""不是“”

如何像上述改完,选C

if(a=1) b=1;c=2;--------if(a==1){b=1;c=2;}

printf(“%d,%d,%d,%d\n”,a,b,c,d); -------- ""不是“”

如何像上述改完,选B
第3个回答  2009-09-16
D,if(a=1),里面的赋值语句是会返回值的。所以,后面对b和c的赋值操作会被执行。
第4个回答  2009-09-16
if(a=1) b=1;c=2;
else d=3;
改为
if(a==1)
{b=1;c=2;}
else
d=3;
编译错是因为花括号问题

有以下程序 int a=0,b=0,c=0,d=0; if(a=1) b=1;c=2; ...
原因是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后的语句,所以最后...

C语言if else
首先程序肯定会出错的 if和else之间不可以超过一句语句 所以楼主这个程序是错的 如果改成这样的话 main(){int a=0,b=0,c=0,d=0;if(a=1){b=1;c=2;}\/\/注意这里的a=1是赋值语句,所以是永真,因此执行b=1;c=2不执行else else d=3;printf("%d,%d,%d,%d\\n",a,b,c,d);\/\/a=1...

...<stdio.h> main() { int a=0,b=0,c=0,d=0; (a++ && b++) ? c++...
所以程序执行冒号后面的d++。所以a=1,b=0,c=0,d=1。所以答案选D

...Main() { int a=1,b=2,c=3,d=0; if(a= =1 &&b++= =2) if(b!=2...
源程序:include <stdio.h> main(){ int a=1,b=2,c=3,d=0;if(a==1&&b++==2)if(b!=2 || c--!=3)printf("%d,%d,%d\\n",a,b,c);else printf("%d,%d,%d\\n",a,b,c);else printf("%d,%d,%d\\n",a,b,c);} 输出: 1,3,3 【分析】if(a==1&&b++==2) *\/...

...main() { char a='本金',b='年数',c='年利率',d='应得利息'e='实...
C)!(a=0)(b!=0)D)a b11.执行以下程序的输出结果是( )。main() { int i=1,j=1,k=2; if((j++||k++) i++) printf("%d,%d,%d\\n",i,j,k); }A)1,1,2B)2,2,1C)2,2,2D)2,2,312.以下程序的输出结果是( )。main(){int a=0,b=1,c=0,d=20;if (a) d=d-10;else ...

...main() { int a=3,b=0,c=0; if(a==b+c) printf(
这题咋答?因为代码中有汉字符号,所以过不了编译,应该选A;如果没有这些错误,就应该选D。

c语言中,如何判断两个整数的大小关系呢?
再看右边,++c的值为1,c==1;则应输出a=1 b=0 c=1 k=1 编译运行:分析正确 引申 2 int a=0,b=0,c=0,d=0,k=0;k = a++ && ++b || ++c && d++;printf("a=%d b=%d c=%d d=%d\\n",a,b,c,d);printf("k=%d\\n",k);分析:原式可化为k=(a++ && ++b)||...

执行以下程序后,其输出结果是( )。 int a=0,b=0,c=0; c=(a-=a-5)
(a-=a-5)即a=a-(a-5)=5 所以c=5 a=b=0;所以选B 希望对你有帮助,有问题欢迎追问~

设有以下程序段 int x=0,s=0; while(!x!=0)s+=++x; printf('%d',s);
【答案】:B 本题考查逻辑非运算符和不等于运算符的区别,逻辑非运算符“!”的优先级大于不等于运算符“!=”的优先级。注意:for语句和do…while语句的使用。

各位大哥哥大姐姐,谁有全国计算机二级java考试真题及答案,急,急...
4) 若有变量说明: int a=0,b=0,c=0; ,以下符合C语言语法的赋值表达式是( B )。A、a=9+b+c=a+9B、a=9+b; c=a+9C、 a=9+b,b++D、a=9+b++=a+75) 以下选项中属于C语言数据类型的是( C ).A、复数型B、逻辑型C、双精度型D、集合型6) 若以下变量均是整型,且num=Sum=7;则计算...

相似回答