关于C语言的一堆问题,高手内进!

来源:百度知道 编辑:UC知道 时间:2024/06/05 16:33:57
有一堆问题需要解决,麻烦懂的人给出详细解释,不胜感激!
1. 若X,Y,Z的初值为1,则执行表达式
W=++X||++Y&&++Z后,X,Y,Z的值分别为??
答案: X=2,Y=1,Z=1。

2. 设A、B、C都是INT型变量,A=3,B=4,C=5,哪个表达式中, 值为0?
答案: !((A<B)%%!C||1)

3.下列程序段的输出是:
INT I=65536; PRINTF("%D\N",I);
答案: 0

4.若x,y都是int型,x=100,y=200则语句printf("%d",(x,y)); 的输出结果
为:
答案:200
注:请问(x,y)是啥意思?

5.x为int型变量,下面程序段的输出结果为:
for(x=3;x<6;x++)
printf((x%2)?("**%d"):("##%d\n"),x);
答案:**3##4
**5

1、&&的优先级高于||,因此相当于++X||(++Y&&++Z)。首先计算++X,X变为2,而返回值是1(真),“真”与任何值求“或”都是“真”,因此后面的++Y&&++Z都不再计算,因此Y和Z都还是1.

2、没有%%这个运算符,应该是&&吧。(A<B)为真;C=5(为真),所以!C=0(为假),(!C||1)为真。两边都是真,合起来也是真,最后取反为假,所以就是0了。

3、int型的范围为-32768到+32767,65536不在此范围内,属于long int型。将65536赋给int型变量i,会进行强制类型转换,转换结果为0,因为long int型的65536的低16位为00H。(这个题不严格,具体跟编译环境有关)

4、(x,y)是逗号表达式,返回值为最后一个子表达式(即y)的值,因此是200。

5、x从3到5取值,共循环三次。每次循环执行一次printf函数。?:为三目运算符,“若。。则。。否则。。”。当x为偶数的时候(x%2=0,%为求余),printf的格式串为"##%d\n";x为奇数的时候,格式串为"**%d"。因此输出三次,输出结果为"**3##4\n**5",即所给答案。

对于第一个我不明白!

第二个:你不用管括号里有多复杂,只把握一点里面有一个"或"运算,"或"运算右边有一个"1",那么整个括号里的逻辑表达式的值就肯定为1,再进行括号外的"非"运算,肯定是0了!

第三个:应该是数据溢出的问题!

第四个:(x,y)这是一个逗号表达式,整个式子的值就是最右边的值!

第五个:这是一个三目运算!"?"前是一个逻辑判断,如为真整个式的值就是";"前式子的值,否则就是";"后面的值.当前判断3,4,5中的偶数(能否被2整除),如果是奇数就输出"**数字",如果是偶数就输出"##数字"并换行!

路过