C语言选择题

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

第161题. 有如下程序 #include <stdio.h> int main(){ int i,sum=0; for(i=1;i<=4;i++){ if(i%2==0) continue; sum+=i; } printf("%d",sum); return 0; },程序运行输出结果是()
正确选项:
解析:本题考察for循环与continue关键字。i循环取值1、2、3、4;i%2==0代表偶数,遇到continue会直接跳过本次循环后续语句,直接进入下一轮循环。i=1,奇数,sum=0+1=1;i=2偶数触发continue,sum不变;i=3奇数,sum=1+3=6;i=4偶数触发continue。最终sum=6。continue只跳过本轮循环,不会终止整个循环。
第162题. 以下关于C语言实参与形参的叙述,正确的是()
正确选项:
解析:实参:调用函数时传入,可以是常量、变量、表达式。形参:函数定义处的参数,只能是变量。C语言是值传递,实参和形参是两块独立内存单元,形参只有函数被调用的时候才分配栈内存,调用结束立即释放。A错,形参不能是常量表达式;C错,值传递内存相互独立;D错,调用时才分配内存。
第163题. 若有定义 int a[3][4],(*p)[4]=a;,下列选项中不能表示数组元素a[1][2]的是()
正确选项:
解析:p是行指针,指向含有4个int元素的一维数组。p+1指向二维数组第1行;*(p+1)等价a[1],是第1行首元素地址。*(*(p+1)+2)、p[1][2]、*(p[1]+2)都等价a[1][2]。D选项*(p+1+2)等价*(p+3),代表第3行的行地址,不是数组元素的值。行指针加减移动的是一整行,不是单个元素。
第164题. 执行下面程序片段 int x=1,y=2,z=3; if(x>y){ z=x; x=y; y=z; },变量x,y,z的值为()
正确选项:
解析:if条件判断x>y即1>2,逻辑结果为假,大括号内部全部语句不会执行。三个变量保持原始初值不变。很多考生会误以为if只管紧跟的第一条语句,但本题全部交换逻辑都被大括号包裹,条件不成立,全部跳过。
第165题. C语言中,已有char s[10];,若要读取最多9个字符到s,正确输入语句是()
正确选项:
解析:%9s代表最多读取9个字符,系统自动在末尾补'\0',刚好存进大小为10的字符数组。A选项%s没有长度限制,如果输入字符超过9会造成数组越界内存溢出;%c只能读取单个字符;C语言scanf没有%S格式符。数组名s本身是首地址,不需要再加&。
第166题. 下面关于结构体与共用体叙述正确的是()
正确选项:
解析:共用体union所有成员共享同一块内存空间,同一时间只能使用其中一个成员;结构体struct各个成员拥有独立内存,受内存对齐影响,总大小大于等于全部成员大小之和。A错误,共用体共享内存;B错误,这是共用体特点;D错误,结构体允许嵌套结构体。
第167题. 表达式 (int)(2.8+3)%2 的运行结果是()
正确选项:
解析:先计算2.8+3得到5.8;(int)强制转换把浮点数直接截断小数部分,得到整数5;5%2取余数结果为1。强制类型转换只截断小数,不是四舍五入。很多考生错把5.8转成6,是高频易错点。
第168题. 执行 int a=0; do{ a++; } while(a++<3);,循环结束a的值是()
正确选项:
解析:do‑while先执行循环体,后判断条件。初始a=0;第一轮do:a++,a=1;判断a++<3,拿1参与比较,比较后a自增为2,条件成立;第二轮do:a++得到3;判断a++<3,拿3比较,条件为假,判断后a自增到4,循环结束。后置自增在条件判断之后依然执行。
第169题. 下面关于字符串库函数说法错误的是()
正确选项:
解析:strcmp(str1,str2)返回规则:str1等于str2返回0;str1大于str2返回正数;str1小于str2返回负数,不是返回1。strcpy不安全,不会校验目标缓冲区大小容易越界;strlen只统计有效字符不计结束符;strcat实现字符串追加拼接。
第170题. 已有 #define M 2+3,执行int x=M*2;,x的值为()
正确选项:
解析:宏是纯文本替换,不会自动增加括号。M替换为2+3;x=2+3*2,运算符优先级先乘法3*2=6,再加2,结果等于8。如果写成#define M (2+3),才会得到(2+3)*2=10。宏定义缺少括号是计算机二级高频坑题。