1、前言C语言是现代最流行的通用程序设计语言之一,它既具有高级程序设计语言的优点,又具有低级程序设计语言的特点,既可以用来编写系统程序,又可以用来编写应用程序。因此,C语言正在被迅速地推广和普及。课后做些练习是有必要的,本习题集通过大量的典型习题,循序渐进地引导学生巩固各章的知识点。根据最新教学大纲,我们编排了13章的单元习题,结合各章的课时数,确定其所需的篇幅。学生可根据教师的进度完成相应习题。任课教师可以根据需要收取学生所做的试卷检查教学效果,并作为平时成绩的一个依据(分值老师自己把握)。C语言是电子信息类专业重要的专业基础课,任课教师和学生要引起足够的重视。因为C语言是一个比较通用的高级编程
2、语言,很多编程语言都与之相关,作为学生的第一门计算机语言课,对它学习的好坏将影响后续所有与编程相关的课程以及学生参与项目的能力。学习C语言的较好方法就是做适量的习题和大量的编程实践。前者是为了巩固基础知识,后者则是对基础知识的灵活运用,只有当我们能够使用C语言畅通无阻地让计算机执行我们所想要做的工作时,我们才能最大限度地发挥计算机的优势,使之真正成为我们强有力的工具。目录word文档 可自由编辑第一章 C语言概述1第二章 程序的灵魂算法3第三章 数据类型、运算符与表达式4第四章 最简单的C程序设计8第五章 选择结构程序设计11第六章 循环控制16第七章 数组21第八章 函数27第九章 预处理命
3、令33第十章 指针35第十一章 结构体与共用体41第十二章 位运算47第十三章 文件49第一章C语言概述一、选择题1、以下叙述中正确的是( )A)C程序中注释部分可以出现在程序中任意合适的地方B)花括号“”和“”只能作为函数体的定界符C)构成C程序的基本单位是函数,所有函数名都可以由用户命名D)分号是C语句之间的分隔符,不是语句的一部分2、以下叙述中正确的是( )A)C语言比其他语言高级B)C语言可以不用编译就能被计算机识别执行 C)C语言以接近英语国家的自然语言和数学语言作为语言的表达形式D)C语言出现得最晚,具有其他语言的一切优点3、在一个C程序中( ) A) main函数必须出现在所有函
4、数之前B) main函数可以在任何地方出现C) main函数必须出现在所有函数之后D) main函数必须出现在固定位置4、以下叙述中正确的( )A) 构成C程序的基本单位是函数B) 可以在一个函数中定义另一个函数C) void main()函数必须放在其它函数之前D) 所有被调用的函数一定要在调用之前进行定义5、下列叙述中正确的是( )A) C语言编译时不检查语法B) C语言的子程序有过程和函数两种C) C语言的函数可以嵌套定义D) C语言所有函数都是外部函数6、一个C程序的执行是从( )A)本程序的main函数开始,到main函数结束B)本程序文件的第一个函数开始,到本程序文件的最后一个函数
5、C)本程序的main函数开始,到本程序文件的最后一个函数D)本程序文件的第一个函数开始,到main函数结束7、以下叙述正确的是( )A) 在C程序中,main函数必须位于程序的最前面B) C程序的每行中只能写一条语句C) C语言本身没有输入输出语句D)在对一个C程序进行编译的过程中,可发现注释中的拼写错误8、以下叙述不正确的是( ) A)一个C源程序可由一个或多个函数组成B)一个C源程序必须包含一个main函数C)C程序的基本组成单位是函数D)在C程序中,注释说明只能位于一条语句的后面9、以下叙述正确的是( )A)可以把define和if定义为用户标识符B)可以把define定义为用户标识符,
6、但不能把if定义为用户标识符C)可以把if定义为用户标识符,但不能把define定义不用户标识符D)define和if都不能定义为用户标识符二、填空题1、C源程序的基本单位是 。2、一个C源程序至少包含一个 。3、在C语言中,输入函数由库函数 完成,输出函数由库函数 完成。三、编程题1、编写一个简单的C程序介绍,输出以下信息:* * * * * * * * * * * * * * * * * * * * * * * * * * * Welcome to C Programme* * * * * * * * * * * * * * * * * * * * * * * * * * *2、编写一个C
7、程序,输入整数a,b两个值,输出两个整数之差。3、编写一个C程序,输入a、b、c 三个值,输出其中最小者。第二章程序的灵魂算法一、选择题1、以下不能正确计算代数式值的C语言表达式是( )A)1/3*sin(1/2)*sin(1/2)B)sin(0.5)*sin(0.5)/3C)pow(sin(0.5),2)/3D)1/3.0*pow(sin(1.0/2),2)2、算法具有五个特性,以下选项中不属于算法特性的是( )A)有穷性B)简洁性C)可行性D)确定性3、一个算法应该具有“确定性”等5个特性,下面对另外4个特性的描述中错误的是( )A) 有零个或多个输入 B) 有零个或多个输出 C) 有穷性
8、 D) 可行性4、与数学式子对应的C语言表达式是( )A) 3*xn(2*x-1) B) 3*x*n/(2*x-1)C) 3*pow(x,n)*(1/(2*x-1)D) 3*pow(n,x)/(2*x-1)二、填空题1、在程序中要指定数据的类型和数据的组织形式,也就是 。2、算法是对 的描述。3、计算机算法可以分为 和 。 4、循环结构可分为 和 。三、编程题1、依次将10个数输入,要求将其中最小的数打印出来,并画出其流程图。2、求6!的算法并用N-S流程图表示。3、写出判定2010-2500年中属于闰年的算法,并画出其流程图。4、写出将1-500之间的素数打印出来的算法,并画出其流程图。5、
9、用C语言表示两个m和n的最大公约数,并画出其流程图。6、用C语言表示求 即(1+2+3+.+100),并画出其流程图。第三章数据类型、运算符与表达式一、选择题1、在C语言中,不正确的int 类型的常数是( )A)32768B)0 C)037D)0xAF2、以下选项中合法的字符常量是( )A)”B”B)010C)268D) D3、以下选项中,不能作为合法常量的是( )A)1.234e04B)1.234e0.4 C)1.234e+4 D)1.234e04、 下列选项中,合法的C语言关键字是( )A) VAR B) cher C) integer D) default5、有以下定义语句 double
10、 a,b; int w; long c;若各变量已正确赋值,则下列选项中正确的表达式是( )A) a=a+b=b+ B) w%(int)a+bC) (c+w)%(int)a D) w=a=b; 6、若有定义:int a=8,b=5,c;,则执行语句c=a/b+0.4;后,c的值为( )A)1.4 B)1C)2.0 D)27、 以下选项中合法的用户标识符是( )A) longB) _2TestC) 3DmaxD) A.dat8、若变量a是int类型,并执行了语句:a=A+1.6;,则正确的叙述是( )A)a的值是字符CB)a的值是浮点型C)不允许字符型和浮点型相加D)a的值是字符A的ASCII值
11、加上19、设有定义:float a=2,b=4,h=3;,以下C语言表达式与代数式 计算结果不相符的是( )A) (a+b) *h/2 B) (1/2)*(a+b) *hC) (a+b) *h*1/2 D) h/2*(a+b) 10、 以下选项中非法的表达式是( )A) 0=x=10 or a=0|a=10 &a=10a=0|b=0)&(a0|b=0&b=0)&(a0&b0)&(a+b015、语句:printf(%d,(a=2)&(b=-2);的输出结果是( )A)无输出 B)结果不确定 C)-1 D)116、设有 int x=11; 则表达式 (x+ * 1/3) 的值是( )A)3B)4
12、C)11 D)1217、设 int x=1, y=1; 表达式(!x|y-)的值是( )A)0 B)1 C)2 D)-118、C语言中运算对象必须是整型的运算符是( )A)%= B)/ C)= D)=19、已定义ch为字符型变量,以下赋值语句中错误的是( )A) ch=; B) ch=62+3; C) ch=NULL; D) ch=xaa;20、有以下程序void main( ) int m=12,n=34;printf(%d%d,m+,+n);printf(%d%dn,n+,+m);程序运行后的输出结果是( )A)12353514B)12353513C)12343514D)123435132
13、1、以下程序的输出结果是( ) void main( ) int a=4,b=5,c=0,d; d=!a&!b|!c; printf(%dn,d); A)1B)0C)非0的数D)122、 以下选项中不属于C语言的类型的是( )A) signed short int B) unsigned long intC) unsigned int D) long short23、有以下定义语句 double a,b; int w; long c;若各变量已正确赋值,则下列选项中正确的表达式是( )A) a=a+b=b+ B) w%(int)a+b)C) (c+w)%(int)a D) w=a= =b; 2
14、4、有以下程序void main() char a=a,b;print(%c,+a);printf(%cn,b=a+);程序运行后的输出结果是( )A) b,b B) b,c C)a,b D) a,c 25、 下列程序执行后的输出结果是( ) A) -32767 B) FFFE C) 255 D) -32768 void main( ) char x=0xFFFF; printf(%d n,x-); 二、填空题1、以下程序运行后的输出结果是。void main() int a,b,c;a=25;b=025;c=0x25;printf(%d%d%dn,a,b,c);2、若有语句inti=-19,
15、j=i%4;printf(%dn,j);则输出结果是。3、 以下程序输出的结果是 。void main() int a=5,b=4,c=3,d;d=(abc);printf(%dn,d);4、设y是int型变量,请写出判断y为奇数的关系表达。5、以下程序的输出结果是。void main() unsigned short a=65536; int b;printf(“%dn”,b=a);6、 有定义:int a=10,b=9,c=8;接着顺序执行下列语句后,变量b中的值是_。 c=(a-=(b-5); c=(a%11)+(b=3);7、表示“整数x的绝对值大于5”时值为“真”的C语言表达式是 _
16、。8、有如下程序段int a=14,b=15,x;char c=A;x=(a&b)&(cB);执行该程序段后,x的值为 。 9、若a为int类型,且其值为3,则执行完表达式a+=a-=a*a后,a的值是 。10、语句:x+;+x; x=x+1;x=l+x; ,执行后都使变量x中的值增1,请写出一条同一功能的赋值语句(不得与列举的相同)。11、数字字符0的ASCII值为48,若有以下程序void main() chara=1,b=2;printf(%c,b+);printf(%dn,b-a);程序运行后的输出结果是 。 12、 void main() printf(101 x42 Cn); pr
17、intf(I say:How are you?n); printf(C Programn); printf(Turbo C);程序运行后的输出结果是 。13、 #define PRICE 12.5 void main() int num=3; float total; char ch1,ch2=D; total=num*PRICE; ch1=ch2-A+a; printf(“total=%f,ch1=%cn”,total,ch1); 程序运行后的输出结果是 。14、#include void main() int x,y=7; float z=4; x=(y=y+6,y/z); printf(
18、x=%dn,x); 程序运行后的输出结果是 。15、 下列程序的输出结果是 。 void main( ) double d=3.2; int x,y; x=1.2; y=(x+3.8)/5.0; printf(%d n, d*y); 三、求下列表达式的值 1、设x=2.5,a=7,y=4.7, x+a%3*(int)(x+y)%2/42、设a=2,b=3,x=3.5,y=2.5 (float)(a+b)/2+(int)x%(int)y 3、设a=24, a+=a-=a*=a a/=a+a a%=(n%=2),n的值等于5四、编程题要将“Glmre”进行解密,解密的规则是:用原来的字母前面第4个
19、字母代替原来的 字母,例如:字母”E“前面的字母是”A“,用“A”代替“E”。因此“Glmre”应解密为“China”。请编一程序,用赋处值的方法使c1,c2,c3,c4,c5五个变量的值分别为G、l、m、r、e经过运算,是c1,c2,c3,c4,c5 分别变成 C、h、i、n、a,并输出。第四章最简单的程序设计顺序程序设计一、选择题1、以下叙述中错误的是( )A)C语句必须以分号结束B)复合语句在语法上被看作一条语句C)空语句出现在任何位置都不会影响程序运行D)赋值表达式末尾加分号就构成赋值语句2、以下叙述中正确的是( )A) C语言的源程序不必通过编译就可以直接运行B) C语言中的每条可执
20、行语句最终都将被转换成二进制的机器指令C) C源程序经编译形成的二进制代码可以直接运行D) C语言中的函数不可以单独进行编译3、以下能正确定义且赋初值的语句是( )A)int n1=n2=10; B)char c=32;C)float f=f+1.1;D)double x=12.3E2.5;4、有以下程序void main() char a1=M, a2=m; printf(%cn, (a1, a2) );以下叙述中正确的是( )A)程序输出大写字母MB)程序输出小写字母mC)格式说明符不足,编译出错D)程序运行时产生出错信息5、 以下程序段的输出结果是( )int a=1234;printf
21、(%2dn,a);A) 12 B) 34 C) 1234 D) 提示出错、无结果 6、 以下程序的输出结果是( )void main( ) int a=5,b=4,c=6,d;printf(%dn,d=ab?(ac?a:c):(b);A) 5B) 4 C) 6 D) 不确定7、下列程序执行后的输出结果是(小数点后只写一位) ( )A)6 6 6.0 6.0 B) 6 6 6.7 6.7C) 6 6 6.0 6.7 D) 6 6 6.7 6.0void main( ) double d;float f; long l; int i;i=f=l=d=20/3;printf(%d %ld %f %f
22、 n,i,l,f,d);8、语句printf(abrehiyboun);的输出结果是( ) (说明:b是退格符)A)abrehiybou B)abrehiybouC)rehiyou D)abrehiybou9、有如下程序void main( ) int y=3,x=3,z=1; printf(%d %dn,(+x,y+),z+2); 运行该程序的输出结果是( )A)3 4B)4 2C)4 3D)3 310、若变量已正确说明为float类型,要通过语句scanf(%f%f %f ,&a,&b,&c);给a赋于10.0,b赋予22.0,c赋予33.0,不正确的输入形式是:( )A)102233B)
23、10.0,22.0,33.0C)10.022.033.0 D)1022 33二、填空题1、以下程序运行后的输出结果是。void main( ) char c; int n=100; float f=10; double x; x=f*=n/=(c=50); printf(%d %fn,n,x);2、 以下程序运行后的输出结果是。void main( ) char m; m=B+32; printf(%cn,m);3、以下程序运行后的输出结果是。void main( ) int x=0210; printf(%Xn,x);4、以下程序运行时若从键盘输入:102030。输出结果是。#include
24、void main( ) inti=0,j=0,k=0;scanf(%d%*d%d,&i,&j,&k);printf(%d,%d,%dn,i,j,k);5、 已知字符A的ASCII代码值为65,以下程序运行时若从键盘输入:B33.输出结果是。#include stdio.hvoid main( ) char a,b;a=getchar(); scanf(%d,&b); a=a-A+0; b=b*2;printf(%c%cn,a,b);6、有以下程序#include void main( ) char ch1,ch2; int n1,n2;ch1=getchar(); ch2=getchar()
25、;n1=ch1-0; n2=n1*10+(ch2-0);printf(“%dn”,n2);程序运行时输入:12,执行后输出结果是。7、 以下程序的输出结果是_。void main( )int a=177; printf(%on,a);8、以下程序的输出结果是_。void main( )int a=5,b=4,c=3,d; d=(abc); printf(%dn,d);9、以下程序的输出结果是_。void main( ) int a=1, b=2;a=a+b; b=a-b; a=a-b;printf(%d,%dn, a, b );10、 下列程序的输出结果是16.00,请填空。void main
26、( ) int a=9, b=2;float x=_, y=1.1,z;z=a/2+b*x/y+1/2;printf(%5.2fn, z );11、已有定义int a; float b, x; char c1,c2;为使a=3,b=6.5,x=12.6,c1=a,c2=A,正确的scanf函数调用语句是 ,输入数据的方式 。三、编程题1、设圆的半径r=2.5,圆柱高h=5,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。用scanf输入数据,输出计算结果,输出时要有文说明,取小数点后2位数字。请编程实现。2、输入一个华氏温度,要求输出摄氏温度,公式为c=5/9(F-32),输出要有文字说明,
27、取2位小数。第五章选择结构程序设计一、选择题1、设 a、b、c、d、m、n均为 int型变量,且 a=5、b=6、c=7、d=8、m=2、n=2,则逻辑表达式 (m=ab)&(n=cd)运算后,n的值为( ) A) 0 B) 1C)2D) 32、若整型变量a、b、c、d中的值依次为:1、4、3、2。则条件表达式ab?a:cd?c:d的值是( )A) 1B) 2C) 3D) 43、有以下程序void main()inti=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
28、,34、有以下程序void main() int a=15,b=21,m=0;switch(a%3) case 0:m+;break;case 1:m+;switch(b%2) default:m+;case 0:m+;break;printf(“%dn”,m); 程序运行后的输出结果是( )A) 1B) 2C) 3D) 4 5、阅读以下程序:void main() int x;scanf(“%d”,&x);if(x-5) printf(“%d”,x);else printf(“%d”,x+);程序运行后,如果从键盘上输人5,则输出结果是( )A)3B) 4 C) 5D) 66、有以下程序段i
29、nt k=0,a=1,b=2,c=3;k=ac ? c:Error! No bookmark name given.k;执行该程序段后,k的值是( )A)3B)2C)1D)07、如下程序 void main( ) int x=1,a=0,b=0; switch(x) case 0:b+;case 1:a+;case 2:a+;b+;printf(a=%d,b=%dn,a,b);该程序的输出结果是( )A)a=2,b=1B)a=1,b=1C)a=1,b=0D)a=2,b=28、有如下程序void main( ) float x=2.0,y;if(x0.0)y=0.0;else if(x10.0)
30、y=1.0/x;elsey=1.0;printf(%fn,y);该程序的输出结果是( )A)0.000000B)0.250000C)0.500000D)1.000000 9、 有如下程序void main( ) int a=2,b=-1,c=2;if(ab)if(b0)c=0;else c+;printf(%dn,c);该程序的输出结果是( )A)0B)1C)2D)310、若执行以下程序时从键盘上输入9,则输出结果是( )A)11B)10C)9D)8void main( ) int n;scanf(%d,&n);if(n+0) y=1; B) y=0;else if(x=0) y=0;if(x
31、0) y=1;else y=-1; else if(x=0)if(x=0);if(x0) y=1;if(x0) y=1;else y=0;else y=-1; else y=-1;12、若x和y代表整型数,以下表达式中不能正确表示数学关系|x-y|10的是( )A) abs(x-y)-10& x-y10C) (x-y)10D) (x-y)*(x-y)0) switch(k) default : break; case 1 : n+=k; case 2 : case 3 : n+=k; k-; printf(%dn,n);程序运行后的输出结果是( ) A)0B)4C)6D)7二、填空题1、 以下
32、程序运行后的输出结果是 _void main()inta=3,b=4,c=5,t=99;if(ba&ac) t=a;a=c;c=t;if(ac&bc) t=b;b=a;a=t;printf(%d%d%dn,a,b,c);2、以下程序运行后的输出结果是_。void 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(%d%dn,a,b);3、有以下程序void main( ) int n=0,m=1,x=2; if(
33、!n) x-=1; if(m) x-=2; if(x) x-=3; printf(“%dn”,x);执行后输出结果是_。4、若有以下程序void main()inta=4,b=3,c=5,t=0;if(ab)t=a;a=b;b=t;if(ac)t=a;a=c;c=t;printf(%d %d %dn,a,b,c);执行后输出结果是 _ 。5、以下程序运行后的输出结果是 。 void main() int x=10,y=20,t=0;if(x=y)t=x;x=y;y=t;printf(“%d,%d n”,x,y);6、 以下程序运行后的输出结果是 _void main() inta, b, c;
34、 a=10;b=20;c=(a % b1); printf(%d %d %dn ,a ,b ,c);7、 以下程序运行后的输出结果是 _ 。void main() int p=30;printf (“%dn”,(p/30 ? p/10 : p%3);8、 若x为int类型,请以最简单的形式写出与逻辑表达式!x等价的C语言关系表达式 _ 。9、 若从键盘输入58,则以下程序输出的结果是_。void main( ) int a; scanf(%d,&a); if(a50) printf(%d ,a); if(a40) printf(%d ,a); if(a30) printf(%d ,a); 10、下列程序段的输出结果是_。int n=c;switch(n+) default: printf(error);break;case a: case A: case b: case B: printf(good);break;case c: case C: printf(pass);case d: case D: printf(warn);