logo资料库

C语言程序设计练习题(带答案).doc

第1页 / 共76页
第2页 / 共76页
第3页 / 共76页
第4页 / 共76页
第5页 / 共76页
第6页 / 共76页
第7页 / 共76页
第8页 / 共76页
资料共76页,剩余部分请下载后查看
第1章 C语言概述
第3章(一) 数据类型、运算符与表达式
第3章(二) 顺序程序设计
第4章 选择结构程序设计
第5章 循环结构程序设计
第6章 数组
第7章 函数
第8章 指针
第9章 结构体、联合体与位运算
第10章 文件
第 1 章 C 语言概述 C 组成。 B.子程序 一、选择题: 1、一个 C 语言程序是由 A.主程序 2、下列关于 c 语言用户标识符的叙述中正确的是 B 。 A. 用户标识符中可以出现下划线和中划线(减号) B. 用户标识符中不可以出现中划线,但可以出现下划线 C. 用户标识符中可以出现下划线,但不可以放在用户标识符的开头 D. 用户标识符中可以出现下划线和数字,它们都可以放在用户标识符的开头 3、下列选项中,可以作为C语言标识符的是 。 D.过程 C.函数 A、3stu B、#stu C、stu3 D、stu.3 4、下列选项中,不可以作为C语言标识符的是 。 A、 num B、turbo_c C、printf D、student3 5、请选出可用作 C 语言用户标识符的一组标识符 。 A、void, define, WORD C、FOR,——abc, Case B、a3_b3,_123,IF_A D、2a,Do,Sizeof 6、以下叙述正确的是 。 A.在 C 程序中,main 函数必须位于子程序的最前面 B.C 程序的每一行中只能写一条语句 C.在对一个 C 程序进行编译的过程中,可发现注释中的拼写错误 D.C 语言本身没有输入输出语句 【答案】D 【解析】每一个 C 源程序都必须有、且只能有一个主函数(main 函数),但是不必位于最前面,编译之后, 运行是会自动搜寻到 main 函数并开始执行,A 项错误;书写程序时,为了清晰,便于阅读和理解,一般 是一个说明或一个语句占一行,但这不是必须的,B 项错误;编译过程中不对注释进行编译,所以发现不 了编译中的拼写错误,C 项错误;C 语言本身没有输入输出语句,scanf 函数和 printf 函数是标准输入输出 库函数,其头文件为 stdio.h,D 项为答案。 7、下面标识符中,不合法的用户标识符为 。 C. _124 B. a_10 A. Pad 【答案】D 【解析】C 语言中规定,标识符只能是字母(A~Z,a~z)、数字(0~9)、下划线(_)组成的字符串,并且其 第一个字符必须是字母或下划线。D 包含‘#’,是不合法的; 8、C 语言程序的执行,总是起始于 D. a#b 。 A) 程序中的第一条可执行语句 B) 程序中的第一个函数 C) main 函数 D) 包含文件中的第一个函数 分析:在一个 C 语言源程序中,无论 main 函数书写在程序的前部,还是后部,程序的执行总是从 main 函 数开始,并且在 main 函数中结束。本题正确答案为 C。 9、下列说法中正确的是 。 A) C 程序书写时,不区分大小写字母 B) C 程序书写时,一行只能写一个语句 C) C 程序书写时,一个语句可分成几行书写 D) C 程序书写时每行必须有行号 分析:C 语言严格区分大小写字母,如"A1"和"a1"被认为是两个不同的标识符,C 程序的书写非常灵活, 1
既可以一行多句,又可以一句多行,且每行不加行号。本题正确答案为 C。 10、下面对 C 语言特点,不正确描述的是 。 A) C 语言兼有高级语言和低级语言的双重特点,执行效率高 B) C 语言既可以用来编写应用程序,又可以用来编写系统软件 C) C 语言的可移植性较差 D) C 语言是一种结构式模块化程序设计语言 分析:C 语言是介于汇编语言和高级语言之间的一种语言,由于它可以直接访问物理地址,对硬件操作, 所以 C 语言既可以编写应用程序,又可以开发系统软件,而且 C 程序可移植性好于汇编语言,程序清晰具 有模块化的特点。本题正确答案为 C。 11、C 语言源程序的最小单位是 。 C) 函数 A) 程序行 B) 语句 D) 字符 分析:程序行、语句、函数都是由字符构成的,字符是 C 语言的最小单位。本题正确答案为 D。 12、以下四项中属于 C 语言关键字的是 。 A) CHAR B) define C) unsigned D) retrun 分析:C 语言有 32 个关键字(或称保留字),它们都有特定的含意,并且由小写字母组成,所以选项 A 是错 的,选项 B 不是保留字,选项 D 是 return 的错误拼写。本题正确答案为 C。 13、下列字符串不符合标识符规定的是 A) SUM B) sum C) 3cd 。 D) end 分析:标识符规定只能由 26 个英文字母(大小写均可),数字 0~9 和下划线组成,且不能以数字开头,题 中的 3cd 不符合规定。 本题正确答案为 C。 二、填空题: 1、一个 C 语言的语句至少应包含一个 分号 。 2、C 源程序的基本单位是 函数 。 3、函数是具有相对独立功能的 程序段 4 、 C 语 言 中 的 标 识 符 可 以 由 3 种 字 符 组 成 , 它 们 是 : 字 ,并且第一个字符必须是字母或 下划线 。 英 文 字 母 、 下 划 线 、 数 。 2
第 3 章(一) 数据类型、运算符与表达式 C. integer D. Char B 。 是 C 语言提供的合法的数据类型关键字。 B.整型、实型、字符型 D.整型、实型、逻辑型、字符型 一、选择题: 1、C 语言中,最简单的数据类型是 A.整形、实型、逻辑型 C.整型、字符型、逻辑型 2、 A. Float B. signed 3、不正确的字符串常量是 A. ‘abc’ “ 4、若定义:int a=7;float x=2.5,y=4.7;则表达式 x+a%3*(int)(x+y)%2/4 的值是 A.7 5、设有以下定义: #define d int a=0;double b=1.25;char c=’A’; 则下面语句中错误的是 A.a++; 6、 下列选项中,可以作为 C 语言常量的是( C.3.500000 A 。 B. “12’12” C.”0” D.0.00000 B.b++; C.c++; D.d++; B 2 B.2.50000 D.” B 。 D 。 ) A)13.8e B)1/2 C)‘M’ D)”abc” 7、下列选项中,不可以作为 C 语言常量的是( ) A).88 B)35.6e3 C)4e-2 D)3/5 7、 已知字母’b’的 ASCII 码值为 98,如 ch 为字符型变量,则表达式 ch=’b’+’5’-‘2’的值为 ) ( A)e B)d C)102 D)100 8、 下列程序的运行结果是( ) main( ) { char c1=’6’,c2=’0’; printf(“%c,%c,%d\n”,c1,c2,c1-c2); } A) 因程序格式不合法,提示出错信息。 B) 6,0,6 C) 6,0,7 D) 6,0,5 9、以下程序的输出结果是( ) main( ) { int x=010,y=10,z=0x10; printf(“%d,%d,%d\n”,x,y,z); } A) 8,10,16 B) 8,10,10 C) 10,10,10 3
D) 10,10,16 10、已知各变量的类型定义如下: int i=8,k,a,b; unsigned long w=5; double x=1.42,y=5.2; 则以下两组表达式中不符合 C 语言语法的表达式分别是: ⑴ A)k=i++ ⑵ A)x%(-3) C)k=(a=2,b=3,a+b) B)(int)x+0.4 C)y+=x++ B)w+=-2 D)a=2*a=3 D)a+=a-=(b=4)*(a=3) 11、在 C 语言中,合法的字符常量是 C) ‘ab' D) “\0” B) ‘\x43' A) ‘\084' 【答案】B 【解析】字符常量是用单引号括起来的一个字符,据此定义,选项 C 和 D 显然错误。A 和 B 是转义字符。 转义字符是一种特殊的字符常量,以反斜线"\"开头,后跟一个或几个字符,它有两种写作形式,\ddd 和\xhh, 其中 ddd 和 hh 分别为八进制和十六进制的 ASCII 代码。A 选项’\084’,反斜线’\’之后是三位数字,是采用 的\ddd 形式,不过 084 作为八进制显然是错误的;B 项’\x43’,采用的\xhh 形式,43 作为两位十六进制数, 对应 ASCII 代码 67,对应的是字符’c’。 12、设有如下的变量定义: i=8, k, a, b; int unsigned long w=5; double x=1, 42, y=5.2; B) x%(-3); D) y=float(i) 则以下符合 C 语言语法的表达式是 A) a+=a-=(b=4)*(a=3) C) a=a*3=2 【答案】A 【解析】A 项是赋值表达式和算术表达式的结合,符合 C 语言语法;B 项中,’%’是模运算符,要求运算 符两侧均为整数,x 为 double,显然错误;C 项是赋值表达式,要求赋值运算符的左侧是变量,3=2 部分 显然错误;D 项,强制类型转换运算符使用错误,应为 y=(float)i 13、以下程序运行后,输出结果是 A) cde C) 字符 c 的地址 D) 出错 B) 字符 c 的 ASCII 码值 main() { *s="abcde"; char s+=2; printf("%ld\n",s); } 【答案】C 【解析】char *s ="abcde",声明 s 是一个字符串指针,并且将字符数组"abcde"的首地址赋值给了 s,s+=2, 即是在原来的 s 地址上向前推进两个字节,又因为数组是在连续空间上存储的一组数据,且一个字符占一 个字节,那么也就等价于由数组的第一个字节地址推进到第三个字符的地址,即字符 c 的地址。答案为 c 14、当 c 的值不为 0 时,在下列选项中能正确将 c 的值赋给变量 a、b 的是 A) c=b=a; C) (a=c) &&(b=c); C) a=c=b; B) (a=c) ‖(b=c) ; 【答案】C 【解析】赋值运算符是自右向左运算的。A 项是将 a 的值赋给了 b,又将 b 的值赋给了 a,与题意不符;B 项和 C 项都是逻辑运算,且都自左向右运算,它们的区别是:或运算是先计算左边表达式的值,若为真, 则结束运算,若为假,继续计算右边表达式,所以,如果 a=c 为真(只需要 a>0),那么 b=c 语句不会执行, 即不能完成 c 给 b 的赋值;与运算则是两边的表达式都要计算,所以,a=c 和 b=c 都能得到执行,C 为正 4
确答案;D 项是将 b 的值赋给了 c 和 a 15、设有如下定义:int A) 1 B) 0 x=l,y=-1;,则语句:printf("%d\n",(x--&++y));的输出结果是 C) -1 D) 2 。 。 B.68 C.C D.不确定的值 B.2.50000 C.3.500000 D.0.00000 【答案】B 【解析】表达式 x--&++y 中,逻辑运算符‘&’的优先级最低,应该先计算它两边的表达式。x-- :x 参与逻 辑运算后,x 的值再自减 1,那么 x—参与逻辑表达式的值为 1;++y:y 自增 1 后再参与逻辑运算,那么 ++y 参与逻辑表达式的值为-1+1=0。x--&++y 即为 1&0,值为 0,答案为 B。 16、若定义:int a=7;float x=2.5,y=4.7;则表达式 x+a%3*(int)(x+y)%2/4 的值是 A.7 【答案】B 【解析】这是一个算术表达式,根据运算符的优先级,应该先计算(x+y),得到值 7.2,之后对其进行强 制数据类型转换(int),得到值 7,取模运算和乘、除运算在同一优先级上,自左向右依次计算,则先进行 取模运算,a%3 即 7%3=1,之后 1*7=7,7%2=1,1/4=0,即 a%3*(int)(x+y)%2/4 的值为 0,那么表达式的 值即是 x 的值,为 2.50000。 17、已知字母 A 的 ASCII 码为十进制数 65,且 c2 为字符型,则执行语句 c2=’A’+’6’-’3’;后,c2 中的值为 A.D 【答案】A 【解析】字符是以 ASCII 码的形式存储的,表达式’A’+’6’-’3’的运算实际就是对应 ASCII 码的算数运算, 加减运算是同一优先级的,所以’A’+’6’-’3’=65+54-51=68,即 D 的 ASCII 的值。此处定义 c2 是字符型,所 以,c2 的值是 D;如果 c2 定义为整型,则 c2 的值是 68。 18、下面叙述不正确的是【 】。 A) C 语句末尾必须有分号 B) C 语言中无论是整数还是实数都能准确的表示 C) 运算符“%”只能用于整数运算 D) 乘除运算符优先级高于加减运算符 19、复合语句应用【 】括起来。 A) 小括号 20、C 语言语句一行写不下时,可以【 】。 A) 用逗号换行 21、下面程序的输出是【 】。(“□”表示一个空格) int a=3366; printf("|%-08d|",a); A) |-0003366| C) |3366□□□□| 22、若有说明语句:int a; float b;,以下输入语句正确的是【 】。 A) scanf("%f%f",&a,&b); B) scanf("%f%d",&a,&b); C) scanf("%d,%f",&a,&b); D) scanf("%6.2f%6.2f",&a,&b); 23、以下程序的输出结果是【 】。 main( ) { int x=11,y=11; printf("%d%d\\n",x--,--y); } A) 11,11 24、执行下面程序段,给 x、y 赋值时,不能作为数据分隔符的是【 】。 B) |00003366| D) 输出格式非法 D) 在任意一空格处换行 B) 用分号换行 C) 10,11 D) 11,10 C) 用回车换行 B) 方括号 C) 大括号 D) 尖括号 B) 10,10 5
C) 回车 D) 逗号 int x,y; scanf("%d%d",&x,&y); A) 空格 B) Tab 键 25、下面合法的语句是【 】。 A) int a=8,b; b=++a++; printf("%d,%d",a,b++); B) int a; printf("\\"%d\\"",scanf("%d",&a)); C) char a; scanf("%c",&a); char b=scanf("b=%c",&b); D) char c=getchar( ); putchar((int)c); 26、执行下面程序时,欲将 25 和 2.5 分别赋给 a 和 b,正确的输入方法是【 】。 int a; float b; scanf("a=%d,b=%f",&a,&b); A) 25□2.5 B) 25,2.5 C) a=25,b=5.5 D) a=25□b=2.5 27、下面不属于 C 语言的数据类型是【 C) 逻辑型 】。 D) 双精度实型 A)整型 B)实型 分析:和其它高级语言相比,C 语言中没有逻辑型数据,也没有逻辑型变量。本题正确答案为 C。 28、下面四个选项中,均是合法实数的选项是【 】。 A)2e-4.2 B)33e-4 C)0.2e-.5 D)-e5 分析:实数有两种表示形式:小数形式和指数形式,小数形式必须有小数点,指数形式中,字母 e 之前必 须有数字,e 之后必须是整数。选项 A)中的"2e-4.2",选项 C)中的"0.2e-.5",选项 D)中的"-e5"均是不合法的。 本题正确答案为 B。 29、下列正确的字符型常量是【 】。 C) \\r B) ′\\\\′ D) 277 A) "a" 分析:字符常量的定义是用单引号括起来的一个字符,A 和 C 的定界符不对,D 超过了 char 型数据的表示 范围,′\\\\′是转义字符。本题正确答案为 B。 30、若有说明语句 char ch1=′\\x41′;则 ch1【 】。 A) 包含 4 个字符 B) 包含 3 个字符 C) 包含 2 个字符 D) 包含 1 个字符 分析:"\\x41"中的"41"是十六进制数,即十进制的 65,题中 ch1 存放的 65 是字母"A"的 ASCII 码。本题正 确答案为 D。 31、下列程序段输出的字符串长度为【 】。 printf("\\\\aaa\\′ccc\\bddd\\""); C) 13 D) 17 A) 11 B) 12 分析:\\\\、\\′、\\b 和\\"为转义字符,程序输出结果为:\\aaa′ccddd"。本题正确答案为 A。 32、下列运算符中,要求运算对象必须是整数的是【 】。 A) / B) * C) % D) ! 分析:题目中"/"、"*"、"!"的运算对象既可以整数,也可以是实数,只有取余数运算符"%"要求运算对象 必须是整数。本题正确答案为 C。 6
33、下面合法的赋值语句是【 】。 A) x+y=2002; B) ch="green"; C) x=(a+b)++; D) x=y=0316; 分析:赋值号左端不能为表达式,选项 A)是错的;赋值号不能将字符串赋给某个变量,选项 B)也是错的; 增量运算符“++”不能用于表达式,选项 C)也是错的。本题正确答案为 D。 34、已知 a 为 int 型,b 为 double 型,c 为 float 型,d 为 char 型,则表达式 a+b*c-d/a 结果的类型为【 】。 A) int 型 B) float 型 C) double 型 D) char 型 分析:不同类型数据混合运算的转换规律是:运算前 float 型数据会自动转换为 double 型,char 型数据会 自动转换为 int 型。运算时 int 型数据和 double 型数据要先化为相同类型,即 double 型,运算结果也为 double 型。本题正确答案为 C。 35、下面的程序运行后输出为【 】。 #include #include main( ) { int a,b; float c; b=5;c=6;c=b+7;b=c+1; a=sqrt((double)b+c); printf("%d,%f,%d",a+6,c,b); } A) 11.000000,12.000000,13.000000 B) 11.000000,12.000000,13 C) 11.0000000,12,13 D) 11,12.000000,13 分析:C 语言允许将一种类型的数据赋给另一种类型的变量,但是变量的类型并不会因为赋值而发生改变, 如本题中将 b+7,即 12 赋给 float 型变量 c,c 值应为 12.000000 而不是整数 12,同样 a=sqrt((double)b+c),赋 值号右边是双精度数,但由于 a 是整形变量,故 a 的值为 5。本题正确答案为 D。 二、填空题: 1、设 a=3,b=4,c=5,求下列表达式的值。 / *sqrt 是开平方库函数,定义代码在 math.h 中*/ (1)a+b>c&&b==c (3)!(a>b)&&!c||1 2、下面程序段的输出结果是 。 int k=10; float a=3.5,b=6.7,c; c=a+k%3*(int)(a+b)%2/4; (2)a||b+c&&b-c (4)!(x=a)&&(y=b)&&0 分析:本题考查运算符的优先级概念,式中要先算(a+b)的值,再算强制类型变换,*、/、%是同级的要从 左到右计算,最后算加法和赋值。 本题正确答案为:3.500000 3、若想通过以下输入语句使 a 中存放字符串 1234,b 中存放字符 5,则输入数据的形式应该是 。 : . a[10],b; char scanf("a=%s b=%c",a,&b); : . 【答案】a=1234 b=5 【解析】scanf 函数是格式化输入函数,它从标准输入设备(键盘) 读取输入的信息。scanf("a=%s b=%c",a,&b) 7
要求输入设备(键盘)输入数据的形式是 a=%s b=%c(注意中间要求是空格),这里 scanf 的意义即是:从键 盘顺序读取一串字符,以空格为分隔符,分别赋值给变量 a,b;a 可以接受一串字符,而 b 只能接受一个 字符,多余的字符将被舍弃,scanf 函数结束。所以,键盘上的输入应该是 a=1234 b=5 4、执行下列程序的输出结果是【 】。 main( ) { float a=1,b; b=++a*++a; printf("%f\\n",b); } 5、执行下列程序的输出结果是【 】。 main( ) { int x=5,y; y=++x*++x; printf("y=%d\\n",y); } 6、下面程序段的执行结果是 x=【 】,y=【 】。 inta=3,b=5,x,y; x=a+1,b+6; y=(a+1,b+6); printf("x=%d,y=%d",x,y); 分析:此题考查逗号表达式的概念,因逗号运算符的优先级比赋值号还低,所以执行 x=a+1,b+6 时,x 得 到的是 a+1 的值。 本题正确答案为 4, 11。 7、已知:int a=5;则执行 a+=a-=a*a;语句后,a 的值为【 分析:a+=a-=a*a 的运算顺序是从右向左,相当于求 a+=(a-=a*a),其中小括号内的运算得 a=5-5*5 即 a=-20, 下一步再求 a+=a,即 a=a+a,将-20 代入得 a=-40。本题正确答案为 -40。 8、下面程序的运行结果是 x=【 main( ) { float x=4.9;int y; y=(int)x; printf("x=%f,y=%d",x,y); } 分析:强制类型变换并不改变 x 的原值,x 仍为 4.9,而变换得到的是中间结果,此题将中间结果赋给了 y, 另外注意是舍弃小数部分,而不是四舍五入。 本题正确答案为 4.900000 , 4。 】,y=【 】。 】。 8
分享到:
收藏