1、C语言课后习题第1章C语言概述一、选择题(1)计算机高级语言程序的运行方法有编译执行和解释执行两种,以下叙述中正确的是A)C语言程序仅可以编译执行B)C语言程序仅可以解释执行C)C语言程序既可以编译执行又可以解释执行D)以上说法都不对(2)以下叙述中错误的是A)C语言的可执行程序是由一系列机器指令构成的B)用C语言编写的源程序不能直接在计算机上运行C)通过编译得到的二进制目标程序需要连接才可以运行D)在没有安装C语言集成开发环境的机器上不能运行C源程序生成的.exe文件(3)以下关于简单程序设计的步骤和顺序的说法中正确的是A)确定算法后,整理并写出文档,最后进行编码和上机调试B)首先确定数据结
2、构,然后确定算法,再编码,并上机调试,最后整理文档C)先编码和上机调试,在编码过程中确定算法和数据结构,最后整理文档D)先写好文档,再根据文档进行编码和上机调试,最后确定算法和数据结构(4)以下叙述正确的是A)C语言程序是由过程和函数组成的B)C语言函数可以嵌套调用,例如:fun(fun(x)C)C语言函数不可以单独编译D)C语言中除了main函数,其他函数不可作为单独文件形式存在(5)以下关于C语言的叙述中正确的是A)C语言中的注释不可以夹在变量名或关键字的中间B)C语言中的变量可以在使用之前的任何位置进行定义C)在C语言算术表达式的书写中,运算符两侧的运算数类型必须一致D)C语言的数值常量
3、中夹带空格不影响常量值的正确表示(6)以下叙述中正确的是 A)程序设计的任务就是编写程序代码并上机调试 B)程序设计的任务就是确定所用数据结构 C)程序设计的任务就是确定所用算法 D)以上三种说法都不完整(7)下列关于C语言文件的叙述中正确的是 A)文件由一系列数据依次排列组成,只能构成二进制文件 B)文件由结构序列组成,可以构成二进制文件或文本文件 C)文件由数据序列组成,可以构成二进制文件或文本文件D)文件由字符序列组成,其类型只能是文本文件(8)以下叙述中正确的是A)在C语言程序中,main函数必须放在其它函数的最前面B)每个后缀为.C的C语言程序都可以单独进行编译C)在C语言程序中,只
4、有main函数才可单独进行编译D)每个后缀为.C的C语言程序都应该包含一个main函数9)C语言主要是借助以下哪个功能来实现程序模块化A)定义函数 B)定义常量和外部变量C)三种基本结构语句 D)丰富的数据类型二、填空题习题答案一、选择题ADBBB DCBA二、填空题第2章数据的存储与运算一、选择题(1)以下选项中不能用作C程序合法常量的是A)1.234 B)123 C)123 D)x7G(2)以下选项中可用作C程序合法实数的是A).1e0 B)3.0e0.2 C)E9 D)9.12E(3)以下叙述中错误的是A) C程序在运行过程中所有计算都以二进制方式进行B)C程序在运行过程中所有计算都以十
5、进制方式进行C)所有C程序都需要编译链接无误后才能运行D)C程序中整型变量只能存放整数,实型变量只能存放浮点数(4)以下选项中能表示合法常量的是A)整数:1,200B)实数:1.5E2.0C )字符斜杠:D)字符串:007(5)有以下程序includestdiohmain()int s,t,A=10;double B=6;ssizeof(A);t=sizeof(B);printf(“d,dn”,s,t);在VC6平台上编译运行,程序运行后的输出结果是A)2,4 B)4,4 C)4,8 D)10,6(6)以下C语言用户标识符中,不合法的是A)_1B)AaBc C)a_bD)ab(7)以下关于C语
6、言数据类型使用的叙述中错误的是A)若要准确无误差的表示自然数,应使用整数类型B)若要保存带有多位小数的数据,应使用双精度类型C)若要处理如“人员信息”等含有不同类型的相关数据,应自定义结构体类型D)若只处理“真”和“假”两种逻辑值,应使用逻辑类型(8)以下选项中,能用作用户标识符的是A)void B)8_8 C)_0_ D)unsigned(9)表达式:(int)(double)9/2)-(9)%2的值是 A)0 B)3 C)4 D)5(10)若有定义语句:int x=10;,则表达式x-=x+x的值为 A)-20 B)-10 C)0 D)10(11)有以下程序 #include main()
7、 int a=1,b=0; printf(“%d,”,b=a+b); printf(“%dn”,a=2*b); 程序运行后的输出结果是 A)0,0 B)1,0 C)3,2 D)1,2(12)有以下定义语句,编译时会出现编译错误的是 A)char a=a; B)char a=n; C)char a=aa; D)char a=x2d;(13)以下选项中,能用作数据常量的是A)o115 B)0118 C)1.5e1.5 D)115L(14)设有定义:int x=2;以下表达式中,值不为6的是A)x*=x+1 B)x+,2*xC)x*=(1+x) D)2*x,x+=2(15)程序段:int x=12;
8、 double y=3.; printf(%d%8.6f,x,y);的输出结果是A)123. B)12 3.C)12,3. D)123.(16)C语言中的标识符分为关键字、预定义标识符和用户标识符,以下叙述正确的是A)预定义标识符(如库函数中的函数名)可用作用户标识符,但失去原有含义B)用户标识符可以由字母和数字任意顺序组成C)在标识符中大写字母和小写字母被认为是相同的字符D)关键字可用作用户标识符,但失去原有意义(17)以下叙述中错误的是A)非零的数值型常量有正值和负值的区别 (B)常量是程序运行过程中值不能被改变的量(C)定义符号常量必须用类型名来设定常量的类型(D)用符号名表示的常量叫符
9、号常量二、填空题习题答案一、选择题BABDC DDCBB DCDDA AC二、填空题第3章 最简单的C程序设计顺序程序设计一、选择题(1)若有定义语句:int a=3,b=2,c=1;,以下选项中错误的赋值表达式是A)a=(b=4)=3; B)a=b=c+1;C)a=(b=4)+c; D)a=1+(b=c=4);(2)有以下程序段char name20;int num;scanf(name=%s num=%d,name,&num);当执行上述程序段,并从键盘输入:name=Lili num=1001后,name的值为A)Lili B)name=LiliC)Lili num= D)name=Li
10、li num=1001(3)有以下程序#include main() int x=011;printf(%dn,+x);程序运行后的输出结果是A)12 B)11 C)10 D)9(4)以下关于结构化程序设计的叙述中正确的是A)一个结构化程序必须同时由顺序、分支、循环三种结构组成B)结构化程序使用goto语句会很便捷C)在C语言中,程序的模块化是利用函数实现的D)由三种基本结构构成的程序只能解决小规模的问题(5)有以下定义:int a; long b; double x,y;则以下选项中正确的表达式是A)a%(int)(x-y)B)a=x!=y;C)(a*y)%b D)y=x+y=x(6)表达式
11、a+=a-=a=9的值是A)9 B)-9 C)18 D)0(7)若变量已正确定义,在if (W)printf(“%dn,k”);中,以下不可替代W的是A)ab+cB)ch=getchar()C)a=b+c D)a+(8)有以下程序#includemain() char a,b,c,d;scanf(“%c%c”,&a,&b);c=getchar(); d=getchar();printf(“%c%c%c%cn”,a,b,c,d); 当执行程序时,按下列方式输入数据(从第1列开始,代表回车,注意:回车也是一个字符)1234则输出结果是A)1234 B)12C)12 3D)12 34(9)有以下程序
12、,其中k的初值为八进制数#include main()int k=011;printf(%dn,k+);程序运行后的输出结果是A)12 B)11 C)10 D)9(10)有以下程序#include main() int a=2,b=2,c=2;printf(%dn,a/b&c); 程序运行后的输出结果是A)0 B)1 C)2 D)3(11)有以下程序#include main() char c1,c2; c1=A+8-4; c2=A+8-5; printf(“%c,%dn”,c1,c2); 已知字母A的ASCII码为65,程序运行后的输出结果是 A)E,68 B)D,69 C)E,D D)输出
13、无定值(12)有以下程序#include main() int a1,a2; char c1,c2; scanf(%d%c%d%c,&a1,&c1,&a2,&c2); printf(%d,%c,%d,%c,a1,c1,a2,c2); 若通过键盘输入,使得a1的值为12,a2的值为34,c1的值为字符a,c2的值为字符b,程序输出结果是:12,a,34,b 则正确的输入格式是(以下_代表空格,代表回车)A)12a34b B)12_a_34_bC)12,a,34,b D)12_a34_b(13)若有定义和语句:int a,b;scanf(“%d,%d”,&a,&b);以下选项中的输入数据,不能把值
14、3赋给变量a、5赋给变量b的是A)3,5, B)3,5,4 C)3 ,5 D 3,5二、填空题(1)以下程序运行后的输出结果是 【1】 。#include main() int a;a=(int)(double)(3/2)+0.5+(int)1.99*2);printf(%dn,a); (2)有以下程序(说明:字符0的ASCII码值为48)#include main() char c1,c2;scanf(%d,&c1);c2=c1+9;printf(%c%cn,c1,c2);若程序运行时从键盘输入48,则输出结果为 【2】 。(3)以下程序运行后的输出结果是【3】。includestdiohm
15、ain()int a=200,b=010;printf(”d%dn”,a,b);(4)有以下程序includestdiohmain()int x,y;scanf(”2d%1d”,x,y);printf(”dn”,x+y);程序运行时输入:程序的运行结果是【4】。(5)以下程序的功能是:将值为三位正整数的变量x中的数值按照个位、十位、百位的顺序拆分并输出。请填空。#include main() int x=256;printf(%d-%d-%dn, 【5】 ,x/10%10, x/100);(6)若有定义语句:int a=5;,则表达式:a+的值是_【6】_。(7)若有语句double x=17
16、;int y;,当执行y=(int)(x/5)%2;之后y的值为【7】_ 。(8)以下程序运行后的输出结果是_【8】_。#include main() int x=20; printf(“%d”,0x20); printf(“%dn”,0x&x0) switch(s) case1:printf(%d,s+5);case2:printf(%d,s+4); break;case3:printf(%d,s+3);default:printf(%d,s+1);break;scanf(%d,&s); 运行时,若输入1 2 3 4 5 0,则输出结果是A) B)66656 C)66666 D)(3)有以下
17、程序#include main() int x=1,y=0;if(!x) y+;else if(x=0)if (x) y+=2;else y+=3;printf(%dn,y); 程序运行后的输出结果是A)3 B) 2 C)1 D) 0(4)有以下程序includemain()int a=1,b=0;if(!a) b+;else if(a=0)if(a)b+=2;else b+=3;printf(”%dn”,b);程序运行后的输出结果是A)0 B)1 C)2 D)3(5)若有定义:double a=22;int i=0,k=18;,则不符合C语言规定的赋值语句是A)a=a+,i+;B)i=(a+
18、k)b) c=a,a=b,b=c; B)if(ab) c=a,a=b,b=c; C)if(ab) c=a;a=b;b=c; D)if(ab) c=a;a=b;b=c;(9)有以下程序 #include main() int c=0,k; for (k=1;kb?(bc?1:0):0;功能相同的是 A)if(ab)&(bc) k=1; else k=0; B)if(ab)|(bc) k=1; else k=0; C)if(a=b) k=0; else if(bb) k=1; else if(bc) k=1; else k=0;(11)以下是if语句的基本形式:if(表达式) 语句其中表达式A)必
19、须是逻辑表达式B)必须是关系表达式C)必须是逻辑表达式或关系表达式D)可以是任意合法的表达式(12)有以下程序#include main() int x; scanf(%d,&x); if(x=3) ; else if(x!=10) printf(%dn,x); 程序运行时,输入的值在哪个范围才会有输出结果A)不等于10的整数B)大于3且不等于10的整数C)大于3或等于10的整数D)小于3的整数(13)有以下程序#include main() int a=1,b=2,c=3,d=0; if (a=1 & b+=2) if (b!=2|c-!=3) printf(%d,%d,%dn,a,b,c)
20、; else printf(%d,%d,%dn,a,b,c); else printf(%d,%d,%dn,a,b,c); 程序运行后输出结果是A)1,2,3 B)1,3,2 C)1,3,3 D)3,2,1(14) 下列关系表达式中,结果为“假”的是A)(3+4)6 B)(3!=4)2 C)3=4|3 D)(34)=1(15)如果以下选项中的变量全部为整型变量,且已正确定义并赋值,则语法正确的switch语句是A)switch(a+9) B)switch a*bcase c1:y=a-b; case 10: x=a+b; case c2: y=a+b; default: y=a-b; C)sw
21、itch(a+b) D)switch(a*a+b*b)case 1:case 3:y=a+b; default:break;break; case 3:y=a+b;break;case 0: case 4:y=a-b; case 2:y=a-b;break;(16)有以下程序include main()char a=H;a=(a=A&a15) printf(%d,x-5);if(x10) printf(%d,x);if(x5) printf(%dn,x+5); 若程序运行时从键盘输入12,则输出结果为 【1】 。(2)以下程序运行后的输出结果是 【2】 。#include main() int
22、 x=10,y=20,t=0;if(x=y)t=x;x=y;y=t;printf(%d %dn,x,y); (3)在C语言中,当表达式值为0时表示逻辑值“假”,当表达式值为【3】时表示逻辑值“真”。(4)设x为int型变量,请写出一个关系表达式 【4】 ,用以判断x同时为3和7的倍数时,关系表达式的值为真。(5)有以下程序#include main() int a=1,b=2,c=3,d=0;if(a=1)if(b!=2)if(c=3) d=1;else d=2;else if(c!=3) d=3;else d=4;else d=5;printf(“%dn”,d);程序运行后的输出结果是 【5
23、】 。习题答案一、选择题DADA无答案 ABCAA DBCBD D 二、填空题(1) 1217(2) 20 0(3)非0(4)(x%3=0)&(x%7=0) (5)4 第5章循环结构程序设计一、选择题(1)有以下程序段int i,n;for(i=0;i8;i+) n=rand()%5;switch (n) case 1:case 3:printf(%dn,n); break;case 2:case 4:printf(%dn,n); continue;case 0:exit(0); printf(%dn,n); 以下关于程序段执行情况的叙述,正确的是A)for循环语句固定执行8次B)当产生的随机数n为4时结束循环操作C)当产生的随机数n为1和2时不做任何操作D)当产生的随机数n为0时结束程序运行(2)有以下程序#include main() char s=012xy08s34f4w2;int i,n=0;for(i=0;si!=0;i+)if(si=0&si=9) n+;printf(%dn,n);程序运行后的输出结果是A)0 B)3 C)7 D)8(3)若i和k都是int类型变量,有以下for语句for(i=0,