您的当前位置:首页正文

《C语言程序设计》试题库及答案

2020-08-18 来源:易榕旅网


C语言程序设计习题集及答案

电子信息工程学院 2014.9.1

内容简介

本习题集是为根据嘉应学院电子信息工程学院《C语言程序设计》课程教学大纲筛

选题目整理而成的。

本习题集共分10章,提供了361道选择题,85道填空题,42道编程题,题集覆盖了《C语言程序设计》的全部内容,满足嘉应学院电子信息工程学院《C语言程序设计》考试大纲的要求。

寄语

亲爱的同学们:

很高兴你们学习计算机的语言—C语言,她将带你进入一个全新的计算机的世界。我是你们的老师,但我更希望是你们的朋友,为你在学习C语言的道路上提供帮助。

同学们,“攻城不怕坚,攻书莫畏难。科学有险阻,苦战能过关。”,学习是辛苦的,但也充满了挑战和乐趣。我希望你们在学习C语言时,带着希望出发,体会一路的艰辛,最后满载收获而回。

朋友们,学习向来没有什么捷径可寻。“多看、多模仿、多操作”是我能给你们的唯一建议。祝你们学业有成。

杨久红 2014.9.1

I

目录

第一部分 习 题

第1章 C语言概述 ....................................................................................................................................... 1

1.1选择题 ............................................................................................................................................... 1 1.2填空题 ............................................................................................................................................... 2 1.3编程题 ............................................................................................................................................... 2 第2章 数据的存储与运算 ........................................................................................................................... 3

2.1选择题 ............................................................................................................................................... 3 2.2填空题 ............................................................................................................................................... 6 2.3编程题 ............................................................................................................................................... 7 第3章 最简单的程序设计-顺序程序设计 .................................................................................................. 8

3.1选择题 ............................................................................................................................................... 8 3.2填空题 ............................................................................................................................................. 13 3.3编程题 ............................................................................................................................................. 14 第4章 选择结构程序设计 ......................................................................................................................... 15

4.1选择题 ............................................................................................................................................. 15 4.2填空题 ............................................................................................................................................. 19 4.3编程题 ............................................................................................................................................. 20 第5章循环结构程序设计 ........................................................................................................................... 21

5.1选择题 ............................................................................................................................................. 21 5.2填空题 ............................................................................................................................................. 29 5.3编程题 ............................................................................................................................................. 30 第6章 利用数组处理批量数据 ................................................................................................................. 32

6.1选择题 ............................................................................................................................................. 32 6.2填空题 ............................................................................................................................................. 37 6.3编程题 ............................................................................................................................................. 38 第7章 用函数实现模块化程序设计 ......................................................................................................... 40

7.1选择题 ............................................................................................................................................. 40 7.2填空题 ............................................................................................................................................. 52 7.3编程题 ............................................................................................................................................. 57 第8章 善于使用指针 ................................................................................................................................. 58

8.1选择题 ............................................................................................................................................. 58

II

8.2填空题 ............................................................................................................................................. 70 8.3编程题 ............................................................................................................................................. 71 第9章 结构体 ........................................................................................................................................... 72

9.1选择题 ............................................................................................................................................. 72 9.2填空题 ............................................................................................................................................. 73 9.3编程题 ............................................................................................................................................. 74 第10章 利用文件保存数据 ....................................................................................................................... 75

10.1选择题 ........................................................................................................................................... 75 10.2填空题 ........................................................................................................................................... 77 10.3编程题 ........................................................................................................................................... 79

第二部分 参考答案

第1章C语言概述 ...................................................................................................................................... 81

1.1选择题 ............................................................................................................................................. 81 1.2填空题 ............................................................................................................................................. 81 1.3编程题 ............................................................................................................................................. 81 第2章 数据的存储与运算 ......................................................................................................................... 81

2.1选择题 ............................................................................................................................................. 81 2.2填空题 ............................................................................................................................................. 82 2.3编程题 ............................................................................................................................................. 82 第3章 最简单的程序设计-顺序程序设计 ................................................................................................ 83

3.1选择题 ............................................................................................................................................. 83 3.2填空题 ............................................................................................................................................. 83 3.3编程题 ............................................................................................................................................. 83 第4章 选择结构程序设计 ......................................................................................................................... 84

4.1选择题 ............................................................................................................................................. 84 4.2填空题 ............................................................................................................................................. 85 4.3编程题 ............................................................................................................................................. 85 第5章循环结构程序设计 ........................................................................................................................... 87

5.1选择题 ............................................................................................................................................. 88 5.2填空题 ............................................................................................................................................. 88 5.3编程题 ............................................................................................................................................. 88 第6章 利用数组处理批量数据 ................................................................................................................. 95

6.1选择题 ............................................................................................................................................. 95 6.2填空题 ............................................................................................................................................. 95 6.3编程题 ............................................................................................................................................. 95

III

第7章 用函数实现模块化程序设计 ....................................................................................................... 100

7.1选择题 ........................................................................................................................................... 100 7.2填空题 ........................................................................................................................................... 100 7.3编程题 ........................................................................................................................................... 100 第8章 善于使用指针 ............................................................................................................................... 104

8.1选择题 ........................................................................................................................................... 104 8.2填空题 ........................................................................................................................................... 104 8.3编程题 ........................................................................................................................................... 104 第9章 结构体 ......................................................................................................................................... 106

9.1选择题 ........................................................................................................................................... 106 9.2填空题 ........................................................................................................................................... 106 9.3编程题 ........................................................................................................................................... 106 第10章 利用文件保存数据 ..................................................................................................................... 107

10.1选择题 ......................................................................................................................................... 107 10.2填空题 ......................................................................................................................................... 107 10.3编程题 ......................................................................................................................................... 107

IV

第一部分 习 题 第1章 C语言概述

1.1选择题

1. 以下说法中正确的是( )。

(A)C语言程序总是从第一个定义的函数开始执行

(B)在C语言程序中,要调用的函数必须在main()函数中定义 (C)C语言程序总是从main()函数开始执行

(D)C语言程序中的main()函数必须放在程序的开始部分 2. 以下叙述中正确的是( )。

(A)C语言比其他语言高级

(B)C语言可以不用编译就能被计算机识别执行

(C)C语言以接近英语国家的自然语言和数学语言作为语言的表达形式 (D)C语言出现的最晚,具有其他语言的一切优点 3. 在一个C程序中( )。

(A)main函数必须出现在所有函数之前 (B)main函数可以在任何地方出现 (C)main函数必须出现在所有函数之后 (D)main函数必须出现在固定位置 4. 以下叙述中正确的是( )。

(A)C程序中注释部分可以出现在程序中任意合适的地方 (B)花括号\"{\"和\只能作为函数体的定界符

(C)构成C程序的基本单位是函数,所有函数名都可以由用户命名 (D)分号是C语句之间的分隔符,不是语句的一部分 5. 用C语言编写的代码程序( )。

(A)可立即执行 (B)是一个源程序

(C)经过编译即可执行 (D)经过编译解释即可执行 6. 以下叙述中错误的是( )。

(A)C语言源程序经编译后生成后缀为.obj的目标程序

(B)C程序经过编译、连接步骤之后才能形成一个真正可执行的二进制机器指令文件(C)用C语言编写的程序称为源程序,它以ASCII代码形式存放在一个文本文件中 (D)C语言中的每条可执行语句和非执行语句最终都将被转换成二进制的机器指令 7. 以下叙述中正确的是( )。

(A)C语言程序将从源程序中第一个函数开始执行

(B)可以在程序中由用户指定任意一个函数作为主函数,程序将从此开始执行 (C)C语言规定必须用main作为主函数名,程序将从此开始执行,在此结束 (D)main可作为用户标识符,用以命名任意一个函数作为主函数

1

1.2填空题

1.C语言源程序文件的后缀是 。

2.一个C语言源程序由若干函数组成,其中至少应含有一个 。

1.3编程题

编写一个C程序,输出以下信息: ******************************

Very good!

******************************

2

第2章 数据的存储与运算

2.1选择题

1. C语言提供的合法的数据类型关键字是( )。

(A)Double (B)short (C)integer (D)Char 2. 若有说明和语句:

int a=5; a++;

此处表达式a++的值是( )。 (A)7 (B)6 (C)5 (D)4 3. C89语言中最简单的数据类型包括( )。

(A)整型、实型、逻辑型 (B)整型、实型、字符型 (C)整型、字符型、逻辑型 (D)整型、实型、逻辑型、字符型

4. 在C语言中,要求运算数必须是整型的运算符是( )。

(A) %

(B) /

(C) <

(D) !

5. 以下有4个用户标识符,其中合法的一个是 ( )。

(A) for (B) 4d (C) f2_G3 (D) short 6. 下面程序的输出是( )。

main()

{ int x=10,y=3;

printf(\"%d\\n\(A) 0

(B) 1

(C) 3

(D) 不确定的值

7. C语言提供的合法的关键字是( )。

(A)Switch (B)cher (C)Case (D)default 8. 在C语言中,合法的字符常量是( )。

(A)'\\084' (B)'\\x43' (C)'ab' (D)\"\\0\"

9. 若已定义x和y为double类型,且x=1,则表达式:y=x+3/2的值是( (A)1 (B)2 (C)2.0 (D)2.5 10. 下列不正确的转义字符是( )。

(A)'\\\\' (B)'\\\" (C)'074' (D)'\\0'

11. 若有以下定义:

char a; int b; float c; double d;

则表达式a*b+d-c值的类型为( )。 (A) float (B) int (C) char (D) double 12. 以下程序的输出结果是( )。

main()

{ int a=12,b=12;

printf(\"%d,%d\\n\

)。3

}

(A) 10 10 (B) 12 12 (C) 11 10 (D) 11 13 13. 以下选项中属于C89语言的数据类型是( )。

(A) 复数型 (B) 逻辑型 (C) 双精度型 (D) 集合型 14. 设有 int x=11; 则表达式 (x++ * 1/3) 的值是( )。

(A) 3

(B) 4 (B) /

(C) 11 (C) =

(D) 12 (D) 〈=

(D) 说明不合法

15. C语言中运算对象必须是整型的运算符是( )。

(A) %=

16. 设有说明语句:char a=’\\72’;则变量a中( )。

(A) 包含1个字符 (B) 包含2个字符 (C) 包含3个字符 17. 下列选项中,合法的C语言关键字是( )。

(A) VAR

(B) cher

(C) integer (D) default

18. 以下选项中,非法的字符常量是( )。

(A) '\' (B) '\\17' (C)\"n\" (D) '\\xaa'

19. 若变量a是int类型,并执行了语句:a=‘A'+1.6;,则正确的叙述是( )。

(A) a的值是字符C (B) a的值是浮点型

(C) 不允许字符型和浮点型相加 (D) a的值是字符‘A’的ASCII值加上1。 20. 以下选项中不属于C语言的类型的是( )。

(A) signed short int (B) unsigned long int

(C) unsigned int (D) long short 21. 以下选项中合法的用户标识符是( )。

(A) long

(B) _2Test (C) 3Dmax

(D) A.dat

22. 已知大写字母A的ASCII码值是65,小写字母a的ASCII码是97,则用八进制表示的字符常

量‘\\101’是( )。

(A) 字符A (B)字符a (C)字符e (D)非法的常量 23. 下列叙述中正确的是( )。

(A)C语言中既有逻辑类型也有集合类型 (B)C语言中没有逻辑类型但有集合类型 (C)C语言中有逻辑类型但没有集合类型 (D)C语言中既没有逻辑类型也没有集合类型 24. 下列关于C语言用户标识符的叙述中正确的是( )

(A)用户标识符中可以出现在下划线和中划线(减号) (B)用户标识符中不可以出现中划线,但可以出现下划线

(C)用户标识符中可以出现下划线,但不可以放在用户标识符的开头

(D)用户标识符中可以出现在下划线和数字,它们都可以放在用户标识符的开头 25. 有以下程序

main()

{ int i=10,j=1;

printf(\"%d,%d\\n\}

执行后输出结果是( )。 (A) 9,2 (B) 10,2 (C) 9,1 (D) 10,1

4

26. 以下选项中可作为C语言合法整数的是( )。

(A)10110B (B)0386

(C)0xffa

(D)x2a2 27. 以下不能定义为用户标识符的是( )。

(A)scan

(B)num

(C)_3com_

(D)int

28. 已定义ch为字符型变量,以下赋值语句中错误的是( )。

(A)ch='\\'; (B)ch=62+3; (C)ch=80; (D)ch='\\xaa';

29. 已定义c为字符型变量,则下列语句中正确的是( )。

(A)c='97';

(B)c=\"97\";

(C)c=97;

(D)c=\"a\";

30. 以下符合C语言语法的实型常量( )。

(A) 1.2E0.5 (B) 3.14.159E (C) .5E-3 (D) E15

31. 设有定义: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) 32. 下列选项中,不能用作标识符的是( )。

(A)_1234_ (B)_1_2 (C)int_2_ (D)2_int_ 33. 有以下程序

main()

{ int m=3,n=4,x; x=-m++; x=x+8/++n;

printf(\"%d\\n\}

程序运行后的输出结果是( )。 (A)3 (B)5 (C)-1 (D)-2 34. 有以下程序

main()

{ char a='a',b; printf(\"%c,\printf(\"%c\\n\}

程序运行后的输出结果是( )。

(A)b,b (B)b,c (C)a,b (D)a,c

35. 以下选项中可作为C语言合法常量的是( )。

(A)-80. (B) e1 (C)-8e1.0 (D)-80.0e 36. 以下不能定义为用户标识符的是( )。 (A)Main (B)_0

(C)_int (D)sizeof

37. 数字字符0的ASCII值为48,若有以下程序

main()

{ char a='1',b='2 '; printf(\"%c,\printf(\"%d\\n\}

程序运行后的输出结果是( )。 (A) 3,2 (B)50,2

(C)2,2

(D)2,50

) 。

5

38. 有以下程序

main()

{ int m=12,n=34;

printf(\"%d%d\printf(\"%d%d\\n\}

程序运行后的输出结果是( )。

(A)12353514 (B)12353513 (C)12343514 (D)12343513 39. 以下叙述中错误的是( )。

(A)用户所定义的标识符允许使用关键字 (B)用户所定义的标识符应尽量做到“见名知意” (C)用户所定义的标识符必须以字母或下划线开头 (D)用户定义的标识符中,大、小写字母代表不同标识 40. 以下不能正确计算代数式值的C语言表达式是( )。

(A)1/3*sin(1/2)*sin(1/2) (C)pow(sin(0.5),2)/3

(B)sin(0.5)*sin(0.5)/3

(D)1/3.0*pow(sin(1.0/2),2)

41. 以下能正确定义且赋初值的语句是( )。

(A)int n1=n2=10; (B)char c=32; (C)float f=f+1.1; (D)double x=12.3E2.5; 42. 以下不合法的用户标识符是( )。

(A)j2_KEY (B)Double (C)4d (D)_8_ 43. 以下不合法的字符常量是( )。

(A)′\\018′(B)′\\\"′ (C)′\\\\′ (A)4.3

(B)4.8

(D)′\\xcc′ (C)3.3

(D)3.8

44. 表达式3.6-5/2+1.2+5%2的值是( )。

45. 不可在C程序中用做用户标识符的标识符是( )。

(A)and (B)Date (C)Hi (D)case

46. 以下选项中,不合法的C语言数值常量是( )。

(A)028 (B)12. (C).177 (D)0x8A

47. 以下关于long、int和short类型数据占用内存大小的叙述中正确的是( )。

(A)均占4个字节 (B)根据数据的大小来决定所占内存的字节数 (C)由用户自己定义 (D)由C语言编译系统决定

48. 已知字符’A’的ASCII代码值是65,字符变量c1的值是’A’,c2的值是’D’。执行语句

printf(\"%d,%d\后,输出结果是()。 (A)A,B (B)A,68 (C)65,66 (D)65,68 49. 以下正确的字符串常量是( )。

(A)\"\\\\\\\" (B)’abc’ (C)OlympicGames (D)\"\"

2.2填空题

1. 23/4= 。

2. 下程序运行后的输出结果是 。

main()

6

{ char m;

m='B'+32; printf(\"%c\\n\}

3. 设x和y均为int型变量,且x=1,y=2,则表达式1.0+x/y的值为_ __。 4. 以下程序的输出结果是 。 main()

{ int a=1, b=2;

a=a+b; b=a-b; a=a-b; printf(\"%d,%d\\n\ }

5. 若有语句

int i=-19,j=i%4; printf(\"%d\\n\

则输出结果是 。

6. 已知字符A的ACSII码值为65,以下语句的输出结果是 。

char ch=’B’;

printf(“%c %d\\n”,ch,ch);

7. 设x、y均为整型变量,且x=10,y=3,则以下语句的输出结果是 。

printf(\"%d,%d\\n\

2.3编程题

1.假如我国国民生产总值的年增长率为10%,计算10年后我国国民生产总值与现在相比增长多少百分比?计算公式为:

其中r为年增长率;n为年数;P为与现在相比的百分比。

2. 在一个笼子里同时养着一些鸡和兔子,你想了解有多少只鸡和多少只兔,主人对你说:我只告诉你鸡和兔的总头数是16和总脚数是40,你能不能自己计算有多少只鸡和多少只兔?

7

第3章 最简单的程序设计-顺序程序设计

3.1选择题

1. 在下列选项中,不正确的赋值语句是( )。

(A)++t; (B)n1=(n2=(n3=0)); (C)k=i==j; (D)a=b+c=1; 2. 以下叙述中正确的是( )。

(A)用C程序实现的算法必须要有输入和输出操作 (B)用C程序实现的算法可以没有输出但必须要输入 (C)用C程序实现的算法可以没有输入但必须要有输出 (D)用C程序实现的算法可以既没有输入也没有输出

3. 若变量已正确定义并赋值,下面符合C语言语法的表达式是( )。

(A) a:=b+1 (B) a=b=c+2 (C) int 18.5%3 (D) a=a+7=c+b

4. 若变量a、i已正确定义,且i已正确赋值,合法的语句是( )。

(A) a==1

(B) ++i; (C) a=a++=5; (D) a=int(i);

5. 设a和b均为double型变量,且a=5.5,b=2.5,则表达式(int)a+b/b的值是((A)6.500000 (B)6 (C) 5.500000 (D) 6.000000

6. C语言中用于结构化程序设计的三种基本结构是 ( )。

(A)顺序结构、选择结构、循环结构 (B)if、switch、break (C)for、while、do-while (D)if、for、continue 7. 以下选项中非法的表达式是( )。

(A)0<=x<100 (B)i=j==0

(C)(char)(65+3) (D)x+1=x+1

8. 有以下定义语句

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;

9. 以下选项中,与k=n++完全等价的表达式是( )。

(A) k=n,n=n+1 (B) n=n+1,k=n (C) k=++n (D) k+=n+1 10. 以下叙述中错误的是( )。

(A)C语句必须以分号结束

(B)复合语句在语法上被看作一条语句 (C)空语句出现在任何位置都不会影响程序运行 (D)赋值表达式末尾加分号就构成赋值语句 11. 以下叙述中错误的是( )。

(A)算法正确的程序最终一定会结束 (B)算法正确的程序可以有零个输出 (C)算法正确的程序可以有零个输入

(D)算法正确的程序对于相同的输入一定有相同的结果 12. 设有如下的变量定义:

。 8

)int i=8, k, a, b;

unsigned long w=5; double x=1. 42, y=5.2;

则以下符合C语言语法的表达式是( )。 (A) a+=a-=(b=4)*(a=3) (B) x%(-3); (C) a=a*3=2 (D) y=float(i)

13. 以下程序的输出结果是 ( )。

main( )

{ int i=010,j=10,k=0x10; printf(\"%d,%d,%d\\n\ }

(A)8,10,16 (B)8,10,10 (C)10,10,10 (D)10,10,16

14. 已知字母A的ASCII码为十进制的65,下面程序的输出是( )。

main()

{ char ch1,ch2; ch1='A'+'5'-'3'; ch2='A'+'6'-'3';

printf(\"%d,%c\\n\

(A) 67,D (B) B,C (C) C,D (D) 不确定的值 15. 若有以下定义和语句:

int u=010,v=0x10,w=10; printf(\"%d,%d,%d\\n,u,v,w); 则输出结果是( ) 。

(A)8,16,10 (B)10,10,10 (C)010,16,10 (D)16,16,16 16. 若有以下定义和语句

char c1='b',c2='e';

printf(\"%d,%c\\n\则输出结果是( )。 (A)2,M (B)3,E

(C)2,E (D)输出项与对应的格式控制不一致,输出结果不确定 17. 下列可作为C语言赋值语句的是( )。

(A) x=3

(B) a=b=6

(C) i--; (D) y=int(x);

18. 设i是int型变量,f是float型变量,用下面的语句给这两个变量输入值:

scanf(\"i=%d,f=%f\

为了把100和765.12分别赋给i和f,则正确的输入为( )。 (A) 100 765.12 (B) i=100,f=765.12

(C) 100765.12 (D) x=100y=765.12

19. 以下叙述中正确的是( )。

(A) 输入项可以是一个实型常量,如:scanf(\"%f\

(B) 只有格式控制,没有输入项,也能正确输入数据到内存,例如:scanf(\"a=%d,b=%d\"); (C) 当输入一个实型数据时,格式控制部分可以规定小数点后的位数,例如:scanf(\"%4.2f\(D) 当输入数据时,必须指明变量地址,例如:scanf(\"%f\20. 以下程序的输出结果是( )。

main( )

9

{ int k=17;

printf(\"%d,%o,%x \\n\",k,k,k); }

(A) 17,021,0x11 (B) 17,0x11,021

(B) 17,17,17 (D) 17,21,11

21. 下列程序的输出结果是 ( )。

main()

{ double d=3.2; int x,y; x=1.2; y=(x+3.8)/5.0; printf(\"%d \\n\ } (A) 3 (B) 3.2 (C) 0 22. 下列程序执行后的输出结果是 ( )。

main()

{ int x='f'; printf(\"%c \\n\(A) G (B) H (C) I 23. 下列程序的运行结果是( ) 。

#include main()

{ int a=2,c=5;

printf(\"a=%d,b=%d\\n\(A) a=%2,b=%5 (B) a=2,b=5 (C) a=d, b=d (D) a=%d,b=%d

24. x、y、z被定义为int型变量,若从键盘给x、y、z输入数据,正确的输入语句是 ( )。

(A) input x、y、z; 25. 若有以下程序段,

int c1=1,c2=2,c3; c3=1.0/c2*c1;

则执行后,c3中的值是( )。

(A) 0 (B) 0.5 (C) 1 (D) 2

26. 若有定义:int a=8,b=5,c;,执行语句c=a/b+0.4;后,c的值为( )。

(A) 1.4 (B) 1 (C) 2.0 (D) 2 27. 以下程序段的输出结果是( )。

int a=1234;

printf(\"%2d\\n\

(A) 12 (B) 34 (C) 1234 (D) 提示出错、无结果 28. 以下非法的赋值语句是( )。

(A) n=(i=2,++i); (B)j++; (C) ++(i+1); (D)x=j>0;

29. 已知i、j、k为int型变量,若从键盘输入:1,2,3<回车>,使i的值为1,j的值为2,k的值

为3,以下选项中正确的输入语句是( )。

(A) scanf(“%2d%2d%2d”,&i,&j,&k); (B) scanf(“%d %d %d”,&i,&j,&k);

(C) scanf(“%d,%d,%d”,&i,&j,&k); (D) scanf(“i=%d,j=%d,k=%d”,&i,&j,&k);

10

(D) 3.07

(D) J

(B) scanf(\"%d%d%d\

(C) scanf(\"%d%d%d\ (D) read(\"%d%d%d\

30. 设有定义:long x=-123456L;,则以下能够正确输出变量x值的语句是( )。

(A)printf(“x=%d\\n”,x); (B) printf(“x=%1d\\n”,x);

(C)printf(“x=%8dL\\n”,x); (D)printf(“x=%LD\\n”,x); 31. 若有以下程序:

main()

{ int k=2,i=2,m;

m=(k+=i*=k);printf(“%d,%d\\n”,m,i); }

执行后的输出结果是( )。

(A) 8,6 (B) 8,3 (C) 6,4 (D) 7,4 32. 若有以下程序段

int m=0xabc,n=0xabc; m-=n;

printf(\"%x\\n\

执行后输出结果是( )。

(A) 0X0 (B) 0x0 (C) 0 (D) 0XABC 33. 有以下程序段

int m=0,n=0; char c='a';

scanf(\"%d%c%d\ printf(\"%d,%c,%d\\n\

若从键盘上输入:10A10<回车>,则输出结果是( )。 (A) 10,A,10 (B) 10,a,10 (C) 10,a,0 (D) 10,A,0 34. 有以下程序

main()

{ int a; char c=10;

float f=100.0; double x; a=f/=c*=(x=6.5);

printf(\"%d %d %3.1f %3.1f\\n\}

程序运行后的输出结果是( )。

(A)1 65 1 6.5 (B)1 65 1.5 6.5 (C)1 65 1.0 6.5 (D)2 65 1.5 6.5

35. 有定义语句:int x, y;,若要通过scanf(\"%d,%d\语句使变量x得到数值11,变量y得到

数值12,下面四组输入形式中,错误的是( )。

(A)11 12<回车> (B)11, 12<回车>(C)11,12<回车> (D)11,<回车>12<回车>

36. 设变量x为float型且已赋值,则以下语句中能将x中的数值保留到小数点后两位,并将第三位

四舍五入的是( )。

(A)x=x*100+0.5/100.0; (B)x=(x*100+0.5)/100.0; (C)x=(int)(x*100+0.5)/100.0; (D)x=(x/100+0.5)*100.0;

37. 若以下选项中的变量已正确定义,则正确的赋值语句是 ( )。

(A) x1=26.8%3 (B) 1+2=x2 (C) x3=0x12 (D) x4=1+2=3; 38. 有以下程序

main( )

{ int x=102,y=012;

11

printf(“%2d,%2d\\n”,x,y); }

执行后输出结果是 ( ) 。

(A) 10,01 (B) 02,12 (C) 102,10 (D) 02,10 39. 以下4个选项中,不能看作一条语句的是 ( )。

(A) {;} (B) a=0,b=0,c=0; (C) if(a>0); (D) if(b==0) m=1;n=2; 40. 有以下程序

main()

{ int m=0256,n=256; printf(\"%o %o\\n\}

程序运行后的输出结果是( )。

(A)0256 0400 (B)0256 256 (C)256 400 (D)400 400 41. 有以下程序

main()

{ int a=666,b=888; printf(\"%d\\n\}

程序运行后的输出结果是( )。 (A)错误信息 (B)666 (C)888 (D)666,888 42. 有以下程序

main()

{ char a,b,c,d;

scanf(\"%c,%c,%d,%d\printf(\"%c,%c,%c,%c\\n\}

若运行时从键盘上输入:6,5,65,66<回车>。则输出结果是( )。 (A)6,5,A,B (B)6,5,65,66 (C)6,5,6,5 (D)6,5,6,6 43. 以下叙述中正确的是( )。

(A)调用printf函数时,必须要有输出项

(B)使用putchar函数时,必须在之前包含头文件stdio.h

(C)在C语言中,整数可以以二进制、八进制或十六进制的形式输出 (D)调用getchar函数读入字符时,可以从键盘上输入字符所对应的ASCII码 44. 以下程序的功能是:给r输入数据后计算半径为r的圆面积s。程序在编译时出错。main()

{ int r; float s; scanf(\"%d\

s=pi*r*r; printf(\"s=%f\\n\}

出错的原因是( )。 (A)注释语句书写位置错误 (B)存放圆半径的变量r不应该定义为整型

(C)输出语句中格式描述符非法 (D)计算圆面积的赋值语句中使用了非法变量

45. 有以下程序

12

#include main()

{ char c1='1',c2='2';

c1=getchar(); c2=getchar(); putchar(c1); putchar(c2); }

当运行时输入:a<回车> 后,以下叙述正确的是( )。 (A)变量c1被赋予字符a,c2被赋予回车符 (B)程序将等待用户输入第2个字符

(C)变量c1被赋予字符a,c2中仍是原有字符2 (D)变量c1被赋予字符a,c2中将无确定值

46. 若变量均已正确定义并赋值,以下合法的C语言赋值语句是( )。

(A)x=y==5; (B)x=n%2.5; (C)x+n=1; (D)x=5=4+1; 47. 程序运行后的输出结果是( )。

#include void main () { int a,b; a=3; b=20; a=b;

printf(\"a=%d,b=%d\\n\}

(A)a=3,b=3 (B)a=20,b=20 (C)a=20,b=3 (D) a=3,b=20

3.2填空题

1. 若变量a,b已定义为int类型并赋值21和55,要求用printf函数以a=21,b=55的形式输出,

请写出完整的的输出语句 。

2. 一个良好的程序,无论多么复杂,都可以由三种基本结构组成,分别是 、

和 ,用这三种基本结构构成的程序称为“结构化程序”。 3. 执行以下程序时输入1234567,则输出结果是_ _____。

main() { int a=1,b;

scanf(\"%2d%2d\,&b); printf(\"%d %d\\n\} 4. 若有程序

main() { int i,j;

scanf(\"i=%d,j=%d\";&i,&j); printf(\"i=%d,j=%d\\n\}

要求给i赋10,给j赋20,则应该从键盘输入 。

13

5. 有以下语句段

int n1=10,n2=20;

printf(“ ”,n1,n2);

要求按以下格式输出n1和n2的值,每个输出行从第一列开始,请填空。 n1=10 n2=20

6. 以下程序段的输出结果是 __ ___ 。

int i=9;

printf(\"%o\\n\

7. 已知字符A的ASCII代码值为65,以下程序运行时若从键盘输入:B33<回车>,则输出结果

是 。 #include main() { char a,b;

a=getchar();scanf(\"%d\a=a-'A'+'0';b=b*2; printf(\"%c %c\\n\}

8. 已知字母A的ASCII码为65。以下程序运行后的输出结果是 。

main() { char a, b;

a='A'+'5'-'3'; b=a+'6'-'2' printf(\"%d %c\\n\

3.3编程题

1. 设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。用scanf

输入数据,输出计算结果,输出时要求有文字说明,取小数点后2位数字。请编程序。 2. 输入一个华氏温度,要求输出一个摄氏温度。公式为:

3. 输入三角形的三边长,求三角形面积。

为简单起见,设输入的三边长a、b、c能构成三角形。从数学知识已知求三角形面积的公式为

其中s=(a+b+c)/2

4. 输入一个小写字母,将其转换为大写字母。

14

第4章 选择结构程序设计

4.1选择题

1. 表达式:10!=9的值是( )。

(A)true (B)非零值 (C)0 (D)1

2. 能正确表示逻辑关系:“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

3. 有以下程序

main()

{ int a,b,c=246; a=c/100%9; b=(-1)&&(-1);

printf(\"%d,%d\\n\}

输出结果是( )。

(A) 2,1 (B) 3,2 (C) 4,3 (D) 2,-1

4. 若变量c为char类型,能正确判断出c为小写字母的表达式是((A) 'a'<=c<= 'z' (B) (c>= 'a')||(c<= 'z')

(C) ('a'<=c)and ('z'>=c) (D) (c>= 'a')&&(c<= 'z') 5. 下面程序的输出是( )。

main()

{ int a=-1,b=4,k;

k=(a++<=0)&&(!(b--<=0)); printf(\"%d %d %d%\\n\(A) 0 0 3 (B) 0 1 2 (C) 1 0 3 (D) 1 1 2

6. 有如下程序段

int a=14,b=15,x; char c=’A’;

x=(a&&b)&&(c<’B’);

执行该程序段后,x的值为( )。 (A) true (B) false (C) 0 (D) 1

7. 表示数学上的关系x<=y<=z的C语言表达式为( )。

(A) (x<=y)&&(y<=z) (B) (x<=y)AND(y<=z) (C) (x<=y<=z) (D) (x<=y)&(y<=z)

8. 设x,y,z,t均为int型变量,则执行以下语句后,t的值为( )。

x=y=z=1;

t=++x||++y&&++z; (A) 不定值 (B) 2 (C) 1 (D) 0

9. 阅读以下程序:

)。15

main() { int x;

scanf(\"%d\ if(x--<5) printf(\"%d\",x); else printf(\"%d\ }

程序运行后,如果从键盘上输入5,则输出结果是 ( )。 (A)3 (B) 4 (C) 5 (D) 6 10. 以下程序输出结果是( )。 main() { int m=5;

if(m++>5) printf(\"%d\\n\else printf(\"%d\\n\}

(A) 7 (B) 6 (C) 5

(D) 4

11. 语句:printf(\"%d\",(a=2)&&(b= -2);的输出结果是( )。

(A) 无输出 (B) 结果不确定 (C) -1 (D) 1

12. 能正确表示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

13. 设 int x=1, y=1; 表达式(!x||y--)的值是( )。 (A) 0 (B) 1 (C) 2 (D) -1 14. 有如下程序,该程序的输出结果是( )。

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 (D) a=2,b=2 15. 有如下程序

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 (D) 1.000000 16. 有如下程序

16

main()

{ int a=2,b=-1,c=2; if(a)c=2;

else if(b<0) c=0; else c++;

printf(“%d\\n”,c); }

该程序的输出结果是( )。 (A) 0

(B) 1

(C) 2

(D) 3

17. 若执行以下程序时从键盘上输入9,则输出结果是( )。

main() { int n;

scanf(\"%d\

if(n++<10) printf(\"%d\\n\else printf(\"%d\\n\}

(A) 11 (B) 10 (C) 9 (D) 8 18. 以下程序的输出结果是( )。

main()

{ int a=4,b=5,c=0,d; d=!a&&!b||!c; printf(\"%d\\n\}

(A) 1 (B) 0 (C) 非0的数 (D) -1

19. 已有定义:int x=3,y=4,z=5;,则表达式!(x+y)+z-1&&y+z/2的值是((A) 6 (B) 0 (C) 2 (D) 1 20. 有以下程序

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 21. 有以下程序

main()

{ int a=5,b=4,c=3,d=2; if(a>b>c)

printf(\"%d\\n\

。17

else if((c-1>=d)==1) printf(\"%d\\n\ else

printf(\"%d\\n\

执行后输出结果是( ) 。

(A) 2 (B) 3 (C) 4 (D) 编译时有错,无结果

22. 若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 23. 有以下程序

main() {

int a=3,b=4,c=5,d=2; if(a>b) if(b>c)

printf(\"%d\else

printf(\"%d\printf(\"%d\\n\}

程序运行后的输出结果是( )。 (A)2 (B)3 (C)43 (D)44 24. 有以下程序

main()

{ int a,b,d=25; a=d/10%9; b=a&&(-1);

printf(\"%d,%d\\n\}

程序运行后的输出结果是( )。 (A)6,1

(B)2,1

(C)6,0

(D)2,0

25. 当把以下四个表达式用作if语句的控制表达式时,有一个选项与其它三个选项含义不同,这个

选项是( )。

(A)k%2 (B)k%2==1 (C)(k%2)!=0 (D)!(k%2)==1

26. 设有定义:int a=2,b=3,c=4;,则以下选项中值为0的表达式是( )。

(A)(!a==1)&&(!b==0) (B)(amain()

{int a=0,b=0,c=0,d=0; if(a=1) b=1;c=2; else d=3;

printf(\"%d,%d,%d,%d\\n\}

18

(A)0,1,2,0 (B)0,0,0,3 (C)1,1,2,0 (D)编译有错

28. 已有定义:char c; ,程序前面已在命令行中包含ctype.h文件,不能用于判断c中的字符是否为

大写字母的表达式是( )。

(A)isupper(c) (B)’A’<=c<=’Z’

(C)’A’<=c&&c<=’Z’ (D)c<=(‘z’-32)&&(‘a’-32)<=c

4.2填空题

1. 以下程序用于判断a、b、c能否构成三角形,若能,输出YES,否则输出NO。当给a、b、c

输入三角形三条边长时,确定a、b、c能构成三角形的条件是需同时满足三个条件:a+b>c,a+c>b,b+c>a。请填空。

main()

{float a,b,c;

scanf(\"%f%f%f\

if( )printf(\"YES\\n\");/*a、b、c能构成三角形*/ else printf(\"NO\\n\");/*a、b、c不能构成三角形*/ }

2. 表示条件:x>10且x<100或x<0的C语言表达式是 。 3. 若x为int类型,请以最简单的形式写出与逻辑表达式!x等价的C语言关系表达式

4. 以下程序运行后的输出结果是 。

main()

{ int a=1,b=3,c=5;

if (c=a+b) printf(\"yes\\n\"); else printf(\"no\\n\"); }

5. 表示“整数x的绝对值大于5”时值为“真”的C语言表达式是 。 6. 若从键盘输入58,则以下程序输出的结果是 。

main() { int a;

scanf(\"%d\

if(a>50) printf(\"%d\if(a>40) printf(\"%d\if(a>30) printf(\"%d\}

7. 以下程序运行后的输出结果是 。

main()

{ int x=10,y=20,t=0; if(x==y)t=x;x=y;y=t; printf(“%d,%d \\n”,x,y);} 8. 若有以下程序

main()

{ int a=4,b=3,c=5,t=0;

19

if(aprintf(\"%d %d %d\\n\}

执行后输出结果是 。 9. 有以下程序

main( )

{ int n=0,m=1,x=2; if(!n) x-=1; if(m) x-=2; if(x) x-=3; printf(“%d\\n”,x); }

执行后输出结果是

10. 以下程序运行后的输出结果是 。

main()

{ int a=1,b=2,c=3;

if(c=a) printf(\"%d\\n\else printf(\"%d\\n\}

4.3编程题

1. 有一函数:

写一程序,输入x,输出y值。

2. 给一个不多于5位的正整数,要求:(1)求出它是几位数;(2)分别打印出每一位数字; 3. 由键盘输入3个整数x,y,z,输出其中的最大数,请编程序。

4. 给出一百分制成绩,要求输出成绩等级‘A’、 ‘B’、 ‘C’、 ‘D’、 ‘E’。90分以上为‘A’,

80~89分为‘B’, 70~79分为‘C’, 60~69分为‘D’,60分以下为‘E’。

20

第5章循环结构程序设计

5.1选择题

1. t为int类型,进入下面的循环之前,t的值为0

while( t=l ) { ……}

则以下叙述中正确的是 ( )

(A) 循环控制表达式的值为0 (B) 循环控制表达式的值为1 (C) 循环控制表达式不合法 (D) 以上说法都不对 2. 有以下程序

main( ) { int i,s=0;

for(i=1;i<10;i+=2) s+=i+1; printf(“%d\\n”,s); }

程序执行后的输出结果是 ( )。

(A) 自然数1~9的累加和 (B) 自然数1~10的累加和 (C) 自然数1~9中的奇数之和 (D) 自然数1~10中的偶数之和 3. 以下程序段的输出结果是( )。

int x=3; do

{ printf(\"%3d\ } while(!(- -x));

(A)1 (B)30 (C)1 -2 (D)死循环 4. 以下程序中,while循环的循环次数是( )。

main() { int i=0; while(i<10)

{ if(i<1) continue; if(i==5) break; i++; } ...... }

(A) 1 (B) 10 (C) 6 (D) 死循环,不能确定次数 5. 有以下程序

main() { int a=1,b;

for(b=1;b<=10;b++) { if(a>=8)break;

if(a%2==1){a+=5;continue;}

21

a-=3; }

printf(\"%d\\n\ }

程序运行后的输出结果是( )。 (A)3

(B) 4

(C)5

(D)6

6. 有以下程序

main() { int i;

for(i=0;i<3;i++) switch(i)

{ case 1: printf(\"%d\ case 2: printf(\"%d\ default: printf(\"%d\ } }

执行后输出结果是( )。

(A) 011122 (B) 012 (C) 012020 (D) 120 7. 下面程序的输出是( )。

main() {int y=9; for(;y>0;y--) {if(y%3==0)

{printf(\"%d\(A)741 (B)852 (C)963 (D)875421

8. 若i,j已定义为int类型,则以下程序段中内循环体的总的执行次数是( for (i=5;i;i--)

for(j=0;j<4;j++){...}

(A)20 (B)25 (C)24 (D)30 9. 执行语句: for(i=l;i++<4;);后,变量i的值是( )。

(A) 3

(B) 4

(C) 5

(D) 不定

10. 假定a和b为int型变量,则执行以下语句后b的值为( )。

a=1; b=10; do

{ b-=a; a++; } while (b--<0); (A) 9 (B) -2 (C) -1 (D) 8

11. 设j为int型变量,则下面for循环语句的执行结果是( )。

for( j=10;j>3;j--) { if(j%3)j--; --j; --j;

printf(\"%d \}

(A) 6 3 (B) 7 4

(C) 6 2 (D) 7 3

)。22

12. 有以下程序

main() { int x,i;

for(i=1;i<=50;i++) { x=i;

if(++x%2==0) if(x%3==0) if(x%7==0) printf(\"%d,i); } }

输出结果是( )。 (A) 28

(B) 27

(C) 42

(D) 41

13. 在执行以下程序时,如果从键盘上输入ABCdef<回车>,则输出( )。 #include main() { char ch;

while((ch=getchar())!='\\n')

{ if(ch>='A' && ch<='Z') ch=ch+32; else if(ch>='a' && ch<='z') ch=ch-32; printf(\"%c\}

printf(\"\\n\"); }

(A) ABCdef (B) abcDEF (C) abc (D) DEF

14. 执行以下程序段时( )。

x=-1;

do {x=x*x; } while(! x); (A) 循环体将执行一次

(B) 循环体将执行两次 (C) 循环体将执行无限次 (D) 系统将提示有语法错误

15. 执行以下程序后,输出的结果是( )。

main () { int y=10;

do { y - -;} while(- - y); printf(\"%d\\n\(A) -1 (B) 1

(C) 8 (D) 0

16. 在下列选项中,没有构成死循环的程序段是( )。

(A) int i=100 ; (B) for( ; ;); while(1)

{ i=i%100+1; if(i>100)break; }

(C) int k=1000; (D) int s=36; do{++k;} while(k>=10000); while(s);--s;

17. 运行以下程序后,如果从键盘上输入 china#<回车>,则输出结果为( )。

23

#include main()

{ int v1=0,v2=0; char ch;

while((ch=getchar())!='#') switch(ch) { case 'a': case 'h':

default: v1++; case '0': v2++; }

printf(\"%d,%d\\n\}

(A) 2,0 (B) 5,0 (C) 5,5 (D) 2,5

18. 以下程序的输出结果是( )。

main( )

{ int x=10,y=10,i; for(i=0;x>8;y=++i) printf(\"%d,%d \",x--,y);

}

(A) 10 1 9 2 (B) 9 8 7 6 (C) 10 9 9 0 (D) 10 10 9 1 19. 以下程序的输出结果是( )。

main( ) { int n=4;

while(n--)printf(\"%d \",--n); }

(A) 2 0 (B) 3 1 (C) 3 2 1

(D) 2 1 0

20. 以下程序的输出结果是( )。

main( ) { int i;

for(i=1;i<6;i++)

{ if(i%2){printf(\"#\");continue;} printf(\"*\"); }

printf(\"\\n\"); }

(A) #*#*# (B) ##### (C) ***** (D) *#*#*

21. 以下循环体的执行次数是 ( )。

main() { int i,j;

for(i=0,j=1; i<=j+1; i+=2, j--)printf(\"%d \\n\ }

(A) 3 (B) 2 (C) 1 (D) 0 22. 以下叙述正确的是 ( )。

24

(A) do-while语句构成的循环不能用其它语句构成的循环来代替。 (B) do-while语句构成的循环只能用break语句退出。

(C) 用do-while语句构成的循环,在while后的表达式为非零时结束循环。 (D) 用do-while语句构成的循环,在while后的表达式为零时结束循环。 23. 有以下程序

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 (D) 21 24. 有如下程序

#include main() {int x=23; do

{ printf(\"%d\该程序的执行结果是( )。 (A) 321 (B) 23 (C) 不输出任何内容 (D) 陷入死循环

25. 有如下程序

main( )

{ int n=9;

while(n>6) {n--;printf(“%d”,n);} }

该程序段的输出结果是( )。 (A) 987 (B) 876 (C) 8765 (D) 9876

26. 有以下程序段

int k=0;

while(k=1)k++;

while 循环执行的次数是( )。 (A) 无限次

(B) 有语法错,不能执行

(C) 一次也不执行27. 以下程序的输出结果是( )。

main() { int a, b;

for(a=1, b=1; a<=100; a++) { if(b>=10) break; if (b%3= =1)

{ b+=3; continue; } }

(D) 执行1次25

printf(\"%d\\n\ (A) 101 (B) 6 (C) 5 (D) 4

28. 以下程序的输出结果是( )。

main() { int a=0,i; for(i=1;i<5;i++) { switch(i) { case 0: case 3:a+=2; case 1:

case 2:a+=3; default:a+=5; } }

printf(\"%d\\n\}

(A) 31 (B) 13 (C) 10 (D) 20 29. 以下程序的输出结果是( )。

#include main()

{ int i=0,a=0; while(i<20) { for(;;)

{ if((i%10)==0) break; else i--; }

i+=11; a+=i; }

printf(\"%d\\n\}

(A) 21 (B) 32 (C) 33 (D) 11 30. 有以下程序段

int n=0,p;

do{scanf(“%d”,&p);

n++;}while(p!=12345 &&n<3);

此处do—while循环的结束条件是( )。 (A) p的值不等于12345并且n的值小于3 (B) p的值等于12345并且n的值大于等于3 (C) p的值不等于12345或者n的值小于3 (D) p的值等于12345或者n的值大于等于3

31. 若有如下程序段,其中s、a、b、c均已定义为整型变量,且a、c均已赋值(c大于0)s=a;

for(b=1;b<=c;b++) s=s+1;

则与上述程序段功能等价的赋值语句是 ( )。

26

(A)s=a+b; (B)s=a+c; (C)s=s+c; (D)s=b+c;

32. 有以下程序

main()

{ int k=4,n=0; for( nif(n%3!=0) continue; k--; }

printf(\"%d,%d\\n\}

程序运行后的输出结果是( )。 (A)1,1

(B)2,2

(C)3,3

(D)4,4

33. 有以下程序

main( )

{ int x=0,y=5,z=3;

while(z-->0&&++x<5) y=y-1; printf(“%d,%d,%d\\n”,x,y,z); }

程序执行后的输出结果是( )。 (A) 3,2,0 (B) 3,2,-1 (C) 4,3,-1 (D) 5,-2,-5 34. 有以下程序

main() { int i;

for(i=0;i<3;i++) switch(i) {

case 0:printf(\"%d\case 2:printf(\"%d\default:printf(\"%d\} }

程序运行后的输出结果是 ( )。 (A)022111 (B)021021 (C)000122 (D)012 35. 有以下程序

main()

{ int i=0,s=0; for (;;) {

if(i==3||i==5) continue; if (i==6) break; i++; s+=i; };

printf(\"%d\\n\}

27

程序运行后的输出结果是( ) 。 (A)10 (B)13 (C)21 (D)程序进入死循环 36. 有以下程序

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

37. 要求通过while循环不断读入字符,当读入字母N时结束循环。若变量已正确定义,的程序段是( )。

(A)while((ch=getchar())!=′N′)printf(\"%c\(B)while(ch=getchar()!=′N′)printf(\"%c\(C)while(ch=getchar()==′N′)printf(\"%c\(D)while((ch=getchar())==′N′)printf(\"%c\38. 有以下程序

main() {int y=10;

while(y--);printf(\"y=%d\\n\",y); }

程序执行后的输出结果是( )。 (A)y=0 (B)y=-1 (C)y=1 (D)while构成无限循环

39. 有以下程序

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=%d\\n\",x); }

28

以下正确

程序执行后的输出结果是( )。 (A)x=4

(B)x=8

(C)x=6

(D)x=12

40. 若变量已正确定义,有以下程序段

i=0;

do {printf(\"%d,\printf(\"%d\\n\其输出结果是( )。

(A)0,0 (B)0,1 (C)1,1 (D)程序进入无限循环 41. 有以下程序

#include main()

{int i,j,m=55; for(i=1;i<=3;i++)

for(j=3;j<=i;j++) m=m%j; printf(\"%d\\n\}

程序的运行结果是()。

(A)0 (B)1 (C)2 (D)3

5.2填空题

1. 以下程序运行后的输出结果是 。

main()

{ int i,m=0,n=0,k=0; for(i=9; i<=11;i++) switch(i/10)

{ case 0: m++;n++;break; case 10: n++; break; default: k++;n++; }

printf(\"%d %d %d\\n\}

2. 要使以下程序段输出10个整数,请填入一个整数。

for(i=0;i<= ;printf(“%d\\n”,i+=2));

3. 若输入字符串:abcde<回车>,则以下while循环体将执行 次。while((ch=getchar())==’e’) printf(“*”); 4. 以下程序运行后的输出结果是_ 。

main()

{ int i=10, j=0; do

{ j=j+i; i--; } while(i>2);

printf(\"%d\\n\ }

29

5. 以下程序的输出结果是 。

main() {int s,i;

for(s=0,i=1;i<3;i++,s+=i); printf(\"%d\\n\6. 有以下程序:

#include main() { char c;

while((c=getchar( ))!=’?’) putchar(--c);}

程序运行时,如果从键盘输入:Y?N?<回车>,则输出结果为 。 7. 执行以下程序后,输出'#'号的个数是 。

#include main() { int i,j;

for(i=1; i<5; i++)

for(j=2; j<=i; j++) putchar('#'); }

8. 有以下程序

main( )

{ int t=1,i=5;

for(;i>=0;i--) t*=i; printf(“%d\\n”,t); }

执行后输出结果是 。

5.3编程题

1. 输入两个正整数m和n,求其最大公约数和最小公倍数。 2. 求

n! (即求1!+2!+3!+4!+…+10!)。

n1203. 计算1到10之间奇数之和及偶数之和。 4. 有一分数序列

2/1,3/2,5/3,8/5,13/8,21/13,…· 求出这个数列的前20项之和。

5. 打印出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身。

例如,153是一水仙花数,因为153=13+53+33。

6. 输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。 7. 求100以内的素数。

8. 求出1到1000之内能被7或11整除 但不能同时被7和11整除的所有整数。要求输出结果5

个一行。

9. 编写一个程序,求出1~100之间所有每位数的乘积小于每位数的和的数。例如:13满足1*3<1+3.

30

10. 编写一个程序,求出1~100之间所有每位数的乘积大于每位数的和的数。例如:98满足9*8>9+8. 11. 编写一个程序,从3个红球,5个白球,6个黑球中任意取出8个球,且其中必须有黑球,输出

所有可能的方案。

12. 编写一个程序,从3个红球,5个白球,6个黑球中任意取出8个球,且其中必须有白球,输出

所有可能的方案。

13. 编写一个程序,从3个红球,5个白球,6个黑球中任意取出8个球,且其中必须有红球,输出

所有可能的方案。

31

第6章 利用数组处理批量数据

6.1选择题

1. 下列对C语言字符数组的描述中错误的是( )。

(A)字符数组可以存放字符串 (B)字符数组中的字符串可以整体输入、输出 (C)可以在赋值语句中通过赋值运算符“=”对字符数组整体赋值 (D)不可以用关系运算符对字符数组中的字符串进行比较 2. 下面程序运行的结果是( )。

main()

{ char ch[7]={“65ab21”}; int i,s=0;

for(i=0;ch[i]>='0' && ch[i]<='9';i+=2) s=10*s+ch[i]-'0'; printf(\"%d\\n\}

(A) 2ba56 (B) 6521 (C) 6 (D) 62

3. 有定义语句:int b;char c[10];,则正确的输入语句是( )。

(A) scanf(\"%d%s\(C) scanf(\"%d%s\ (D) scanf(\"%d%s\4. 有以下程序段

int j; float y; char name[50]; scanf(\"%2d%f%s\

当执行上述程序段,从键盘上输入55566 7777abc后,y的值为( (A)55566.0 (B)566.0 (C)7777.0 (D)566777.0

5. 不能把字符串:Hello!赋给数组b的语句是( )。

(A)char b[10]={'H','e','l','l','o','!'}; (B)char b[10];b=\"Hello!\";

(C)char b[10];strcpy(b,\"Hello!\"); (D)char b[10]=\"Hello!\"; 6. 若有以下说明:

int a[12]={1,2,3,4,5,6,7,8,9,10,11,12}; char c='a',d,g;

则数值为4的表达式是( )。

(A)a[g-c] (B)a[4] (C)a['d'-'c'] (D)a['d'-c] 7. 以下程序的输出结果是( )

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;

)。 32

printf(\"%d\\n\ (A) 20 (B) 21 (C) 22 (D)23

8. 以下程序的输出结果是( )。

(A) 1,5,9 (B) 1,4,7 (C) 3,5,7 (D)3,6,9 main()

{ int i, x[3][3]={1,2,3,4,5,6,7,8,9}; for(i=0;i<3;i++) printf(\"%d,\

9. 函数调用:strcat(strcpy(str1,str2),str3)的功能是( )。

(A)将串str1复制到串str2中后再连接到串str3之后 (B)将串str1连接到串str2之后再复制到串str3之后 (C)将串str2复制到串str1中后再将串str3连接到串str1之后 (D)将串str2连接到串str1之后再将串str1复制到串str3中 10. 有以下程序

main()

{int i,t[][3]={9,8,7,6,5,4,3,2,1};

for(i=0;i<3;i++) printf(\"%d\ }

程序执行后的输出结果是( )。 (A)7 5 3

(B)3 5 7

(C)3 6 9

(D)7 5 1

11. 给出以下定义:

char x[ ]=\"abcdefg\";

char y[ ]={'a','b','c','d','e','f','g'}; 则正确的叙述为( )。 (A) 数组x和数组y等价 (B) 数组x和数组y的长度相同 (C) 数组x的长度大于数组y的长度

(D) 数组x的长度小于数组y的长度12. 下列描述中不正确的是( )。

(A) 字符型数组中可以存放字符串

(B) 可以对字符型数组进行整体输入、输出 (C) 可以对整型数组进行整体输入、输出

(D) 不能在赋值语句中通过赋值运算符\"=\"对字符型数组进行整体赋值 13. 有以下程序

main()

{ char p[]={'a', 'b', 'c'}, q[]=\"abc\"; printf(\"%d %d\\n\};

程序运行后的输出结果是( )。 (A)4 4

(B)3 3

(C)3 4

(D)4 3

14. 执行下面的程序段后,变量k中的值为 ( )。

int k=3, s[2];

s[0]=k; k=s[1]*10; (A) 不定值

(B) 33

(C) 30

(D) 10

设有数组定义: char array [ ]=\"China\"; 则数组 array所占的空间为 ( )。 (A) 4个字节 (B) 5个字节 (C) 6个字节 (D) 7个字节

33

15. 下列程序执行后的输出结果是 ( )。

main()

{ char arr[2][4];

strcpy(arr,\"you\"); strcpy(arr[1],\"me\"); arr[0][3]='&';

printf(\"%s \\n\ }

(A) you&me (B) you (C) me (D) err

16. 若有以下的定义:int t[3][2];能正确表示t数组元素地址的表达式是( )。

(A) &t[3][2] (B) t[3] (C) t[1][0] 17. 以下程序的输出结果是( )。

main()

{ char w[ ][10]={ \"ABCD\for(k=1;k<3;k++) printf(\"%s\\n\}

(A) ABCD (B) ABCD (C) EFG (D) EFGH FGH EFG JK IJKL KL IJ O M

18. 当执行下面的程序时,如果输入ABC,则输出结果是( )。

#include \"stdio.h\"

#include \"string.h\" main()

{ char ss[10]=\"1,2,3,4,5\";

gets(ss); strcat(ss, \"6789\"); printf(\"%s\\n\}

(A) ABC6789 (B) ABC67 (C) 12345ABC6 (D) ABC456789

19. 假定int类型变量占用两个字节,其有定义:int x[10]={0,2,4};,则数组x在内存中所占字节数

是( )。 (A) 3

(B) 6

(C) 10

(D) 20

20. 以下程序的输出结果是 ( )。

main()

{ int i, a[10];

for(i=9;i>=0;i--) a[i]=10-i;

printf(\"%d%d%d\ }

(A) 258 (B) 741 (C) 852

(D) t[2]

(D) 369

21. 以下数组定义中不正确的是( )。

(A) int a[2][3];

(B) int b[][3]={0,1,2,3}; (C) int c[100][100]={0};

(D) int d[3][]={{1,2},{1,2,3},{1,2,3,4}}; 22. 以下程序的输出结果是( )。

main()

34

{ int a[4][4]={{1,3,5},{2,4,6},{3,5,7}};

printf(\"%d%d%d%d\\n\ } (A) 0650

(B) 1470 (C) 5430

(D) 输出值不定

23. 已有定义:char a[]=\"xyz\,以下叙述中正确的是( )。

(A)数组a和b的长度相同

(B)a数组长度小于b数组长度 (C)a数组长度大于b数组长度 (D)上述说法都不对

24. 以下程序的输出结果是( )。

main()

{ char cf[3][5]={\"AAAA\printf(\"\\\"%s\\\"\\n\}

(A) \"AAAA\" (B) \"BBB\" (C) \"BBBCC\" (D) \"CC\"

25. 若有定义:int aa[8];,则以下表达式中不能代表数组元素aa[1]的地址的是((A) &aa[0]+1 (B) &aa[1] (C) &aa[0]++ (D) aa+1 26. 以下程序的输出结果是( )。

main()

{ int b[3][3]={0,1,2,0,1,2,0,1,2},i,j,t=1; for(i=0;i<3;i++)

for(j=i;j<=i;j++) t=t+b[j][j]; printf(\"%d\\n\}

(A) 3 (B) 4 (C) 1 (D) 9 27. 有以下程序

main()

{ char a[]={‘a’,‘b’,‘c’,‘d’, ‘e’, ‘f’, ‘g’,‘h’,‘\\0’}; int i,j;

i=sizeof(a); j=strlen(a); printf(“%d,%d\\b”,i,j); }

程序运行后的输出结果是( )。 (A) 9,9 (B) 8,9 (C) 1,8 (D) 9,8 28. 有以下程序

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\}

执行后输出结果是( )。 (A) 58 (B) 56 (C) 45 (D) 24 29. 有以下程序

main()

{ char s[]=\"\\n123\\\\\";

printf(\"%d,%d\\n\

35

)}

执行后输出结果是( )。

(A) 赋初值的字符串有错 (B) 6,7 (C) 5,6 (D) 6,6 30. 以下不能正确定义二维数组的选项是( )。

(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}}; 31. 有以下程序

main( )

{ char a[]=”abcdefg”,b[10]=”abcdefg”; printf(“%d %d\\n”,sizeof(a) ,sizeof(b) ); }

执行后输出结果是( )。 (A) 7 7 (B) 8 8 (C) 8 10 (D) 10 10 32. 以下能正确定义二维数组的是( )。

(A)int a[][3]={0}; (B)int a[][3]=2{2*3};

(C)int a[][3]={}; (D)int a[2][3]={{1},{2},{3,4}}; 33. 有以下程序

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

34. 以下能正确定义一维数组的选项是( )。 (A)int a[5]={0,1,2,3,4,5}; (B)char a[]={0,1,2,3,4,5}; (C)char a={'A','B','C'}; (D)int a[5]=\"0123\"; 35. 以下叙述中错误的是( )。

(A)对于double类型数组,不可以直接用数组名对数组进行整体输入或输出 (B)数组名代表的是数组所占存储区的首地址,其值不可改变

(C)当程序执行中,数组元素的下标超出所定义的下标范围时,系统将给出“下标越界”的出错信息

(D)可以通过赋初值的方式确定数组元素的个数 36. #include

main()

{ char p[]={'a', 'b', 'c'}, q[10]={'a', 'b', 'c'}; printf(\"%d %d\\n\}

以下叙述中正确的是( )。

(A)在给p和q数组置初值时,系统会自动添加字符串结束符,故输出的长度都为3 (B)由于p数组中没有字符串结束符,长度不能确定;但q数组中字符串长度为3 (C)由于q数组中没有字符串结束符,长度不能确定;但p数组中字符串长度为3 (D)由于p和q数组中都没有字符串结束符,故长度都不能确定

36

37. 以下能正确定义字符串的语句是( )。

(A)char str[]={′064′};(B)char str=\"kx43\"; (C)char str=\";

(D)char str[]=\"\0\";

38. 以下数组定义中错误的是( )。

(A)int x[][3]={0};

(B)int x[2][3]={{l,2},{3,4},{5,6}}; (C)int x[][3]={{l,2,3},{4,5,6}}; (D)int x[2][3]={l,2,3,4,5,6};

39. 若要求从键盘读入含有空格字符的字符串,应使用函数( )。

(A)getc()

(B)gets() (C)getchar() (D)scanf()

40. 若有定义语句:int a[3][6]; ,按在内存中的存放顺序,a数组的第10个元素是( )。

(A)a[0][4] (B)a[1][3] (C)a[0][3] (D)a[1][4]

6.2填空题

1. 下面程序的功能是:将字符数组a中下标值为偶数的元素从小到大排列,其它元素不变。请填空。 #include

#include main()

{ char a[]=\"clanguage\ int i, j, k; k=strlen(a);

for(i=0; i<=k-2; i+=2) for(j=i+2; j<=k; j+=2 ) if( ) { t=a[i]; a[i]=a[j]; a[j]=t; } puts(a);

printf(\"\\n\"); }

2. 下列程序段的输出结果是 。

main()

{ char b[]=\"Hello,you\"; b[5]=0;

printf(\"%s \\n\ }

3. 以下程序的输出结果是 。

main()

{ char s[]=\"abcdef\"; s[3]=‘\\0';

printf(\"%s\\n\4. 有以下程序

main()

{ int m[][3]={1,4,7,2,5,8,3,6,9}; int i,j,k=2;

for(i=0;i<3;i++)

37

{ printf(\"%d \}

执行后输出结果是 。

5. 以下程序运行后的输出结果是 _ ___ 。

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\}

6. 以下程序的输出结果是 。

main()

{int a[3][3]={{1,2,9},{3,4,8},{5,6,7}},i,s=0; for(i=0;i<3;i++) s+=a[i][i]+a[i][3-i-1]; 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. 以下程序运行后的输出结果是 。

main()

{ int i,n[]={0,0,0,0,0}; for(i=1;i<=4;i++) { n[i]=n[i-1]*2+1; printf(\"%d \} }

9. 以下程序运行后的输出结果是 。 #include main()

{ char ch[]=\"abc\for(i=0;i<3;i++) strcpy(x[i],ch);

for(i=0;i<3;i++) printf(\"%s\printf(\"\\n\");}

6.3编程题

1. 已知一个班10个学生的成绩,要求输入这10个学生的成绩,然后求出它们的平均成绩。

38

2. 已知5个学生的4门课的成绩,要求求出每个学生的平均成绩,然后对平均成绩从高到低将各

学生的成绩排序记录。

3. 从字符串中删除指定的字符。同一字母的大小写按不同字符处理。

例如:若程序执行时,输入字符串为:turbo c and Borland c++,从键盘上输入字符:n,则输出后变为:turbo c ad borlad c++,如果输入的字符串不存在,则字符串照原样输出。(10分)

4. 要求用数组实现求fibonacci数列40个数,并且每输出5个数换行。这个数列有如下特点:第1,

2两个数为1,1。从第3个数开始,该数是其前面两个数之和。即: f1=1 (n=1)

f2=1 (n=2) fn=fn-1+fn-2 (n≥3)

5. 求一个3×3矩阵主对角线元素之和。

6. 将一个数组中的值按逆序重新存放。例如,原来顺序为8,6,5,4,1。要求改为1,4,5,6,8。 7. 有一篇文章,共有3行文字,每行有80个字符。要求分别统计出其中英文大写字母、小写字母、

数字、空格以及其他字符的个数。 8. 用冒泡法对10个整数排序。

39

第7章 用函数实现模块化程序设计

7.1选择题

1. 以下程序的输出结果是( ) int f() {

static int i=0; int s=1; s+=i;i++; return s; }

main() {

int i,a=0;

for(i=0;i<5;i++) a+=f(); printf(\"%d\\n\}

(A) 20 (B) 24 (C) 25 (D) 15 2. 有以下程序

#define N 20

fun(int a[],int n,int m) { int i,j;

for(i=m;i>=n;i--)a[i+1]=a[i]; }

main()

{ int i,a[N]={1,2,3,4,5,6,7,8,9,10}; fun(a,2,9);

for(i=0;i<5;i++)printf(\"%d\ }

程序运行后的输出结果是( )。

(A)10234 (B)12344 (C)12334 3. 在C语言中,形参的缺省存储类别是( )。

(A) auto (B) register (C) static (D) extern

4. 在调用函数时,如果实参是简单变量,它与对应形参之间的数据传递方式是 ( )。

(A) 地址传递

(B) 单向值传递

(D) 传递方式由用户指定

(C) 由实参传给形参,再由形参传回实参 5. 若程序中定义了以下函数

double myadd(double a,double b) { return (a+b); }

并将其放在调用语句之后,则在调用之前应该对该函数进行说明,以下选项中错误的说明是( )。

40

(D)12234

(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. 以下对C语言函数的有关描述中,正确的是( )。

(A)在C中,调用函数时,只能把实参的值传送给形参,形参的值不能传送给实参 (B)C函数既可以嵌套定义又可以递归调用 (C)函数必须有返回值,否则不能使用函数

(D)C程序中有调用关系的所有函数必须放在同一个源程序文件中 7. 以下叙述中不正确的是( )。

(A)在C中,函数中的自动变量可以赋初值,每调用一次,赋一次初值 (B)在C中,在调用函数时,实际参数和对应形参在类型上只需赋值兼容 (C)在C中,外部变量的隐含类别是自动存储类别 (D)在C中,函数形参可以说明为register变量 8. 有以下程序

main( ) { int i,s=0;

for(i=1;i<10;i+=2) s+=i+1; printf(“%d\\n”,s); }

程序执行后的输出结果是 ( )。

(A) 自然数1~9的累加和 (B) 自然数1~10的累加和 (C) 自然数1~9中的奇数之和 (D) 自然数1~10中的偶数之和 9. 以下叙述中不正确的是( )。

(A) 在不同的函数中可以使用相同名字的变量 (B) 函数中的形式参数是局部变量

(C) 在一个函数内定义的变量只在本函数范围内有效

(D) 在一个函数内的复合语句中定义的变量在本函数范围内有效 10. 设有以下函数:

f ( int a) { int b=0;

static int c = 3; b++; c++; return(a+b+c); }

如果在下面的程序中调用该函数,则输出结果是( )。 main()

{ int a = 2, i;

for(i=0;i<3;i++) printf(\"%d\\n\ }

(A) 7 (B) 7 (C) 7 (D) 7 8 9 10 7 9 11 13 7

41

11. 有以下程序

int abc(int u,int v); main ()

{ int a=24,b=16,c; c=abc(a,b);

printf(\"%d\\n\}

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) 9

12. 以下程序运行后,输出结果是( )。

func(int a, int b) { static int m=0,i=2; i+=m+1; m=i+a+b; return(m); }

main()

{ int k=4,m=1,p;

p=func(k,m);printf(\"%d,\p=func(k,m);printf(\"%d\\n\}

(A) 8,15 (B) 8,16 (C) 8,17 (D) 8,8 13. 以下程序运行后,输出结果是( )。 int d=1; fun(int p) { int d=5; d+=p++;

printf(\"%d \}

main() { int a=3; fun(a); d+=a++;

printf(\"%d\\n\

(A) 8 4 (B) 9 9 (C) 9 5 (D) 4 4 14. 以下程序的输出结果是( )。

int d=1; fun(int p)

{ static int d=5;

42

d+=p;

printf(\"%d \",d); return(d); }

main( ) { int a=3;

printf(\"%d \\n\",fun(a+fun(d))); }

(A) 6 9 9

(B) 6 6 9

(C) 6 15 15 (D) 6 6 15

15. 以下叙述中错误的是( )。

(A)C程序必须由一个或一个以上的函数组成 (B)函数调用可以作为一个独立的语句存在 (C)若函数有返回值,必须通过return语句返回 (D)函数形参的值也可以传回给对应的实参 16. 有如下函数调用语句

func(rec1,rec2+rec3,(rec4,rec5));

该函数调用语句中,含有的实参个数是( )。 (A) 3

(B) 4

(C) 5

(D) 有语法错误

17. 有如下程序

int func(int a,int b) { return(a+b);} main()

{ int x=2,y=5,z=8,r; r=func(func(x,y),z); printf(“%d\\n”,r); }

该程序的输出的结果是( )。

(A) 12 (B) 13 (C) 14 (D) 15 18. 在C语言中,函数的隐含存储类别是( )。

(A) auto (B) static

(C) extern

(D) 无存储类别

19. 下列叙述中正确的是( )。

(A) C语言编译时不检查语法

(B) C语言的子程序有过程和函数两种(C) C语言的函数可以嵌套定义

(D) C语言所有函数都是外部函数

20. 以下所列的各函数首部中,正确的是( )。

(A) void play(var :Integer,var b:Integer) (B) void play(int a,b)

(C) void play(int a,int b) (D) Sub play(a as integer,b as integer) 21. 以下程序的输出结果是( )。

fun(int x, int y, int z) { z=x*x+y*y; } main() { int a=31; fun(5,2,a); printf(\"%d\

43

} (A) 0

(B) 29

(C) 31

(D) 无定值

22. 当调用函数时,实参是一个数组名,则向函数传送的是( )。

(A) 数组的长度 (B) 数组的首地址 (C) 数组每一个元素的地址 (D) 数组每个元素中的值

23. 以下只有在使用时才为该类型变量分配内存的存储类说明是( )。

(A) auto和static (B) auto和register (C) register和static

(D) extern和register

24. 以下程序的输出结果是( )。

long fun( int n)

{ long s;

if(n= =1 || n= =2) s=2; else s=n-fun(n-1); return s; }

main()

{ printf(\"%ld\\n\(A) 1 (B) 2 (C) 3 (D) 4

25. 以下函数值的类型是( )。

fun ( float x ) { float y; y= 3*x-4; return y; } (A) int

(B) 不确定

(C) void

(D) float

26. 以下程序的输出结果是( )。

int a, b;

void fun()

{ a=100; b=200; } main()

{ int a=5, b=7; fun();

printf(\"%d%d\\n\ (A) 100200 (B) 57 (C) 200100 (D) 75

27. 若有以下程序

#include void f(int n); main()

{ void f(int n); f(5); }

void f(int n)

{ printf(\"%d\\n\

则以下叙述中不正确的是( )。

44

(A) 若只在主函数中对函数f进行说明,则只能在主函数中正确调用函数f

(B) 若在主函数前对函数f进行说明,则在主函数和其后的其它函数中都可以正确调用函数f (C) 对于以上程序,编译时系统会提示出错信息:提示对对f函数重复说明 (D) 函数f无返回值,所以可用void将其类型定义为无值型 28. 以下程序的输出结果是( )。

f(int b[],int m,int n) { int i,s=0;

for(i=m;imain()

{int x,a[]={1,2,3,4,5,6,7,8,9}; x=f(a,3,7);

printf(\"%d\\n\}

(A) 10 (B) 18 (C) 8 (D) 15 29. 以下叙述中正确的是( )。

(A) 构成C程序的基本单位是函数 (B) 可以在一个函数中定义另一个函数

(C) main()函数必须放在其它函数之前 (D) 所有被调用的函数一定要在调用之前进行定义 30. 以下程序的功能是:按顺序读入10名学生4门课程的成绩,计算出每位学生的平均分并输出,

程序如下:

main() { int n,k;

float score,sum,ave; sum=0.0;

for(n=1;n<=10;n++) { for(k=1;k<=4;k++) { scanf(“%f”,&score); sum+=score; }

ave=sum/4.0;

printf(“NO%d:%f\\n”,n,ave); }}

上述程序运行后结果不正确,调试中发现有一条语句出现在程序中的位置不正确。这条语句是( )。

(A) sum=0.0; (B) sum+=score;

(C) ave=sun/4.0; (D) printf(“NO%d:%f\\n”,n,ave);

31. C语言中,函数值类型的定义可以缺省,此时函数值的隐含类型是( )。

(A) void (B) int (C) float (D) double 32. 有以下程序

float fun(int x,int y)

{ return(x+y); } main()

{ int a=2,b=5,c=8;

45

printf(“%3.0f\\n”,fun((int)fun(a+c,b),a-c)); }

程序运行后的输出结果是( )。 (A) 编译出错 (B) 9 (C) 21 (D) 9.0

33. 以下程序中函数sort的功能是对a所指数组中的数据进行由大到小的排序 void sort(int a[],int n) { int i,j,t;

for(i=0;iif(a[i]{ int aa[10]={1,2,3,4,5,6,7,8,9,10},i; sort(&aa[3],5);

for(i=0;i<10;i++) printf(\"%d,\printf(\"\\n\"); }

程序运行后的输出结果是( ) 。

(A)1,2,3,4,5,6,7,8,9,10 (B) 10,9,8,7,6,5,4,3,2,1, (C) 1,2,3,8,7,6,5,4,9,10 (D) 1,2,10,9,8,7,6,5,4,3 34. 有以下程序

main()

{ int aa[4][4]={{1,2,3,4},{5,6,7,8},{3,9,10,2},{4,2,9,6}}; int i,s=0;

for(i=0;i<4;i++) s+=aa[i][1]; printf(“%d\\n”,s);}

程序运行后的输出结果是( ) 。 (A) 11 (B) 19 (C) 13 (D) 20 35. 有以下程序

int a=3; main() { int s=0;

{ int a=5; s+=a++; } s+=a++;printf(“%d\\n”,s); }

程序运行后的输出结果是( )。 (A) 8 (B) 10 (C) 7 (D) 11 36. 有以下程序

int f1(int x,int y) { return x>y?x:y; } int f2(int x,int y) { return x>y?y:x; } main()

{ int a=4,b=3,c=5,d,e,f;

46

d=f1(a,b); d=f1(d,c); e=f2(a,b); e=f2(e,c); f=a+b+c-d-e;

printf(\"%d,%d,%d\\n\}

执行后输出结果是( ) 。

(A) 3,4,5 (B) 5,3,4 (C) 5,4,3 (D) 3,5,4 37. 有如下程序

void f(int x,int y) { int t;

if(xmain()

{ int a=4,b=3,c=5; f(a,b); f(a,c); f(b,c);

printf(\"%d,%d,%d\\n\}

执行后输出结果是( ) 。 (A) 3,4,5 (B) 5,3,4 (C) 5,4,3 (D) 4,3,5

38. 若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是( )。(A)函数调用可以作为独立的语句存在 (B)函数调用可以作为一个函数的实参(C)函数调用可以出现在表达式中 (D)函数调用可以作为一个函数的形参 39. 有以下程序

fun(int a, int b) { if(a>b) return(a); else return(b); }

main()

{ int x=3, y=8, z=6, r; r=fun(fun(x,y), 2*z); printf(\"%d\\n\}

程序运行后的输出结果是 ( )。 (A)3

(B)6

(C)8

(D)12

40. 有以下程序

void f(int v, int w) { int t;

t=v;v=w;w=t; }

main()

{ int x=1,y=3,z=2; if(x>y) f(x,y); else if(y>z) f(y,z); else f(x,z);

47

printf(“%d,%d,%d\\n”,x,y,z); }

执行后输出结果是 ( )。

(A) 1,2,3 (B) 3,1,2 (C) 1,3,2 (D) 2,3,1 41. 有以下程序

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; }

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 42. 有以下程序

char fun(char x,char y) { if(xmain()

{ int a=’9’,b=’8’,c=’7’;

printf(“%c\\n”,fun(fun(a,b) ,fun(b,c))); }

程序的执行结果是 ( )。

(A) 函数调用出错 (B)8 (C)9 (D)7 43. 有以下程序

void sort(int a[],int n) { int i,j,t;

for(i=0;iif(a[i]main()

{ int aa[10]={1,2,3,4,5,6,7,8,9,10},i; sort(aa,10);

for(i=0;i<10;i++) printf(“%d,”,aa[i]); printf(“\\n”); }

其输出结果是( )。

48

(A) 1,2,3,4,5,6,7,8,9,10, (B) 10,9,8,7,6,5,4,3,2,1, (C) 9,2,7,4,5,6,3,8,1,10, (D) 1,10,3,8,5,6,7,4,9,2, 44. 有以下程序

void f(int a[],int i,int j) { int t; if(i{ t=a[i]; a[i]=a[j];a[j]=t; f(a,i+1,j-1); } }

main( )

{ int i,aa[5]={1,2,3,4,5}; f(aa,0,4);

for(i=0;i<5;i++)

printf(“%d,”,aa[i]); printf(“\\n”); }

执行后输出结果是( ) 。

(A) 5,4,3,2,1, (B) 5,2,3,4,1, (C) 1,2,3,4,5, (D) 1,2,3,4,5, 45. 有以下程序

main( ) { int i,n=0;

for(i=2;i<5;i++) { do

{if(i%3)continue; n++;

} while(!i); n++; }

printf(“n=%d\\n”,n); }

程序执行后的输出结果是 ( )。 (A) n=5 (B) n=2 (C) n=3 (D) n=4 46. 有以下程序

int f(int a)

{ return a%2; } 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

47. 在函数调用过程中,如果函数funA调用了函数 funB,函数funB又调用了函数funA,则( (A)称为函数的直接递归调用 (B)称为函数的间接递归调用

)。

49

(C)称为函数的循环调用 (D)C语言中不允许这样的递归调用 48. 有以下程序

int f1(int x,int y){return x>y?x:y;} int f2(int x,int y){return x>y?y:x;} main()

{ int a=4,b=3,c=5,d=2,e,f,g;

e=f2(f1(a,b),f1(c,d)); f=f1(f2(a,b),f2(c,d)); g=a+b+c+d-e-f;

printf(\"%d,%d,%d\\n\ }

程序运行后的输出结果是( )。 (A)4,3,7

(B)3,4,7

(C)5,2,7

(D)2,5,7

49. 以下关于函数的叙述中正确的是( )。

(A)每个函数都可以被其它函数调用(包括main函数) (B)每个函数都可以被单独编译 (C)每个函数都可以单独运行

(D)在一个函数内部可以定义另一个函数 50. 设函数fun的定义形式为

void fun(char ch, float x ) { … }

则以下对函数fun的调用语句中,正确的是( )。

(A)fun(\"abc\(C)fun(\"c\ (D)fun(32,32); 51. 有以下程序

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++; }

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

52. 有以下程序

int fun1(double a){return a*=a;} int fun2(double x,double y) {double a=0,b=0;

a=fun1(x);b=fun1(y);return(int)(a+b); }

main()

50

{double w;w=fun2(1.1,2.0);……} 程序执行后变量w中的值是( )。 (A)5.21 (B)5 (C)5.0 (D)0.0

53. 有以下程序

fun(char p[][10])

{int n=0,i;

for(i=0;i<7;i++) if(p[i][0]==′T′)n++; return n; }

main()

{char str[][10]={\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\,\"Sun\ printf(\"%d\\n\}

程序执行后的输出结果是( )。 (A)1

(B)2

(C)3

(D)0

54. 有以下程序

int fun(int n)

{if(n==1)return 1;

else return(n+fun(n-1)); }

main() {int x;

scanf(\"%d\,x); }

执行程序时,给变量X输入10,程序的输出结果是( )。 (A)55

(B)54

(C)65

(D)45

55. 有以下程序

int fun(int x[],int n) {static int sum=0,i;

for(i=0;imain()

{int a[]={1,2,3,4,5},b[]={6,7,8,9},s=0; s=fun(a,5)+fun(b,4);printf(\"%d\\n\}

程序执行后的输出结果是( )。 (A)45

(B)50

(C)60

(D)55

56. 若函数调用时的实参为变量时,以下关于函数形参和实参的叙述中正确的是( (A)函数的实参和其对应的形参共占同一存储单元 (B)形参只是形式上的存在,不占用具体存储单元 (C)同名的实参和形参占同一存储单元

)。

51

(D)函数的形参和实参分别占用不同的存储单元 57. 以下叙述中错误的是( )。

(A)改变函数形参的值,不会改变对应实参的值 (B)函数可以返回地址值

(C)可以给指针变量赋一个整数作为地址值

(D)当在程序的开头包含文件stdio.h时,可以给指针变量赋NULL 58. 有以下程序

#include int a=1; int f(int c) {static int a=2; c=c+1;

return (a++)+c;} main() { int i,k=0;

for(i=0;i<2;i++){int a=3;k+=f(a);} k+=a;

printf(“%d\\n”,k); }

程序运行结果是( )。 (A) 14 (B) 15 (C) 16 (D) 17

7.2填空题

1. 以下程序运行后的输出结果是 。

int a=5; fun(int b)

{ static int a=10; a+=b++;

printf(\"%d \}

main() { int c=20; fun(c); a+=c++;

printf(\"%d\\n\}

2. 请在以下程序第一行的下划线处填写适当内容,使程序能正确运行。 ( double,double); main()

{ double x,y;

scanf(\"%f%f\printf(\"%f\\n\

52

}

double max(double a,double b) { return(a>b ? a:b); }

3. 在一个C语言源程序文件中所定义的全局变量,其作用域为 。 4. 以下程序的输出结果是__ 。 int fun(int x,int y) { static int m=0,i=2; i+=m+1; m=i+x+y; return m; }

main()

{ int j=4,m=1,k;

k=fun(j,m); printf(\"%d,\k=fun(j,m); printf(\"%d\\n\}

5. 下列程序的输出结果是 。

int t(int x,int y,int cp,int dp) { cp=x*x+y*y; dp=x*x-y*y; }

main( )

{ int a=4,b=3,c=5,d=6; t(a,b,c,d);

printf(\"%d, %d \\n\",c,d);

}

6. 以下程序的功能是:从键盘上输入若干个学生的成绩,统计计算出平均成绩,并输出低于平均

分的学生成绩,用输入负数结束输入。请填空。 main( )

{ float x[1000], sum=0.0, ave, a; int n=0, i;

printf(\"Enter mark:\\n\");scanf(\"%f\",&a); while(a>=0.0&& n<1000) { ; x[n]= a ;

n++; scanf(\"%f\",&a); }

ave= ; printf(\"Output:\\n\"); printf(\"ave=%f\\n\",ave);

for (i=0;iif printf (\"%f\\n\}

7. 以下程序的输出的结果是 。

53

int x=3; main() { int i;

for (i=1;iincre()

{ staic int x=1; x*=x+1;

printf(\" %d\}

8. 以下程序输出的最后一个值是_ 。 int ff(int n) { static int f=l; f=f*n; return f; }

main() { int i;

for(i=1;i<=5;i++ )printf(\"%d\\n\ }

9. 以下程序运行后的输出结果是 。void fun(int x,int y) { x=x+y;y=x-y;x=x-y; printf(“%d,%d,”,x,y); } main()

{ int x=2,y=3; fun(x,y);

printf(“%d,%d\\n”,x,y); }

10. 若有以下程序

int f(int x,int y) { return(y-x)*x; } main()

{ int a=3,b=4,c=5,d; d=f(f(3,4),f(3,5)); printf(\"%d\\n\}

执行后输出的结果是 。 11. 有以下程序

void sum(int a[]) { a[0] = a[-1]+a[1]; } main()

{ int a[10]={1,2,3,4,5,6,7,8,9,10}; sum(&a[2]);

printf(\"%d\\n\

54

}

程序运行后的输出结果是 。 12. 函数fun的功能是计算xn

double fun(double x,int n) { int i; double y=1;

for(i=1;i<=n;i++) y=y*x; return y; }

主函数中已经正确定义m,a,b变量并赋值,并调用fun函数计算:m=a4+b4-(a+b)3。实现这一计算的函数调用语句为 。 13. 以下程序运行后的输出结果是 。

void swap(int x,int y) { int t;

t=x;x=y;y=t;printf(\"%d %d \}

main()

{ int a=3,b=4;

swap(a,b); printf(\"%d %d\}

14. 以下程序运行后的输出结果是 。

fun(int a)

{ int b=0; static int c=3; b++;c++;

return(a+b+c); }

main() { int i,a=5;

for(i=0;i<3;i++) printf(\"%d%d\printf(\"\\n\");} 15. 有以下程序

int sub(int n) { return (n/10+n%10); } main() { int x,y;

scanf(\"%d\y=sub(sub(sub(x))); printf(\"%d\\n\}

若运行时输入:1234<回车>,程序的输出结果是 。 16. 以下程序运行后的输出结果是 。

int f(int a[], int n)

{ if (n >= 1) return f(a, n-1)+a[n-1]; else return 0; }

main()

55

{ int aa[5]={1,2,3,4,5}, s; s=f(aa, 5); printf(\"%d\\n\}

17. 当运行以下程序时,输入abcd,程序的输出结果是: 。

insert(char str[]) {int i;

i=strlen(str); while(i>0)

{str[2*i]=str[i];str[2*i-1]=′*′;i--;} printf(\"%s\\n\}

main()

{char str[40];

scanf(\"%s\",str);insert(str); }

18. 下面程序的运行结果是: 。

fun(int t[],int n) {int i,m;

if(n==1)return t[0]; else

if(n>=2){m=fun(t,n-1); return m; } }

main()

{int a[]={11,4,6,3,8,2,3,5,9,2}; printf(\"%d\\n\",fun(a,10)); }

19. 以下程序的功能是:输出100以内(不含100)能被3整除且个位数为6的所有整数,请填空。

main() (int i,j;

for(i=0; ;i++) {j=i*10+6;

if(j%3!=0 )continue; printf(\"%d\",j); } }

20. 有如下程序

long fib(int n)

{ if(n>2) return(fib(n-1)+fib(n-2)); else return(2); }

main0

{ printf(“%d\\n”,fib(3));

该程序的输出结果是 。

56

21. 以下isprime函数的功能是判断形参a是否为素数,是素数,函数返回1,否则返回0。请填空

int isprime(int a) {int i;

for(i=2;i<=a/2;i++)

if(a%i==0) ; ; }

7.3编程题

1. 写一个函数,将一个字符串中的元音字母复制到另一字符串,然后输出。 2. 写一函数,使给定的一个二维数组(3×3)转置,即行列互换。

3. 写一个判素数的函数,在主函数输入一个整数,输出是否素数的信息。 4. 输入5个学生的4门课的成绩,分别用函数实现下列功能:

(1) 计算每个学生的平均分; (2) 将平均分从高到低排序。

57

第8章 善于使用指针

8.1选择题

1. 若有说明:int i,j=7, *p=&i;,则与i=j;等价的语句是( )。

(A)i=*p; (B)*p=*&j; (C)i=&j; (D)i=**p; 2. 下列函数的功能是( )。

int fun1(char * x) {char *y=x; while(*y++); return(y-x-1);}

(A)求字符串的长度 (B)比较两个字符串的大小

(C)将字符串x复制到字符串y

(D)将字符串x连接到字符串y后面3. 有以下函数

int aaa(char *s) {char *t=s; while(*t++); t--;

return(t-s); }

以下关于aaa函数的功能叙述正确的是( )。 (A)求字符串s的长度 (B)比较两个串的大小 (C)将串s复制到串t (D)求字符串s所占字节数

4. 若有以下调用语句,则不正确的fun函数的首部是 ( )。

main() { …

int a[50],n; …

fun(n, &a[9]); … }

(A) void fun(int m, int x[]) (B) void fun(int s, int h[41]) (C) void fun(int p, int *s) (D) void fun(int n, int a) 5. 有以下程序

void swap1(int c0[], int c1[]) { int t ;

t=c0[0]; c0[0]=c1[0]; c1[0]=t; }

void swap2(int *c0, int *c1) { int t;

t=*c0; *c0=*c1; *c1=t; }

main()

58

{ int a[2]={3,5}, b[2]={3,5};

swap1(a, a+1); swap2(&b[0], &b[1]);

printf(\"%d %d %d %d\\n\}

程序运行后的输出结果是( )。 (A)3 5 5 3

(B)5 3 3 5

(C)3 5 3 5

(D)5 3 5 3

6. 以下程序的输出结果是 ( )。

char cchar(char ch) {

if(ch>=‘A’&&ch<=‘Z') ch=ch-‘A'+‘a'; return ch; }

main()

{ char s[]=\"ABC+abc=defDEF\while(*p)

{ *p=cchar(*p); p++; }

printf(\"%s\\n\}

(A) abc+ABC=DEFdef (B) abc+abc=defdef (C) abcaABCDEFdef (D) abcabcdefdef 7. 若有以下说明:

int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a; 则数值为6的表达式是( )。

(A)*p+6 (B)*(p+6) (C)*p+=5 (D)p+5 8. 下面不能正确进行字符串赋值操作的语句是 ( )。

(A) char s[5]={\"ABCDE\ (B) char s[5]={'A','B','C','D','E'}; (C) char *s;s=\"ABCDEF\"; (D) char *s; scanf(\"%s\9. 以下程序的输出结果是( )。

(A)6 (B) 6789 (C) '6' (D) 789

main( ) { char a[10]={'1','2','3','4','5','6','7','8','9'},*p;

int i; i=8; p=a+i;

printf(\"%s\\n\",p-3); }

10. 若有以下定义和语句:

char *s1=\"12345\printf(\"%d\\n\则输出结果是( )。

(A)4 (B)5 (C)9 (D)10

59

11. 以下不能正确进行字符串赋初值的语句是( )。

(A) char str[5]=\"good!\"; (B) char str[]=\"good!\";

(C) char *str=\"good!\"; (D) char str[5]={‘g',‘o',‘o',‘d'}; 12. 下面程序的输出是( )。

main()

{ int a[10]={ 1,2,3,4,5,6,7,8,9,10},*p=a; printf(\"%d\\n\(A) 3 (B) 4 (C) 1 (D) 2

13. 若有说明:int n=2,*p=&n,*q=p;,则以下非法的赋值语句是( )。

(A) p=q; (B) *p=*q; (C) n=*q; (D) p=n; 14. 有如下说明

int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a; 则数值为9的表达式是( )。

(A) *p+9 (B) *(p+8) (C) *p+=9 (D) 15. 若有以下定义:

char s[20]=\"programming\则不能代表字符o的表达式是( )。

(A)ps+2 (B)s[2] (C)ps[2] (D)*(ps+2) 16. 若有以下定义和语句:

int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;

则不能表示a数组元素的表达式是( )。

(A)*p (B)a[10] (C)*a (D)a[p-a] 17. 下面程序的输出是( )。

main()

{ char *s=\"121\"; int k=0, a=0, b=0; do {k++;

if(k%2= =0) {a=a+s[k]-'0';continue;} b=b+s[k]-'0'; a=a+s[k]-'0'; }while (s[k+1]);

printf(\"k=%d a=%d b=%d\\n\

(A)k=3 a=2 b=3 (B)k=3 a=3 b=2 (C)k=2 a=3 b=2 (D)k=2 a=2 b=3 18. 若有以下的定义:

int a[]={1,2,3,4,5,6,7,8,9,10}, *p=a; 则值为3的表达式是( )。

(A)p+=2, *(p++) (B)p+=2,*++p (C)p+=3, *p++ 19. 设有如下定义:

int arr[]={6,7,8,9,10}; int * ptr;

则下列程序段的输出结果为( )。 ptr=arr;

*(ptr+2)+=2;

p+8 (D)p+=2,++*p 60

printf (\"%d,%d\\n\(A)8,10 (B)6,8 (C)7,9 20. 执行以下程序段后,m的值为( )。

(D)6,10

int a[2][3]={ {1,2,3},{4,5,6} }; int m,*p; p=&a[0][0];

m=(*p)*(*(p+2))*(*(p+4)); (A) 15 (B) 14 (C) 13 (D) 12 21. 有以下程序段

char arr[]=\"ABCDE\"; char *ptr;

for(ptr=arr;ptr输出结果是( )。

(A) ABCD (B) A (C) E B D C C D B E A 22. 以下程序运行后,输出结果是( )。

main()

{ char *s=\"abcde\"; s+=2;

printf(\"%ld\\n\}

(A) cde (B) 字符c的ASCII码值 23. 以下程序运行后,输出结果是( )。

#include ss(char *s) { char *p=s; while(*p) p++; return(p-s); }

main()

{ char *a=\"abded\"; int i; i=ss(a);

printf(\"%d\\n\}

(A) 8 (B) 7 (C) 6 24. 有以下程序

main()

{ int a=7,b=8,*p,*q,*r; p=&a;q=&b; r=p; p=q;q=r;

(D) ABCDE BCDE CDE DE E (C)字符c的地址 (D) (D) 5

61

出错 printf(\"%d,%d,%d,%d\\n\}

程序运行后的输出结果是 ( )。 (A)8,7,8,7 (B)7,8,7,8 (C)8,7,7,8 (D)7,8,8,7 25. 以下程序运行后,如果从键盘上输入:

book <回车> book <空格><回车> 则输出的结果是( )。

#include #include main()

{ char a1[80],a2[80],*s1=a1, *s2=a2; gets(s1); gets(s2);

if(! strcmp(s1,s2)) printf(\"*\"); else printf(\"#\");

printf(\"%d/n\}

(A) *8 (B) #9 (C) #6 (D) *9

26. 若已定义:int a[9],*p=a;并在以后的语句中未改变p的值,不能表示a[1]地址的表达式是

( )。

(A) p+1 (B) a+1 (C) a++ (D) ++p

27. 下面程序把数组元素中的最大值放入a[0]中,则在if 语句中的条件表达式应该是( )。

(A) p>a (B) *p>a[0] (C) *p>*a[0]

#include \"stdio.h\" main( )

{ int a[10]={6,7,2,9,1,10,5,8,4,3},*p=a,i; for(i=0;i<10;i++,p++) if(_______) *a=*p; printf(\"%d\}

28. 以下程序的输出结果是( )。

(A) 123456780 (B) 123 456 780 (C) 12345678 (D) 147 main( )

{ char ch[3][4]={\"123\",\"456\",\"78\, *p[3]; int i; for(i=0;i<3;i++) p[i]=ch[i]; for(i=0;i<3;i++) printf(\"%s\",p[i]); }

29. 以下程序的输出结果是( )。

(A) AfghdEFG (B) Abfhd (C) Afghd #include main( )

{ char *p1,*p2,str[50]=\"ABCDEFG\"; p1=\"abcd\"; p2=\"efgh\";

strcpy(str+1,p2+1); strcpy(str+3,p1+3);

62

(D) *p[0]> *a[0]

(D) Afgd

printf(\"%s\",str); }

30. 若有以下定义和语句:

double r=99, *p=&r; *p=r;

则以下正确的叙述是( )。

(A) 以下两处的*p含义相同,都说明给指针变量p赋值

(B) 在\"double r=99, *p=&r;\"中,把r的地址赋值给了p所指的存储单元 (C) 语句\"*p=r;\"把变量r的值赋给指针变量p (D) 语句\"*p=r;\"取变量r的值放回p中

31. 下列程序执行后的输出结果是(小数点后只写一位) ( 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); }

(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 32. 若已定义:

int a[ ]={0,1,2,3,4,5,6,7,8,9}, *p=a,i;

其中 0≤i≤9, 则对a数组元素不正确的引用是( )。(A) a[p-a]

(B) *(&a[i])

(C) p[i] (D) a[10] 33. 下列程序执行后的输出结果是( ) 。

main() {

int a[3][3], *p,i; p=&a[0][0];

for(i=0; i<9; i++) p[i]=i+1; printf(\"%d \\n\ } (A) 3

(B) 6

(C) 9

(D) 随机数

34. 下列程序的输出结果是 ( )。

int b=2;

int func(int *a) { b += *a; return(b);} main() {

int a=2, res=2; res += func(&a); printf(\"%d \\n\ }

(A) 4 (B) 6 (C) 8 (D) 10

35. 有如下程序段

)。

63

int *p,a=10,b=1; p=&a; a=*p+b;

执行该程序段后,a的值为( )。 (A) 12 (A) < 37. 有以下程序

point(char *p) {p+=3;} main()

{ char b[4]={'a','b','c','d'},*p=b; point(p);printf(\"%c\\n\ }

程序运行后的输出结果是( )。 (A)a

(B)b

(C)c

(D)d

(D) i=**p;

38. 若有说明:int i, j=2,*p=&i;,则能完成i=j;赋值功能的语句是 ( )。 (A) i=*p; (B) * p=*&j; (C) i=&j; 39. 以下定义语句中,错误的是( )。

(B) 11 (B) =

(C) 10

(D) 编译出错

36. 对于基类型相同的两个指针变量之间,不能进行的运算是( )。

(C) +

(D) -

(A) int a[]={1,2}; (B) char *a[3];

(C) char s[10]=\"test\"; (D) int n=5,a[n]; 40. 以下选项中,不能正确赋值的是( )。

(A) char s1[10];s1=\"Ctest\";

(B) char s2[]={'C', 't', 'e', 's', 't'}; (C) char s3[20]=\"Ctest\"; (D) char *s4=\"Ctest\\n\" ;

41. 以下程序调用findmax函数返回数组中的最大值

findmax(int *a,int n) { int *p,*s;

for(p=a,s=a; p-aif ( ) s=p; return(*s); }

main()

{ int x[5]={12,21,13,6,18}; printf(\"%d\\n\}

在下划线处应填入的是( )。

(A) p>s (B) *p>*s (C) a[p]>a[s] (D) p-a>p-s 42. 若有说明语句:int a,b,c,*d=&c;,则能正确从键盘读入三个整数分别赋给变量a、b、c的语

句是( )。

(A) scanf(\"%d%d%d\ (B) scanf(\"%d%d%d\(C) scanf(\"%d%d%d\ (D) scanf(\"%d%d%d\43. 有以下程序

main()

64

{ char s[]=\"159\ p=s;

printf(\"%c\ }

程序运行后的输出结果是( )。 (A)15 (B)16 (C)12 (D)59

44. 有以下程序

#include main()

{ char *p=“abcde\\0fghjik\\0”; printf(“%d\\n”,strlen(p)); }

程序运行后的输出结果是 ( )。

(A) 12 (B) 15 (C) 6 (D) 5 45. 有以下程序

main()

{ char s[]={\"onetwothree\ p=s;

printf(\"%c,%s\\n\}

执行后输出结果是( )。

(A) n,two (B) t,one (C)o,three 46. 有以下程序

main()

{ int x[8]={8,7,6,5,0,0},*s; s=x+3;

printf(\"%d\\n\}

执行后输出结果是( )。

(A) 随机值 (B) 0 (C) 5 (D) 47. 有以下程序

void fun(int *a,int i,int j) { int t; if(i{ t=a[i];a[i]=a[j];a[j]=t; fun(a,++i,--j); } }

main()

{ int a[]={1,2,3,4,5,6},i; fun(a,0,5);

for(i=0;i<6;i++) printf(\"%d\

(D) o,two 6 65

}

执行后的输出结果是( )。

(A) 6 5 4 3 2 1 (B) 4 3 2 1 5 6 (C) 4 5 6 1 2 3 (D) 1 2 3 4 5 6 48. 以下程序

#include main()

{ char str[][20]={\"Hello\printf(\"%d\\n\}

程序运行后的输出结果是( )。 (A)0 (B)5 (C)7 (D)20 49. 已定义以下函数

fun(char *p2, char *p1)

{ while((*p2=*p1)!='\\0'){ p1++;p2++; } } 函数的功能是 ( )。

(A)将p1所指字符串复制到p2所指内存空间 (B)将p1所指字符串的地址赋给指针p2 (C)对p1和p2两个指针所指字符串进行比较 (D)检查p1和p2两个指针所指字符串中是否有'\\0'

50. 设有定义:int a,*pa=&a;以下scanf语句中能正确为变量a读入数据的是( (A) scanf(“%d”,pa) (B) scanf(“%d”,a) (C) scanf(“%d”,&pa) (D) scanf(“%d”,*pa)

51. 设有定义:int n=0,*p=&n,**q=&p;则以下选项中,正确的赋值语句是 ( (A) p=1; (B) *q=2; (C) q=p; (D) *p=5; 52. 有以下程序段

int a[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3],b; b=p[5];

b中的值是 ( )。

(A) 5 (B) 6 (C) 8 (D) 9 53. 有以下程序

void sum(int *a) { a[0]=a[1];} main( )

{ int aa[10]={1,2,3,4,5,6,7,8,9,10},i; for(i=2;i>=0;i--) sum(&aa[i]); printf(“%d\\n”,aa[0]); }

执行后的输出结果是( )。

(A) 4 (B) 3 (C) 2 (D) 1 54. 有以下定义

#include char a[10],*b=a;

)。

)。

66

不能给数组a输入字符串的语句是( )。

(A) gets(a) (B) gets(a[0]) (C) gets(&a[0]); (D) gets(b) 55. 以下程序段中,不能正确赋字符串(编译时系统会提示错误)的是( ) 。

(A) char s[10]=”abcdefg”; (B) char t[]=”abcdefg”,*s=t;

(C) char s[10];s=”abcdefg”; (D) char s[10];strcpy(s,”abcdefg”); 56. 有以下程序

int a=2;

int f(int *a) {return (*a) ++;} main( )

{ int s=0;

{ int a=5; s+=f(&a) ; }

s+=f(&a); printf(“%d\\n”,s); }

执行后输出结果是 ( )。

(A) 10 (B) 9 (C) 7 57. 有以下程序

main()

{ int a=7,b=8,*p,*q,*r; p=&a;q=&b; r=p; p=q;q=r;

printf(\"%d,%d,%d,%d\\n\}

程序运行后的输出结果是 ( )。

(A)8,7,8,7 (B)7,8,7,8 (C)8,7,7,8 (D)7,8,8,7 58. 有以下程序

main()

{char str[][10]={\"China\printf(\"%s\\n\}

程序运行后的输出结果是( )。 (A) China (B)Bejing (C)ng (D)ing 59. 有以下程序

main()

{ int a[3][3]={0},*p,i; p=&a[0][0];

for(i=0;i<9;i++)*p++=i;

for(i=0;i<3;i++)printf(\"%d\

}

程序运行后的输出结果是( )。 (A)012 (B)123

(C)234

(D)345

(D) 8 67

60. 以下语句或语句组中,能正确进行字符串赋值的是( )。

(A)char *sp;*sp=\"right!\"; (B)char s[10];s=\"right!\"; (C)char s[10];*s=\"right!\"; (D)char *sp=\"right!\"; 61. 有以下程序

main()

{ char s[]=\"159\ p=s;

printf(\"%c\ }

程序运行后的输出结果是( )。 (A)15 (B)16 (C)12 (D)59

62. 有以下程序

point(char *p){p+=3;} main()

{ char b[4]={'a','b','c','d'},*p=b; point(p);printf(\"%c\\n\ }

程序运行后的输出结果是( )。 (A)a

(B)b

(C)c

(D)d 63. 若有定义:int x=0, *p=&x;,则语句printf(\"%d\\n\的输出结果是( )。

(A)随机值

(B)0

(C)x的地址

(D)p的地址

64. 有以下程序

# include

void f(char *s, char *t) { char k;

k=*s; *s=*t; *t=k; s++; t--;

if (*s) f(s, t); }

main()

{ char str[10]=\"abcdefg\ *p ; p=str+strlen(str)/2+1; f(p, p-2);

printf(\"%s\\n\}

程序运行后的输出结果是( )。

(A)abcdefg (B)gfedcba (C)gbcdefa (D)abedcfg

65. 若有说明语句:double *p,a;则能通过scanf语句正确给输入项读入数据的程序段是( (A)*p=&a; scanf(\"%1f\",p);(B)*p=&a; scanf(\"%f\",p); (C)p=&a; scanf(\"%1f\",*p);(D)p=&a; scanf(\"%lf\",p); 66. 有以下程序

void fun1(char *p) {char *q; q=p;

)。68

while(*q!=′\\0′)

{ (*q)++; q++; ) }

main()

{char a[]={\"Program\"), *p; p=&a[3];fun1(p);printf(\"%s\\n\",a); }

程序执行后的输出结果是( )。 (A)Prohsbn ( )。

(A)scanf(\"%d\ (B)scanf(\"%d%d%d\(C)scanf(\"%d\ (D)scanf(\"%d\

68. 设有定义:char p[]={’1’,’2’,’3’},*q=p; ,以下不能计算出一个char型数据所占字节数的表达式

是( )。

(A)sizeof(p) (B)sizeof(char) (C) sizeof(*q) (D)sizeof(p[0]) 69. 有以下程序

#include

int fun(char s[]) {int n=0;

while(*s<=’9’&&*s>=’0’) {n=10*n+*s-’0’;s++;} return(n); }

main()

{char s[10]={’6’,’1’,’*’,’4’,’*’,’9’,’*’,’0’,’*’}; printf(\"%d\\n\}

程序运行的结果是( )。 (A)9 (B)61490 (C)61 (D)5 70. 有以下程序

#include void fun(int n,int *p) { int f1,f2;

if(n==1||n==2) *p=1; else

{ fun(n-1,&f1); fun(n-2,&f2); *p=f1+f2; } }

main() { int s;

fun(3,&s); printf(\"%d\\n\}

程序的运行结果是( )。

69

(B)Prphsbn (C)Progsbn (D)Program

67. 若在定义语句:int a,b,c,*p=&c;之后,接着执行以下选项中的语句,则能正确执行的语句是

(A)2 (B)3 (C)4 (D)5

8.2填空题

1. 以下程序运行后,输出结果是 。

main()

{ static char a[]=\"ABCDEFGH\char *p1,*p2; int k;

p1=a; p2=b;

for(k=0;k<=7;k++) if(*(p1+k)==*(p2+k)) printf(\"%c\printf(\"\\n\"); }

2. 下列程序的输出结果是 。

#include main( )

{ char b[ ]=\"ABCDEFG\"; char *chp=&b[7]; while(- -chp>&b[0]) putchar(*chp); putchar(\"\\n\"); }

3. 下面程序的输出结果是 。

char b[]=\"abcd\"; main()

{ char *chp;

for(chp=b; *chp; chp+=2) printf(\"%s\printf(\"\\n\");}

4. 以下程序输出的是 。 main( )

{ int i=3, j=2; char *a=\"dcba\";

printf(\"%c%c\\n\}

5. 以下程序的输出结果是 。

#include #include main()

{ char b1[8]=\"abcdefg\while (--pb>=b1) strcpy(b2,pb); printf(\"%d\\n\}

70

6. 以下程序的输出结果是 。

main()

{ int arr[ ]={30,25,20,15,10,5}, *p=arr; p++;

printf(\"%d\\n\}

7. 以下程序运行后的输出结果是__ 。

main()

{ char s[ ]=\"9876\ for ( p=s ; p8. 以下程序运行后的输出结果是 _ __ 。

main()

{ char a[]=\"123456789\ int i=0; p=a;

while(*p)

{ if(i%2) *p='*’; p++;i++; }

puts(a); }

9. 下列程序的输出结果是 。

#include main( )

{ char b[30],*chp; strcpy(&b[0],\"CH\"); strcpy(&b[1],\"DEF\"); strcpy(&b[2],\"ABC\"); printf(\"%s \\n\",b); }

8.3编程题

1. 输入3个整数a,b,c,要求按大小顺序将它们输出。用函数实现改变这3个变量的值。 2. 有一字符串a,内容为:My name is Li jilin.,另有字符串b,内容为:Mr. Zhang Haoling is very

happy.。写一函数,将字符串b中从第5个到第17个字符复制到字符串a中,取代字符串a中第12个字符以后的字符。输出新的字符串。

71

第9章 结构体

9.1选择题

1.定义以下结构体类型 struct s { char b; float f;

};

则语句printf(\"%d\ s))的输出结果为( )。 (A) 3 (B) 5 (C) 6 (D) 4

2.当定义一个结构体变量时,系统为它分配的内存空间是( )。

(A)结构中一个成员所需的内存容量 (B)结构中第一个成员所需的内存容量 (C)结构体中占内存容量最大者所需的容量 (D)结构中各成员所需内存容量之和3.定义以下结构体数组 struct c { int x; int y; }s[2]={1,3,2,7};

语句printf(\"%d\的输出结果为 ( )。

(A) 14 (B) 6

(C) 2

(D) 21

4.下面程序的运行结果是( )。 struct KeyWord { char Key[20];

int ID;

}kw[]={\"void\main() { printf(\"%c,%d\\n\

} (A) i,3

(B) n,3

(C) f,4

(D) l,4

5.如果有下面的定义和赋值,则使用( )不可以输出n中data的值。 struct SNode {

72

unsigned id;

int data;

}n,*p; p=&n; (A) p.data

(B) n.data

(C) p->data

(D) (*p).data

6.根据下面的定义,能输出Mary的语句是( )。

struct person { char name[9]; int age;

};

struct person class[5]={\"John\

(A) printf(\"%s\\n\ (B) printf(\"%s\\n\(C) printf(\"%s\\n\ (D) printf(\"%s\\n\7.定义以下结构体数组 struct date { int year; int month; int day; }; struct s

{ struct date birthday; char name[20];

} x[4]={{2008, 10, 1, \"guangzhou\语句

printf(\"%s,%d,%d,%d\的输出结果为( (A) guangzhou,2009 (B) guangzhou,2008 (C) Tianjin,2008 (D) Tianjin,2009

9.2填空题

1. 运行下列程序段,输出结果是 。 struct country { int num; char name[20];

}x[5]={1, \"China\ struct country *p;

)。73

p=x+2;

printf(\"%d,%s\2. 定义以下结构体数组 struct { int num; char name[10];

}x[3]={1,\"china\

语句printf(\"\\n%d,%s\的输出结果为 。 3. 运行下列程序,输出结果是 。 struct contry {

int num; char name[20];

}x[5]={1,\"China\main() { int i;

for (i=3;i<5;i++)

printf(\"%d%c\}

9.3编程题

1.输入两个学生的学号、姓名和成绩,输出成绩较高学生的学号、姓名和成绩。

2.有3个候选人,每个选民只能投票选一人,要求编一个统计选票的程序,先后输入被选人的名字,最后输出各人得票结果。

74

第10章 利用文件保存数据

10.1选择题

1. 有以下程序

#include main()

{ printf(\"%d\\n\

程序运行后的输出结果是( )。 (A)0

(B)1 (C)-1

(D)NULL没定义,出错 2. 若fp是指向某文件的指针,且已读到该文件的末尾,则C语言函数feof( fp)的返回是( )。(A)EOF

(B)-1

(C)非零值

(D)NULL

3. 下列关于C语言数据文件的叙述中正确的是( )。

(A)文件由ASCII码字符序列组成,C语言只能读写文本文件 (B)文件由二进制数据序列组成,C语言只能读写二进制文件

(C)文件由记录序列组成,可按数据的存放形式分为二进制文件和文本文件 (D)文件由数据流形式组成,可按数据的存放形式分为二进制文件和文本文件 4. 在C程序中,可把整型数以二进制形式存放到文件中的函数是 ( )。

(A) fprintf函数 (B) fread函数 (C) fwrite函数 (D) fputc函数

5. 有以下程序

#include main()

{ FILE *fp; int i=20,j=30,k,n; fp=fopen(“d1.dat”“w”) ;

fprintf(fp,“%d\\n”,i);fprintf(fp,“%d\\n”,j); fclose(fp);

fp=fopen(“d1.dat”, “r”);

fp=fscanf(fp,“%d%d”,&k,&n); printf(“%d%d\\n”,k,n); fclose(fp); }

程序运行后的输出结果是( ) 。 (A) 20 30 (B) 20 50 (C) 30 50 (D) 30 20 6. 以下叙述中错误的是( )。

(A) 二进制文件打开后可以先读文件的末尾,而顺序文件不可以 (B) 在程序结束时,应当用fclose函数关闭已打开的文件

(C) 在利用fread函数从二进制文件中读数据时,可以用数组名给数组中所有元素读入数据(D) 不可以用FILE定义指向二进制文件的文件指针 7. 有如下程序

75

#include main()

{FILE *fp1;

fp1=fopen(\"f1.txt\fprintf(fp1,\"abc\"); fclose(fp1); }

若文本文件f1.txt中原有内容为:good,则运行以上程序后文件f1.txt中的内容为( )。 (A)goodabc (B)abcd (C)abc (D)abcgood 8. 以下叙述中不正确的是( )。

(A)C语言中的文本文件以ASCⅡ码形式存储数据 (B)C语言中对二进制文件的访问速度比文本文件快 (C)C语言中,随机读写方式不适用于文本文件 (D)C语言中,顺序读写方式不适用于二进制文件 9. 以下叙述中错误的是( )。

(A)C语言中对二进制文件的访问速度比文本文件快 (B)C语言中,随机文件以二进制代码形式存储数据 (C)语句 FILE fp; 定义了一个名为fp的文件指针 (D)C语言中的文本文件以ASCII码形式存储数据 10. 有以下程序

#include main()

{ FILE *fp; int i, k, n;

fp=fopen(\"data.dat\for(i=1; i<6; i++) { fprintf(fp,\"%d \

if(i%3==0) fprintf(fp,\"\\n\"); }

rewind(fp);

fscanf(fp, \"%d%d\fclose(fp); }

程序运行后的输出结果是( )。 (A)0 0

(B)123 45

(C)1 4

(D)1 2

11. 有以下程序

#include main()

{FILE *fp; int a[10]={1,2,3,0,0},i; fp=fopen(\"d2.dat,\"wb\"); fwrite(a,sizeof(int),5,fp); fwrite(a,sizeof(int),5,fp); fclose(fp);

fp=fopen(\"d2.dat\fread(a,sizeof(int),10,fp);

76

fclose(fp);

for(i=0;i<10;i++) printf(\"%d\}

程序的运行结果是( )。

(A)1,2,3,0,0,0,0,0,0,0, (B)1,2,3,1,2,3,0,0,0,0, (C)123,0,0,0,0,123,0,0,0,0, (D)1,2,3,0,0,1,2,3,0,0,

12. 执行以下程序后,test.txt文件的内容是(若文件能正常打开) ( )。

#include main()

{FILE *fp;

char *s1=\"Fortran\",*s2=\"Basic\";

if((fp=fopen(\"test.txt\

{printf(\"Can′t open test.txt file\\n\");exit(1);}

fwrite(s1,7,1,fp); /*把从地址s1开始的7个字符写到fp所指文件中*/ fseek(fp,0L,SEEK_SET); /*文件位置指针移到文件开头*/ fwrite(s2,5,1,fp); fclose(fp); }

(A)Basican 13. 有以下程序

#include

void WriteStr(char *fn,char *str) { FILE *fp;

fp=fopen(fn,\"w\");fputs(str,fp);fclose(fp); }

main()

{ WriteStr(\"t1.dat\ WriteStr(\"t1.dat\ }

程序运行后,文件t1.dat中的内容是( )。 (A)start (B)end (C)startend (D)endrt

(B)BasicFortran (C)Basic (D)FortranBasic

10.2填空题

1. 若fp已正确定义并指向某个文件,当未遇到该文件结束标志时函数feof(fp)的值为 。 2. 以下程序由终端键盘输入一个文件名,然后把从终端键盘输入的字符依次存放到该文件中,用#

作为结束输入的标志。请填空。

#include main( ) { FILE * fp; char ch,fname [10];

printf(\"Input the name of file\\n\");

77

gets(fname); gets(fname);

if((fp= )= =NULL) { printf(\"Cannot open\\n\"); exit(0); } printf(\"Enter data\\n\"); while((ch=getchar())!='#') fputc(ch ,fp); fclose(fp); }

3. 以下程序的功能是:从键盘上输入一个字符串, 把该字符串中的小写字母转换为大写字母,输出

到文件test.txt中,然后从该文件读出字符串并显示出来.请填空. #include main()

{ FILE *fp;

char str[100]; int i=0;

if((fp=fopen(\" \{ printf(\"can't open this file.\\n\");exit(0);} printf(\"input astring:\\n\"); gets (str); while (str[i])

{ if(str[i]='a'&&str[i]<='z') str[i]=___ ; fputc(str[i],fp); i++;} fclose(fp);

fp=fopen(\"test.txt\ ); fgets(str,100,fp); printf(\"%s\\n\fclose(fp);)

4. 下面程序把从终端读入的10个整数以二进制方式写到一个名为bi.dat的新文件中,请填空.

#include FILE *fp; main() { int i,j;

if((fp= )==NULL) exit(0); for(i=0; i<10; i++) { scanf(\"%d\

fwrite(&j,sizeof(int),1, fp ); }

; }

5. 以下程序中用户由键盘输入一个文件名,然后输入一串字符(用#结束输入)存放到此文件文件

中形成文本文件,并将字符的个数写到文件尾部,请填空。 #include main( )

78

{ FILE *fp;

char ch,fname[32]; int count=0;

printf(\"Input the filename :\"); scanf(\"%s\",fname); if((fp=fopen( ,\"w+\"))==NULL) { printf(\"Can't open file:%s \\n\",fname); exit(0);} printf(\"Enter data:\\n\");

while((ch=getchar())!=\"#\"){ fputc(ch,fp); count++;} fprintf( fp ,\"\\n%d\\n\", count); fclose(fp); }

6. 下面程序把从终端读入的文本(用@作为文本结束标志)输出到一个名为bi.dat的新文件中。请

填空。

#include FILE *fp; { char ch;

if( (fp=fopen ( \"bi.dat\while( (ch=getchar( )) !='@') ; fclose(fp); }

7. 以下程序段打开文件后,先利用fseek函数将文件位置指针定位在文件末尾,然后调用ftell函

数返回当前文件位置指针的具体位置,从而确定文件长度,请填空。 FILE *myf; long f1;

myf=fopen (\"test.t\

; f1=ftell(myf); fclose(myf); printf(\"%d\\n\

8. 以下程序用来统计文件中字符个数。请填空。

#include main()

{ FILE *fp; long num=0L;

if((fp=fopen(\"fname.dat\ { printf(\"Open error\\n\"); exit(0);} while( ) { fgetc(fp); num++;}

printf(\"num=%1d\\n\ fclose(fp); }

10.3编程题

1. 从键盘读入若干个字符串,对它们按字母大小的顺序排序,然后把排好序的字符串送到磁盘文

件中保存。

79

2. 在磁盘文件stu.dat上存有10个学生的数据,每个学生信息包括学号、姓名、成绩和住址。今要

求将该文件中的第1、3、5、7、9个学生数据输入计算机,并在屏幕上显示出来。

80

第二部分 参考答案 第1章C语言概述

1.1选择题

题号 答案 1 C 2 C 3 B 4 A 5 B 6 D 7 C 1.2填空题

题号 答案 1 .c 2 主函数(或main函数) 1.3编程题

编写一个C程序,输出以下信息:

******************************

Very good!

******************************

void main() {

printf(“******************************\\n Very good!\\n ****************************\\n”); }

第2章 数据的存储与运算

2.1选择题

题号 答案 题号 答案 题号 答案 题号 1 B 11 D 21 B 31 2 C 12 D 22 A 32 3 B 13 C 23 D 33 4 A 14 A 24 B 34 5 C 15 A 25 B 35 6 C 16 A 26 C 36 7 D 17 D 27 D 37 8 B 18 C 28 A 38 9 C 19 D 29 C 39 10 C 20 D 30 C 40 81

答案 题号 答案 B 41 B D 42 C D 43 A A 44 D A 45 D D 46 A C 47 D A 48 C A 49 D A 2.2填空题

题号 答案 题号 答案 1 5 6 B 66 2 b 7 10,2 3 1.0或1 4 2,1 5 -3 2.3编程题

1. 假如我国国民生产总值的年增长率为10%,计算10年后我国国民生产总值与现在相比增长多少

百分比?计算公式为:

其中r为年增长率;n为年数;P为与现在相比的百分比。

#include #include void main () {

int n; double p,r; n=10; r=0.1;

p=pow((1+r),n); }

printf(\"国民生产总值增长的百分比p=%f\\n\

2. 在一个笼子里同时养着一些鸡和兔子,你想了解有多少只鸡和多少只兔,主人对你说:我只告

诉你鸡和兔的总头数是16和总脚数是40,你能不能自己计算有多少只鸡和多少只兔?

#include void main()

{ int h,f,x,y; /*x是鸡的数目,也是兔子数*/ h=16; /*总头数*/ f=40; /*总脚数*/

y=(4* h-f)/2; /*假设都是兔子*/ x=h-y;

printf(“%d%d\\n”,x,y); }

82

第3章 最简单的程序设计-顺序程序设计

3.1选择题

题号 答案 题号 答案 题号 答案 题号 答案 题号 答案 1 D 11 B 21 C 31 C 41 B 2 C 12 A 22 A 32 C 42 A 3 B 13 A 23 B 33 A 43 B 4 B 14 A 24 B 34 B 44 D 5 D 15 A 25 A 35 A 45 A 6 A 16 B 26 B 36 C 46 A 7 D 17 C 27 C 37 C 47 B 8 C 18 B 28 C 38 C 9 A 19 D 29 C 39 D 10 C 20 D 30 B 40 C 3.2填空题

题号 题号 答案 3 12 34 1 4 i=10,j=20 5 n1=%d\\nn2=%d\\n 6 11 2 顺序结构 选择结构 循环结构 7 1 B 8 67 G 答案 printf(\"a=%d,b=%d\",a,b); 3.3编程题

1. 设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。用scanf

输入数据,输出计算结果,输出时要求有文字说明,取小数点后2位数字。请编程序。

#include

#include #define PI 3.14 void main()

{double r,h,c,s,sq,vq,vz;/*r是半径,h是圆柱的高,c是圆的周长,s是圆的面积,sq是圆球表面积,vq是球的体积,vz是圆柱体积*/

printf(\"请输入半径和高\\n\"); scanf(\"%lf,%lf\c=2*PI*r;

s=PI*pow(r,2); sq=4*PI*pow(r,2); vq=4*PI*pow(r,3)/3; vz=s*h;

printf\"圆的周长=%.2f\\n圆的面积=%.2f\\n圆球表面积=%.2f\\n球的体积=%.2f\\n圆柱体积

83

=%.2f\\n\}

2. 输入一个华氏温度,要求输出一个摄氏温度。公式为:

#include void main() { }

3. 输入三角形的三边长,求三角形面积。

为简单起见,设输入的三边长a、b、c能构成三角形。从数学知识已知求三角形面积的公式为

其中s=(a+b+c)/2

#include #include void main()

{ double a,b,c,s,area;

scanf(\"%lf,%lf,%lf”,&a,&b,&c); s=(a+b+c)/2;

area=sqrt(s*(s-a)*(s-b)*(s-c)); printf(“三角形面积=%f\\n”, area); }

4. 输入一个小写字母,将其转换为大写字母。

#include void main() { char c;

c=getchar(); c=c-32;

putchar(c);

double f,c;/*f是华氏温度,c是摄氏温度*/ printf(\"请输入华氏温度f=\"); scanf(\"%lf\c=5*(f-32)/9;

printf(\"摄氏温度=%f\\n\

}

第4章 选择结构程序设计

4.1选择题

题号 答案 1 D 2 D 3 A 4 D 5 C 6 D 7 A 8 C 9 B 10 B 84

题号 11 12 13 14 15 16 17 18 19 20 答案 D D B A C C B A D A 题号 21 22 23 24 25 26 27 28 答案 B C A B D A D B 4.2填空题

题号 1 2 3 4 答案 (a+b>c)&&(a+c>b)&&(b+c>a) (x>10&&x<100)||x<0 x= =0 yes 题号 5 6 7 8 答案 x>5||x<-5 585858 20,0 5 0 3 题号 9 10 答案 -4 1 4.3编程题

1. 有一函数:

写一程序,输入x,输出y值。

#include void main() { float x,y;

printf(\"输入x后回车\"); scanf(\"%f\ if(x<1) y=x;

else if(x<10) y=2*x-1; else y=3*x-11;

printf(\"y=%f\\n\ }

2. 给一个不多于5位的正整数,要求:(1)求出它是几位数;(2)分别打印出每一位数字;

85

#include void main() {

int num,wsh=0;

int ww,qw,bw,sw,gw; scanf(\"%d\if (num<=9) wsh=1;

else if (num<=99) wsh=2; else if (num<=999) wsh=3; else if (num<=9999) wsh=4; else wsh=5;

printf(\"输入的是一个%d位数,\ printf(\"各个位的数字分别为:\");

switch (wsh) { case 5:ww=num%100000/10000;printf(\"%d,\ case 4:qw=num%10000/1000;printf(\"%d,\ case 3:bw=num%1000/100;printf(\"%d,\ case 2:sw=num%100/10;printf(\"%d,\ case 1:gw=num%10/1;printf(\"%d\ default:printf(\"\\n\"); } }

3. 由键盘输入3个整数x,y,z,输出其中的最大数,请编程序。

#include

void main()

{ int a,b,c,max;

printf(\"输入第一个数后回车\"); scanf(\"%d\ printf(\"输入第二个数后回车\"); scanf(\"%d\

printf(\"输入第三个数后回车\");

86

scanf(\"%d\ max=a;

if(b>max) max=b; if(c>max) max=c;

printf(\"max=%d\\n\ }

4. 给出一百分制成绩,要求输出成绩等级‘A’、 ‘B’、 ‘C’、 ‘D’、 ‘E’。90分以上为‘A’,

80~89分为‘B’, 70~79分为‘C’, 60~69分为‘D’,60分以下为‘E’。

#include

void main() {

float score ; char grade ;

printf(\"输入百分制成绩\"); scanf(\"%f\

if(&score>100) printf(\"输入有误\"); else if(score>=90) grade='A';

else if(8 score>=80) grade='B'; else if(score>=70) grade='C'; else if(score>=60) grade='D'; else grade='E';

printf(\"等级为%c\\n\ }

第5章循环结构程序设计

87

5.1选择题

题号 1 2 3 4 5 6 7 8 9 10 答案 B D C D B A B A C D 题号 11 12 13 14 15 16 17 18 19 20 答案 B D B A D C C D A A 题号 21 22 23 24 25 26 27 28 29 30 答案 C D A B B A D A B D 题号 31 32 33 34 35 36 37 38 39 40 答案 B C B C D D A B B B 题号 41 答案 B 5.2填空题

题号 1 2 3 4 5 答案 1 3 2 18 0 52 5 题号 6 7 8 答案 X 6 0 5.3编程题

1. 输入两个正整数m和n,求其最大公约数和最小公倍数。

void main() { int m,n,p,r,a,t;

printf(\"请输入第一个数:\\n\") ;

scanf(\"%d\printf(\"请输入第二个数:\\n\") ; scanf(\"%d\ p=m*n; if (m88

n=r; r=m%n; } a=p/n; printf(\"%d,%d\\n\} 202. 求

n! (即求1!+2!+3!+4!+…+10!)。

n1#include void main() {

long int i=1,sum=0; int n;

for(n=1;n<=10;n++) {

i=i*n;

sum=sum+i; }

printf(\"1!+2!+.....+10!=%d\\n\}

3. 计算1到10之间奇数之和及偶数之和。

#include void main() { int a, b, i; a=b=0;

for(i=0;i<=10;i+=2) a+=i;

89

for(i=1;i<=10;i+=2) b+=i;

printf(\"偶数之和=%d\\n\printf(\"奇数之和=%d\\n\ }

4. 有一分数序列

2/1,3/2,5/3,8/5,13/8,21/13,…·求出这个数列的前20项之和。

#include void main() { int i;

float sum=0,fz=2,fm=1,temp; for(i=0;i<20;i++) {

sum=sum+fz/fm; temp=fz; fz=fz+fm; fm=temp; }

printf(\"前20项之后为%f\\n\

5. 打印出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身。

例如,153是一水仙花数,因为153=13+53+33。

#include

90

void main() {

int ge,shi,bai,number;

for(number=100;number<1000;number++){ bai=number/100; shi=(number%100)/10; ge=number%10;

if(number==bai*bai*bai+shi*shi*shi+ge*ge*ge) printf(\"\\nnumber=%d\\n\ }

}

6. 输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。

#include void main() {

char c;

int letters=0,space=0,digit=0,other=0; printf(\"请输入一行字符:\\n\"); for(;(c=getchar())!='\\n';) {

if(c>='a'&&c<='z'||c>='A'&&c<='Z') letters++; else if(c==' ') space++;

else if (c>='0'&&c<='9') digit++; else other++; }

91

printf(\"字母数:%d\\n空格数:%d\\n数字数:%d\\n其他字符数:%d\\n\}

7. 求100以内的素数。

#include #include void main() {

int m,k,i;

for(m=2;m<100;m=m+1) {

k=(int)sqrt(m); for (i=2;i<=k;i++)

if (m%i==0) break;

if (i>=k+1) printf(\"%d \ }

printf (\"\\n\"); }

8. 求出1到1000之内能被7或11整除 但不能同时被7和11整除的所有整数。要求输出结果5

个一行。 #include void main() {

int num,n=0;

printf(\"1000以内能被7或11整除但又不能同时被7和11整除的数有:\\n\"); for(num=1;num<=1000;num++) { if(num%7==0||num%11==0) if(!(num%7==0&&num%11==0)) { printf(\"%5d\ n=n+1;

92

if (n%5==0)printf(\"\\n\"); } }

printf(\"\\n\"); }

9. 编写一个程序,求出1~100之间所有每位数的乘积小于每位数的和的数。例如:13满足1*3<1+3.

#include

void main() {

int num,gw,sw;

for(num=10;num<100;num++) {

gw=num%10; sw=num/10;

if (gw*sw10. 编写一个程序,求出1~100之间所有每位数的乘积大于每位数的和的数。例如:98满足9*8>9+8.

#include

void main() {

int num,gw,sw;

for(num=10;num<100;num++) {

gw=num%10; sw=num/10;

if (gw*sw>gw+sw) printf(\"%3d\} }

11. 编写一个程序,从3个红球,5个白球,6个黑球中任意取出8个球,且其中必须有黑球,输出

所有可能的方案。

93

#include void main() {

int red,white,black;

for(red=0;red<=3;red++)

for(white=0;white<=5;white++) for(black=1;black<=6;black++) if(red+white+black==8)

printf(\"红球=%d,白球=%d,黑球=%d\\n\

}

12. 编写一个程序,从3个红球,5个白球,6个黑球中任意取出8个球,且其中必须有白球,输出

所有可能的方案。

#include void main() {

int red,white,black;

for(red=0;red<=3;red++)

for(white=1;white<=5;white++) for(black=0;black<=6;black++) if(red+white+black==8)

printf(\"红球=%d,白球=%d,黑球=%d\\n\}

13. 编写一个程序,从3个红球,5个白球,6个黑球中任意取出8个球,且其中必须有红球,输出

所有可能的方案。

#include void main() {

int red,white,black;

for(red=1;red<=3;red++)

for(white=0;white<=5;white++) for(black=0;black<=6;black++) if(red+white+black==8)

printf(\"红球=%d,白球=%d,黑球=%d\\n\}

94

第6章 利用数组处理批量数据

6.1选择题

题号 1 2 3 4 5 6 7 8 9 10 答案 C C B B B D B C C B 题号 11 12 13 14 15 16 17 18 19 20 答案 C C C A C A D D A D 题号 21 22 23 24 25 26 27 28 29 30 答案 C D A C B C B D D C 题号 31 32 33 34 35 36 37 38 39 40 答案 D C A C B C B D B B 题号 41 答案 B 6.2填空题

题号 1 2 3 4 5 答案 a[i]>a[j]或a[i]>=a[j] Hello abc 3 6 9 92 题号 6 7 8 9 答案 30 s[i++] 1 3 7 15 abcbcc 6.3编程题

1. 已知一个班10个学生的成绩,要求输入这10个学生的成绩,然后求出它们的平均成绩。#include #define N 10 void main()

{ float score[N]={0},sum=0,ave=0; int i;

for (i=0;iprintf(\"输入第%的个学生的成绩 :\\n\ scanf(\"%f\ }

printf(\"\\n\");

for (i=0;iprintf(\"10个学生的平均成绩=%.2f\ }

95

2. 已知5个学生的4门课的成绩,要求求出每个学生的平均成绩,然后对平均成绩从高到低将各

学生的成绩排序记录。

#include void main() {

int i,j;

float sum,t,ave[5]={0};

float s[5][4]={{78,82,93,74}, {91,82,72,76},

{100,90,85,72}, {67,89,90,65}, {77,88,99,45}};

for (i=0;i<5;i++)//求平均成绩

{ sum=0;

for (j=0;j<4;j++) sum=sum+s[i][j]; ave[i]=sum/4; }

for(j=0;j<4;j++)//对平均成绩排序 for(i=0;i<4-j;i++)

if (ave[i]>ave[i+1]) {t=ave[i]; ave[i]=ave[i+1];

96

ave[i+1]=t;}

printf(\"5个学生的平均成绩从高到低排序为:\\n\"); for(i=0;i<5;i++)

printf(\"%.2f\\n\}

3. 从字符串中删除指定的字符。同一字母的大小写按不同字符处理。

例如:若程序执行时,输入字符串为:turbo c and Borland c++,从键盘上输入字符:n,则输出后变为:turbo c ad borlad c++,如果输入的字符串不存在,则字符串照原样输出。(10分)

#define N 15

#include #include void main() {

char s1[N]={'\\0'},s2[2*N]={'\\0'},delchar; int i,j;

printf(\"请输入要处理的字符串\"); gets(s1);

printf(\"请输入要删除的字符\"); scanf(\"%c\for(i=0,j=0;s1[i]!='\\0';i++) if(s1[i]!=delchar) s2[j++]=s1[i]; s2[i]='\\0';

printf(\"%s\\n\printf(\"%s\\n\}

4. 要求用数组实现求fibonacci数列40个数,并且每输出5个数换行。这个数列有如下特点:第1,

2两个数为1,1。从第3个数开始,该数是其前面两个数之和。即: f1=1 (n=1)

f2=1 (n=2) fn=fn-1+fn-2 (n≥3)

97

#include #define N 20 void main() { int i;

int f[N]={1,1}; for(i=2;i{ if(i%5==0) printf(\"\\n\"); printf(\"%12d\ } } 5. 求一个3×3矩阵主对角线元素之和。

#include main() {

int a[3][3],i,j,sum=0;

printf(\"请输入9个数组元素:\\n\"); for(i=0;i<3;i++) for(j=0;j<3;j++) scanf(\"%d\ printf(\"\\n\"); for(i=0;i<3;i++) for(j=0;j<3;j++) if(i==j)sum+=a[i][j];

printf(\"主对角线的和=%d\\n\

}

6. 将一个数组中的值按逆序重新存放。例如,原来顺序为8,6,5,4,1。要求改为1,4,5,6,8。#include #define N 5 void main() {

int a[N]={0}; int i, temp; printf(\"请输入一维数组的元素值\\n\"); for(i=0; itemp = a[N-1-i]; a[N-1-i] = a[i]; a[i] = temp; }

for (i=0; iprintf(\"%4d\\n\

98

}

7. 有一篇文章,共有3行文字,每行有80个字符。要求分别统计出其中英文大写字母、小写字母、

数字、空格以及其他字符的个数。

#include #include void main()

{ char str[3][100]={'\\0'};

int i,j,upper=0,lower=0,digit=0,space=0,other=0; for(i=0;i<=2;i++) gets(str[i]);

for(i=0;i<=2;i++)

for (j=0;j<80&&str[i][j]!='\\0';j++) { if (str[i][j]>='A'&&str[i][j]<='Z') upper++;

else if (str[i][j]>='a'&&str[i][j]<='z') lower++;

else if (str[i][j]>='0'&&str[i][j]<='9') digit++;

else if (str[i][j]==' ') space++; else

other++; }

printf(\"大写字母个数=%d 小写字母个数= %d 数字个数=%d 空格个数= %d 其他字符个数=%d\ }

8. 用冒泡法对10个整数排序。

#define N 10

#include void main()

{ int a[N];

int i,j,t;

printf(\"input 10 numbers :\\n\"); for (i=0;iprintf(\"\\n\");

for(j=0;jfor(i=0;ia[i+1])

{t=a[i];a[i]=a[i+1];a[i+1]=t;} printf(\"the sorted numbers :\\n\"); for(i=0;i99

第7章 用函数实现模块化程序设计

7.1选择题

题号 1 2 3 4 5 6 7 8 9 10 答案 D C A B A A C D D A 题号 11 12 13 14 15 16 17 18 19 20 答案 C C A C D A D C D C 题号 21 22 23 24 25 26 27 28 29 30 答案 C B B A A B C A A A 题号 31 32 33 34 35 36 37 38 39 40 答案 B B C B A C D D D C 题号 41 42 43 44 45 46 47 48 49 50 答案 D D C A D A B A B D 题号 51 52 53 54 55 56 57 58 答案 C C B A C D C A 7.2填空题

题号 1 2 3 答案 30 25 double max 从定义的位置开始到本源文件结束 题号 4 5 6 答案 8,17 5,6 sum+ =a sum/n x[i]1. 写一个函数,将一个字符串中的元音字母复制到另一字符串,然后输出。 #include #include void main()

{void copyif(char str1[30],char str2[30]);

100

char str1[30]={'\\0'},str2[30]={'\\0'}; gets(str1);//输入原字符串

copyif(str1,str2);//调用复制元音字母的函数 puts(str2);//输出新字符串 }

void copyif(char str1[30],char str2[30])//复制元音字母的函数 { int i,j; char str;

for(i=0,j=0;str1[i]!='\\0'&&i<30;i++) {str=tolower(str1[i]);

if(str=='a'||str=='e'||str=='i'||str=='o'||str=='u') str2[j++]=str1[i]; }

str2[j]='\\0'; }

2. 写一函数,使给定的一个二维数组(3×3)转置,即行列互换。

主函数 转置函数inverse()

#include void main()

{ void inverse(int a[2][3],int b[3][2]); int a[2][3]={{0}}; int b[3][2],i,j;

for (i=0;i<2;i++)//输入原数组 for(j=0;j<3;j++)

scanf(\"%d\ inverse(a, b);//调用转置函数

for (i=0;i<=2;i++)//输出转置后的数组 { for(j=0;j<=1;j++)

printf(\"%5d\ printf(\"\\n\"); } }

void inverse(int a[2][3],int b[3][2])//转置函数 {int i,j; for (i=0;i<=1;i++)

for (j=0;j<=2;j++)

101

b[j][i]=a[i][j]; }

写一个判素数的函数,在主函数输入一个整数,输出是否素数的信息。

在一个main函数中实现

主函数

判断素数的函数

#include #include void main() { int prime(int m);

102

3.

int m,flag;

scanf(\"%d\ flag=prime(m);

if(flag==1) printf(\"%d is a Prime muber\\n\ else printf(\"%d is not a Prime number\\n\ } int prime(int m) {int k,i,flag;

k=(int)sqrt(m+1);/*加1是为了避免在求m时可能出现的误差*/ for (i=2;i<=k;i++)

if(m%i==0) break; if(i>=k+1) flag=1; else flag=0; return flag; }

4. 输入5个学生的4门课的成绩,分别用函数实现下列功能:

(1) 计算每个学生的平均分; (2) 将平均分从高到低排序。 #include void main()

{void average(float s[5][4],float ave[5]);//声明average函数 void sort(float ave[5]);//声明sort函数

int i;

float ave[5]={0};

float s[5][4]={{78,82,93,74}, {91,82,72,76},

{100,90,85,72}, {67,89,90,65}, {77,88,99,45}};

average(s,ave);//调用求平均成绩的average函数 printf(\"5个学生的平均成绩为:\\n\"); for(i=0;i<5;i++)//输出平均成绩 printf(\"%.2f\\n\sort(ave);////调用排序函数sort

printf(\"5个学生的平均成绩从高到低排序为:\\n\"); for(i=0;i<5;i++)//输出排序后的平均成绩 printf(\"%.2f\\n\}

void average(float s[5][4],float ave[5])//求平均成绩的函数 { int i,j; float sum;

for (i=0;i<5;i++)

{ sum=0; //注意此语句的位置

for (j=0;j<4;j++)

103

sum=sum+s[i][j]; ave[i]=sum/4; } }

void sort(float ave[5])//排序函数 {int i,j; float t;

for(j=0;j<4;j++)

for(i=0;i<4-j;i++)

if (ave[i]>ave[i+1]) {t=ave[i]; ave[i]=ave[i+1]; ave[i+1]=t;} }

第8章 善于使用指针

8.1选择题

题号 1 2 3 4 5 6 7 8 9 10 答案 B A A D D B C A B A 题号 11 12 13 14 15 16 17 18 19 20 答案 A A D B A B C A D A 题号 21 22 23 24 25 26 27 28 29 30 答案 D C D C B C B C D D 题号 31 32 33 34 35 36 37 38 39 40 答案 A D B B B C A B D A 题号 41 42 43 44 45 46 47 48 49 50 答案 B A A D C B A C A A 题号 51 52 53 54 55 56 57 58 59 60 答案 D D A B C C C B D D 题号 61 62 63 64 65 66 67 68 69 70 答案 A A B B D A C A C A 8.2填空题

题号 1 2 3 4 5 答案 CDG GFEDCB abcdcd ab 7 题号 6 7 8 9 答案 10 9876 876 1*3*5*7*9 CDABC

104

8.3编程题

1. 输入3个整数a,b,c,要求按大小顺序将它们输出。用函数实现改变这3个变量的值。

#include void main()

{void exchange(int *q1, int *q2, int *q3); int a,b,c,*p1,*p2,*p3;

scanf(\"%d,%d,%d\ p1=&a;p2=&b;p3=&c; exchange(p1,p2,p3);

printf(\"%d,%d,%d\\n\}

void exchange(int *q1, int *q2, int *q3) {void swap(int *pt1, int *pt2); if(*q1<*q2) swap(q1,q2); if(*q1<*q3) swap(q1,q3); if(*q2<*q3) swap(q2,q3); }

void swap(int *pt1, int *pt2) { int temp;

temp=*pt1; *pt1=*pt2; *pt2=temp; }

2. 有一字符串a,内容为:My name is Li jilin.,另有字符串b,内容为:Mr. Zhang Haoling is very

happy.。写一函数,将字符串b中从第5个到第17个字符复制到字符串a中,取代字符串a中第12个字符以后的字符。输出新的字符串。

#include #include void main() {

void copystr( char *,char *);

char stra[40]=”My name is Li jilin.”,strb[40]=”Mr. zhang Haoling is very happy.”; copystr(stra,strb);

printf(“新的字符串是:%s\\n”,stra); }

void copystr( char *p1,char *p2) {

int m=11,n1=4,n2=16; p1=p1+m; p2=p2+n1; while(n1<=n2) {*p1=*p2; p1++; p2++; n1++;

105

}

*p1=’\\0’; }

第9章 结构体

9.1选择题

题号 答案 1 B 2 D 3 C 4 C 5 A 6 B 7 A 9.2填空题

题号 答案 1 3, China 2 2,England 3 4E5S 9.3编程题

1.输入两个学生的学号、姓名和成绩,输出成绩较高学生的学号、姓名和成绩。

#include void main()

{ struct student { int num;

char name[20]; float score;

}student1,student2;

scanf(\"%d%s%f\ scanf(“%d%s%f”,&student2.num, student2.name, &student2.score); printf(\"The higher score is:\\n\"); if (student1.score>student2.score)

printf(\"%d %s %6.2f\\n\ else if (student1.scoreprintf(\"%d %s %6.2f\\n\ else

{printf(\"%d %s %6.2f\\n\ printf(\"%d %s %6.2f\\n\ } }

2.有3个候选人,每个选民只能投票选一人,要求编一个统计选票的程序,先后输入被选人的名字,最后输出各人得票结果。

#include #include

106

struct person { char name[20];

int count; }leader[3]={“Li”,0,“Zhang”,0,“Sun”,0}; void main() { int i,j;

char leader_name[20]; for (i=1;i<=10;i++) { scanf(“%s”,leader_name); for(j=0;j<3;j++) if(strcmp(leader_name, leader[j].name)==0) leader[j].count++; }

for(i=0;i<3;i++)

printf(\"%5s:%d\\n“,leader[i].name, leader[i].count); }

第10章 利用文件保存数据

10.1选择题

题号 1 2 3 4 5 6 7 8 9 10 答案 A C D C A D C D C D 题号 11 12 13 答案 D A B 10.2填空题

题号 1 2 答案 0 fopen(fname,\"w\") (说明:\"w\"内以w开头的字符串均可) 题号 3 答案 test.txt str[i]-32 或str[i]-('a'-'A'或str[i]-'a'+'A' \"r\"或\"r+\"或\"r+t\"或\"rt+\" 题号 4 答案 fopen (\"bi.dat\fclose(fp) 题号 5 6 7 8 答案 fname fputc (ch,fp) fseek(myf,0,SEEK_END) !feof(fp) 10.3编程题

1.

107

#include #include #include void main() { FILE *fp;

char str[3][10],temp[10]; int i,j,k,n=3;

printf(“Enter strings:\\n”); for(i=0;ifor(j=i+1;j0) k=j; if(k!=i) { strcpy(temp,str[i]); strcpy(str[i],str[k]); strcpy(str[k],temp); } }

if((fp=fopen(“D:\\\\CC\\\\string.dat”, “w”))==NULL) {printf(\"can't open file!\\n\"); exit(0);} printf(\"\\nThe new sequence:\\n\"); for(i=0;i#include #include struct st

{ char name[10]; int num; int age;

char addr[15]; }stud[10]; void main()

{ int i; FILE *fp;

if((fp=fopen(“stu_dat”,“rb”))==NULL) { printf(\"can not open file\\n\"); exit(0); } for(i=0;i<10;i+=2)

{ fseek(fp,i*sizeof(struct st),0);

fread(&stud[i], sizeof(struct st),1,fp);

printf(“%-10s %4d %4d %-15s\\n”,stud[i].name,stud[i].num,

108

stud[i].age,stud[i].addr); }

fclose(fp); }

109

因篇幅问题不能全部显示,请点此查看更多更全内容