c语言选择结构问题!

int x=40;char z=✀B✀;int B;B={(x&oxff)&&(z>✀a✀)};执行程序后,B的值为? 详解!
2025-03-22 18:39:06
推荐回答(5个)
回答1:

1.
#include
main()
{int a=100;
if(a>100) printf("%d\n",a>100);
else printf("%d\n",a<=100);
}
这段程序代码的功能是进行一个判断,首先对整型变量a赋值为100,之后进行判断,经过判断a并不满足if语句中的条件,所以执行else语句,在printf语句中,是将a<=100这个表达式的值(1)输出,所以本程序的运行结果是:
1
注意:有回车换行
2.
当a=1,b=2,c=3时,以下if语句执行后,a,b,c中的值分别为___
if(a>c)
b=a;a=c;c=b;
根据这个程序的运行,首先对a、b、c分别赋值1、2、3,在进行了if语句后,a并不大于c,所以直接跳过b=a这条语句转而执行a=c;c=b,所以最终的结果是:
a=3,b=2,c=2
3.若变量已正确定义,
x=0;y=2;z=3;
switch(x)
{case 0:switch(y==2)
{case 1:printf("*");break;
case 2:printf("%");break;
}
case 1:switch(z)
{case 1:printf("$");
case 2:printf("*");break;
default:printf("#");
}
}
这段程序主要考察的是对switch这种分支判断语句的掌握,主要的要点在于:在switch语句的执行过程中,对满足的case语句执行,如果在case语句后没有break语句,则会顺序执行至switch语句结束或下一个case的break,只要你明白了这一点,那么这个程序就很简单了。
首先,对x进行判断,x=0则执行case 0语句,而在switch(y==2)中括号内的值为1,所以又执行case 1,输出了一个"*"之后,遇到break跳出switch语句,进入外层……等等
这样就能得出这一段程序代码的运行结果:
*#

回答2:

x&oxff,是将40和16进制的ff进行逻辑与运算,判断结果是否为0,不过后面的z>'a',z即'B'的ascii是66,而'a'的ascii是97,所以后面为false,不用判断前面是否为0了,整个表达式是false,所以B=0。

回答3:

B为0,因为,上面
{(x&0xff)&&(z>'a')}
是一个布尔运算表达式.
因为, 'a' = 97,z='B'=66,
所以 66>97运行结果为假.即返回 0,
在C语言中0为假,非0为真.
又因为 (x&0xff)&&(z>'a') 是与操作就是,当两个同时为真时才为真,
有一个为假就为假了.虽然左边的部分 (x&0xff)运算结果为真,
但是(z>'a')运算结果为假.所以
总的表达式为假,所以总的布尔表达式返回0.
两个大括号,只是起到 便于阅读的作用.或划分作用范围的作用.在这里可以省去.

还有不明白的地方也可以问我...

回答4:

0

B=(1) && (2)
看2表达式
z>'a' 由于z='B' , 'B'好像是66,'a'是97,我要没记错的话,反正大写都比小写的小.
所以z>'a'这个表达式是假,即为0
那么(1) && (2) 真与假还是假(任意数&&0后均为0),就是0

回答5:

先执行x&oxff 即:0x0028&0X00FF 结果=x 因为x>0 所以判断Z>‘a’从Ascall码知道‘a’>‘B’结果为假,所以B=0;