C语言是现代最流行的通用程序设计语言之一,它既具有高级程序设计语言的优点,又具有低级程序设计语言的特点,既可以用来编写系统程序,又可以用来编写应用程序。因此,C语言正在被迅速地推广和普及。
课后做些练习是有必要的,本习题集通过大量的典型习题,循序渐进地引导学生巩固各章的知识点。根据最新教学大纲,我们编排了13章的单元习题,结合各章的课时数,确定其所需的篇幅。学生可根据教师的进度完成相应习题。任课教师可以根据需要收取学生所做的试卷检查教学效果,并作为平时成绩的一个依据(分值老师自己把握)。
C语言是电子信息类专业重要的专业基础课,任课教师和学生要引起足够的重视。因为C语言是一个比较通用的高级编程语言,很多编程语言都与之相关,作为学生的第一门计算机语言课,对它学习的好坏将影响后续所有与编程相关的课程以及学生参与项目的能力。
学习C语言的较好方法就是做适量的习题和大量的编程实践。前者是为了巩固基础知识,后者则是对基础知识的灵活运用,只有当我们能够使用C语言畅通无阻地让计算机执行我们所想要做的工作时,我们才能最大限度地发挥计算机的优势,使之真正成为我们强有力的工具。
目录
第一章 C语言概述 ··························································································· 1 第二章 程序的灵魂——算法 ··············································································· 3 第三章 数据类型、运算符与表达式 ······································································ 4 第四章 最简单的C程序设计 ·············································································· 8 第五章 选择结构程序设计 ················································································ 11 第六章 循环控制 ···························································································· 16 第七章 数组 ·································································································· 21 第八章 函数 ·································································································· 27 第九章 预处理命令 ························································································· 33 第十章 指针 ·································································································· 35 第十一章 结构体与共用体 ················································································ 41 第十二章 位运算 ···························································································· 47 第十三章 文件 ······························································································· 49
《C语言程序设计》习题集
第一章 C语言概述
一、选择题
1、以下叙述中正确的是( )
A)C程序中注释部分可以出现在程序中任意合适的地方 B)花括号“{”和“}”只能作为函数体的定界符
C)构成C程序的基本单位是函数,所有函数名都可以由用户命名 D)分号是C语句之间的分隔符,不是语句的一部分 2、以下叙述中正确的是( ) A)C语言比其他语言高级
B)C语言可以不用编译就能被计算机识别执行
C)C语言以接近英语国家的自然语言和数学语言作为语言的表达形式 D)C语言出现得最晚,具有其他语言的一切优点 3、在一个C程序中( )
A) main函数必须出现在所有函数之前 C) main函数必须出现在所有函数之后
B) 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)本程序文件的第一个函数开始,到本程序文件的最后一个函数 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定义为用户标识符
- 2 -
《C语言程序设计》习题集
B)可以把define定义为用户标识符,但不能把if定义为用户标识符 C)可以把if定义为用户标识符,但不能把define定义不用户标识符 D)define和if都不能定义为用户标识符
二、填空题
1、C源程序的基本单位是 。 2、一个C源程序至少包含一个 。
3、在C语言中,输入函数由库函数 完成,输出函数由库函数 完成。 三、编程题
1、编写一个简单的C程序介绍,输出以下信息:
* * * * * * * * * * * * * * * * * * * * * * * * * * *
Welcome to C Programme
* * * * * * * * * * * * * * * * * * * * * * * * * * *
2、编写一个C程序,输入整数a,b两个值,输出两个整数之差。 3、编写一个C程序,输入a、b、c 三个值,输出其中最小者。
- 3 -
《C语言程序设计》习题集
第二章 程序的灵魂——算法
一、选择题
1、以下不能正确计算代数式1sin2(1)值的C语言表达式是( )
32
A)1/3*sin(1/2)*sin(1/2) B)sin(0.5)*sin(0.5)/3
C)pow(sin(0.5),2)/3
D)1/3.0*pow(sin(1.0/2),2)
2、算法具有五个特性,以下选项中不属于算法特性的是( ) A)有穷性 B)简洁性 C)可行性 D)确定性
3、一个算法应该具有“确定性”等5个特性,下面对另外4个特性的描述中错误的是( A) 有零个或多个输入 B) 有零个或多个输出 C) 有穷性 D) 可行性 4、与数学式子
3xn对应的C语言表达式是( )
2x1A) 3*x^n(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、用C语言表示两个m和n的最大公约数,并画出其流程图。
6、用C语言表示求 100 即(1+2+3+...+100),并画出其流程图。
nn1
- 4 -
) 《C语言程序设计》习题集
第三章 数据类型、运算符与表达式
一、选择题
1、 在C语言中,不正确的int 类型的常数是( ) A)32768 B)0 C)037 D)0xAF 2、以下选项中合法的字符常量是( ) A)”B” B)'\\010' C)-268 D) D 3、以下选项中,不能作为合法常量的是( )
A)1.234e04 B)1.234e0.4 C)1.234e+4 D)1.234e0 4、 下列选项中,合法的C语言关键字是( )
A) VAR B) cher C) integer D) default
5、有以下定义语句 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; 6、若有定义:int a=8,b=5,c;,则执行语句c=a/b+0.4;后,c的值为( ) A)1.4 B)1 C)2.0 D)2 7、 以下选项中合法的用户标识符是( )
A) long B) _2Test C) 3Dmax D) A.dat 8、若变量a是int类型,并执行了语句:a='A'+1.6;,则正确的叙述是( ) A)a的值是字符C B)a的值是浮点型 C)不允许字符型和浮点型相加 D)a的值是字符'A'的ASCII值加上1
9、设有定义:float a=2,b=4,h=3;,以下C语言表达式与代数式 计算结果不相符的是( A) (a+b) *h/2 B) (1/2)*(a+b) *h C) (a+b) *h*1/2 D) h/2*(a+b) 10、 以下选项中非法的表达式是( )
A) 0<=x<100 B) i=j==0 C) (char)(65+3) D) x+1=x+1
11、若已定义x和y为double类型,则表达式x=1,y=x+3/2 的值是( )
A)1 B)2 C)2.0 D)2.5 12、能正确表示逻辑关系:“a≥10或a≤0”的C语言表达式是( )
A)a>=10 or a<=0 B)a>=0|a<=10 C)a>=10 &&a<=0 D)a>=10‖a<=0 13、当c的值不为0 时,在下列选项中能正确将c的值赋给变量a、b的是( )
A)c=b=a; B)(a=c)||(b=c); C)(a=c)&&(b=c); D)a=c=b;
14、能正确表示a和b同时为正或同时为负的逻辑表达式是( ) A)(a>=0||b>=0)&&(a<0||b<0) B)(a>=0&&b>=0)&&(a<0&&b<0) C)(a+b>0)&&(a+b<=0) D)a*b>0
15、语句:printf("%d",(a=2)&&(b=-2));的输出结果是( ) A)无输出 B)结果不确定 C)-1 D)1 16、设有 int x=11; 则表达式 (x++ * 1/3) 的值是( )
A)3 B)4 C)11 D)12 17、设 int x=1, y=1; 表达式(!x||y--)的值是( )
- 5 -
)
《C语言程序设计》习题集
A)0 B)1 C)2 18、C语言中运算对象必须是整型的运算符是( )
A)%= B)/ C)=
D)-1 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\ printf(\"%d%d\\n\}
程序运行后的输出结果是( ) A)12353514 B)12353513 C)12343514 D)12343513 21、以下程序的输出结果是( ) void main( )
{ int a=4,b=5,c=0,d; d=!a&&!b||!c;
printf("%d\\n",d); } A)1 B)0 C)非0的数 D)-1 22、 以下选项中不属于C语言的类型的是( )
A) signed short int B) unsigned long int C) unsigned int D) long short 23、有以下定义语句 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; 24、有以下程序 void main() { char a='a',b; print(\"%c,\ printf(\"%c\\n\}
程序运行后的输出结果是( ) 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\ 二、填空题
1、以下程序运行后的输出结果是 。
void main()
- 6 -
《C语言程序设计》习题集
{ int a,b,c; a=25; b=025; c=0x25;
printf(\"%d %d %d\\n\}
2、若有语句
int i=-19,j=i%4; printf(\"%d\\n\
则输出结果是 。
3、 以下程序输出的结果是 。
void main()
{ int a=5,b=4,c=3,d;
d=(a>b>c);
printf(\"%d\\n\}
4、设y是int型变量,请写出判断y为奇数的关系表达 。 5、以下程序的输出结果是 。
void main()
{ unsigned short a=65536; int b;
printf(“%d\\n”,b=a); }
6、 有定义:int a=10,b=9,c=8;接着顺序执行下列语句后,变量b中的值是________。
c=(a-=(b-5)); c=(a%11)+(b=3);
7、表示“整数x的绝对值大于5”时值为“真”的C语言表达式是 _____________。 8、有如下程序段
int a=14,b=15,x; char c='A';
x=(a&&b)&&(c<'B');
执行该程序段后,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()
{ char a='1',b='2'; printf(\"%c,\ printf(\"%d\\n\}
程序运行后的输出结果是 。 12、 void main() {
- 7 -
《C语言程序设计》习题集
printf(\"\\101 \\x42 C\\n\");
printf(\"I say:\\\"How are you?\\\"\\n\"); printf(\"\\\\C Program\\\\\\n\"); 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=%c\\n”,total,ch1); } 程序运行后的输出结果是 。 14、#include void main() { int x,y=7; float z=4; x=(y=y+6,y/z); printf(\"x=%d\\n\ } 程序运行后的输出结果是 。 15、 下列程序的输出结果是 。 void main( ) { double d=3.2; int x,y; x=1.2; y=(x+3.8)/5.0; printf(\"%d \\n\ } 三、求下列表达式的值 1、设x=2.5,a=7,y=4.7, x+a%3*(int)(x+y)%2/4 2、设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个字母代替原来的 字母,例如:字母”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’,并输出。 - 8 - 《C语言程序设计》习题集 第四章 最简单的程序设计——顺序程序设计 一、选择题 1、以下叙述中错误的是( ) A)C语句必须以分号结束 B)复合语句在语法上被看作一条语句 C)空语句出现在任何位置都不会影响程序运行 D)赋值表达式末尾加分号就构成赋值语句 2、以下叙述中正确的是( ) A) C语言的源程序不必通过编译就可以直接运行 B) C语言中的每条可执行语句最终都将被转换成二进制的机器指令 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(\"%c\\n\ } 以下叙述中正确的是( ) A)程序输出大写字母M B)程序输出小写字母m C)格式说明符不足,编译出错 D)程序运行时产生出错信息 5、 以下程序段的输出结果是( ) int a=1234; printf(\"%2d\\n\ A) 12 B) 34 C) 1234 D) 提示出错、无结果 6、 以下程序的输出结果是( ) void main( ) { int a=5,b=4,c=6,d; printf(\"%d\\n\} A) 5 B) 4 C) 6 D) 不确定 7、下列程序执行后的输出结果是(小数点后只写一位) ( ) A)6 6 6.0 6.0 B) 6 6 6.7 6.7 C) 6 6 6.0 6.7 D) 6 6 6.7 6.0 void main( ) { double d;float f; long l; int i; i=f=l=d=20/3; printf(\"%d %ld %f %f \\n\",i,l,f,d); } 8、语句printf(\"a\\bre\\'hi\\'y\\\\\\bou\\n\");的输出结果是( ) (说明:'\\b'是退格符) - 9 - 《C语言程序设计》习题集 A)a\\bre\\'hi\\'y\\\\\\bou B)a\\bre\\'hi\\'y\\bou C)re'hi'you D)abre'hi'y\\bou 9、有如下程序 void main( ) { int y=3,x=3,z=1; printf(\"%d %d\\n\",(++x,y++),z+2); } 运行该程序的输出结果是( ) A)3 4 B)4 2 C)4 3 D)3 3 10、若变量已正确说明为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<回车> 二、填空题 1、以下程序运行后的输出结果是 void main( ) { char c; int n=100; float f=10; double x; x=f*=n/=(c=50); printf(\"%d %f\\n\ } 2、 以下程序运行后的输出结果是 void main( ) { char m; m=‘B’+32; printf(\"%c\\n\} 3、以下程序运行后的输出结果是 void main( ) { int x=0210; printf(\"%X\\n\ } 。 。 。 4、以下程序运行时若从键盘输入:10 20 30<回车>。输出结果是 。 #include { int i=0,j=0,k=0; scanf(\"%d%*d%d\ printf(\"%d,%d,%d\\n\} 5、 已知字符A的ASCII代码值为65,以下程序运行时若从键盘输入:B33<回车>.输出结果 是 。 #include \"stdio.h\" void main( ) { char a,b; a=getchar(); scanf(\"%d\ a=a-'A'+'0'; - 10 - 《C语言程序设计》习题集 b=b*2; printf(\"%c %c\\n\} 6、有以下程序 #include { char ch1,ch2; int n1,n2; ch1=getchar(); ch2=getchar(); n1=ch1-‘0’; n2=n1*10+(ch2-‘0’); printf(“%d\\n”,n2); } 程序运行时输入:12<回车>,执行后输出结果是 。 7、 以下程序的输出结果是___________________。 void main( ) {int a=177; printf(\"%o\\n\",a); } 8、以下程序的输出结果是___________________。 void main( ) {int a=5,b=4,c=3,d; d=(a>b>c); printf(\"%d\\n\",d); } 9、以下程序的输出结果是______________。 void main( ) { int a=1, b=2; a=a+b; b=a-b; a=a-b; printf(\"%d,%d\\n\", a, b ); } 10、下列程序的输出结果是16.00,请填空。 void main( ) { int a=9, b=2; float x=_________, y=1.1,z; z=a/2+b*x/y+1/2; printf(\"%5.2f\\n\", 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),输出要有文字说明,取2位小数。 - 11 - 《C语言程序设计》习题集 第五章 选择结构程序设计 一、选择题 1、设 a、b、c、d、m、n均为 int型变量,且 a=5、b=6、c=7、d=8、m=2、n=2,则逻辑表达式 (m=a>b)&&(n=c>d)运算后,n的值为( ) A) 0 B) 1 C)2 D) 3 2、若整型变量a、b、c、d中的值依次为:1、4、3、2。则条件表达式aA) 1 B) 2 C) 3 D) 4 3、有以下程序 void main() { int i=1,j=1,k=2; if((j++‖k++)&&i++) printf(\"%d,%d,%d\\n\} 执行后输出结果是( ) A) 1,1,2 B) 2,2,1 C) 2,2,2 D) 2,2,3 4、有以下程序 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(“%d\\n”,m); } 程序运行后的输出结果是( ) A) 1 B) 2 C) 3 D) 4 5、阅读以下程序: void main() { int x; scanf(“%d”,&x); if(x--<5) printf(“%d”,x); else printf(“%d”,x++); } 程序运行后,如果从键盘上输人5,则输出结果是( ) A)3 B) 4 C) 5 D) 6 6、有以下程序段 - 12 - 《C语言程序设计》习题集 int k=0,a=1,b=2,c=3; k=ac ? c:k; 执行该程序段后,k的值是( ) A)3 B)2 C)1 D)0 7、如下程序 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=%d\\n\",a,b); } 该程序的输出结果是( ) A)a=2,b=1 B)a=1,b=1 C)a=1,b=0 8、有如下程序 void 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(\"%f\\n\",y); } 该程序的输出结果是( ) A)0.000000 B)0.250000 C)0.500000 9、 有如下程序 void main( ) { int a=2,b=-1,c=2; if(aif(b<0) c=0; else c++; printf(\"%d\\n\",c); } 该程序的输出结果是( ) A)0 B)1 C)2 10、若执行以下程序时从键盘上输入9,则输出结果是( ) A)11 B)10 C)9 void main( ) { int n; scanf(\"%d\",&n); if(n++<10) printf(\"%d\\n\",n); else printf(\"%d\\n\",n--); } - 13 - D)a=2,b=2 D)1.000000 D)3 D)8 《C语言程序设计》习题集 1x011、 有一函数,y0x0 ,以下程序段中不能根据x值正确计算出y值的是 1x0A) if(x>0) y=1; B) y=0; else if(x==0) y=0; if(x>0) y=1; else y=-1; else if(x<0) y=-1; C)y=0; D)if(x>=0) if(x>=0); if(x>0) y=1; if(x>0) y=1 ; else y=0; else y=-1; else y=-1; 12、若x和y代表整型数,以下表达式中不能正确表示数学关系|x-y|<10的是( A) abs(x-y)<10 B) x-y>-10&& x-y<10 C) @(x-y)<-10||!(y-x)>10 D) (x-y)*(x-y)<100 13、已有定义:int x=3,y=4,z=5;,则表达式!(x+y)+z-1 && y+z/2的值是( ) A) 6 B) 0 C) 2 D) 1 14、若a、 b、c1、c2、x、y、均是整型变量,正确的switch语句是( ) A) switch(a+b) B) switch(a*a+b*b) { case 1:y=a+b; break; {case 3: case 0:y=a-b; break; case 1:y=a+b;break; } case 3:y=b-a,break; } C) switch(a) D) switch(a-b) { case c1 :y=a-b; break; {default:y=a*b;break case c2: x=a*d; break; case 3:case 4:x=a+b;break; default:x=a+b; case 10:case 11:y=a-b;break; } } 15、有以下程序 void main() { int k=5,n=0; while(k>0) { switch(k) { default : break; case 1 : n+=k; case 2 : case 3 : n+=k; } k--; } printf(\"%d\\n\ } 程序运行后的输出结果是( ) A)0 B)4 C)6 D)7 二、填空题 1、 以下程序运行后的输出结果是 _____ - 14 - ) 《C语言程序设计》习题集 void main() { int a=3,b=4,c=5,t=99; if(b} 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 %d\\n\} 3、有以下程序 void main( ) { int n=0,m=1,x=2; if(!n) x-=1; if(m) x-=2; if(x) x-=3; printf(“%d\\n”,x); } 执行后输出结果是_______。 4、若有以下程序 void main() { int a=4,b=3,c=5,t=0; if(aprintf(\"%d %d %d\\n\} 执行后输出结果是 ____ 。 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、 以下程序运行后的输出结果是 _______ - 15 - 《C语言程序设计》习题集 void main() { int a, b, c; a=10;b=20;c=(a % b<1)||(a/b>1); printf(\"%d %d %d\\n\" ,a ,b ,c); } 7、 以下程序运行后的输出结果是 _______ 。 void main() { int p=30; printf (“%d\\n”,(p/3>0 ? p/10 : p%3)); } 8、 若x为int类型,请以最简单的形式写出与逻辑表达式!x等价的C语言关系表达式 _________ 。 9、 若从键盘输入58,则以下程序输出的结果是____________。 void main( ) { int a; scanf(\"%d\",&a); if(a>50) printf(\"%d \",a); if(a>40) printf(\"%d \",a); if(a>30) 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\"); } 三、编程题 1、利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。 2、编程输出9*9口诀。 3、编程实现以下功能:读入两个运算符(data和data2)及一个运算符(op),计算表达式data op data2的值,其中op可以为+,-,*,/(用switch语句实现)。 4、一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? 5、企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数? - 16 - 《C语言程序设计》习题集 第六章 循环控制 一、选择题 1、以下叙述正确的是( ) A)do-while语句构成的循环不能用其它语句构成的循环代替。 B)do-while语句构成的循环只能用break语句退出。 C)用do-while语句构成的循环,在while后的表达式为非零时结束循环。 D)用do-while语句构成的循环,在while后的表达式为零时结束循环。 2、以下程序的输出结果是( ) A)2 0 B)3 1 C)3 2 1 D)2 1 0 #include \"stdio.h\" void main( ) { int n=4; while(n--) printf(\"%d\ }3、以下程序的输出结果是( ) A)#*#*# B)##### C)***** D)*#*#* void main( ) { int i; for(i=1;i<6;i++) { if(i%2) {printf(\"#\");continue;} printf(\"*\"); } printf(\"\\n\"); } 4、以下程序的输出结果是( ) A)编译不通过,无输出 B)aceg C)acegi D)abcdefghi void main( ) { int i; for(i='A';i<'I';i++,i++) printf(\"%c\",i+32); printf(\" \\n\"); } 5、有如下程序 void main( ) { int i,sum; for(i=1;i<=3;sum++) sum+=i; printf(\"%d\\n\",sum); } 该程序的执行结果是( ) A)6 B)3 C)死循环 D)0 6、设有以下程序运行后,可得到的结果( ) void main() - 17 - 《C语言程序设计》习题集 { int num=0; while (num<=2) {num++; printf(“%d\\n”,num); } } A)1 B)1 C)1 D)1 2 2 2 3 3 4 7、有如下程序 void main( ) { int n=9; while(n>6) {n--;printf(\"%d\",n);} } 该程序段的输出结果是( ) A)987 B)876 C)8765 D)9876 8、有以下程序段 int k=0; while(k=1) k++; while 循环执行的次数是 A)无限次 B)有语法错,不能执行 C)一次也不执行 D)执行1次 9、有以下程序段 int x=3; do { printf(\"%d\其输出结果是( ) A)1 B)3 0 C)1 2 D)死循环 10、t为int类型,进人下面的循环之前,t的值为0 while( t=l ) { ……} 则以下叙述中正确的是 A)循环控制表达式的值为0 B)循环控制表达式的值为1 C)循环控制表达式不合 D)以上说法都不对 11、有如下程序 void main( ) { int x=23; do { printf(\"%d\",x--);}while(!x);} 该程序的执行结果是( ) A)321 B)23 C)不输出任何内容 D)陷入死循环 12、 要求以下程序的功能是计算: s1main () - 18 - 111... 2310《C语言程序设计》习题集 { int n; float s; s=1.0; for(n=10;n>1;n--) s=s+1/n; print(\"%6.4f\\n\} 程序运行后输出结果错误,导致错误结果的程序行是( ) A) s=1.0; B) for(n=10;n>1;n--) C) s=s+1/n; D)printf(\"%6.4f/n\、有以下程序 void main() { int i=0,s=0; do{ if(i%2){i++;continue;} i++; s +=i; }while(i<7); printf(\"%d\\n\} 执行后输出结果是( ) A) 16 B) 12 C) 28 14、以下程序中,while循环的循环次数是( ) main ( ) { int i=0; while(i<10) { if(i<1) continue; if(i==5) break; i++; } ...... } A) 1 B) 10 C) 6 D) 死循环,不能确定次数 二、填空题 1、以下程序的输出结果是_________________ #include \"stdio.h\" void main( ) {int s,i; for(s=0,i=1;i<3;i++,s+=i); printf(\"%d\\n\}2、设有以下程序: void main( ) { int n1,n2; scanf(\"%d\",&n2); - 19 - D) 21 13 《C语言程序设计》习题集 while(n2!=0) { n1=n2%10; n2=n2/10; printf(\"%d\",n1);} } 程序运行后,如果从键盘上输入1298;则输出结果为__________________ 3、 要使以下程序段输出10个整数,请填入一个整数。 for(i=0;i<=___________ ;printf(\"%d\\n\",i+=2)); 4、 若输入字符串:abcde<回车>,则以下while循环体将执行____________ 次。 while((ch=getchar( ))== 'e') printf(\"*\"); 5、以下程序段的执行结果是( ) int a,y; a=10;y=0; do { a+=2;y+=a; printf(\"a=%d y=%d\\n\",a,y); if(y>20) break; } while(a=14); 6、以下程序 void main() { int i; for(i=0;i<3;i++) switch(i) { case 1: printf(\"%d\ case 2: printf(\"%d\ default: printf(\"%d\ } } 执行后输出结果是 。 7、以下程序的输出结果是 。 void main( ) {int a=0,j; for(j=0;j<4;j++) { switch( j ) {case 0: case 3:a+=2; case 1: case 2:a+=3; default:a+=5; } } printf(\"%d\\n\} 8、以下程序的输出结果是 。 - 20 - 《C语言程序设计》习题集 #include \"stdio.h\" void main( ) {int i=0,a=0; while(i<20) { for(;;) {if((i%10)==0) break; else i--; } i+=11;a+=i; } printf(\"%d\\n\} 9、有以下程序 void main() { int k=4,n=4; for( ; n printf(\"%d,%d\\n\} 程序运行后的输出结果是 。 10、以下程序运行后的输出结果是 。 void main() { int x=15; while(x>10 && x<50) { x++; if(x/3){x++;break;} else continue; } printf(“%d\\n”,x); } 三、编程题 1、输入两个正整数m和n,求其最大公约数和最小公倍数。 2、输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。 3、一个三位数,其各位数字立方和等于该数本身。 4、求1!+2!+3!+4!+...+20! 5、 有一分数序列2/1,3/5,5/3,8/5,13/8,21/13…..求出这个数列的前20项。 6、把100~200之间的不能被3整除的数输出。 7、任意输入一个正整数,要求判断该正整数是否是另一个整数的平方。 8、编写程序,从键盘输入6名学生的5门成绩,分别统计出每个学生的平均成绩。 - 21 - 《C语言程序设计》习题集 第七章 数 组 一、选择题 1、下列描述中不正确的是( ) A)字符型数组中可以存放字符串 B)可以对字符型数组进行整体输入、输出 C)可以对整型数组进行整体输入、输出 D)不能在赋值语句中通过赋值运算符"="对字符型数组进行整体赋值 2、设有数组定义:char array [ ]=\"China\"; 则数组 array所占的空间为( A)4个字节 B)5个字节 C)6个字节 D)7个字节 3、以下不能正确定义二维数组的选项是( ) A) int a[2][2]={{1},{2}}; B) int a[][2]={1,2,3,4}; C) int a[2][2]={{1},2,3}; D) int a[2][]={{1,2},{3,4}}; 4、以下程序的输出结果是( ) A)1,5,9, B)1,4,7, C)3,5,7, D)3,6,9,void main( ) { int i,x[3][3]={1,2,3,4,5,6,7,8,9}; for(i=0;i<3;i++) printf(\"%d,\",x[i][2-i]); } 5、以下程序段的输出结果是( ) char s[ ]= \"\\\\141\\141abc\\"; printf(\"%d\\n\",strlen(s)); A)9 B)12 C)13 D)14 6、有以下程序 void main() { int p[8]={11,12,13,14,15,16,17,18},i=0,j=0; while(i++<7) if(p[i]%2) j+=p[i]; printf(\"%d\\n\} 程序运行后的输出结果是( ) A)42 B)45 C)56 D)60 7、有以下程序 void main() { char a[7]=\"a0\\0a0\\0\";int i,j; i=sizeof(a); j=strlen(a); printf(\"%d %d\\n\} 程序运行后的输出结果是( ) A)2 2 B)7 6 C)7 2 D)6 2 8、 有以下程序 int f(int a) - 22 - ) 《C语言程序设计》习题集 { return a%2; } void main() { int s[8]={1,3,5,2,4,6},i,d=0; for (i=0;f(s[i]);i++) d+=s[i]; printf(\"%d\\n\} 程序运行后的输出结果是( ) A) 9 B) 11 C) 19 D) 21 9、以下程序的输出结果是( ) A)20 B)21 C)22 D)23 void main( ) { int i,k,a[10],p[3]; k=5; for (i=0;i<10;i++) a[i ]=i; for (i=0;i<3;i++) p[i ]=a[i *(i+1)]; for (i=0;i<3;i++) k+=p[i] *2; printf(\"%d\\n\",k); } 10、以下不能正确进行字符串赋初值的语句是( ) A)char str[5]= \"good!\" ; B)char str[ ]= \"good!\"; C)char *str=\"good!\"; D)char str[5]={ 'g','o','o','d'}; 11、有以下程序 void main( ) { char a[]=”abcdefg”,b[10]=”abcdefg”; printf(“%d %d\\n”,sizeof(a) ,sizeof(b)); } 执行后输出结果是( ) A) 7 7 B) 8 8 C) 8 10 12、 以下程序的输出结果是( ) #include { char b1[8]=\"abcdefg\while (--pb>=b1) strcpy(b2,pb); printf(\"%d\\n\} A) 8 B) 3 C) 1 D) 7 13、程序 void main() { int p[7]={11,13,14,15,16,17,18},i=0,k=0; while(i<7&&p[i]%2){k=k+p[i];i++;} printf(\"%d\\n\} - 23 - D) 10 10 《C语言程序设计》习题集 执行后输出结果是( ) A) 58 B) 56 C) 45 D) 24 14、以下能正确定义数组并正确赋初值的语句是( ) A) int N=5,b[N][N]; B) int a[1][2]={{1},{3}}; C) int c[2][]={{1,2},{3,4}}; D) int d[3][2]={{1,2},{34}}; 15、定义:int aa[ 8],则以下表达式中不能代表数组元aa[1]的地址的是( ) A) &aa[0]+1 B) &aa[1] C) &aa[0]++ D) aa+1 16、有以下程序 void sort(int a[], int n) { int i, j ,t; for (i=0; i main ( ) { int n[5]={0,0,0},i,k=2; for(i=0;i A) 不确定的值 B) 2 C) 1 D) 0 18、已有定义:char a[]=\"xyz\以下叙述中正确的是( ) A)数组a和b的长度相同 B)a数组长度小于b数组长度 C)a数组长度大于b数组长度 D)上述说法都不对 19、s12和s2已正确定义并分别指向两个字符串。若要求:当s1所指串大于s2所指串时,执行语句S;则以下选项中正确的是( ) A) if(s1>s2)S; B) if(strcmp(s1,s2))S; C) if(strcmp(s2,s1)>0) S; D) if(strcmp(s1,s2)>0)S; 20、 以下程序的输出结果是( ) void main() { char st[20]= “hello\\0\\\\\”; printf(%d %d \\n”,strlen(st),sizeof(st)); - 24 - 《C语言程序设计》习题集 } A) 9 9 B) 5 20 C) 13 20 D) 20 20 二、填空题 1、以下程序运行后的输出结果是 。 #include \"string.h\" void main() { char ch[]=\"abc\ for(i=0;i<3;i++) strcpy(x[i],ch); for(i=0;i<3;i++) printf(\"%s\ printf(\"\\n\"); } 2、以下程序运行后的输出结果是 。 void main() { int a[4][4]={{1,2,3,4},{5,6,7,8},{11,12,13,14},{15,16,17,18}}; int i=0,j=0,s=0; while(i++<4) { if(i==2||i==4) continue; j=0; do{ s+= a[i][j]; j++; } while(j<4); } printf(\"%d\\n\} 3、以下程序从终端读入数据到数组中,统计其中正数的个数,并计算它们之和。请填空。 void main() { int i,a[20],sum,count; sum=count=0; for(i=0;i<20;i++) scanf(\"%d\ ); for(i=0;i<20;i++) { if(a>0) { count++; sum+= ; } } printf(\"sum=%d,count=%d\\n\} 4、以下程序运行后的输出结果是 。 void main() { int i, n[]={0,0,0,0,0}; for(i=1;i<=4;i++) { n[i]=n[i-1]*2+1; printf(“%d ”,n[i]); - 25 - 《C语言程序设计》习题集 } } 5、以下程序运行后的输出结果是 。 void main() { int i,j,a[][3]={1,2,3,4,5,6,7,8,9}; for(i=0;i<3;i++) for(j=i+1;j<3;j++) a[j][i]=0; for(i=0;i<3;i++) { for(j=0;j<3;j++) printf(\" %d \printf(\"\\n\"); } } 6、若有以下程序 void main() { int a[4][4]={{1,2,-3,-4},{0,-12,-13,14},{-21,23,0,-24},{-31,32,-33,0}}; int i,j,s=0; for(i=0;i<4;i++) { for(j=0;j<4;j++) { if(a[i][j]<0)continue; if(a[i][j]==0)break; s+=a[i][j]; } } printf(\"%d\\n\} 执行后输出的结果是 。 7、 若有定义语句: char s[100],d[100]; int j=0, i=0;,且s中已赋字符串,请填空以实现字符串拷贝。(注:不得使用逗号表达式) while(s[i]) { d[j]= ; j++;} d[j]=0; 8、下列程序段的输出结果是 void main() { char b[]=”Hello,you”; b[5]=0; printf(“%s \\n”, b ); } 。 9、 当执行下面的程序时,如果输入ABC,则输出结果是 。 #include “stdio.h” #include “string.h” void main() { char ss[10]=“1,2,3,4,5”; - 26 - 《C语言程序设计》习题集 gets(ss); strcat(ss, “6789”); printf(“%s\\n”,ss); } 10、有如下程序,输出为 。 main( ) { int a[3][3]={{1,2},{3,4},{5,6}},i,j,s=0; for(i=1;i<3;i++) for(j=0;j11、该程序的输出结果是 。 void void main( ) {char s[ ]= \"abcdef \"; s[3]= '\\0'; printf(\"%s\\n\",s); } 12、以下程序的输出结果是 void main( ) {char c [3][5]={ \"AAAA\",\"BBB\",\"CC\; printf(\"\\\"%s\\\"\\n\",ch[1]); } 三、编程题 1、编程实现将20个无序的数编程由大到小排列的顺序。 2、读10个整数存入数组,找出其中最大值和最小值。 3、通过赋初值按行顺序给2╳3的二维数组赋予2、4、6、…等偶数,然后按列的顺序输出 该数组。 4、输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。 5、有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数 6、 求一个3╳3的整形矩阵对角线元素之和。 7、有一篇文章,共有三行文字,每行有80个字符。要求分别统计出其中大写字母、小写字母、数字、空格以及其他字符的个数。 8、编程实现将两个字符串连接起来。(不用strcat函数实现) - 27 - 《C语言程序设计》习题集 第八章 函数 一、选择题 1、设函数fun的定义形式为: void fun(char ch, float x ) { … } 则以下对函数fun的调用语句中,正确的是( )。 A)fun(\"abc\ B)t=fun('D',16.5); C)fun('65',2.8); D)fun(32,32); 2、以下关于函数的叙述中正确的是( )。 A)每个函数都可以被其它函数调用(包括main函数) B)每个函数都可以被单独编译 C)每个函数都可以单独运行 D)在一个函数内部可以定义另一个函数 3、在函数调用过程中,如果函数funA调用了函数funB,函数funB又调用了函数funA,则( ) A) 称为函数的直接递归调用 B) 称为函数的间接递归调用 C) 称为函数的循环调用 D) C语言中不允许这样的递归调用 4、有以下程序: int a=2; int f(int n) { static int a=3; int t=0; if(n%2){ static int a=4; t += a++; } else { static int a=5; t += a++; } return t+a++; } void main() { int s=a, i; for( i=0; i<3; i++) s+=f(i); printf(\"%d\\n\} 程序运行后的输出结果是( )。 A)26 B)28 C)29 D)24 5、若程序中定义了以下函数: double myadd(double a,double B) { return (a+B) ;} 并将其放在调用语句之后,则在调用之前应该对该函数进行说明,以下选项中错误的说明是( )。 A)double myadd(double a,B) ; B)double myadd(double,double); C)double myadd(double b,double A); D)double myadd(double x,double y); 6、有以下程序: char fun(char x , char y) { if(x 《C语言程序设计》习题集 void main( ) { int a=’9’,b=’8’,c=’7’; printf(“%c\\n”,fun(fun(a,b) ,fun(b,c) )); } 程序的执行结果是( )。 A) 函数调用出错 B)8 C)9 D)7 7、有以下程序 void swap1(int c[]) { int t; t=c[0];c[0]=c[1];c[1]=t; } void swap2(int c0,int c1) { int t; t=c0;c0=c1;c1=t; } void main( ) { int a[2]={3,5},b[2]={3,5}; swap1(a) ; swap2(b[0],b[1]); printf(“%d %d %d %d\\n”,a[0],a[1],b[0],b[1]); } 其输出结果是( )。 A) 5 3 5 3 B) 5 3 3 5 C) 3 5 3 5 D) 3 5 5 3 8、有以下程序 int f(int b[][4]) { int i,j,s=0; for(j=0;j<4;j++) { i=j; if(i>2) i=3-j; s+=b[i][j]; } return s; } void main( ) { int a[4][4]={{1,2,3,4},{0,2,4,5},{3,6,9,12},{3,2,1,0}}; printf(“%d\\n”,f(a) ); } 执行后的输出结果是( )。 A) 12 B) 11 C) 18 D) 16 9、有以下程序: void sort(int a[],int n) { int i,j,t;
Copyright © 2019- howto234.com 版权所有 湘ICP备2022005869号-3
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务