C语言的问题!!!帮忙...

来源:百度知道 编辑:UC知道 时间:2024/06/21 06:05:15
1:#include"stdio.h"
main()
{
int a=0,b=0,c=0,d=0;
if(a=1) {b=1;c=2;}
else d=3;
printf("a=%d,b=%d %d %d\n",a,b,c,d);

}
为什么程序输出的是1120? a不是已近定义了a=0吗?那么a=1就不符合啦 也就不会完成以后的程序了吗?详细解释下哈

2:#include"stdio.h"
main()
{
int a=1,b=2,c=3;
if(a++==1&&(++b==3||c++==3))
printf("%d %d %d\n",a,b,c);

}
为什么程序输出的是233??? 为什么a显示为2? 而c也同样是自增的后置,c却为3?
大家帮下忙 解释的好 我追加分

1.。。。。。。。。。。
1 1 2 0这是答案,
解释。在这里要清楚if结构。if后()里是什么。()是表达式。可以是逻辑,算术等表达式,也可是任意的数据类型,整型啦,实型啦等,这里要注意它是a=1是个赋值表达式。不是a等于1,我用的是汉字不是==要注意,在vc里等于是==不是=。接下来是判断,判断。明白?判断表达式是值是真假,真为1,假为0.真继续执行,假跳出。在这里a=1表达式为1,真,继续执行,所以为a等于1.。。。。。以下明白了吧。

2.。。。。。。。。。。。。。。
逻辑表达式的短路问题知道吗。这就是 的。
先看()里的这是||,或就是有一真就是真。所以++b==3,真。后面就不算了。不管了。
好,()里为1,真,再看外面。因为是&&,与。a++==1判断下。a是1等于1.真。所以if里()是真。A++和++A是不样的。A++中A是先用再自加为A+1.++A是先自加为A+1再用。所以这里++b就是++A型。变成3再用。a++则是先用。a=1所以为真。不明白看看C语言++自加这节。至于||或你也看看。前面有一真,后面编译器就不执行了。所以这题是233
输出。
a判断后++变成2
++b变成3后判断
c没有管它,所以是3

if (a = 1) 是赋值,不是比较

比较是
if (a == 1)

对于第一题:
我们看到if(a=1)是一个赋值语句,并非if(a==1)判断语句,所以此时a被重新赋值了1,有因为if里面为1,即为真,所以执行b=1,c=2的赋值.所以是1120没错

对于第二题
有一个细节需要了解,就是,在或运算中,如果前面一个运算,即++b==3为真,就不会继续进行或右边的运算,所以,c++==3,并未被执行,所以c仍然等于3.

1. if(a=1) {b=1;c=2;}这里应该是if(a==1) {b=1;c=2;}吧
2.不懂

和二楼的一样