C语言章节习题及答案(共66页).doc
精选优质文档-倾情为你奉上C程序设计复习题集第2章 基础概念一、选择题(在下列各题的A)、B)、C)、D)四个选项中,只有一个选项是正确的)2.1以下叙述中正确的是A)C语言比其他语言高级B)C语言可以不用编译就能被计算机识别执行C)C语言以接近英语国家的自然语言和数学语言作为语言的表达形式D)C语言出现的最晚,具有其他语言的一切优点正确答案: C2.2 以下叙述中正确的是A)构成C程序的基本单位是函数B)可以在一个函数中定义另一个函数C)main()函数必须放在其他函数之前D)所有被调用的函数一定要在调用之前定义正确答案: A2.3 以下说法正确的是A)C语言程序总是从第一个函数开始执行B)在C语言程序中,要调用函数必须在main()函数中定义C)C语言程序总是从main()函数开始执行D)C语言程序中的main()函数必须放在程序的开始部分正确答案: C2.4 C语言规定,在一个源程序中,main函数的位置A)必须在最开始B)必须在系统调用的库函数的后面C)可以任意D)必须在最后正确答案: C2.5 以下叙述不正确的是A)一个C源程序可由一个或多个函数组成B)一个C源程序必须包含一个main函数C)C程序的基本组成单位是函数D)在C程序中,注释说明只能位于一条语句的后面正确答案: D2.6 下列叙述中正确的是A)C语言编译时不检查语法B)C语言的子程序有过程和函数两种C)C语言的函数可以嵌套定义D)C语言的函数可以嵌套调用正确答案: D2.7 以下叙述正确的是A)在C程序中,每行中只能写一条语句B)若a是实型变量,C程序中允许赋值a=10,因此实型变量中允许存放整型数C)在C程序中,无论是整数还是实数,都能被准确无误地表示D)在C程序中,%是只能用于整数运算的运算符正确答案: D2.8 下列关于C语言的说法不正确的是A)C语言既具有高级语言的一切功能,也具有低级语言的一些功能B)C语言中的每一条执行语句都必须用分号结束,但分号不是C语言的一部分,是语句之间的分隔符号C)注释可以出现在程序中任意合适的地方D)命令行后面不能加分号,命令行不是C语言的语句正确答案: B2.9 以下说法错误的是A)高级语言都是用接近人们习惯的自然语言和数学语言作为语言的表达形式B)计算机只能处理由0和1的代码构成的二进制指令或数据C)C语言源程序经过C语言编译程序编译之后生成一个后缀为.EXE的二进制文件D)每一种高级语言都有它对应的编译程序正确答案: C2.10 C语言中用于结构化程序设计的3种基本结构是A)顺序结构、选择结构、循环结构B)if,switch,breakC)for,while,do-whileD)if,for,continue正确答案: A第3章 数据类型运算符与表达式一、选择题(在下列各题的A)、B)、C)、D)四个选项中,只有一个选项是正确的)3.1 C语言提供的基本数据类型包括A)整型、实型、逻辑型B)整型、实型、字符型C)整型、字符型、逻辑型D)字符型、实型、逻辑型正确答案: B3.2 C语言中的标识符只能由字母,数字和下划线三种字符组成,且第一个字符A)必须为字母B)必须为下划线C)必须为字母或下划线D)可以是字母,数字和下划线中任一字符正确答案: C3.3 下列可用于C语言用户标识符的一组是A)void, define, WORDB)a3_b3, _123,CarC)For, -abc, IF CaseD)2a, DO, sizeof正确答案: B3.4 下面四个选项中,均是不正确的8进制数或16进制数的选项是A)016 0x8f 018B)0abc 017 0xaC)010 -0x11 0x16D)0a12 7ff -123正确答案: D3.5 下列数据中,不合法的C语言实型数据的是A)0.123B)123e3C)2.1e3.5D)789.0正确答案: C3.7 若有说明语句:char c='72'则变量cA)包含1个字符B)包含2个字符C)包含3个字符D)说明不合法,c的值不确定正确答案: A3.8 有字符串如下,"n407as1"xabc",则字符串的长度为A)6B)7C)8D)9正确答案: D3.9 C语言中运算对象必须是整型的运算符是A)%=B)/C)=D)<=正确答案: A3.10 若变量已正确定义并赋值,以下符合C语言语法的表达式是A)a:=b+1B)a=b=c+2C)int 18.5%3D)a=a+7=c+b正确答案: B3.11 若变量a,i已正确定义,且i已正确赋值,合法的语句是A)a= =1B)+i;C)a=a+=5;D)a=int(i);正确答案: B3.12 若有定义:int a=7;float x=2.5,y=4.7;则表达式x+a%3*(int)(x+y)%2/4的值是A)2.B)2.C)3.D)0.正确答案: A3.13 若有运算符<<,sizeof,&=,则它们按优先级由高至低的正确排列次序是A)sizeof,&=,<<,B)sizeof,<<,&=C),<<,sizeof,&=D)<<,&=,sizeof正确答案: B3.14 以下不正确的叙述是A)在C程序中,逗号运算符的优先级最低B)在C程序中,APH和aph是两个不同的变量C)若a和b类型相同,在计算了赋值表达式a=b后b中的值将放入a中,而b中的值不变D)当从键盘输入数据时,对于整型变量只能输入整型数值,对于实型变量只能输入实型数值正确答案: D3.15 已知int i,a;执行语句i=(a=3,a+,- -a,a+4,a+5,+a);后,变量i的值为A)2B)3C)4D)5正确答案: C3.16 设变量a是int型,f是float型,i是double型,则表达式10+a+i*f值的数据类型为A)intB)floatC)doubleD)不确定正确答案: C3.17 在C语言中,char型数据在内存中的存储形式是A)补码B)反码C)原码D)ASCII码正确答案: D3.18 字符型数据在机器中是用ASCII码表示的,字符5和7在机器中表示为A)和 B)和C)和D)和正确答案: C3.19 不能进行+和- -运算的数据类型为A)指针B)整型C)长整型D)常量正确答案: D3.20 设有int x=11;则表达式(x+*1/3)的值是A)3B)4C)11D)123.21 以下程序的输出结果是main() int a=21,b=11;printf("%dn",- -a+b,- -b+a);A)30B)31C)32D)33正确答案: A3.22 假设整型变量a,b,c的值均为5,则表达式a+b+c+的值为A)17B)16C)15D)14正确答案: C3.23 已知int a=6; 则执行a+=a-=a*a;语句后,a的值为A)36B)0C)-24D)-60正确答案: D3.24 设变量n为float类型,m为int类型,则以下能实现将n中的数值保留小数点后两位,第三位进行四舍五入运算的表达式是A)n=(n*100+0.5)/100.0B)m=n*100+0.5,n=m/100.0C)n=n*100+0.5/100.0D)n=(n/100+0.5)*100.0正确答案: B3.25 sizeof(float)是A)一个双精度型表达式B)一个整型表达式C)一种函数调用D)一个不合法的表达式正确答案: B3.26下列关于字符串的说法中错误的是A)在C语言中,字符串是借助于字符型一维数组来存放的,并规定以字符0作为字符串结束标志B)0作为标志占用存储空间,计入串的实际长度C)在表示字符串常量的时候不需要人为在其末尾加入0D)在C语言中,字符串常量隐含处理成以0结尾正确答案: B3.27 以下变量x,y,z均为double类型且已正确赋值,不能正确表示数学式子x÷y÷z的C语言表达式是A)x/y*zB)x*(1/(y*z)C)x/y*1/zD)x/y/z正确答案: A3.28 下列关于语句的说法错误的是A)复合语句是由“”开头,由“”结尾的B)复合语句在语法上视为一条语句C)复合语句内,可以有执行语句,不可以有定义语句部分D)C程序中的所有语句都必须由一个分号作为结束正确答案: C二、填空题3.30 以下程序的输出结果是【1】。int a=1234;printf ("%dn",a);正确答案: 12343.31 在计算机中,字符的比较是对它们的【2】进行比较。正确答案: ASCII码3.32 在内存中,存储字符x要占用1个字节,存储字符串X要占用【3】个字节。正确答案: 23.33 在C语言中(以16位PC机为例),一个float型数据在内存中所占的字节数为4;一个double型数据在内存中所占的字节数为【4】。正确答案: 83.34 以下程序段的输出结果是【5】。main ()int a=2,b=3,c=4;a*=16+(b+)-(+c);printf("%d",a);正确答案: 283.35 以下程序段的输出结果是【6】 。int x=17,y=26;printf ("%d",y/=(x%=6);正确答案: 53.36 下列y的值是 【7】 。int y; y=sizeof(2.25*4);正确答案: 83.37 以下程序的输出结果是 【8】 。main ()int i=010,j=10;pirntf ("%d,%dn",i,j);正确答案: 8,103.38 已知字母a的ASCII码为十进制数97,且设ch为字符型变量,则表达式ch=a+8-3的值为 【9】 。正确答案: f3.39 如下语句printf("%cn",B+40);在执行后的输出结果是 【10】 。正确答案: j3.40 定义int a=5,b=20;若执行语句printf("%dn",+a*- -b/5);后,输出的结果为 【11】 。正确答案: 9第4章 顺序程序设计一、选择题(在下列各题的A)、B)、C)、D)四个选项中,只有一个选项是正确的)4.1 若变量已正确说明为float型,要通过语句scanf("%f%f%f",&a,&b,&c);给a赋予10.0,b赋予22.0,c赋予33.0,下列不正确的输入形式是A)10<回车>22<回车>33<回车>B)10.0,22.0,33.0<回车>C)10.0<回车>22.0 33.0<回车>D)10 22<回车>33<回车>正确答案: B4.2调用gets和puts函数时,必须包含的头文件是A)stdio.hB)stdlib.hC)defineD)以上都不对正确答案: A4.3 x,y,z被定义为int型变量,若从键盘给x,y,z输入数据,正确的输入语句是A)INPUT x、y、z;B)scanf("%d%d%d",&x,&y,&z);C)scanf("%d%d%d",x,y,z);D)read("%d%d%d",&x,&y,&z);正确答案: B4.4阅读下面程序段#include "stdio.h"main() char c;c=(z-a)/2+A;putchar(c);输出结果为A)MB)NC)OD)Q正确答案: A4.5 下列程序段的输出结果是:int a=1234;float b=123.456;double c=12345.54321;printf("%2d,%2.1f,%2.3lf",a,b,c);A)无输出B)12,123.5,12345.543C)1234,123.5,12345.543D)1234,123.4,1234.543正确答案: C4.6 执行下列程序时输入:123<空格>456<空格>789<回车> 输出结果是main() char s100; int c, i;scanf("%c",&c); scanf("%d",&i); scanf("%s",s);printf("%c,%d,%sn",c,i,s);A)123,456,789B)1,456,789C)1,23,456,789D)1,23,456正确答案: D4.7 若已定义:int a=25,b=14,c=19;以下三目运算符(?:)所构成语句的执行后a<=25&&b-<=2&&c?printf("*a=%d,b=%d,c=%dn",a,b,c):printf("#a=%d,b=%d,c=%dn",a,b,c);程序输出的结果是A)*a=25,b=13,c=19B)*a=26,b=14,c=19C)# a=25,b=13,c=19D)# a=26,b=14,c=19正确答案: C4.8 请选出以下语句的输出结果printf("%dn",strlen("t"065xffn");A)5B)14C)8D)输出项不合法,无正常输出正确答案: A4.9 下列程序的输出结果是main() double d=3.2; int x,y;x=1.2; y=(x+3.8)/5.0;printf("%dn", d*y);A)3B)3.2C)0D)3.07正确答案: C二、填空题4.11在使用putchar和getchar函数处理字符时,必须在程序的开头出现包含头文件的命令行是【2】 。正确答案: #include <stdio.h>4.12 下列程序的输出结果是 【3】 , 【4】 。#include<stdio.h>main() float a=-1.3;b=1.3;printf("%f,%f",fabs(a),fabs(b);正确答案: 1., 1.第5章 选择结构程序设计一、选择题(在下列各题的A)、B)、C)、D)四个选项中,只有一个选项是正确的。)5.1若变量c为char类型,能正确判断出c为小写字母的表达式是A)a<=c<=zB)(c>=a)|(c<=z)C)(a<=c)and(z>=c)D)(c>=a)&&(c<=z)正确答案: D5.2 已知int x=6,y=2,z;则执行表达式z=x=x>y后,变量z的值为A)0B)1C)4D)5正确答案: B5.3 能正确表示逻辑关系:“a10或a0”的C语言表达式是A)a>=10 or a<=0B)a>=0|a<=10C)a>=10 &&a<=0D)a>=10a<=0正确答案: D5.4 有如下程序段int a=14,b=15,x;char c=A;x=(a&&b)&&(c<B);执行该程序段后,x的值为A)tureB)falseC)0D)1正确答案: D5.5 设int x=1,y=1;表达式(!x|y- -)的值是A)0B)1C)2D)-1正确答案: B5.6设有:int a=1,b=2,c=3,d=4,m=2,n=2;执行 (m=a>b)&&(n=c>d)后n的值是A)1B)2C)0D)不确定正确答案: B5.7 以下程序的输出结果是main() int a=4,b=5,c=0,d;d=!a&&!b|!c;printf("%dn",d);A)1B)0C)非0的数D)-1正确答案: A5.8已知x,y,z均为整型变量,且值均为1,则执行语句+x|+y&&+z;后,表达式x+y的值为A)1B)2C)3D)4正确答案: C5.9若运行时给变量x输入12,则以下程序的运行结果是main()int x,y;scanf("%d",&x);y=x>12?x+10:x-12;printf("%dn",y);A)0B)22C)12D)10正确答案: A 5.10已知char ch=C;则以下表达式的值是ch=(ch>=A && ch<=Z)?(ch+32):ch;A) AB) aC) ZD) c正确答案: D5.11若有条件表达式 (exp)?a+:b-,则以下表达式中能完全等价于表达式(exp)的是A)(exp=0)B)(exp!=0)C)(exp=1)D)(exp!=1)正确答案: B5.12有以下程序main()int i=1,j=1,k=2;if(j+|k+)&&i+)printf("%d,%d,%dn",i,j,k);执行后输出结果是A)1,1,2B)2,2,1C)2,2,2D)2,2,3正确答案: C5.13请阅读以下程序:main() int a=5,b=0,c=0;if(a=b+c)printf("*n");else printf("$n");以上程序A)有语法错不能通过编译B)可以通过编译但不能通过连接C)输出*D)输出$正确答案: D5.14有如下程序专心-专注-专业main()float x=2.0,y;if(x<0.0)y=0.0;else if(x<10.0)y=1.0/x;else y=1.0;printf("%fn",y);该程序的输出结果是A)0.B)0.C)0.D)1.正确答案: C5.15以下4个选项中,不能看作一条语句的是A);B)a=5,b=2.5,c=3.6;C)if(a<5);D)if(b!=5)x=2;y=6;正确答案: D5.16执行下列程序后,变量k的值是main()int k=8;switch(k)case 9:k+=1;case 10:k+=1;case 11:k+=1;break;default:k+=1;printf("%dn",k);A)12B)11C)10D)9正确答案: D5.17阅读如下程序段#include "stdio.h"main() int a=45,b=40,c=50,d;d=a>30?b:c;switch(d) case 30 : printf("%d,",a);case 40 : printf("%d,",b);case 50 : printf("%d,",c);default : printf("#");则输出的结果是A)40,50,B)50,#C)40,#D)40,50,# 正确答案: D5.18现有如下程序段,此程序段编译有错误,则程序段的错误出在#includemain() int a=30,b=40,c=50,d;d=a>30?b:c;switch(d) case a:printf("%d,",a);case b:printf("%d,",b);case c:printf("%d,",c);default:printf("#");A)default:printf("#");这个语句B)d=a>30?b:c;这个语句C)case a:printf("%d,",a); case b:printf("%d,",b); case c:printf("%d,",c);这三个语句D)switch(d)这个语句正确答案: C二、填空题5.19 设y是int型,请写出判断y为奇数的关系表达式 【1】 。正确答案: (y%2)=1 或 (y%2)!=05.20 设int a=5,b=6,表达式(+a= =b- -)?+a:-b的值是【2】 。正确答案: 75.21 将以下程序写成三目运算表达式是【3】 。if(a>b)max=a;else max=b;正确答案: max=(a>b)?a:b;5.22 以下程序输出的结果是【4】。main() int a=5,b=4,c=3,d;d=(a>b>c);printf("%dn",d);正确答案: 05.23 若从键盘输入58,则以下程序输出的结果是 【5】 。main()int a;scanf("%d",&a);if(a>50)printf("%d",a);if(a>40)printf("%d",a);if(a>30)printf("%d",a);正确答案: 5.24 阅读下面语句,则程序的执行结果是 【6】 。#include "stdio.h"main() int a=-1,b=1,k;if(+a<0)&&!(b- -<=0)printf("%d,%dn",a,b);else printf("%d,%dn",b,a);正确答案: 1,05.25 阅读下面程序,则在执行时候的输出为 【7】 。#include "stdio.h"main() int x=1,y=2,z=0;if(x=2)z=x,x=y,y=z;printf("%d,%dn",x,y);正确答案: 2,25.26 以下程序的输出结果是【8】。main() int x=100, a=10, b=20, ok1=5, ok2=0;if(aelse if(ok2)x=10;else x=-1;printf("%dn", x);正确答案: -15.27 阅读下面的程序,当程序在执行时,如果输入的是A,则输出结果为 【9】 。#include "stdio.h"main()char a;a=getchar();switch(a) case 65: printf("%c",A);case 66: printf("%c",B);default :printf("%sn","other");正确答案: ABother第6章循环结构(本章的答案统一放在章节最后)一、选择题(在下列各题的A)、B)、C)、D)四个选项中,只有一个选项是正确的)1 以下程序的输出结果是( )。#include "stdio.h"int main() int n=4; while (n-) printf("%d",-n);A.20 B.31 C.321 D.2102 以下程序的输出结果是( )。main()int x=10,y=10,i;for(i=0;x>8;y=+i)printf("%d%d",x-,y);A.10192 B.9876 C.10990 D.3 当执行以下程序段时。 x=-1;do x=x*x;while (!x);A.循环体将执行一次 B.循环体将执行两次C.循环体将执行无数多次 D.系统将提示有语法错误4 执行以下程序后输出的结果是( )。main() int y=10;doy-;while(-y);printf("%dn",y-);A.-1 B.1 C.8 D.05 下面程序的输出结果是( )。main() int x=3,y=6,a=0;while (x+!=(y-=1)a+=1;if (y<x) break;printf("x=%d,y=%d,a=%dn",x,y,a);A.x=4,y=4,a=1 B.x=5,y=5,a=1 C.x=5,y=4,a=3 D.x=5,y=4,a=16若i,j已定义为int类型,则以下程序段中内循环的总的执行次数是 ( )。for (i=5;i;i-)for (j=0;j<4;j+)A.20 B.24 C.25 D.307 请读程序:#include<stdio.h>main()int x=1,y=0,a=0,b=0;switch(x)case 1:switch(y) case 0:a+;break; case 1:b+;break;case 2:a+;b+;break;printf("a=%d,b=%dn",a,b);上面程序的输出结果是( )。A.a=2,b=1 B.a=1,b=1 C.a=1,b=0 D.a=2,b=2 8 下面程序的输出是( )。#include "stdio.h"int main()char *s=""int k,v1=0,v2=0,v3=0,v4=0;for (k=0;sk;k+)switch(sk)default:v4+;case 1:v1+;case 2:v2+;case 3:v3+;printf("v1=%d,v2=%d,v3=%d,v4=%dn",v1,v2,v3,v4);A.v1=4,v2=2,v3=1,v4=1 B.v1=4,v2=9,v3=3,v4=1C.v1=5,v2=8,v3=6,v4=1 D.v1=8,v2=8,v3=8,v4=89 有以下程序#includestdio.hint abc(int u,int v );main()int c,a=24,b=16;c=abc(a,b);printf(%dn,c);int abc (int u,int v)int w;while (v)w=u%v;u=v;v=w;return u;输出结果是( )。A.6 B.7 C.8 D.910在下列选项中,没有构成死循环的程序段是( )。A.int i=100;while (1)i=i%100+1;if(i>100) break; B. for ( ; ;);C.int k=1000;do +k;while (k>=10000);D.int s=36;while (s) ;-s;11若输入B,以下程序的运行结果为( )。main()char grade;scanf("%c",&grade);switch(grade)case'A':printf(">=85.");case'B':case'C':printf(">=60.");case'D':printf("<60.");default:printf("error.");A.>=85. B.>=60. C.>=60.<60.error. D.error.12列程序运行的情况是( )。main() int i=1,sum=0;while(i<10)sum=sum+1;i+;printf("i=%d,sum=%d",i,sum);A.i=10,sum=9 B.i=9,sum=9 C.i=2,sum=1 D.运行出现错误13有以下语句:i=1;for(;i<=100;i+) sum+=i;与以上语句序列不等价的有( )。A. for(i=1; ;i+) sum+=i;if(i=100)break;B. for(i=1;i<=100;)sum+=i;i+;C. i=1;for(;i<=100;)sum+=i;D. i=1;for(; ;)sum+=i;if(i=100)break;i+;14下面程序的运行结果为( )。main() int n;for(n=1;n<=10;n+) if(n%3=0)continue;printf("%d",n);A. B.369 C.12 D.15标有/*/的语句的执行次数是( )。int y=0,i;for(i=0;i<20;i+)if(i%2=0)continue;y+=i; /*/A.20 B.19 C.10 D.916下列程序的输出是( )。#include<stdio.h>main() int i;char c;for(i=0;i<=5;i+)c=getchar();putchar(c);程序执行时从第一列开始输入以下数据,<CR>代表换行符。u<CR>w<CR>xsta<CR>A.uwxsta B.u C.u D.u w w w x xs xsta17下列程序的输出为( )。#include"stdio.h"main() int i,j,x=0; for(i=0;i<2;i+)x+;for(j=0;j<=3;j+)if(j%2)continue;x+; x+; printf("x=%dn",x);A.x=4 B.x=8 C.x=6 D.x=1218下列程序的输出为( )。#include<stdio.h>main()int i,j,k=0,m=0;for(i=0;i<2;i+) for(j=0;j<3;j+)k+;k-=j; m=i+j; printf("k=%d,m=%dn",k,m);A.k=0,m=3 B.k=0,m=5 C.k=1,m=3 D.k=1,m=519在C语言中,为了结束while语句构成的循环,while后一对圆括号中表达式的值应该为( )。A.0 B.1 C.true D.非020 在C语言中,为了结束由do-while语句构成的循环,while后一对圆括号中表达式的值应为( )。A.0 B.1 C.true D.非021下列程序的输出为( )。#include<stdio.h>main() int k=0;char c='A'doswitch(c+) case'A':k+;break;case'B':k-;case'C':k+=2;break;case'D':k=k%2;continue;case'E':k=k*10;break;default:k=k/3;k+;while(c<'G');printf("k=%dn",k);A.k=3 B.k=4 C.k=2 D.k=022下列程序段的输出结果为( )。main()int x=3;do printf("%3d",x-=2);while(!(-x);A.1 B.3 0 C.1 -2 D.死循环二、填空题:1 当输入19,2,21时下列程序运行的结果是_。main()int a,b,c,max;printf("please scan three number a,b,c:n");scanf("%d,%d,%d",&a,&b,&c);max=a;if(max<b)max=b;if(max<c)max=c;printf("max is:%d",max);2 若输入小写字母c,程序输出结果为【1】;若输入字符*,程序将【2】。#include<stdio.h>main()char c1,c2;c1=getchar();while(c1<97|c1>122)c1=getchar();c2=c1-32;prin