所有单选题1、C语言中下列叙述正确的是______。A:不能使用do-while语句构成的循环B:do-while语句构成的循环,必须用break语句才能退出C:do-while语句构成的循环,当while语句中的表达式值为非零时结束循环D:do-while语句构成的循环,当while语句中的表达式值为零时结束循环答案:D评析:本题的考查点是do-while语句。选项A是错误的,C语言支持do-while语句;选项B是错误的,do-while构成的循环,当while语句中的表达式值为零时结束循环,而不是非零;选项C也是错误的。故本题答案为D。知识点:知识点/循环结构程序设计/WHILE和DOWHILE循环结构2、以下选项中属于C语言的数据类型是______。A:复数型B:逻辑型C:双精度型D:集合型答案:C评析:本题的考查点是C语言的数据类型。C语言的数据类型分为基本类型,构造类型,指针类型,空类型四大类。其中,基本类型分为整型,字符型,实型三类。实型又称浮点型,包括单精度型和双精度型两种类型。故本题答案为C。知识点:知识点/数据类型及其运算/C的数据类型及其定义方法3、下列描述中不正确的是______。A:字符型数组中可以存放字符串B:可以对字符型数组进行整体输入、输出C:可以对整型数组进行整体输入、输出D:不能在赋值语句中通过赋值运算符=对字符型数组进行整体赋值答案:C评析:本题的考查点是对数组的理解。C语言规定只能逐个引用数组元素而不能一次引用整个数组。字符数组的输入、输出可以将整个字符串一次输入或输出。所以,选项C的说法是不正确的。故本题答案为C。知识点:知识点/基本语句/数据的输入与输出,输入输出函数的调用4、以下程序的输出结果是______。main(){intx=10,y=10,i;for(i=0;x8;y=++i)printf(%d%d,x--,y);}A:10192B:9876C:10990D:101091答案:D评析:本题的考查点是for循环语句。for语句的一般格式为:for(表达式1;表达式2;表达式3)语句执行中只要表达式2为真,则执行for语句中指定的内嵌语句。所以,本题在条件为真的情况下,先执行printf函数。x--是先使用后运算。故本题答案为D。知识点:知识点/循环结构程序设计/FOR循环结构5、以下程序的输出结果是______。main(){chara[10]={'1','2','3','4','5','6','7','8','9',0},*p;inti;i=8;p=a+i;printf(%s\n,p-3);}A:6B:6789C:'6'D:789答案:B评析:本题的考查点是通过指针引用数组元素。指针p指向数组中第8个元素,即a[8]='9'。输出时,输出字符串,且指针把a[8]作为初始位置往前指3个元素,也就是共有4个字符输出。最后指向a[5]为'6',所以输出为6789。故本题答案为B。知识点:知识点/指针/指针数组,指向指针的指针,MAIN函数的命令行参数6、能正确表示a和b同时为正或同时为负的逻辑表达式是______。A:(a=0||b=0)&&(a0||b0)B:(a=0&&b=0)&&(a0&&b0)C:(a+b0)&&(a+b=0)D:a*b0答案:D评析:本题的考查点是对逻辑表达式的判断。逻辑表达式是指用逻辑运算符将关系表达式或逻辑量连接起来。选项A中,表达式表示的是a,b为异号;选项B中,表达式表示的是0,因为没有满足条件的值;选项C中,表达式表示的是0,因为没有满足条件的值;选项D表示的是a和b为同号。故本题答案为D。知识点:知识点/基本语句/表达式语句,空语句,复合语句7、以下程序的输出结果是______。main(){intn=4;while(n--)printf(%d,--n);}A:20B:31C:321D:210答案:A评析:本题的考查点是while语句的判断。n--是先使用后运算,--n是先运算后使用。n=4时,执行n--后,n变为3,执行--n后,n变为2,所以,第一次输出时,n为2;同上过程,第二次输出时,n为0。故本题答案为A。知识点:知识点/循环结构程序设计/WHILE和DOWHILE循环结构8、以下程序的输出结果是______。main(){intk=17;printf(%d,%o,%x\n,k,k,k);}A:17,021,0x11B:17,17,17C:17,0x11,021D:17,21,11答案:D评析:本题的考查点是不同格式的数据输出。printf函数对不同类型的数据用不同的格式字符,%d是以带符号的十进制形式输出整数(正数不输出符号);%o以8进制无符号形式输出整数(不包括前导符0);%x以16进制无符号形式输出整数(不包括前导符0x)。本题答案为D。知识点:知识点/数据类型及其运算/C的数据类型及其定义方法9、若有说明:long*p,a;则不能通过scanf语句正确给输入项读入数据的程序段是______。A:*p=&a;scanf(%ld,p);B:p=(long*)malloc(8);scanf(%ld,p);C:scanf(%ld,p=&a);D:scanf(%ld,&a);答案:A评析:本题的考查点是格式输入函数Scanf()的使用。scanf函数输入形式为:scanf(格式控制,地址表列);选项B中,p=(long*)malloc(8)是分配8个字节的long型存储单元,所以能通过scanf语句正确给输入项读入数据;选项C中,p=&a,求出变量a的内存地址并赋给p;选项D中,能正确给输入项读入数据;故本题答案为A。知识点:知识点/基本语句/数据的输入与输出,输入输出函数的调用10、以下选项中,能定义s为合法的结构体变量的是______。A:typedefstructabc{doublea;charb[10];}s;B:struct{doublea;charb[10];}s;C:structABC{doublea;charb[10];}ABCs;D:typedefABC{doublea;charb[10];}ABCs;答案:B评析:本题的考查点是结构体变量的定义。定义一个结构体类型的变量,可采用三种方法:(1)先定义结构体类型再定义变量名;(2)在定义类型的同时定义变量;(3)直接定义结构类型变量,即不出现结构体名;选项B符合第三种定义方法。故本题答案为B。知识点:知识点/结构体(即结构)与共用体(即联合)/结构体和共用体类型数据的定义方法和引用方法11、请读程序:#includestdio.hmain(){inta,b;for(a=1,b=1;a=100;a++){if(b=20)break;if(b%3==1){b+=3;continue;}b-=5;}printf(%d\n,a);}上面程序的输出结果是______。A:7B:8C:9D:10答案:B评析:本题的考查点是break语句和continue语句。%是求余运算符,执行第一次循环时,条件(b%3==1)为真,b=4,继续下一次循环,如此反复,当b=22时,条件(b=20)为假,跳出循环,此时共循环8次,即a=8。故本题答案为B。知识点:知识点/选择结构程序设计/用SWITCH语句实现多分支选择结构12、请选出合法的C语言赋值语句______。A:a=b=58B:i++;C:a=58,b=58D:k=int(a+b);答案:B评析:本题的考查点是赋值语句。选项A和C没有用分号表示语句结束,不合法;选项D,函数名和C语言的关键字重名,不合法。故本题答案为B。知识点:知识点/基本语句/表达式语句,空语句,复合语句13、请选出可用作C语言用户标识符的一组标识符______。①void②a3_b3③For④2adefine_123_abcDOWORDIFcasesizeofA:①B:②C:③D:④答案:B评析:本题的考查点是C语言的标识符。C语言规定标识符只能由字母、数字和下划线三种符号组成,而且第一个字符必须是字母或下划线。①中的void和define都和C语言的关键字重名,不合法;③中的case和C语言的关键字重名,不合法;④中的2a是数字打头而且sizeof和C语言的关键字重名,不合法。故本题答案为B。知识点:知识点/数据类型及其运算/C的数据类型及其定义方法14、若x和y都是int型变量,x=100、y=200,且有下面的程序片段printf(%d,(x,y));上面程序片段的输出结果是______。A:200B:100C:100200D:输入格式符不够,输出不确定的值答案:A评析:本题的考查点是逗号表达式。在(x,y)中的,是一个特殊的运算符,叫做逗号运算符,它的一般形式为:表达式1,表达式2,求解过程为:先求解表达式1,再求解表达式2,整个表达式的值是表达式2的值,(x,y)的值为200,所以输出结果为200。故本题答案为A。知识点:知识点/基本语句/数据的输入与输出,输入输出函数的调用15、若x是int型变量,且有下面的程序片段for(x=3;x6;x++)printf((x%2)?(**%d):(##%d\n),x);上面程序片段的输出结果是______。①**3②##3③##3④**3##4##4**4**4##5**5**5##5A:①B:②C:③D:④答案:D评析:本题的考查点是条件运算符。这种条件表达式的一般形式为:表达式1?表达式2:表达式3,条件运算符的执行顺序为:先求解表达式1,若非0则求解表达式2,此时表达式2的值就是整个条件表达式的值,若表达式1的值为0,则求解表达式3,此时表达式3的值就是整个条件表达式的值。故本题答案为D。知识点:知识点/数据类型及其运算/C运算符的种类、运算优先级和结合性16、若x是整型变量,pb是基类型为整型的指针变量,则正确的赋值表达式是______。A:pb=&x;B:pb=x;C:*pb=&x;D:*pb=*x答案:A评析:本题的考查点是赋值表达式。选项A是将变量x的地址赋给指针变量pb,使pb指向x,故为正确的赋值表达式。选项B是将x的值当作地址赋给指针pb,pb指向一个地址等于x值的内存单元;选项C是将x的地址赋给指针pb指向的那个地址等于x值的内存单元;选项D是不正确的语句;本题答案为A。知识点:知识点/基本语句/表达式语句,空语句,复合语句17、若要用下面的程序片段使指针变量p指向一个存储整型变量的动态存储单元int*p;p=______malloc(sizeof(int));则应填入______。A:intB:int*C:(*int)D:(int*)答案:D评析:本题的考查点是强制类型转换。不论p是指向什么类型的指针变量,都可以通过强制类型转换的方法使之类型一致,强制类型转换的格式为(数据类型*)。故本题答案为D。知识点:知识点/数据类型及其运算/不同类型数据间的转换与运算18、若有以下说明和语句,请选出哪个是对c数组元素的正确引用______。intc[4][5],(*cp)[5];cp=c;A:cp+1B:*(cp+3)C:*(cp+1)+3D:*(*cp+2)答案:D评析:本题的考查点是数组元素的引用。cp=c这个语句是将数组c的首地址赋给了指针数组cp的第一个数组元素。选项A,cp+1是指将数组c的首地址加1,不是对数组元素的引用;选项B,*(cp+3)是地址等于数组c的首地址加3的那个内存单元的内容,不是对数组元素的引用;选项C,*(cp+1)+3是地址等于数组c的首地址加1的那个内存单元中存放的值加3,不是对数组元素的引用。故本题答案为D。知识点:知识点/指针/指针数组,指向指针的指针,MAIN函数的命令行参数19、若执行下面的程序时从键盘上输入3和4,main(){inta,b,s;scanf(%d%d,&a,&b);s=a;if(ab)s=b;s=s*s;printf(%d\n,s);}则输出是______。A:14B:16C:18D