2022.11.22 C错题
1.下列程序段输出结果为:
int x=1, y=012;
printf(“%d”,y*x++);
输出结果:10
分析:012是8进制数,转换成十进制数是9,而x++的结果是加1以前的值,即1。
2.以下表达式x&&1
用在if的条件中时,和哪个是等价的:
答案:x
分析:x只要不是0就是逻辑真,右边的1是确定的值,所以其实不起作用
3.对于以下代码:
unsigned short sht = 0;
sht --;
执行后,sht的值是2的16次方-1
分析:short类型在各种平台都是16位,2的16次方为65536,所以unsigned short能表达的最大的数是65535,而且unsigned 不能表达负数
4.在代码:
while ( !e )
中,!e等价于:e == 0
分析:e一般指自然常数,其值约为2.718281828。任何非0整数值都是逻辑的true,所以只有e是0的时候,!e才会是true。
5.对于一下代码
int i,j=6;
i没有被初始化,j=6
6.对于一下代码:
int i=6;
do {
printf("%d", i--);
} while (0);
输出i=6
分析:i–的结果是i减以前的值,while(0)是合乎语法的。
7.表达式ch =‘B’ + ‘8’ + '3’表达的字符是:G
分析:
8.以下代码的输出是:
int i,x,y;
i=x=y=0;
do {
++i;
if ( i%2 )
x+=i,
i++;
y +=i++;
} while ( i<=7 );
printf("%d %d %d", i, x, y);
结果:9 1 20
分析:第一次初始值i=0的时候先执行了++i,这时候i=1,i%2=1,满足true=1进入if循环,执行x=x+i=0+1=1,i自增得到2,还需要注意,y=y+i++,这时候y=0+2=2,i继续自增得到3。关于这个逗号不是语法错误,是从左到右计算表达式,并且表达式的值为最后一个语句的值。第二次,i自增i=4,不满足if语句,执行y=2+4=6,i自增i=5。满足while循环的。第三次,i自增i=6,不满足if语句,执行y=6+6=12,i自增i=7。还是满足i<=7。第四次,i自增i=8,不满足if语句,执行y=12+8=20,i自增i=9,不满足循环条件,结束循环,最后输出得到i=1,y=20。
9.表达式(double)(10/4*4)
的结果是8.0
分析:这个计算过程中是int类型,只是输出结果是double类型
10.以下代码段的结果是:
int i=10;
long long t = sizeof(i++);
printf("%d", i);
结果是:10
分析:sizeof()是静态运算符,但不会对表达式进行计算。。。很多公司面试题中出现过。
11.以下代码的输出是:
int x=0, y=0, z=0;
z = (x==1) && (y=2);
printf("%d ", y);
答案:0
分析:y=2只是用于逻辑判断,不是真正的在赋值。