第一题:
解析:
这道题考的是switch-case里加上break,i的起始值是4,每一轮都增加1,离开循环前的最后一次i是8 刚好整除,然后再进行i++,所以选B,而不是D。
第二题:
解析:
这道题的错误是犯在一开始没读懂题目,在if条件里,右侧的1永远是ture,所以想要成立是看x,x只要不是0,那么逻辑是真的,所以选D
第三题:
解析:
八进制的计算,算错了不应该的。选A
第四题:
解析:
本质和第2题是一样的,在while的条件中,只有条件为ture才执行,所以相当于!e==ture==1,!是非的意思,也就是e==false==0,所以选A,纠结e是啥去了。
第五题:
解析:
命名的要求:不能以数字开头,只能用数字、字母、下划线,不能和已有的字重合,所以选B
第六题:
解析:
i是没有被初始化,但是是可以通过编译的,只有j被赋值了,我一开始是想的,值是不确定被赋给谁了,所以选了不能通过,答案是C
第七题:
解析:
char的空间是1个字节,可以容纳-1的。所以选D
第八题:
解析:
在&&符号里,前一个为0 就不判断后一个了,y=2不被执行,所以y=0
第九题:
解析;
sizeof是静态运算符,也就是i++不会被执行,所以i是10
第十题:
解析:
10/4*4实际上是先进行了整数除法10/4,得到的结果是2,然后再乘以4,最终得到的结果是8。因为整数除法只保留整数部分,所以得到的结果也是整数。在将结果强制转换为double类型之前,已经得到了整数8,所以转换后还是8。若想得到8.0,可以将10或4中的一个改成10.0或4.0,使得整个表达式中至少有一个操作数是浮点数,这样就会得到浮点数8.0。例如(double)(10.0/44)就会得到8.0。
这段解析是我去问了chitGPT得到的 别说 还挺香的 有些点可以解释的很清晰。
第十一题:
解析:
先判断i%2结果是0或者1,为1的时候条件为真,为0的时候条件为假:具体代码和运行如下(注意在y的赋值里,其实i是上一行i++后的产物,然后再进行i++;且由于x+=i用的是, 所以,If条件是在i++那里结束的):
如果还不理解,可以用debug观察,或者纸面演练。
在if语句里x +=i,这里的,起到分隔作用,实现在一条语句里执行多个操作。可以在没有大括号的情况下,避免if条件语句的内容遗落。
#include <stdio.h>
int main() {
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);
return 0;
}
第十二题:
解析:
#include是编译预处理指令,不是C语言的成份。