第一题
1. i = ()
int i = 1; int j = i++; if((i > j++) && (i++ == j)) { i += j; }
A:3
B:5
C:6
D:7
答案及解析 B
本题考查你对后置++的认识,后置++返回的是++之前的值,之后再++;
所以在进入if语句之前,j = 1, i = 2;
i > j++,2 > 1 为真,此时i = 2,j = 2;
i++ == j 为真,i = 3,j = 2
所以 i += j, i = 5;
第二题(易错题)
2. 在 32 位编译器上,下面输出的结果为()
char *str1 = "Hello", str2[] = "Hello";
printf("%d %d", sizeof(str1), sizeof(str2));
A:5 6
B:5 5
C:6 6
D:4 6
答案及解析 D
首先要知道sizeof求的是你的变量的数据类型的字节
str1是char*类型,是一个字符指针,并不是数组,所以指针的字节为4或者8字节,题目说了为32位,所以为4字节;
str2是一个字符串,sizeof(数组名)求的是整个数组的空间,但是字符串还有一个隐藏的\0,所以结果为6字节
第三题
3. 以下程序运行时输入:123456789↙,则程序运行结果是( )
#include <stdio.h> int main() { int x, y; scanf("%2d%*4s%2d", &x, &y); printf("%d", y - x); return 0; }
A:44
B:55
C:66
D:88
答案及解析 C
本题是一个比较少见的题;
%*4s表示读取一个长度为四个字符的字符串,中间的*表示将读取到的字符串忽略,不赋给变量列表中的变量。
%2d代表读取2个整数
所以x = 12,y = 78
y - x = 66;
第四题
4. 在标准C中,while(){}和do{}while()的功能完全相同。请问这句话的说法是正确的吗?
A:正确
B:错误
答案及解析 B
while循环是先进行条件判断后进入循环体
do-while是先进入循环体,后条件判断;
所以在条件相同时,do-while永远比while多执行一次循环
第五题
5. 在C语言程序中,若对函数的返回值类型未加显式说明,则函数的返回值隐含类型为()
A:void
B:double
C:char
D:int
答案及解析 D
若对函数类型未加显式说明,则函数的隐含类型为int