C语言选择题

练习二级选择题,点击选项即可查看结果

第111题. 若 int a=10; a << 1;移位运算后结果是()
正确选项:
解析:左移运算符<<,二进制向左移动1位,低位补0,等价乘以2。10二进制1010,左移一位得到10100,十进制20。注意:a<<1只是表达式计算,不会改变变量a本身,写成 a = a <<1才会修改a。
第112题. 下面哪一个不是C语言合法常量()
正确选项:
解析:0开头代表八进制常量,八进制数字只能使用0‑7。081里面出现数字8,属于非法八进制常量。0xff十六进制;123L long长整型常量;"abc"字符串常量。
第113题. 执行 char ch = getchar();,输入"A回车",getchar第二次调用读到字符是()
正确选项:
解析:getchar读取每一个键盘输入字符,不会自动忽略回车空格。第一次读到'A',缓冲区还保留按下回车产生的换行'\n',第二次getchar就读取这个换行符。想要跳过换行需要额外处理输入缓冲区。
第114题. 表达式 sizeof("hello") 的结果为()
正确选项:
解析:"hello"字符串字面量末尾自带隐藏'\0'结束符。h e l l o \0一共6个char字符,sizeof结果等于6。strlen("hello")得到有效字符5,不计入结束符,二者一定要区分。
第115题. 下面break语句描述正确的是()
正确选项:
解析:break只能跳出**本一层**循环,或者跳出switch;不能直接跳出多层循环,不能用在普通if。continue才是跳过本次循环剩余代码。C语言没有直接跳出多层循环语法。
第116题. 若 int m=1,n=2; m^=n;执行之后m的值是()
正确选项:
解析:^是按位异或运算符,二进制位相同为0,不同为1。m=1二进制01;n=2二进制10;01^10 =11,十进制等于3。异或常用来实现不用临时变量交换两个整数。
第117题. C语言数组下标起始编号是()
正确选项:
解析:C语言数组下标从0开始。int a[5];合法下标a[0],a[1],a[2],a[3],a[4]。访问a[5]属于数组越界,会篡改未知内存,程序会出现随机异常。数组越界不会编译报错,运行时隐患。
第118题. 下面关于strcat字符串拼接函数说法错误的是()
正确选项:
解析:strcat不会做边界检查,如果目标数组空间不足,会造成缓冲区溢出,破坏其他内存数据。程序员必须手动保证目标数组足够大。strncat可以限制拷贝字符数量,相对安全。
第119题. 执行 int x=‑3; printf("%d", x>0 ? 1 : x<0 ? ‑1 : 0);输出结果是()
正确选项:
解析:三目运算符右结合,等价 x>0?1:(x<0?‑1:0)。x=‑3不大于0,执行后面嵌套三目;x<0条件成立取‑1。该表达式功能:正数返回1,负数返回‑1,0返回0。
第120题. C语言中,函数返回值如果没有写返回类型,老C标准默认返回类型为()
正确选项:
解析:C89老标准允许省略返回类型,隐式默认int。C99及新标准已经废弃该写法,编译器给出警告。void明确代表没有返回值,绝对不能省略。写代码必须显式写明函数返回类型。