printf(\; A) 65535 B) 1 C) 有错误 D) -1
分析:题中将x定义成无符号整数,并且已初始化为:1111111111111111,若按%d格式输出,则最高位的1被当成了符号,1111111111111111成了负数
的补码,输出结果为-1。 本题正确答案为D。
二、填空题
1.下面程序段的功能是输出大写字母对应的小写
字母的ASCII码,请填空。
char ch; scanf(\
ch=(ch>=′A′&&ch<=′Z′)?(【1】):ch
printf(\【2】\\\\n\
分析:题目中条件运算为判断输入字母是否为大写,当ch>=′A′&&ch<=′Z′为真时,将其转换成对应的小写字母,需ASCII码值加上32,已知题意是将大写字母对应的小写字母ASCII值输出,所以printf语句
中的输出格式应为十进制格式。
本题正确答案为【1】 ch+32, 【2】 %d。 2.下面程序段的执行结果是x=【3】,y=【4】。
inta=3,b=5,x,y;
x=a+1,b+6; y=(a+1,b+6); printf(\
分析:此题考查逗号表达式的概念,因逗号运算符的优先级比赋值号还低,所以执行x=a+1,b+6时,x
得到的是a+1的值。
本题正确答案为【3】 4,【4】 11。 3.下面程序执行后k的值为【5】。
int a=1,b=2,c=3,d=4,k; k=a>b?a:c>d?c:d
分析:因题中a>b的值为假,故求解表达式k=a>b?a:c>d?c:d相当于求k=a>b?a:(c>d?c:d)。
本题正确答案为【5】 4。
4.已知:int a=5;则执行a+=a-=a*a;语句后,a的值
为【6】。
分析:a+=a-=a*a的运算顺序是从右向左,相当于求a+=(a-=a*a),其中小括号内的运算得a=5-5*5即a=-20,下一步再求a+=a,即a=a+a,将-20代入得a=-40。
本题正确答案为【6】 -40。
5.下面程序的运行结果是x=【7】,y=【8】。
main( ) { float x=4.9;int y;
y=(int)x;
printf(\
分析:强制类型变换并不改变x的原值,x仍为4.9,而变换得到的是中间结果,此题将中间结果赋给了y,另外注意是舍弃小数部分,而不是四舍五入。 本题正确答案为【7】 4.900000 【8】 4。