首 页 行业热点 新车 试驾评测 养车用车 车型库
当前位置:首页C语言程序设计试题(卷)集与答案解析

C语言程序设计试题(卷)集与答案解析

2020-06-11 来源:好土汽车网
导读 C语言程序设计试题(卷)集与答案解析


第一章 基础知识

一.填空 1. 每个C程序都必须有且仅有一个________ 函数。

2. C语言程序开发到执行通常要经过6个阶段即编辑、预处理、________、 链接 、加载 和执行。

3. 软件是程序,以及______、使用和维护所需要的所有文档。

4. 国标中规定:“计算机程序是按照具体要求产生的适合于计算机处理的_________”。

5. 程序设计语言按照书写形式,以及思维方式的不同一般分为低级语言和________两大类 。

6. C语言是由________组成的。

7. C语言的函数可分为主函数main、标准库函数和_________。

8. 一个函数是由两部分组成的,即:________和 函数体。

9. 编译是将C语言所编写的源程序________成机器代码,也称为建立目标代码程序的过程。 10. 程序是由某种程序设计语言编制出来,体现了编程者的控制思想和对计算机执行操作

的要求。不同的任务功能,就会需求不同的软件程序,如:控制计算机本身软硬件协调工作 ,并使其设备充分发挥效力,方便用户使用的系统软件程序,称为操作系统;而为办公自动 化(OA)、管理信息系统(MIS)、人工智能、电子商务、网络互联等等应用而开发的软件程

序,统称为_________。

11. 机器语言是以__________形式表示的机器基本指令的集合,是计算机系统唯一不需要翻 译可以直接识别和执行的程序设计语言。

12. 与机器语言相比,使用汇编语言来编写程序可以用_______来表示指令的操作码和操作对

象,也可以用标号和符号来代替地址、常量和变量。 13. 在编译程序之前,凡以____开头的代码行都先由预处理程序预处理。

14. C程序的执行均是由执行_________开始。 15. 函数体即为包含在{ }内的部分。它分为________和为完成功能任务由若干个C语句

组成的执行部分。 16. C语言程序中一条简单语句是以________字符作为结束符的。 17. C语言是结构化、________的程序设计语言。 18. 由于计算机硬件不能直接识别高级语言中的语句,因此,必须经过“_______程序”, 将用高级语言编写的程序翻译成计算机硬件所能识别的机器语言程序方可执行。 19. 用高级语言编写的程序需翻译成计算机硬件所能识别的机器语言程序方可执行。所以

说,用高级语言进行程序设计,其编程效率高,方便易用,但_______没有低级语言高。

20. 第一个系统体现结构化程序设计思想的教学工具语言是_______语言。

解答: 1. main()

2. 编译

3. 开发

4. 指令序列

5. 高级语言

6. 函数

7. 自定义函数

8. 函数首部

9. 翻译

10. 应用软件

11. 二进制代码

12. 助记符

13. #

14. main函数

15. 声明部分

16. ;(或分号)

17. 模块化

18. 翻译

19. 执行速度

20. PASCAL

二.阅读程序写结果 解答:

三.补充程序 解答: 四.改错题 解答: 五.编程一 解答: 六.编程二 解答:

第二章 常量、变量和表达式

一.填空

1. 以16位计算机为例,若定义long int a; 则变量a占______个字节的内存空间。

2. 以16位计算机为例,若定义double a; 则变量a占______ 个字节的内存空间。

3. 以16位计算机为例,若定义long double; 则变量a占 ______ 个字节的内存空间。

4. 在______ 位机,int型占4个字节。

5. C语言的数据类型有:基本数据类型、构造数据类型、枚举类型、______ 、空类型 。

6. 在C语言中,基本数据类型有:______ 。

7. 整型常量046转换为十进制数等于______ 。

8. 整型常量054转换为十进制数等于______ 。

9. 整型常量0x125转换为十进制数等于 ______。

10. 整型常量0x7C转换为十进制数等于 ______。

11. 整型常量39转换为八进制等于 ______。

12. 实数473.468写成规范化指数形式,则应为 ______。

13. 实数0.0453写成规范化指数形式,则应为 ______。

14. 将0x123转换为二进制等于 ______。

15. 字符’A’表示成十六进制等于 ______。

16. 在C语言中,称代表常量的标识符为 ______。

17. C语言中是用编译预处理命令______ 来定义符号常量

18. 在C语言中,以反斜杠符(\\)开头,后跟字符的字符序列,称之为 ______ ,主

要用来表示控制及不可见的字符或者一些图形符号

19. 语句printf(\"\\106\")执行的结果输出是 ______。

20. 语句printf(“b”)执行的结果输出是______。

21. 语句printf(“\\\\b”)执行的结果输出是 ______。

22. 语句printf(\"\\102\")执行的结果输出是 ______。

23. 若有char ch1; ch1='a'+4; 则语句printf(\"%c\的输出结果为 ______。

24. 字符串常量“Hello, everyone!”占据的内存空间为______ 个字节

25. 字符串常量“Hello,Bob!”占据的内存空间为 ______ 个字节

26. 十进制整型常量由0~9个数据组成,但不能以______ 开始,没有小数部分

27. 十六进制常量由0~9和______ 组成

28. unsigned long类型常量通常以______ 为后缀

29. 实型常量通常有小数形式和______ 两种表达方式

30. C语言中是用编译预处理命令______ 来包含其他源文件

31. 为了表示字符串的结束,系统自动在字符串的最后加一个______ ,但不被输出

32. C语言中,其值可被改变的量称为变量,它具有三个基本要素:变量名、______ 和变量值

33. C语言规定,变量的标识符只能由字母、数字和下划线组成,且不能以______ 开 头。

34. 在16位机中,sizeof(“hello\\n”)等于 ______。

35. 在16位机中,printf(“\\“hello\\””)等于 ______。

36. 字符变量在内存中占用______ 个字节的存储空间。

37. 若有定义int x=27, y=6; 则表达式 x/y的值为 ______。

38. 若有定义int x=47, y=8; 则表达式 x%y的值为 ______。

39. 若有定义char ch1='A',ch2,ch3; 执行ch2=ch1++; ch3=++ch1; printf(\"ch1=%c, ch2=% c\则输出为 ______。

40. 若有定义char ch1='A',ch2,ch3; 执行ch2=ch1++; ch3=++ch1; printf(\"ch2=%c, ch3=% c\则输出为 ______。

41. 若有定义int i=5, j, k; 执行j=i--; k=--i; printf(\"i=%d, j=%d\\n\则输 出为 ______。

42. 表达式 (int)(13.7+25.6)/4%5 的值是 ______。

43. 表达式 3.6-5/2+1.2+5%3 的值是______。

44. 表达式54%10/2+4.0*(8/5) 的值是 ______。

45. 若定义int x; double b=5.45; 执行x=b后,则x的值为______。

46. 若定义int y; char c='A'; 执行y=c后,则y的值为 ______。

47. 若定义 int a=8; float b=2.5; 则a/(int)(b)的值为 ______。

48. 若a=5,则执行a*=7-3语句后,a的值是 ______。

49. 若int a=1,b=0,c=4,d=2; 则表达式(a>b ? a:b)&&(c-d)的值为______。

50. 已知a = 0 ,表达式 a = 1?b = 1:b = 0; 执行后,b的值是 ______。

51. 若定义int m=7,n=12; 则表达式n%=m-m%5的值是 ______。

52. 若定义int a=8; float b=4.5;执行a*=a/=a-b后,a的值为 ______。

53. int a=2; !a++的值为 ______。

54. int a=0; !a++&++a的值为 ______。

55. int a=7;float b=4.5;则printf(“%d”,a*=a/=a-b)的值为 ______。

56. int k=7;float a=2.5,b=4.7;则表达式a+k%3*(int)(a+b)%2/4的值为 ______。

57. #define Max(a,b) (((a)-(b))&0x80000000)?(a):(b),int a=2,b=6;printf(“%d\\n”,M ax(a,b))的值为 ______。

58. 在32位机中,int a=4,b=7; printf(“%0x”,a-b)的值为:______。

59. int x,y,z; x=y=2;z=3;y=x++-1;printf(“%d,%d”,x,y)的值为: ______。

60. int i=2,j; printf(“%d”,j=i<1)的值为:______

解答: 1. 0 2. 4 3. 10 4. 32

5. 指针类型

6. int、float、double、char 7. 38 8. 44

9. 293

10. 124

11. 047

12. 4.734680e+002

13. 4.530000e-002

14. 100100011

15. \\x41/41H

16. 符号常量

17. #define

18. 转义字符常量 19. F 20. b

21. \\b

22. B 23. e

24. 16

25. 11 26. 0

27. A~F

28. U

29. 指数形式

30. #include

31. “\\0”

32. 变量类型

33. 数字 34. 7

35. “hello”

36. 1 37. 4 38. 7

39. ch1=C, ch2=A

40. ch2=A, ch3=C

41. i=3, j=5 42. 4

43. 4.800000

44. 7.000000 45. 5

46. 65 47. 4

48. 20 49. 1 50. 1 51. 2 52. 4 53. 0 54. 0 55. 4

56. 2.500000 57. 2

58. fffffffd

59. 3,1 60. 0

二.阅读程序写结果 解答:

三.补充程序 解答: 四.改错题 解答: 五.编程一 解答: 六.编程二 解答:

第三章 顺序结构

一.填空

1. C语言的语句可分为5类,它们是:控制语句、____________、函数语句、符合语句和空 语句。

2. 常用于字符输入的函数为:________________ 。

3. 常用于字符输出的函数为:________________。

4. 常用于字符串输入的函数为:________________。

5. 常用于字符串输出的函数为:________________。

6. 格式输入函数的一般形式为:________________ 。

7. 格式输出函数的一般形式为:________________ 。

8. printf和scanf是标准的库函数,它们的函数原型在头文件________________中。

9. 有char ch,则从键盘给ch赋值的格式输入语句为:________________。

10. 如果要输出字符串常量“HelloWord!”,则格式输出语句为:________________。

11. 设有定义:long x=-123456L;,请写出能够正确输出变量x值的语句________________ 。

12. 若有int a,b; ,想通过scanf(\"%d%d\输入语句给a赋于1,给b赋于2,则从键盘

输入数据的形式是________________。

13. 若有int i,j; scanf(\"i=%d,j=%d\";&i,&j); ,要求给i赋10,给j赋20,则应该从键盘 输入_______。

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

的值为3,请写出正确的输入语句________________ 。

15. 有int m,n,p; scanf(\"m=%dn=%dp=%d\ printf(\"%d%d%d\\n\若想 从键盘上输入数据,使变量m中的值为123,n中的值为456,p中的值为789,则正确的输入是_____

___________。

16. 有 int a; float b, c; scanf(\"%2d%3f%4f\ printf(\"\\na=%d, b=%f, c= %f\\n\ ,若运行时从键盘上输入9876543210<回车>,则程序的输出结果是___________________ __。

17. 有 int m=0256,n=256; 则 printf(\"%o %o\\n\的输出结果是__________________ ___ 。

18. 有int x=102,y=012; , 则printf(“%2d,%2d\\n”,x,y); 的输出结果是______________ _______ 。

19. 有定义和语句: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\的输出结果是_____________________ 。

20. 若有定义和语句:int m=0xabc,n=0xabc; m-=n; 则printf(\"%o\\n\的输出结果是___ __________。

21. 若有int m=32,n=032; ,则printf(\"%d,%x\\n\执行后输出结果是______________ _____ 。

22. 若有 int a=1234; ,则 printf(\"%2d\\n\ 的输出结果是_____________________ 。

23. 若变量已正确说明为float类型,要通过语句scanf(“%f %f %f ”,&a,&b,&c);给a赋于1 0.0,b赋予22.0,c赋予33.0,不正确的输入形式是_____________________ 。 A) 10 <回车>22<回车>33<回车> B) 10.0,22.0,33.0<回车> C) 10.0<回车> 22.0 33.0<回车> D) 10 22<回车> 33<回车>

24. 若有 int x=3,y=1; 则printf(\"%d %d\\n\的输出结果是__________________ ___ 。

25. 若有定义和语句:double d; float f; long l; int i; i=f=l=d=20/3; 则 printf(\"%

d %ld %f %f \\n\的输出结果是(小数点后只写一位) _____________________。

26. 以下说法中正确的是 _____________________。 A) #define和printf都是C语句 B) #define是C语句,而printf不是 C) printf是C语句,但#define不是 D) #define和printf都不是C语句

27. 若有 int k=17; ,则 printf(\"%d,%o,%x \\n\的输出结果是_________________ ____ 。

28. 以下叙述中正确的是_____________________ 。 A) 输入项可以是一个实型常量,如:scanf(\"%f\ B) 只有格式控制,没有输入项,也能正确输入数据到内存,例如:scakf(\"a=%d,b=%d\"); C) 当输入数据时,必须指明变量地址,例如:scanf(\"%f\

29. 若有定义和语句:int u=010,v=0x10,w=10;则printf(\"%d,%d,%d\\n\输出结果是 _____________________。

30. 若有int a=1,b=4,c=2; float x=10.5, y=4.0, z; z=(a+b)/c+sqrt((double)y)*1.2/c+ x; ,则printf(\"%f\\n\的输出结果是_____________________ 。

31. 若有int a=2,c=5; ,则printf(\"a=%%d,b=%%d\\n\的输出结果是________________ _____ 。

32. 有char c; int n=100; float f=10; double x; x=f*=n/=(c=50); 则printf(\"%d %f\\ n\的输出结果是_____________________。

33. 有int i=0,j=0,k=0; scanf(\"%d%*d%d\ printf(\"%d%d%d\\n\若 从键盘输入:10 20 30<回车>。输出结果是_____________________。

34. 若有int a,b,c; a=25; b=025; c=0x25;,则printf(\"%d %d %d\\n\的输出结果 是___________。

35. 有以下语句段 int n1=10,n2=20; printf(“________________”,n1,n2); 要求按以下格式输出n1和n2的值,每个输出行从第一列开始,请填空。 n1=10 n2=20

36. 若有语句int i=-19,j=i%4; 则printf(\"%d\\n\的输出结果是_____________________

37. 有int a=0; a+=(a=8); 则printf(\"%d\\n\的输出结果是_____________________。

38. 有int a=1, b=2; a=a+b; b=a-b; a=a-b;则printf(“%d,%d\\n”, a, b );的输出结果是 ______________。

39. 有unsigned short a=65536; int b;,则printf(“%d\\n”,b=a);的输出结果是________ ______。

40. 语句printf(\"\\10289\\n\");的数据结果为:__________________ 。

解答:

1. 表达式语句

2. getchar( )

3. putchar( )

4. gets( )

5. puts( )

6. scanf(“格式控制字符串”,地址表列);

7. printf(“格式控制字符串”,输出表列);

8. stdio.h

9. scanf (“%c”,&ch);

10. printf (“%s”,HelloWord!); 或者:printf (“HelloWord!”);

11. printf(“x=%1d\\n”,x);

12. 1 2 或者 1 2

13. i=10,j=20

14. scanf(“%d,%d,%d”,&i,&j,&k);

15. m=123n=456p=789

16. a=98, b=765.000000, c=4321.000000

17. 256 400

18. 102,10

19. 1 65 1.5 6.5 20. 0

21. 32,1a

22. 1234

23. B

24. 3 3

25. 6 6 6.0 6.0

26. D

27. 17,21,11

28. C

29. 8,16,10

30. 13.700000

31. a=%d,b=%d

32. 2 20.000000

33. 10300

34. 25 21 37

35. n1=%d\\nn2=%d

36. -3

37. 16

38. 2,1 39. 0

40. B89

二.阅读程序写结果 解答:

三.补充程序 解答: 四.改错题 解答: 五.编程一 解答: 六.编程二 解答:

第四章 选择结构

一.填空

1. 在if, while, case, do, else 等关键字中,用于选择结构的有( ).

2. 已知 a = 1; 那么 if ( a = 2) printf(\"%d\的输出结 果是( ).

3. 已知 char a = 'A'; 那么 if ( a > 65) printf(\"%s\, \"smaller\"); 的输出结果是( ).

4. 表示“x≥ y≥ z”的C语言表达式是 ( )。

5. 在C语言中,用于实现选择结构的语句有( )语句和( ) 语句 。

6. 判断两个浮点型变量x和y是否相等一般用:if( <1e-6 )… 。

7. 设有程序段: t=6;a=7;b=8; if(a=b) t=a;,这段程序执行后,t的结果是( ) 。

8. 设a=1,b=2,c=3,d=4,则表达式:a>b?a:c>d?a:d的结果为( ) 。

9. 表达式98 && 8 && 31 && (98 - 'a')的值为( )。

10. 若int a = 3; 则表达式 (a > 2)&& ! ('D'> 69) 的值为( )。

解答: 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.

二.阅读程序写结果 1. #include void main( ) { int x,y,t; x=7;y=9; if(x void main( ) { int x=1,a=2,b=3; switch(x) { case 1: a--; break; case 2: b++; break; case 3: a++;b++;

3. 4.

}

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

#include void main( ) {

char ch1 = 'E'; if(ch1 >= 'A') ch1++; else

ch1+=32;

printf(\"ch1 = %c\\n\}

#include void main( ) { int x,y,t; x=5;y=3;

if(x>y) { t=x;x=y;y=t;} printf(\"%d,%d\\n\" , x,y ); }

5. #include int main() { int a,b,c,m; printf(\"Enter three integers:\"); scanf(\"%d%d%d\ if(a<=b) m=a; else m=b; if(c

6. #include int main() { char ch1='a',ch2='B',ch3='E'; if(ch1>ch2) if(ch2>ch3) else --ch3; printf(\"ch3=%c\\n\ return 0; }

ch3++;

7. #include int main() { float x,y; scanf(\"%f\ switch((int)x/10) { case 0: y=1.0; printf(\"y=%f\\n\ case 1: y=2*x+1; printf(\"y=%f\\n\ case 2: y=3*x*x+2; printf(\"y=%f\\n\ default: printf(\"No definition.\\n\"); } return 0; } 输入:15.3<回车>

8. #include int main() { char ch1='A',ch2='B'; switch(ch1) { case 'A': switch(ch2) { case 'B': printf(\"Good!\\n\");break; case 'A': printf(\"Better!\\n\");break; } case 'B': printf(\"Best!\\n\"); break; } return 0; } 9.

#include void main() { float score; score = 100; if (score<60) printf(\"E\\n\"); else switch( ( int ) score / 10 ) { case 10: case 9: printf(\"A\\n\"); case 8: printf(\"B\\n\"); case 7: printf(\"C\\n\"); break; case 6: printf(\"D\\n\"); break; default: printf(\"Error\\n\"); } }

10. #include void main() { int i=0,a=2; if(i==0) printf(“**”); else

printf(“$$”); printf(“*”); } 11. #include void main() { int m=10,n=0,p=4,q=20; if (m) if (n) q=15-m; else q=25+m; else if (p) q=q+p; printf(“q=%d\\n”,q); }

12. #include void main() { int a=1,b=0; switch(a) { case 1: switch (b) { case 0: printf(\"**0**\"); break; case 1:printf(\"**1**\");break; } case 2: printf(\"**2**\");break; }

}

13. #include int main( ) { int a=2,b=7,c=5; switch (a>0){ case 1: switch (b<0){ case 1: printf(\"@\"); break ; case 2: printf(\"!\"); break ; } case 0: switch (c==5){ case 1: printf(\"*\") ; break ; default : printf(\"#\") ; break ; } default : printf(\"&\"); } printf(\"\\n\"); return 0; }

14. #include int main() { int a=0,b=1,c=0,d=20; if(a) d=d-10; else if (!b) if(!c) d=15; else d=25; printf(\"d=%d\\n\

return 0; }

15. #include int main() { int a=1; switch(a){ case 0: printf(\"**0**\");break; case 1:printf(\"**1**\");break; case 2:printf(\"**2**\");break; } return 0; }

16. #include int main() { int x, y; scanf(\"%d\ y = x>12 ? x + 10 : x - 12; printf(\"%d\\n\ return 0; } 输入:12<回车>

17. #include int main() { float x, y; char op; double r; scanf(\"%c%f%f\ switch(op) { case '+': r = x + y; break; case '-': r = x - y; break; case '*': r = x * y; break; case '/': r = x / y; break; } printf(\"%.1f\ return 0; } 输入:3.5<回车>

18. #include \"stdio.h\" void main( ) { int a=7; if(a>9 || a<10) a=a/3; a=a%3; printf(\"a=%d\ }

else

19. #include void main() { int a=20; switch(a%3) { case 0: printf(\"0\"); case 1: printf(\"1\"); case 2: printf(\"2\"); default: printf(\"3\"); } printf(\"4\"); }

20. #include void main() { int a=2,b=5,c=8,t; if ( a < b ) { t = a; a = b; b = t; } if ( b < c ) { t = b; b = c; c = t; } if ( a < b ) { t = a; a = b; b = t; } printf( \"%d,%d\\n\ }

解答:

1. 运行结果: 9,7

2. a=1,b=3

3. ch1= F

4. 3,5

5. m=21

6. ch3=D

7. y=31.600000

8. Good! Best! 9. A B

C

10. ***

11. q=35

12. **0****2**

13. *&

14. d=20

15. **1** 16. 0

17. 0.6

18. a=2

19. 234

20. 8,1

三.补充程序

1. 根据输入字符的ASCII码来判别字符的类别。由ASCII码表可知ASCII值小于32的为控制字

符。 在“0”和“9”之间的为数字,在“A”和“Z”之间为大写字母, 在“a”和“z”之

间为小写字母,其余则为其它字符。 #include\"stdio.h\" #include\"string.h\" int main() { char c; printf(\"input a character: \"); _____________________________________________ if(c<32) printf(\"This is a control character\\n\"); _____________________________________________ printf(\"This is a digit\\n\"); else if _______________________________________ printf(\"This is a capital letter\\n\");

else if(c>='a'&&c<='z') printf(\"This is a small letter\\n\"); ____________________________________________ printf(\"This is an other character\\n\"); return 0; }

2. 计算器程序。用户输入运算数和四则运算符, 输出计算结果. #include\"stdio.h\" int main() { float a,b; ____________________________________________; printf(\"input expression: a+(-,*,/)b \\n\"); scanf(\"%f%c%f\ switch(c) { case '+': printf(\"%f\\n\ case____________________________________________ printf(\"%f\\n\ case '*': printf(\"%f\\n\ case '/': ____________________________________________;break; default: printf(\"input error\\n\"); } return 0; }

3. 输入三个整数,输出最大数和最小数(注:max总是记录最大数,而min总是记录最小数). #include\"stdio.h\" int main() { int a,b,c,max,min; printf(\"input three numbers: \"); scanf(\"%d%d%d\ if(a>b) { _______________________________________ _______________________________________ } else {max=b;min=a;} ____________________________________________ max=c;

if(min>c) _____________________________________ printf(\"max=%d\\nmin=%d\ return 0; }

4. #include\"stdio.h\" int main() { int a; printf(\"input integer number: \"); scanf(\"%d\ _____________________________________________ { case 1:printf(\"Monday\\n\");break; _____________________________________________ printf(\"Tuesday\\n\"); break; case 3:printf(\"Wednesday\\n\");break; case 4:printf(\"Thursday\\n\");_____________________________________________ case 5:printf(\"Friday\\n\");break; case 6:printf(\"Saturday\\n\");break; case 7:printf(\"Sunday\\n\");break; _____________________________________________ printf(\"error\\n\"); } return 0; }

5. 判断a>b、aB\\n\"); _____________________________________________ printf(\"A6. 根据以下函数关系,对输入的每个x值,计算出相应的y值。

#include\"stdio.h\" int main ( ) { int x,c,m; float y; scanf(“%d”,&x); _________________________________________c=-1; c=_____________________________________________; switch (c) { case –1 : y=0 ; break ; case 0 : y=x ; break ; case 1 : y=10 ; break ; case 2 : case 3 : y=-0.5*x+20 ; _____________________________________________;

else

default : y=-2 ; } if (c!=2) printf (“y=%f”,y); _____________________________________________ printf(“error!”); return 0; } 7. 找出x,y,z三个数中的最小数,并判断该数是否等于b。 #include\"stdio.h\" int main() { int x=4,y=5,z=8 ,b; int u,v; scanf(\"%d\ u = x8. 输入两个运算数x,y和一个运算符号op,输出该运算结果的值,例如输入3+5↙得到结果8 . #include\"stdio.h\" int main ( ) { float x,y,r; char op ; scanf(\"%f,%c,%f\ switch (op) { case '+': r=x+y ; _____________________________________________; _____________________________________________ r=x-y ;break; case '*' :_____________________________________________;break; _____________________________________________ r=x/y; break; }

printf(\"%f\ return 0; }

9. 根据输入字符的ASCII码来判别字符的类别。由ASCII码表可知ASCII值小于32的为控制字

符。 在“0”和“9”之间的为数字,在“A”和“Z”之间为大写字母, 在“a”和“z”之

间为小写字母,其余则为其它字符。 #include\"stdio.h\" int main() { char c; printf(\"input a character: \"); c=getchar(); _____________________________________________ printf(\"This is a control character\\n\"); if(c>='0'&&c<='9') printf(\"This is a digit\\n\"); _____________________________________________ printf(\"This is a capital letter\\n\"); _____________________________________________ printf(\"This is a small letter\\n\"); _____________________________________________ printf(\"This is an other character\\n\"); return 0; }

10. 找出a,b,c三个数中的最大数,并判断该数是否等于x。 #include\"stdio.h\" int main() { int a=8,b=4,c=12,x ; int u,v; scanf(“%d”,&x); u = a解答:

1. c=getchar(); (c>='0'&&c<='9') (c>='A'&&c<='Z') else

2. char c; break; '-': printf(\"%f\\n\

3. max=a; min=b; if(max4. switch(a) case 2: break; default:

5. if(a==b) else if(a>b) else if(a6. if(x<0)

c=x/10; break; else

7. x:y; u:z; (v==b) else

8. break; case '-': r=x*y; case '/':

9. if(c<32) else if(c>='A'&&c<='Z') else if(c>='a'&&c<='z') else

10. b:a c:u (v==x) else

四.改错题 解答: 五.编程一

1. 求分段函数

的值, 输入x值,输出结果。

2. 从键盘上输入一个数x,计算并输出下列分段函数y的值。

3. 某运输公司运费计算时根据运输距离打折计算,折扣的计算方法如下:

(其中,discount表示折扣,S表示运输距离)。 编写一完整程序,输入运输距离,统计运费并输出。每公里的运费通过符号常量定义为2 .5。

4. 编程输入一元二次方程的三个系数,求解一元二次方程的实根,无实根时不用求虚根, 给出相应提示信息即可。

5. 给定三条边,判断其是否能构成三角形,若能构成,判断其是等腰三角形、等边三角形 、直角三角形还是普通三角形。

6. 从键盘输入一个三角形的三条边,判断是否能组成三角形,若能组成三角形,则输出它 的面积。

7. 从键盘输入一个百分制的学生成绩,输出其对应的分数等级,其中90~100为A,80~89 为B,70~79为C,60~69为D,60以下为E。

8. 编写一个程序,从键盘输入三个整数给a,b,c,然后交换它们中的数,把a中原来的值 给b,把b中原来的值给c,把c中原来的值给a。

9. 输入一个字符,判断其是否为英文字母,若是英文字母,则将其大小写进行转换,若不 是英文字母,则不变。

10. 给定三个整数型x,y,z,输出三个数中的最大值和最小值。

解答:

1. #include \"stdio.h\" #include \"math.h\" void main() { float x,y; printf(\"input x\\n\"); scanf(\"%f\ if(x<0) y=1; else if(x<=5) y=2*x; else y=sqrt(x); printf(\"x=%5.1fy=%8.3f\\n\ }

2. #include \"stdio.h\" #include \"math.h\" void main() { float x,y; printf(\"input x\\n\"); scanf(\"%f\ if(x>20||x>1&&x<10) { printf(\"无定义\\n\"); return; } if(x<0) y=-x; else if(x<=1) y=sin(x)+x; else if(x>=10&&x<=20) y=x*x*x; printf(\"x=%5.1fy=%8.3f\\n\ }

3. #include \"stdio.h\"

#include \"math.h\" #define price 2.5 void main() { float discount,cost,s; printf(\"input distance\\n\"); scanf(\"%f\ if(s<250) discount=0; else if(s<800) discount=0.02; else if(s<1500) discount=0.05; else discount=0.08; cost=s*(1-discount)*price; printf(\"distance=%5.1f;cost=%5.1f\\n\ }

4. /*功能:求一元二次方程的解。*/ #include \"math.h\" #include \"stdio.h\" main() {float a,b,c,disc,x1,x2; scanf(\"%f,%f,%f\ disc=b*b-4*a*c; if (disc==0) printf(\"x1=x2=%7.2f\\n\输出两个相等的实根*/ else if (disc>0) { x1=(-b+sqrt(disc))/(2*a); /*求出两个不相等的实根*/ x2=(-b-sqrt(disc))/(2*a); printf(\"x1=%7.2f,x2=%7.2f\\n\ } else printf(\"无实根\\n\"); }

5. #include \"stdio.h\" void main() { float a,b,c; printf(\"输入三条边:\\n\"); scanf(\"%f%f%f\ if(a+b>c&&a+c>b&&b+c>a) { if(a==b&&b==c) printf(\"等边三角形\\n\"); else if(a==b||b==c||c==a) printf(\"等腰三角形\\n\"); else if(a*a==b*b+c*c||b*b==a*a+c*c||c*c==b*b+a*a) printf(\"直角三角形\\n\"); } else printf(\"不能构成三角形 \\n\");

}

6. #include \"stdio.h\" #include \"math.h\" void main() { float a, b, c, s, area; printf(\"输入三条边:\\n\"); scanf(\"%f%f%f\ if(a+b>c&&a+c>b&&b+c>a) { s=(a+b+c)/2; area=sqrt(s*(s-a)*(s-b)*(s-c)); printf(\"area=%7.2f\\n\ } else printf(\"不能构成三角形 \\n\"); }

7. #include void main() { int score; char d; printf(\"Input score\\n\"); scanf(\"%d\ if (score>100||score<0) { printf(\"data error!\\n\"); return; } switch(score/10) { case 10: case 9:d='A';break; case 8:d='B';break; case 7:d='C';break; case 6:d='D';break; default : d='E';break; } printf(\"score=%3ddengji=%c\\n\ }

8. #include void main() { int a,b,c,t; printf(\"Input a,b,c\\n\"); scanf(\"%d%d%d\ t=a; a=b;

b=c; c=t; printf(\"a=%d;b=%d;c=%d;\\n\ }

9. #include void main() { char c1,c2; printf(\"Input a letter: \"); c1=getchar(); if(c1>='a'&&c1<='z') c2=c1+'A'-'a'; else if(c1>='A'&&c1<='Z') c2=c1+'a'-'A'; else c2=c1; printf(\"原字符:%c转换后为:%c\\n\ } 10. #include void main() { int a,b,c,max,min; printf(\"Input a,b,c\\n\"); scanf(\"%d%d%d\ max=a;min=a; if(b>max) max=b; else if(bmax) max=c; else if(c六.编程二 解答:

第五章 循环结构

一.填空

1. C语言中提供了三种循环控制语句,它们是:( )、do-while语句、( ) 。

2. break语句在C程序中只能出现在两种场合:一是用于( )语句中,二是用于 ( )语句中。

3. 以下程序段中的语句printf(“***”)要执行5次,请在空白处填入合适的数 。 for( i=1;i<=( );i=i+2 ) printf(“***”);

4. 定义int k=10;执行语句 while(k<20) k += 1 ; 后,k的值为( )。

5. 在循环控制结构中break语句的作用是( )。

6. 在循环控制结构中continue语句的作用是:( )。

7. 若已知int a[5][5]; 并在运行过程中a数组已经赋值;要打印次对角线元素,在空白处 填入合适的值/表达式; for (i = 0; i<5; i++) for (j = ( ); j >=0; j--) printf(\"%5d\

8. 执行完语句sum = 0; for (i = 0; i < 10; i++) { if (i % 5 = = 0) sum += i; sum = ( ) 。

9. 在使用while 语句中需要注意,为了防止“死循环”的发生,在循环体中一定要有( )语句。

10. do-while 语句中,判断循环条件在( ),执行循环体在 ( ) 。(填“先”“后 ”)

解答: 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.

二.阅读程序写结果 1. #include void main() { int number , digit; number = 1234; while ( number != 0 ) { digit = number%10 ; printf( \"%d\" , digit ) ;

number = number / 10 ; } }

2. #include #define N 5 void main( ) { int i; for(i=1;i3. #include void main( ) { int i,s,x; s=0; x=15; for(i=1;i<=5;i++) if (x%i==0) s= s + i; printf(\"i=%d,s=%d\\n\ }

4. #include void main() { int counter=1; while(counter <= 5) printf(\"%d \\n\ counter++; } }

5. #include int main() { int i,sum,m,a; sum=0; m=5; for(i=0;i<=3;i++) { scanf(\"%d\ if(a>m) sum+=a; } printf(\"sum=%d\\n\ return 0; }

{

输入:2 10 8 3<回车>

6. #include int main() { int i,j,k; for(i=1;i<=4;i++) { for (j=1;j<5-i;j++) printf(\" \"); for(k=1;k<=i;k++) printf(\"*\"); printf(\"\\n\"); } return 0; }

7. #include int main() { int i,j; i=1; while(i<5) { for(j=1;j<2*i+1;j++) printf(\"%c\ printf(\"\\n\"); i++; } return 0; }

8. #include int main() { int i=10,m=0,n=0; do { if(i%2!=0) m=m+i; else n=n+i; i--; }while(i>=0); printf(\"m=%d,n=%d\\n\ return 0; }

9. #include void main() { int sum=0,n; scanf(\"%d\ while(n<=5) { sum+=n; n++; } printf(\"sum=%d\ } 输入:1<回车>

10. #include void main() { int i, j; for(i=2;i>=0;i--) { for(j=1;j<=i;j++) printf(\"*\"); for(j=0;j<=2-i;j++) printf(\"!\"); printf(\"\\n\"); } }

11. #include void main() { int a,b; for(a=1,b=1;a<=100;a++) { if(b>20) break; if(b%4==1) b=b+4; } b=b-5; } printf(\"a=%d\\n\ }

12. #include void main( ) {

continue; {

char k; int i; for(i=1;i<3;i++) { scanf(\"%c\ switch(k) { case '0': printf(\"another\\n\"); case '1': printf(\"number\\n\"); } } } 输入:01<回车>

13. #include int main() { int i, s = 0; for(i = 1; i < 10; i++) { s += i * i; if(s > 10) break; } printf(\"i=%d, s=%d\\n\ return 0; }

14. #include void 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\ } } 输入:ABCdef<回车>

15. #include int main () { int a, b; for (a = 1, b = 1 ; a <= 100 ; a++) {

if (b >= 9) break; if (b % 3 == 1) { b += 3 ; continue ; } b -= 5; } printf(\"%d,%d\\n\ return 0; }

16. #include int main () { int i = 0,j = 0; while (i < 10) i++; while (j++ < 10) ; printf(\"i=%d,j=%d\\n\ return 0; }

17. #include \"stdio.h\" void main( ) { int i,j,t; for(i=1,j=10;i<3;i++,j--) t=i+j; t++; printf(\"%d,%d\ }

18. #include \"stdio.h\" void main() { int i=10,j; do { j = i%2; printf( \"%d\ i--; } while ( i> 4 ); }

19. #include \"stdio.h\" void main() { int i=7,j; while ( i> 2) { j = i%2; printf( \"%d\

i--; } printf( \"%d\ }

20. #include void main() { int i,j,t=0; for(i=3;i>0;i--) for(j=0;j<4;j++) t+=j; printf(\"t=%d\ }

解答: 1. 4321 2. 1 4 9 16

3. i=6,s=9 4. 1 2 3 4 5

5. sum=18

6. * ** *** ****

7. ## #### ###### ########

8. m=25,n=30

9. sum=15

10. **! *!!

11. a=6

12. another number number

13. i=3, s=14

14. abcDEF

15. 4,10

16. i=10,j=11

17. 8,12

18. 010101

19. 101012

20. t=18

三.补充程序

1. 输出100以内能被3整除的数 #include\"stdio.h\" int main() { _____________________________________________; for(_________________________;n<=100; ________________________) { if (n%3!=0) ________________________ printf(\"%d \ } return 0; }

2. 输出100以内的素数。素数是只能被1 和本身整除的数。为减少循环次数,只需对数n用2

~ 去除来判断该数是否素数。 #include\"stdio.h\" ________________________ int main() { int n,i,k; for(n=2;n<=100; ________________________) { k=sqrt(n); for(i=2;i<=k; ________________________) if(n%i==0) ________________________ if(i>k) printf(\"\%2d\ } return 0; }

3. 输出200以内能被5整除的数 #include\"stdio.h\" int main() { ________________________ for(________________________;n<=200; ________________________) { if (n%5!=0) ________________________ printf(\"%d \ } return 0; }

4. 求输入的十个整数中正数的个数及其平均值 #include int main() { int i,num=0,a; float sum=0; for(i=0; ________________________;________________________) { scanf(\"%d\ if(a>=0) { ________________________; ________________________; } } printf(\"%d plus integer's sum: %6.0f\\n\ printf(\"Mean value:%6.2f\\n\ return 0; }

5. 求输入的十个整数中负数的个数及其平均值

#include int main() { int i,num,a; float sum=0; ________________________; ________________________; while(i<10) { scanf(\"%d\ if(a<=0) { ________________________; num++; } ________________________; } printf(\"%d plus integer's sum: %6.0f\\n\ printf(\"Mean value:%6.2f\\n\ return 0; }

6. 分解并打印出X的各个素数因子.如18=1*2*3*3. #include int main() { int i,x; scanf(“%d”,&x); printf(“%d=1”,x); for(________________________;i<=x; ________________________) { while________________________ { printf(“*%d”,i); ________________________; } } return 0; }

7. 输出九九乘法表. #include int main() { int i,j; for (i=1; ________________________;________________________) { for(________________________;________________________;j++) printf(\"%2d*%2d=%2d\ printf(\"\\n\\n\");

} return 0; }

8. 有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。 #include \"stdio.h\" int main() { int n,t,number=20; float a=2,b=1, ________________________; for( n=1; ________________________;________________________) { s=s+a/b; t=a; a=a+b; ________________________; } printf(\"sum is %9.6f\\n\ return 0; }

9. 求1+2!+3!+...+20!的和. #include \"stdio.h\" int main() { float n, ________________________,t=1; for(n=1; ________________________;________________________;) { t*=n; ________________________; } printf(\"1+2!+3!...+20!=%e\\n\ return 0; }

10. 有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。 #include \"stdio.h\" int main() { int n,t,number=20; float a=2, ________________________,s=0; for(________________________;________________________;n++) { s=s+a/b; t=a; ________________________; b=t; } printf(\"sum is %9.6f\\n\

return 0; }

解答: 1. int n; n=1; n++ continue;

2. #include\"math.h\" n++ i++ break;

3. int n; n=1 n++ continue;

4. i<10 i++ num++ sum+=a

5. i=0; num=0; sum+=a; i++;

6. i=1 i++ (x%i==0) x=x/i;

7. i<=9 i++ j=1 j<=i

8. s=0 n<=20 n++ b=t;

9. s=0 n<=20 n++ s+=t;

10. b=1 n=1 n<=20 a=a+b

四.改错题 解答: 五.编程一

1. 试编写程序求S=1+1*2+1*2*3+1*2*3*4+…+1*2*3*…*10的值。

2. 编程利用以下公式求π的值。(取n=10000)

3. 计算s=1+1/2+1/3+…+1/n的值,其中n的值由键盘输入。

4. 编写程序,在屏幕上输出下面的图案(要求用for循环实现)。 * * * * * * * * * * * * * * * * * * * * * * * * *

5. 编写程序,输入整数n,并根据n的值打印图案(要求用for循环实现)。。 n为中间一行的*号个数。例如,当n=4时,图案为 * * * * * * * * * * * * * * * *

6. 从键盘输入若干个学生的成绩,-1作为结束标志,求出平均成绩及最高成绩并输出其结 果。

7. 编写一程序,从键盘输入n个数,输出其最大数和最小数,并输出它们在序列中的序号。

8. 编程实现:输出由0、1、2、3组成的所有的各位数字均不相同的三位数,输出时每8个数

占一行。

9. 输入一行字符,回车作为结束,分别统计出其中英文字母、空格、数字和其它字符的个 数。

10. 求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共 有5个数相加),几个数相加由键盘控制。

解答:

1. #include void main() { int i; float s=0,term=1; for(i=1;i<=10;i++) { s=s+term; term=term*(i+1); } printf(\"sum%10.1f\\n\ }

2. #include void main() { int i; float e=1,term=1; for(i=1;i<=100;i++) { term=term*i; e=e+1./term; } printf(\"e=%10.6f\\n\ }

3. #include void main() { int i,n; float s=0; printf(\"input n\\n\"); scanf(\"%d\ for(i=1;i<=n;i++) s=s+1./i; printf(\"s=%10.6f\\n\ }

4. #include void main() { int i,j,k; for(i=1;i<=5;i++) { for(k=1;k<=2*i;k++) printf(\" \");

for(j=1;j<=5;j++) printf(\"* \"); printf(\"\\n\"); } }

5. #include void main() { int i,j,n; printf(\"input n\\n\"); scanf(\"%d\ for(i=1;i<=n;i++) { for(j=1;j<=i;j++) printf(\"* \"); printf(\"\\n\"); } for(i=n-1;i>=1;i--) { for(j=1;j<=i;j++) printf(\"* \"); printf(\"\\n\"); } } 6. #include void main() { int i,score,sum=0,max; i=0; printf(\"please input score:\\n\"); scanf(\"%d\ max=score; while (score!=-1) { sum=sum+score; if(score>max)max=score; i++; scanf(\"%d\ } printf(\"max=%d\\n\ printf(\"average=%f\\n\ }

7. #include void main() { int i, n,x,max,min,maxi=1,mini=1; printf(\"please input n:\\n\"); scanf(\"%d\ printf(\"please input x:\\n\"); scanf(\"%d\ max=x;min=x; for(i=2;i<=n;i++) { scanf(\"%d\ if(x>max) { max=x;maxi=i;} if(x8. #include void main() { int i,j,k,n=0; for(i=1;i<=3;i++) for(j=0;j<=3;j++) for(k=1;k<=3;k++) if(i!=j&&i!=k&&j!=k) { n++; printf(\"%5d\ if(n%8==0)printf(\"\\n\"); } }

9. #include void main() { int shuzi=0,zimu=0,kge=0,qita=0; char ch; ch=getchar(); while(ch!='\\n') { if(ch==' ') kge++; else if(ch>='0'&&ch<='9') shuzi++; else if(ch>='a'&&ch<='z'||ch>='A'&&ch<='Z')

zimu++; else qita++; ch=getchar(); } printf(\"数字=%d;字母=%d;空格=%d;其它%d\ }

10. #include void main() { int Sn=0,a,n,i=0,t; printf(\"Sn=a+aa+aaa+…+aaa…a\\nplease input a,n:\"); scanf(\"%d,%d\ while(i六.编程二 解答:

第六章 函数

一.填空

1. 函数中的形参和调用时的实参都是数组名时,传递方式为( ) ;形参实参都是 变量时,传递方式为( )。

2. 一个函数在它的函数体内调用它自身称为( ) 调用。

3. 函数体包括函数的说明部分和( )。

4. 定义在一个程序块(函数)中的变量,称为( )变量,它的作用范围只是定义 它的程序块。

5. 在函数原型声明中,必须声明函数参数的类型,但可以省略( )。

6. C语言源程序中主函数名由系统规定为( ),程序员是不能改变的。

7. 已知函数首部定义为:int stat(int a , float *p) 则此函数的两个参数类型分别是( ) 、( )。

8. 在c语言中,进行函数调用是,实参和实参之间有严格的规定,主要有三种要求分别是: ( ) 相等,( )一致,并( )对应。

9. 若自定义的函数要求返回一个值,则应在该函数中有一条( )语句。

10. 若函数头部定义为 int foo(), 则该函数中return 语句返回的数据类型是( )。

11. 若函数头部定义为 struct stu * foo(), 则该函数中return 语句返回的数据类型是( )。

12. 若函数头部定义为 int * foo(), 则该函数中return 语句返回的数据类型是( ) 。

13. 若函数头部定义为 float foo(), 则该函数中return 语句返回的数据类型是( )。

14. 若函数头部定义为 char foo(), 则该函数中return 语句返回的数据类型是( ) 。

15. 若函数头部定义为 char * foo(), 则该函数中return 语句返回的数据类型是( )。

16. 若函数头部定义为 void foo(int a[]),在主程序中有如下语句: int a[5] = {1};… foo(a[5]); 这句函数调用的语句是 ( )。 (填“ 正确”“错误”)

17. 若函数头部定义为 void foo(int *a),在主程序中有如下语句: int array[5] = {1};… foo(array); 这样的语句是( ) 。 (填“正 确”“错误”)

18. 若函数头部定位为 void foo (char * str), 在主程序中有如下语句: char array[5] = \"good\";… foo(array); 这样的语句是( )。 (填 “正确”“错误”)

19. 若一个函数中的主要语句是这样的, int a = 3; if (a > 3) return -1; return 0; 那么这个函数的返回值是( ) 。

20. 若函数头部定义为void foo (int * a), 主程序中定义 int array[10], 现在要将arra

y 数据传进数组进行处理,正确函数调用语句是( ) 。

解答: 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.

二.阅读程序写结果 1. #include long fun(int x,int n); int main() { int x=3,n=3; long p; p=fun(x,n); printf(\"p=%ld\\n\ return 0; } long fun(int x,int n) { int i; long p=1; for(i=0;i2. #include int isDigit(char ch); int main() { char ch; while((ch=getchar())!='\\n')

{ if(isDigit(ch)) putchar(ch); } printf(\"\\n\"); return 0; } int isDigit(char ch) { if(ch>='0' && ch<='9') return 1; else return 0; } 输入:Abc1d23eF45g<回车>

3. #include void odddivisor(int n); int main() { int n; scanf(\"%d\ odddivisor(n); return 0; } void odddivisor(int n) { int i; for(i=3;i<=n/2;i=i+2) if(n%i==0) printf(\"\\n\"); } 输入:15<回车>

4. #include void print(); int a=5; int main()

printf(\"%5d\

{ int a=1,b=2; a=a+b; print(); printf(\"%d %d\\n\ return 0; } void print() { int b=3; printf(\"%d %d\\n\ }

5. #include int fun1(int x); void fun2(int x); int main() { int x=1; x=fun1(x); printf(\"%d\\n\ return 0; } int fun1(int x) { x++; fun2(x); return x; } void fun2(int x) { x++; }

6. #include int fun1(int a,int b,int c);

int main() { int a=11,b=21,c=31; fun1(a,b,c); printf(\"%d %d %d\\n\ return 0; } int fun1(int a,int b,int c) { a=a+10; b=b+10; c=c+10; return c; }

7. #include void fun(int x); int main() { fun(7); printf(\"\\n\"); return 0; } void fun(int x) { if(x/2>1) fun(x/2); printf(\"%5d\ }

8. #include void fun(int a[]); int main() { int i,a[5]={1,2,3}; fun(a); for(i=0;i<5;i++) printf(\"%5d\ printf(\"\\n\"); return 0; } void fun(int a[]) { int i; for(i=0;i<5;i++) a[i]+=5; }

9. #include void fun ( int k ) ; void main ( ) { int w = 5 ;

fun ( w ) ; printf ( \"\\n\" ) ; } void fun ( int k ) { if ( k>0 ) fun ( k-1 ) ; printf ( \"%d\" , k ) ; }

10. #include void f1(void); int a=1; void main( ) { int a=2; f1(); { int a=3; printf(\"a2=%d\\n\ } printf(\"a3=%d\\n\ } void f1(void) { printf(\"a1=%d\\n\ }

11. #include void f(int a, int b, int *c) { a=20; b=10; *c=a+b; } void main() { int a=10,b=20,c=30,d=40; f(a,b,&c); printf(\"%d,%d,%d\\n\ }

12. #include void swap(int a,int b); void main() { int a=2,b=3; printf(\"a=%d,b=%d\\n\ swap(a,b); printf(\"a=%d,b=%d\\n\

} void swap(int a,int b) { int c; c=a; a=b; b=c; }

13. #include void fun(int a,int b,int c); void main() { int x=10,y=20,z=30; fun(x,y,z); printf(\"%d,%d,%d\\n\ } void fun(int a,int b,int c) { a=456;b=567;c=678; }

14. #include float f(int n) { int i;float s=0.0; for(i=1;i15. #include int f(int a); void main() { int a=2,i; for(i=0;i<3;i++) printf(\"%d\ } int f(int a)

{ int b=0,c=3; b++; c++; return(a+b+c); }

16. #include int fun(); void main() { int i,x; for(i=0;i<=2;i++) x=fun(); printf(\"%d\\n\ } int fun() { int x=3; x++; return x; }

17. #include float add(float x,float y); void main( ) { float a,b,c; a=1.0; b=2.0; printf(\"%f\\n\ } float add(float x,float y) { float z; z=x+y; return(z); }

18. #include void fun(int x, int cp, int dp) { cp=x++; dp=++x; } void main(void) {

c=add(a,b);

int a,c=80, d=-20; a=30; fun(a,c,d); printf(\"%d,%d\\n\ }

19. #include int f(int a,int b); void main() { int i=2,p; p=f(i,i+1); printf(\"%d\\n\ } int f(int a,int b) { int c; if(a>b) c=1; else if (a==b) c=0; else c=-1; return (c); }

20. #include int fun(int n) { if(n= =1) return 1; else return fun(n-1)+3; } void main() { int i,j=0; for(i=1;i<4;i++) j=j+fun(i); printf(\"j=%d\\n\ }

21. #include void f(int x,int y) { int t; if(xprintf(\"%d,%d,%d\ }

22. #include int age(int n) { int c; if(n==1) c=10; else c=age(n-1)+2; return(c); } void main() { printf(\"%d\ }

23. #include void hello_world(void) { printf(\"Hello, world!\\n\"); } void three_hellos(void) { int counter; for (counter =1;counter <= 3;counter++) hello_world(); } void main(void) {

three_hellos(); }

24. #include int f(int a,int b); void main() { int x,i=1,k=3; x=f(i,k); printf(\"x=%d \\n\ } int f(int a,int b) { int M=0; while(b!=0) { M=M+a; b--; } return M; }

25. #include f(int b[ ],int m,int n) { int i,s = 0; for(i = m;i < n;i++) s += b[i]; return s; } int main() { int x,a[ ] = {1,2,3,4,5,6,7,8,9}, *p = a; x = f(p,3,7); printf(\"x=%d\\n\ return 0; }

26. #include void fun(int i, int j) { int x = 7; printf(\"i = %d; j = %d; x = %d\\n\ } int main() { int i = 2, x = 5, j = 7; fun(j, 6); printf(\"i = %d; j = %d; x = %d\\n\ return 0; }

27. #include void f(int a[]) { int i=0; while(a[i]<=10) { printf(\"%d\ i++; } } int main() { int a[]={1,7,17,9,11,34}; f(a+1); }

28. #include void add(int x, int y, int z) { z = x + y; x = x * x; y = y * y; printf(\"(2) x = %d y = %d z = %d\\n\ } int main()

29.

{

int x = 2, y = 3, z = 0; printf(\"(1) x = %d y = %d z = %d\\n\ add(x, y, z);

printf(\"(3) x = %d y = %d z = %d\\n\ return 0; }

#include int x1 = 30, x2 = 40; void sub(int x, int y) {

x1 = x; x = y; y = x1; } int main() {

int x3 = 10, x4 = 20; sub(x3, x4); sub(x2, x1);

printf(\" %d, %d, %d, %d\\n\ return 0; }

30. #include int x; void cube() { x = x * x * x; } int main() { x = 5; cube(); printf(\" %d\\n\ return 0; }

31. #include invert(int *s, int i, int j) { int t; if(i < j) { invert(s, i + 1,j - 1); t = *(s + i); *(s + i) = *(s + j); *(s + j) = t; } } void main( ) { int a[6] = {10, 6, 23, -90, 0, 3}, i;

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

32. int func(int a[][3]) { int i,j,sum=0; for(i=0;i<3;i++) for(j=0;j<3;j++){ a[i][j]=i+j; if(i==j) sum = sum+a[i][j]; } return sum; } int main() { int a[3][3]={1,3,5,7,9,11,13,15,17};

int sum; sum=func(a); printf(\"sum=%d\ return 0; }

33. # include int i=10; void fun(); void main( ) { int i; for(i=2; i>0; i--) fun( ); } void fun() { i*=2; printf(\"i=%d\\n\ } 34. #include int fun(int n) { if(n<=1) return 1; else return fun(n-1)*n;

35.

} void main() {

int i,j=0;

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

#include int funa(int a, int b) { int t;

if (a > b) t = a/b; else

t = a%22; return t; } void main() {

int a=33, b=22,c;

c=funa(a,b); printf(\"c=%d\\n\ }

36. # include void fun(int i); void main( ) { int i; for(i=2; i>0; i--) fun(i); } void fun(int i) { i*=2; printf(\"+%d+\ }

37. # include void fun(int n); void main( ) { int x=879; fun(x); } void fun(int n) { int a,b,c,t; a = n % 10; b = (n/10) % 10; b = t; } if ( b < c ) { t = b; b = c; c = t; } if ( a < b ) { t = a; a = b; b = t; } printf( \"%d\ }

38. #include int funa(int a, int b)

c = (n/100) % 10; if ( a < b ) { t = a; a = b;

{ int t; if (a > b) { t = a; a = b; b = t; } return t; } void main() { int a=33, b=22,c; c=funa(a,b); printf(\"c=%d\\n\ } 39. #include int swap(int x, int y) { int z; z=x%10; x=y%10; y=z; z=x; return z; } void main() { int a=38, b=29,c; c=swap(a,b);

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

40. #include void fun(int n) { if(n==1) printf(\"*\\n\"); else { printf(\"-\"); fun(n-1); } } void main() { int i,j=0; for(i=1;i<4;i++) fun(i); printf(\"XiaoXin!\"); }

解答: 1. p=27

2. 运行结果:12345

3. 3 5

4. 5 3 3 2 5. 2

6. 11 21 31

7. 3 7

8. 6 7 8 5 5

9. 012345

10. a1=1 a2=3 a3=2

11. 10,20,30

12. a=2,b=3 a=2,b=3

13. 10,20,30

14. a=1.0000

15. 567 16. 4

17. 3.000000

18. 80,-20

19. -1

20. j=12

21. 4,3,5

22. 18

23. Hello, world! Hello, world! Hello, world!

24. x=3;

25. x=22

26. i = 7; j = 6; x = 7 i = 2; j = 7; x = 5 27. 7

28. (1) x = 2 y = 3 z = 0 (2) x = 4 y = 9 z = 5 (3) x = 2 y = 3 z = 0

29. 10, 20, 40, 40

30. 125

31. 3,0,-90,23,6,10

32. sum=6

33. i=20 i=40

34. j=9

35. c=1

36. +4++2+ 37. 8

38. c=33

39. 389 40. * -* --* XiaoXin!

三.补充程序

1. 定义了一个max 函数,找两个整数的最大值,其位置在main之后. #include \"stdio.h\" ________________________ int main() { int x,y,z; printf(\"input two numbers:\\n\");

scanf(\"%d%d\ ________________________; printf(\"maxmum=%d\ return 0; } int max(int a,int b) { ________________________; if(a>b)w=a; else w= b; ________________________; }

2. 用函数nzp判别一个整数a的值,若大于0 则输出该值,若小于等于0则输出0值。 #include \"stdio.h\" ________________________nzp(________________________) { if(v>0) ________________________ else printf(\"%d \ } int main() { int a; printf(\"input number a:\\n\"); scanf(\"%d\ ________________________ return 0; }

3. 主函数调f1计算n阶乘. #include \"stdio.h\" ________________________ int main() { int n; long s; scanf(“%d”,&n); ________________________ printf(\"\\ns=%ld\\n\ return 0; } long f2(int n) { ________________________ int i; for(i=1;i<=n;i++)

c=c*i; ________________________ }

4. 主函数调fun计算1+1/2!+1/3!+...+1/30!的和. #include \"stdio.h\" ________________________ int main() { int n; float s; ________________________ printf(\"1+1/2!+1/3!...+1/30!=%f\\n\ return 0; } float fun() { int n; float t=1; ________________________ for(n=1;n<=30;n++) { t*=1/n; s+=t; } ________________________ }

5. 数组a中存放了一个学生5门课程的成绩,求平均成绩。 #include \"stdio.h\" ________________________ int main() { float sco[5],av; int i; printf(\"\\ninput 5 scores:\\n\"); for(i=0;i<5;i++) scanf(\"%f\ ________________________ printf(\"average score is %5.2f\ return 0; } float aver(float a[])

{ int i; float s=a[0]; ________________________ for(i=1;i<5;i++) s=s+a[i]; av=s/5; ________________________ }

6. 用递归法计算n! #include \"stdio.h\" ________________________ int main() { int n; long y; printf(\"\\ninput a inteager number:\\n\"); scanf(\"%d\ ________________________ printf(\"%d!=%ld\ return 0; } ________________________ff( int n) { long f; if(n<0) printf(\"n<0,input error\"); else if(n==0||n==1) f=1; else f=ff(n-1)*n; ________________________ }

7. 输入正方体的长宽高l,w,h。求体积及三个面x*y,x*z,y*z的面积。 #include \"stdio.h\" int s1; ________________________ int vs( int a,int b,int c) { ________________________ v=a*b*c; s1=a*b; s2=b*c; s3=a*c; ________________________

} int main() { int v,l,w,h; printf(\"\\ninput length,width and height\\n\"); scanf(\"%d%d%d\ ________________________ printf(\"v=%d s1=%d s2=%d s3=%d\\n\ return 0; }

8. 输入两个正整数num1,num2,求其最大公约数. #include \"stdio.h\" ________________________ int main() { int d; int num1,num2; printf(\"please input two numbers:\\n\"); scanf(\"%d,%d\ ________________________ printf(\"gongyueshu:%d\\n\ return 0; } int gongyue(int a,int b) { ________________________ while(b) { temp=a%b; a=b; b=temp; } ________________________ }

9. 利用递归函数调用方式,输出6个数字。 #include \"stdio.h\" ________________________ int main() { int w=5; fun(w); printf(\"\\n\"); return 0; } ________________________fun(________________________) { if(k>0) ________________________;

printf(“%d”,k); }

10. 主函数调printstar打印一串星形图案. #include \"stdio.h\" ________________________ int main() { ________________________ ; return 0; } ________________________printstar(________________________) { printf(“*************\\n”); }

解答:

1. int max(int a,int b); z=max(x,y); int w; return w;

2. void int v printf(\"%d\ nzp(a);

3. long f2(int n); s=f2(n); long c=1;

return c;

4. float fun(void); s=fun(); float s=0; return s;

5. float aver(float a[]); av=aver(sco); float av; return av;

6. long ff(int n); y=ff(n); long return f;

7. int s2,s3; int v; return v; v=vs(l.w,h);

8. int gongyue(int a,int b); d=gongyue(num1,num2); int temp;

return a;

9. void fun(int k); void int k; fun(k-1);

10. void printstar(void); printstar(); void void

四.改错题 解答: 五.编程一 解答: 六.编程二

1. 编程实现:任意输入两个正整数,求它们的最大公约数和最小公倍数。要求最大公约数 通过自定义函数来输出。

2. 编程实现:求出10~10000之内的所有素数。要求素数判断通过自定义函数来实现。

3. 编程实现:输出所有的“水仙花数”。所谓“水仙花数”是指一个3位数,其各位数字立 方和等于该数本身。例如:153是一个“水仙花数”,因为 。要求水仙花数的判断通过自定 义函数来实现。

4. 编程实现:打印出2~1000之间的所有完数。所谓完数,是指这样的数,该数的各因子之 和正好等于该数本身,例如:6=1+2+3;28=1+2+4+7+14;因此,6、28都是完数。要求完数的

判断通过自定义函数来实现。

5. 编程实现:打印出10~9999之间的所有回文数,要求每10个数一行输出。要求回文数的判

断通过自定义函数来实现。

6. 编程实现:打印出1~9999之间的所有同构数,所谓同构数是指一个数如果出现在该数平 方的右端,该数就是同构数。如5,25都是同构数。要求同构数的判断通过自定义函数来实现

7. 给定一5*5的整型矩阵,求所有正对角线元素之和,并以矩阵的形式输出矩阵的值。要求

:对角线元素之和及矩阵输出分别通过两个自定义函数来实现。

8. 编程实现:输入一4*4的矩阵的值,求出每行的最大值并输出其所在列号。要求:通过通

过自定义函数实现矩阵的输入输出。

9. 编程实现:任意给定一个十进制的整数,将其转换成二进制,按位将其存放到数组中, 然后输出,要求数制转换通过自定义函数来实现。

10. 编程实现:任意输入一个正整数,编程求出它是几位数并将其逆序输出。要求通过自定 义函数实现求是几位数,该函数原形为:int ni(int x,int a[]);函数返回值是该数是几位 数,x为给定的数,a中存放该数的各个位。

11. 编写程序从键盘输入x和n的值,求xn (n为大于等于零的整数),要求用 递归函数求xn 。

12. 编写实现:输入两个正整数m,n(m>n),计算从m个元素中任意取n个元素的组合,计算机

公式为:

要求通过递归函数求阶乘。

13. 编程实现:从键盘任意输入10个不相同的整数,然后,输入要查找的数x,如果在这10个

数中找到x,则打印“Found!”;如果找不到,则打印“Not found!”。要求通过自定义函数 实现查找功能。

14. 从键盘输入某班20个学生的成绩和学号,然后从键盘任意输入一个学生的学号,查找出

他的成绩并输出,若未找到,给出相应提示。要求通过自定义函数实现查找功能。

15. 编程实现:从键盘任意输入某班20个学生的姓名和成绩,输出最高分及不及格学生的人

数。要求分别用两个自定义函数求最高分和不及格人数。

16. 编程实现:输入2个降序排列的整数数列,将这两个数列合并存放到另一个数组中,要求

每个数都一次到位,不得在新数组中重新排序。要求数列合并通过自定义函数来实现。

17. 编程实现:输入N名职工的姓名及计算机水平考试的成绩,输出及格人数和及格的职工信

息。要求:职工信息的输入和输出分别通过自定义函数来实现。

18. 编程实现:从键盘输入10名学生的信息,包括学号、姓名、成绩,用一个排序函数sort 完成学生成绩降序排列,并输出学生排序后的结果。

19. 编程实现:任意输入一组不多于20个的升序排列的若干个整数,任意输入不多于10个的

整数(-1作为输入结束标志),将其插入到该序列中,使其依然有序。要求:通过自定义函 数实现将一个整数插入到一个有序序列中,使其依然有序。

20. 一个班级有30个学生,每个学生有学号、姓名及数学、语文、计算机成绩、平均成绩。 要求编程实现以下功能: 1) 从键盘上输入30个学生的信息,平均成绩通过公式:平均成绩=(数学+语文+计算机

)/3计算得出。 2) 输出所有平均成绩大于等于85的学生姓名(要求用自定义函数实现该功能)。

解答: 1. #include \"stdio.h\" int GreatComDiv(int m,int n); int LeaseComMul(int m,int n); void main() { int m,n,t; printf(\"请输入m和n的值:\"); scanf(\"%d%d\ if((m<=0)||(n<=0)) { printf(\"输入错误!请重新输入!\\n\"); scanf(\"%d%d\

2.

}

if(mint GreatComDiv(int m,int n) {int r;

r=m%n;

while(r!=0) /*利用辗除法,直到b为0为止*/ { m=n; n=r; r=m%n; }

return n; } int LeaseComMul(int m,int n) {int greatcomdiv; greatcomdiv=GreatComDiv( m, n); return m*n/greatcomdiv; }

#include \"stdio.h\" int sushu(int n); void main() { int n;

printf(\"input n:\\n\"); scanf(\"%d\

if (sushu(n)) printf(\"%d是素数\\n\ else printf(\"%d不是素数\\n\} int sushu(int n) { int i; for(i=2;i3. 编程实现:输出所有的“水仙花数”。所谓“水仙花数”是指一个3位数,其各位数字立 方和等于该数本身。例如:153是一个“水仙花数”,因为 。要求水仙花数的判断通过自定 义函数来实现。 #include \"stdio.h\" int fun(int n); void main() {int i; for(i=100;i<=999;i++) if (fun(i))printf(\"%d\\n\ } int fun(int n) {int a,b,c; a=n/100;b=n/10%10;c=n%10; if (a*a*a+b*b*b+c*c*c==n)return 1;

4. #include \"stdio.h\" int wanshu(int n); void main() { int n; printf(\"input n:\\n\"); scanf(\"%d\ if (wanshu(n)) printf(\"%d是完数\\n\ else printf(\"%d不是完数\\n\ } int wanshu(int n) { int i,s=0; for(i=1;i<=n/2;i++) if(n%i==0) s+=i; if(s==n) return 1; else return 0; } 5. 方法一: #include \"stdio.h\" int huiwen(int n); void main() { int n; printf(\"input n:\\n\"); scanf(\"%d\

return 0; }

if (huiwen(n)) printf(\"%d是回文数\\n\ else printf(\"%d不是回文数\\n\ } int huiwen(int n) { int a[6],i=0,j; while (n!=0) //从第一个开是放元素 {i++; a[i]=n%10; n=n/10; } for(j=1;j int rev(int a);----------------------------------------------------------- --------------- 1分 void main() { int x, y,i=0; for(x=1;x<1000;x++)------------------------------------------------------ --------2分 { y=rev(x); if(x==y) { printf(\"%6d\------3分 i++; if(i%10==0) printf(\"\\n\");---------------------------------------------------------- --2分 } } } int rev(int a) { int m, b=0;-------------------------------------------------------------- -------------1分 while(a!=0) { m=a%10; b=b*10+m; a=a/10;--------------------------------------------------------------- ------------5分 } return b;------------------------------------------------------------------ -------------1分 6. #include \"stdio.h\" int tgshu(int n); void main() { int n; printf(\"input n:\\n\");

scanf(\"%d\

if (tgshu(n)) printf(\"%d是同构数\\n\ else printf(\"%d不是同构数\\n\ } int tgshu(int n) { int d=1,nn,k=0,t; nn=n*n; t=n; while(t!=0) { d=d*10; t=t/10; if(nn%d==n) return 1;

7. #include \"stdio.h\" #define n 5

void out(int a[n][n] ); int he(int a[n][n]); void main() { int a[n][n],i,j,s;

printf(\"input 5*5 elements\\n\"); for(i=0;iprintf(\"he=%d\\n\ out(a); } void out(int a[n][n]) { int i,j; for(i=0;iint he(int a[n][n])

{ int i,sum=0; for(i=0;ielse return 0; }

}

8.

sum+=a[i][i]; return sum; }

#include \"stdio.h\" #define n 4

void out(int a[n][n] ); void inp(int a[n][n]); void main() { int a[n][n],i,j,k;

printf(\"input 5*5 elements\\n\"); inp(a);

for(i=0;ik=0; for(j=1;jprintf(\" 第%d行最小值为:%5d,它是第%2d列\\n\ }

printf(\"\\n\"); out(a); } void inp(int a[n][n]) { int i,j; for(i=0;ivoid out(int a[n][n]) { int i,j;

for(i=0;ifor(j=0;j9. #include \"stdio.h\" int change(int x,int a[]) //返回值为二进制的位数 { int n=-1; while(x!=0) { n++; a[n]=x%2; x=x/2; } return n; } void main() { int x,a[20],i,n; printf(\"input x\\n\"); scanf(\"%d\ n=change(x,a); for(i=n;i>=0;i--) printf(\"%1d\ printf(\"\\n\"); } 10. #include \"stdio.h\" int ni(int x,int a[]) //返回值为数的位数 { int n=-1; while(x!=0) { n++; a[n]=x%10; x=x/10; } return n; } void main() { int x,a[20],i,n; printf(\"input x\\n\"); scanf(\"%d\ n=ni(x,a); for(i=0;i<=n;i++) printf(\"%1d\ printf(\"\\n\"); }

11. #include \"stdio.h\" int exp(int x,int n); void main() { int x,n; printf(\"input x,n:\\n\"); scanf(\"%d%d\ printf(\"%d\\n\ }

int exp(int x,int n) { if (n==1)return x; return x*exp(x,n-1); }

12. #include \"stdio.h\" long int jch(int n) { if(n==1) return 1; else return n*jch(n-1); } void main() { int m,n,zuhe; printf(\"input two integers m,n(m>n)\\n\"); scanf(\"%d,%d\ if(m>=n) zuhe=jch(m)/(jch(n)*jch(m-n)); printf(\"%d,%d的组合为:%d\ } 13. #include \"stdio.h\" void serach(int a[],int x) { int i; for (i=0;i<10;i++) if(a[i]==x) { printf(\"Found\\n\"); return ; } printf(\"Not found!\\n\"); } void main() { int i,a[10],x; printf(\"input 10 integers \\n\"); for (i=0;i<10;i++) scanf(\"%d\ printf(\"input x\\n\"); scanf(\"%d\ serach(a,x); } 14. #include \"stdio.h\"

#include \"string.h\" typedef struct { char no[10]; int score; }studtype; void search(studtype a[],char xno[]) { int i; for (i=0;i<20;i++) if(strcmp(a[i].no,xno)==0) { printf(\"%d\\n\ return ; } printf(\"Not found!\\n\"); } void main() { studtype stu[20]; char xno[10]; int i; printf(\"input 20 no,score\\n\"); for (i=0;i<20;i++) scanf(\"%s%d\ printf(\"input xno\\n\"); scanf(\"%s\ search(stu,xno); }

15. 编程实现:从键盘任意输入某班20个学生的姓名和成绩,输出最高分及不及格学生的人

数。要求分别用两个自定义函数求最高分和不及格人数。 #define N 20 #include typedef struct { char name[10]; /*姓名*/ int score; /*成绩*/ }datatype; int max(datatype stu[]); /*最高分函数声明*/ int num(datatype stu[]); /*不及格人数函数声明*/ void main() { datatype stu[N]; int i,max_score,n; printf(\"请输入 %d 名职工姓名 成绩:\\n\ for(i=0;imax_score=max(stu); n=num(stu); printf(\"最高分:%d;不及格人数%d\ } int max(datatype stu[]) /*最高分函数定义*/ {int m,i; m=0; for(i=1;istu[m].score)m=i; return stu[m].score; } int num(datatype stu[]) /*不及格人数函数定义*/ { int i,n=0; for(i=0;i16. 编程实现:输入2个降序排列的整数数列,将这两个数列合并存放到另一个数组中,要求

每个数都一次到位,不得在新数组中重新排序。要求数列合并通过自定义函数来实现。 #define M 4 #define N 5 #include void merge(int a[],int b[],int c[]); void main() { int i,a[M],b[N],c[M+N]; printf(\"请输入 %d 个降序排列的整数:\\n\ for(i=0;ii=0;j=0;k=0; while(ib[j]) c[k++]=a[i++]; else c[k++]=b[j++]; while(i17. 编程实现:输入N名职工的姓名及计算机水平考试的成绩,输出及格人数和及格的职工信

息。要求:职工信息的输入和输出分别通过自定义函数来实现。 #define N 10 #include //#include typedef struct { char name[10]; /*姓名*/ float score; /*成绩*/ }datatype; void input(datatype work[]); /*input函数声明*/ void print(datatype work[]); /*print函数声明*/ void main() { datatype work[N]; input(work); print(work); } void input(datatype work[]) /*input函数定义*/ { int i; printf(\"请输入 %d 名 学生的姓名 成绩:\\n\ for(i=0;ifor(i=0;i60)printf(\"%10s\\n\ }

18. 编程实现:从键盘输入10名学生的信息,包括学号、姓名、成绩,用一个排序函数sort 完成学生成绩降序排列,并输出学生排序后的结果。 #define N 10 #include //#include typedef { char num[20]; /*学号*/ char name[20]; /*姓名*/ float score; /*成绩*/ }stutype; void input(stutype stu[]); /*input函数声明*/ void sort(stutype stu[]); /*sort函数声明*/ void print(stutype stu[]); /*print函数声明*/ int main() { stutype stu[N]; input(stu); sort(stu); print(stu); return 0; } void input(stutype stu[]) /*input函数定义*/ { int i; printf(\"请输入 %d 名学生信息(学号 姓名 成绩):\\n\ for(i=0;ik=j; if(k!=i) { t=stu[i]; stu[i]=stu[k]; stu[k]=t; } } } void print(stutype stu[]) /*print函数定义*/ { int i; printf(\"****名次 学号 姓名 成绩****\\n\"); for(i=0;i19. //编程实现:任意输入一组不多于20个的升序排列的若干个整数,任意输入不多于10个

的整数(-1作为输入结束标志),将其插入到该序列中,使其依然有序。要求:通过自定义 函数实现将一个整数插入到一个有序序列中,使其依然有序。 #include void ins(int a[],int*n,int x); void main() { int a[30],x,m,i; m=-1; printf(\"输入一组不多于20个的升序排列的若干个整数,-1作为输入结束标志\\n\"); scanf(\"%d\ while(x!=-1) { m++; a[m]=x; scanf(\"%d\ } printf(\"输入一组不多于10个的升序排列的若干个整数,-1作为输入结束标志\\n\"); scanf(\"%d\ while(x!=-1) { ins(a,&m,x); scanf(\"%d\ } for(i=0;i<=m;i++) printf(\"%5d\ } void ins(int a[],int*n,int x)

{ int i=*n; while(a[i]>x&&i>=0) { a[i+1]=a[i]; i--; } a[i+1]=x; (*n)++; }

20. 一个班级有30个学生,每个学生有学号、姓名及数学、语文、计算机成绩、平均成绩。 要求编程实现以下功能: 1) 从键盘上输入30个学生的信息,平均成绩通过公式:平均成绩=(数学+语文+计算机

)/3计算得出。 2)输出所有平均成绩大于等于85的学生姓名(要求用自定义函数实现该功能)。 #include \"stdio.h\" #define n 30 typedef struct { char no[11],name[9]; int math,chiness,comp; float ave; }studtype; void out(studtype a[]) { int i; for (i=0;i=85)printf(\"%10s\\n\ } void main() { studtype stu[n]; int i; printf(\"input no,name,math,chiness,computer\\n\"); for (i=0;i第七章 数组

一.填空

1. 数组是由固定数目的( )的变量按一定顺序排列而构成的。

2. 设有数组定义:char array[]=“China”;则数组所占的存储空间为( )个字节 。

3. 一个二维字符数组a[10][20]能够存储( )个字符串。

4. 假定在一维数组b[10]中,元素b[5]的指针为p,则p+4所指向的元素为( )。

5. 一维数组的下标从( )开始。

6. 设有数组a[10];则首地址可以写成 ( )。

7. 设有数组int a[10], 数组元素a[5]用指针表示的形式是( )。

8. 设有数组int a[10][15], 数组元素a[5][3]用指针表示的形式是( )。

9. 定义3行4列的整型二维数组a的语句是( )。

10. 定义 int b[ ]={5,6,7,8}, y, *p=b; 执行 y=*p++ 以后, y 的值为( )。

11. 按下面的语句定义数组a 后,a [2][0] 的值为( )。 int a[3][2]={2,4,6,8,10};

12. 假设要把“student!”存入一个字符数组,则该数组长度应该至少为( ) 。

13. 在C语言中,如果采用语句 int a[2][3] = {1,2,3,4,5} 完成一个二维数组的定义和初 始化,那么a[0][1] 的值为( )。

14. 在C语言中,如果采用语句 int a[2][3] = {1,2,3,4,5} 完成一个二维数组的定义和初 始化,再定义 int *b = a[0],那么 *(b+2) 的值为 ( ).

15. 若int a[ ][3]={1,2,3,4,5,6,7,8,9};则*(*a+1)的值是( )。

16. 按下面的语句定义数组b后,b[2][1]的值为( )。 int b[][2]={2,1,4,3,5,6}。

17. 设int a[]={0,1,2,3,4,5,6,7,8,9},*p=a,则*p+4=( )。

18. 定义2行3列5层的整型三维维数组a的语句是( )。

19. 若有int a[3]={10,12,30};则*(a+2)+3= ( )。

20. 若有int a[3]={10,12,30};则a+1是( )的地址。

21. 假设int型变量占两个字节的存储单元,若有定义:int x[10]={0,2,4}; 则数组x在内存 中所占字节数为 ( )。

22. 若有定义int a[][3]={1,2,3,4,5,6,7};,则a数组第一维的大小是( )。

23. 数组 int a[3][3];共定义了( )个数组元素。

24. C语言中,二维数组的存放方式为按( )存放。(填“行”或“列”)

25. 定义int a[10]={11,12,13,14,15}, *p=&a[5]; 假设&a[0]和&a[1]的值分别是0x2000和0 x2004,则p的值是( )。

26. 定义int a[10]={11,12,13,14,15}, *p=&a[3]; 假设&a[0]和&a[1]的值分别是0x2000和0 x2004,则表达式a[0]+*p的值是( )。

27. 对一维数组初始化时,若有int a[10]={0,1,2,3,4},则a[5]的值是( )。

28. 已知:int a[][3]={1,3,5,7,9,11}; 此时数组元素a[1][2]的值为( )。

29. 定义char a[7]= \"abcdef\"; char b[4]= \"ABC\执行语句strcpy(a,b);printf(\"%s\输出结果是( )。

30. 定义int a[10]={1,3,5,7,9,11,13,15,17,19},*p=a;执行语句printf(\"%d\输出 结果是( )。

31. 已知 int a[5] = { 2, 3, 4, 5, 6 }; int *p = a+2; 则表达式 *p*a[3] 的值是( )。

32. 定义char a[7]= \"123456\"; char b[4]= \"ABC\执行语句strcpy(a,b); printf(\"%c\6]),输出结果是( )。

33. 对整形数组int a[5]={1,2,3}; 则执行语句a[2]=a[2]+a[1]*(*(a+3)); a[2]的值为( )

34. 定义char a[5]={65,66,67},*p=a; 则执行语句printf(\"%s\输出结果为( )。

35. 对于定义 struct TData{ int a[2]; char c; }; struct TData slist[3]={{{1,2},’A’},{{3,4},’B’}}}; slist[1].a[0]的值为( )。

36. 已知:int a[][3]={1,3,5,7,9,11}; 则*(a[1]+1)的值为( )。

37. 已知:int a[2][3]={1,3,5,7,9,11,13},*p; p=&a[2]; p=p+3; 则*p的值为( )。

38. 定义char a[7]= \"123\"; char b[4]= \"ABC\执行语句strcat(a,b); printf(\"%s\输 出结果是( )。

39. 对整形数组int a[5]={3,3,3}; 则执行语句a[2]=a[1]>0?(a[4]+1):(a[2]+2); a[2]的值 为( );

40. 定义 int a[ ]={5,6,7,8}, *p=a; 执行 *(p++); 以后, a[0]的值为( )。

解答: 1. 同类型 2. 6 3. 10

4. b[9] 5. 0 6. a

7. *(a+5)

8. *(*(a+5)+3)

9. int a[3][4] 10. 5

11. 10 12. 9 13. 2 14. 3 15. 2 16. 6 17. 4

18. int a[2][3][5]

19. 33

20. a[1]

21. 20 22. 3 23. 9

24. 行

25. 0x2014

26. 25 27. 0

28. 11

29. ABC 30. 8

31. 20 32. 6

33. 3

34. BC 35. 4 36. 5

37. 11

38. 123ABC 39. 1 40. 5

二.阅读程序写结果 1. #include void main() { int a[2][3]={{3,2,7},{4,8,6}}; int i,j,m=0; for(i=1;i<=1;i++) for(j=0;j<=i;j++) m=m+a[i][j]; printf(\"m=%d\ }

2. #include void main(void) { int array[10] = {1, 2, 4, 5, 6, 0, 0, 0, 0, 0}, i; printf(\"\\n\"); for (i=0; i<10; i++) printf(\"%3d \ printf(\"\\n\"); for (i=9; i>=2; i--) array[i] = array[i-1]; array[2] = 3; for (i=0; i<10; i++) printf(\"%3d \ printf(\"\\n\"); }

3. #include void main(void) { 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\"); }

4. #include #include void main() { char a[30]=\"Hello \"; char b[10]=\"Students\"; char c[10]=\"Teachers\"; strcat(a,c); printf(\"%s,%s.\\n\ }

5. #include void inv(int x[],int n); void main() { int i, a[10]={3,7,9,11,0,6,7,5,4,2}; inv(a, 10); printf(\"The array has been reverted.\\n\"); for(i=0;i<10;i++) printf(\"%d,\ printf(\"\\n\"); } void inv(int x[], int n) { int t,i,j,m=(n-1)/2; for(i=0;i<=m;i++) { j=n-1-i; t=x[i]; x[i]=x[j]; x[j]=t; } }

6. #include void main() { float a[3][3]={1,2,3,4,5,6,7,8,9},sum=0; int i; printf(\"please input rectangle element:\\n\"); for(i=0;i<3;i++) sum=sum+a[i][i]; printf(\"duijiaoxian he is %6.2f\ }

7. #include int main() { int i=1,n=3,j,k=3; int a[5]={1,4,5}; while(i<=n&&k>a[i]) i++; for(j=n-1;j>=i;j--) a[j+1] = a[j]; a[i] = k; for(i=0;i<=n;i++) printf(“%2d”,a[i]); return 0; }

8. #include void main() { int a[10]={0,1,2,3,4,5,6,7,8,9}, b[10],i,sum=0; { b[i]=a[i-1]+a[i]; sum=sum+b[i]; } for(i=1;i<10;i++) if(i%3==0) sum=sum+b[i]; printf(\"sum=%3d\ }

9. #include void main() { int a[5]={2,6,1,3,4},n=5,i,j,t; for(i=0,j=1;jfor(i=1;i<10;i++)

i++; } for(i=0;i10. #include void funa(int x[],int n); void main() { int i, a[5]={3,7,9,11,0}; funa(a, 5); for(i=0;i<5;i++) printf(\"%d,\ printf(\"\\n\"); } void funa(int x[], int n) { int t,i,j,m=(n-1)/2; for(i=0;i<=m;i++) { j=n-1-i; t=x[i]; x[i]=x[j]; x[j]=t; } }

11. #include void main() { int a[5]={24,15,33,64,45},n=5,i,j,t; for(i=0;i0;i--) printf(\"%d,\ }

12. #include void main() { int a[5],i,j,t; for(i=4;i>=0;i--) scanf(\"%d\ for(i=0;i<5;i++) a[i]=a[i]+10; for(i=0;i<5;i++)

printf(\"%d,\ } 输入:42 31 24 15 16<回车>

13. #include void main() { char a[][5]={\"Zhong\ printf(\"%s\\n%s\\n\ }

14. #include void main() { int a[3][3]={0,1,2,3,4,5,6,7,8},i,j,t; for(i=0;i<3;i++) for(j=0;j<3;j++) a[i][j]+=a[i][0]; for(i=0;i<3;i++) printf(\"%d,\ }

15. #include void main() { int a[3][3]={1,2,3,4,5,6,7,8,9},i,j; for(i=0;i<3;i++) for(j=0;j<3;j++) a[i][j]+=a[i][2]; while(i>0) { i--; printf(\"%d,\ } }

16. #include void main() { int i,j; char a[10]={\"ABCDEFGHIJ\ for(i=0;i<10;i++) a[i]=a[i]+3; printf(\"%c\\n\ }

17. #include int main() { int i,a[10]={0,1,2,3,4,5,6,7}; for(i=1;i<9;i++) a[i]=a[i-1]+a[i+1]; printf(\"%d%d\\n\ return 0; }

18. #include int main() { int i,a[]={1,2,3,4,5,6,7,8,9,10}; for(i=0;i<5;i++) a[i]=i+2; for(i=9;i>=0;i--) if(a[i]%3==0) printf(\"%d\\n\ return 0; }

19. #include int main() { int num=13,len=0,i=0,a[30]; do { a[len]=num%2; num=num/2; }while(num); for(i=0;i20. #include int main() { int a[5]={6,9,12,16}; int x,i=3; scanf(\"%d\ while(i>=0 && xlen++;

printf(\"%5d\ printf(\"\\n\"); return 0; } 输入:10<回车>

21. #include int main() { int a[3][3]={{2,3},{4,5,6},{7,8}}; int i=0,j=0,m; m=a[0][0]; for(i=0;i<3;i++) for(j=0;j<3;j++) if(a[i][j]22. #include #include int main() { int i; char str[20]=\"abcdef\"; strcpy(str,\"opqrst\"); str[5]='\\0'; for(i=0;i23. #include #include int main() { char a[10]=\"AB\ int i=0; while(b[i]) { a[i]=b[i]; i++; } a[i]='\\0'; puts(b); return 0; }

24. #include #include int main() { int i; char str1[30]=\"abc\ for(i=1;i<3;i++) strcat(str1,str2[i]); puts(str1); return 0; }

25. #include int main() { int i; char a[] = \"Time\ for(i = 0; a[i] != '\\0' && b[i] != '\\0'; i++){ if (a[i] == b[i]) if (a[i] >= 'a' && a[i] <= 'z') printf(\"%c\ else printf(\"%c\ else printf(\"*\"); } return 0; }

26. #include int main() { char a[4][10] = {\"1234\ int i = 3; char (*p)[10] = a; printf(\"output string: \\n\"); for (p = a; p < a + 4; p++, i--) printf(\"%c\ return 0; }

27. #include #include int main() { char str1[30], str2[] = “your book”; scanf(“%s”, str1); strcpy(str1, str2);

printf(“\\n %s\\n %d\\n”, str1, strlen(str2)); return 0; } 输入:you are a student<回车>

28. #include #include int main() { char s1[10]=“java”,s2[10]=“basic”,s[10]; if(strcmp(s1,s2)) { strcpy(s,s1); puts(s);} printf(“%d,%s\\n”,strlen(s2),strcat(s2,s1)); return 0; }

29. #include < stdio.h > #include < string.h > int main () { char *p = “abcdefgh” , c[10] = { “XYZ” } ; p += 3 ; puts ( strcat ( c , p ) ) ; printf ( “%d\\n” , strlen ( c ) ) ; return 0; }

30. #include int main() { int a[6][6], i, j; for(i=1;i<6;i++) for(j=1;j<6;j++) a[i][j] = (i/j)*(j/i); for(i=1;i<6;i++) { for(j=1;j<6;j++) printf(\"%2d\ printf(\"\\n\"); } return 0; }

31. #include int main() { int i, f[10]; f[0]= f[1] = 1; for(i=2;i<10;i++) f[i] = f[i-2] + f[i-1]; for(i=0;i<10;i++){

if(i%4 == 0) printf(\"\\n\"); printf(\"%3d\ } return 0; }

32. #include #include int main() { char a[]=\"morming\ int i, j=0; for(i=1;i<7;i++) if(a[j]33. #include #include void main() { char s[12]=“abcdef”; scanf(“%s”,s); strcat(s,”xyz”); printf(“%s\\n”,s); }

34. #include void main() { int a[3][3]={{3,4},{5,6},{7,8}}; int i,j,t=0; for(i=1;i<3;i++) for(j=0;j35. #include void main( ) { int i,t,a[5]={1,2,3,4,5}; t=a[0]; for(i=1;i<5;i++)

a[i-1]=a[i]; a[4]=t; for(i=0;i<5;i++) printf(\"%d\ printf(\"\\n\"); }

36. #include void mystrcpy( char s1[ ] , char s2[ ]); void main( ) { char a[50]=\"I am a teacher.\"; char b[]=\"You are a student.\"; printf( \" a = %s \\n\" , a ); mystrcpy( a , b ); printf( \" a = %s \\n\" , a ); } void mystrcpy( char s1[ ] , char s2[ ]) { int i = 0 ; while( s2[i] != '\\0' ) { s1[i] = s2[i]; i++; } s1[i] = '\\0' ; }

37. #include void main() { int i,j,k=0,a[3][3]={1,2,3,4,5,6}; for(i=0;i<3;i++) for(j=i;j<3;j++) k=k+a[i][j]; printf(“¡ã%d”¡À,k); }

38. #include void main() { int i,j=3,a[ ]={1,2,3,4,5,6,7,8,9,10}; for(i=0;i<5;i++) a[i]=i*(i+1); for(i=0;i<4;i++)

j+=a[i]*3; printf(\"%d\\n\ }

39. #include void main() { char c, string[81]= \"How are you?\"; int i, n=0, k=0; for(i=0; c=string[i]; i++) { if(c==' ') k=0; else if(k == 0) k = 1; n ++; } } printf(\"%d\\n\" , n ); }

40. #include #include void main( ) { char s[16]=“12345\\0\\\”; printf(“%d,%d\\n”,strlen(s),sizeof(s)); }

解答: 1. m=12

2. 1 2 4 5 6 0 0 0 0 0 1 2 3 4 5 6 0 0 0 0

3. CDG

4. Hello Teachers,Students.

5. The array has been reverted. 2,4,5,7,6,0,11,9,7,3,

6. please input rectangle element: duijiaoxian he is 15.00

{

7. 1 3 4 5

8. sum=114

9. 22121

10. 0,11,9,7,3,

11. 5,4,3,5,4,

12. 26,25,34,41,52

13. ZhongGong Gong

14. 0,10,20

15. 18,11,4 16. J

17. 2027 18. 9 6 6 3

19. 1101

20. 6 9

21. m=0

22. opqr

23. LMNP

24. abchiklm

25. t*M

26. 4cyi

10 12

16

27. your book 9

28. java 9,basicjava

29. XYZdefgh 8

30. 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1

31. 1 1 2 3 5 8 13 21

32. mo

33. hijxyz

34. t=20

35. 23451

36. a= I am a teacher. a= You are a student.

37. 17

38. 63 39. 3

40. 5,16

三.补充程序

1. 求一个3*3矩阵对角线元素之和。 #include \"stdio.h\" int main() { float a[3][3],sum=0; int i,j;

printf(\"please input rectangle element:\\n\"); for(i=0; ________________________;i++) for(j=0;j<3;j++) scanf(\"%f\ for(i=0; ________________________;i++) ________________________; printf(\"duijiaoxian he is %6.2f\ return 0; }

2. 将一个数组逆序输出. #include \"stdio.h\" #define N 5 int main() { int a[N]={9,6,5,4,1},i,temp; printf(\"\\n original array:\\n\"); for(i=0;i3. 一个学习小组有5个人,每个人有三门课的考试成绩。求全组分科的平均成绩和各科总平

均成绩。 #include \"stdio.h\" int main() { int i,j,s=0,a[5][3]; float ,l,v[3]; printf(\"input score\\n\"); for(i=0; ________________________;i++) { for(j=0;j<5;j++) { scanf(\"%d\

s=s+a[j][i]; } v[i]=s/5.0; ________________________; } l=(v[0]+v[1]+v[2])/3.0; printf(\"math:%f\\nc languag:%f\\ndbase:%f\\n\________________________,v[2 ]); printf(\"total:%f\\n\ return 0; }

4. 将字符串st2内容连接到串st1中,并计算串st1字符长度。 ________________________ #include \"stdio.h\" int main() { int len; char st1[30]=\"My name is \"; char st2[10]; printf(\"input string st2 name:\\n\"); gets(________________________); ________________________; len=________________________; puts(st1); printf(“串st1字符长度%d\\n”,len); return 0; }

5. 将十进制整数base转换成2进制。 #include \"stdio.h\" int main ( ) { int i=0,base,j,num[20] ; scanf(“%d”,&base) ; do { num[i]= ________________________; base=________________________; i++; } while (base!=0); for (________________________;________________________ ;j--) printf(“%d”,num[j]) ; return 0; }

6. 输入一个2×3矩阵,并3行2列输出矩阵。 #include int main()

{ int i,j; float s[2][3]; printf(“please input 6 numbers:\\n”); for(i=0; ________________________;i++) for(j=0;j<3;j++) ________________________; printf(“\\n the final matrix is:\\n”); for(i=0;i<3;i++) { ________________________ printf(\"%f\ ________________________ } return 0; }

7. 从键盘输入10个学生的成绩,求平均分并输出大于平均分的所有成绩。#include int main( ) { int i; ________________________ float a=0.0; printf (\" Input 10 student's scores:\\n \"); for(i=0; i<10; i++) ________________________; for(i=0; i<10; i++) a=a+s[i]; ________________________; printf(\"average=%2.1f \\n scores(> average):\\n\ for(i=0; i<10; i++) if (s[i]>a) ________________________; return 0; }

8. 将一个2行3列数组a的元素,存到一个3行2列二维数组b中,并输出数组a,b. #include int main ( ) { int a[2] [3]={{1, 2,3},{4, 5,6}}; int b[3] [2], i, j; printf(\"array a: \\n\"); for (i=0; i<=1; i++) {

for (j=0; j<=2; j++) { printf(\"%5d\ ________________________; } printf(\"\\n\"); } printf(\"array b:\\n\"); for (i=0; ________________________; i++) { for (j=0; ________________________; j++) printf(\"%5d\ ________________________; } return 0; }

9. 计算矩阵上三角阵(不包括对角线元素)各元素之和,并8行2列输出矩阵a. #include int main() { int a[4][4]={{2,3,4},{5,6,7},{8,9,1}}; int i,j,t=0; for(I=0;i<4;i++) for(____________________; ________________________;j++) t+=________________________; printf(\"t=%d\\n\ for(i=0;i<4;i++) { for(j=0;j<4;j++) { printf(“%3d”, a[i][j]); if((j+1)%2==0)printf(“\\n”); } ________________________; } return 0; }

10. 计算和存储数列前20项,每行输出5项。 #include \"stdio.h\" int main() { ________________________; int i; a[0]=a[1]=1; for(________________________;i<20;i++) a[i]=a[i-1]+a[i-2];

for(i=0; ________________________;i++) { printf(“%6d”,a[i]); ________________________; } return 0; }

解答: 1. i<3 &a[i][j] i<3 sum+=a[i][j]

2. a[i] i3. i<3 a[j][i] s=0 v[1]

4. #include\"string.h\" st2 strcat(st1,st2); strlen(st1);

5. base%2;

base/2; j=i-1 j>=0

6. i<2 scanf(\"%f\ for(j=0;j<2;j++) printf(\"\\n\");

7. int s[10]; scanf(\"%d\ a=a/10; printf(\"%5d\

8. b[j][i]=a[i][j]; i<3 j<2 printf(\"\\n\");

9. j=i+1 j<4 a[i][j] if((i+1)%2==0)printf(\"\\n\");

10. int a[20] i=2 i<20

if((i+1)%5==0)printf(\"\\n\");

四.改错题 解答: 五.编程一 解答: 六.编程二 解答:

第八章 结构体

一.填空

1. 引用结构体变量成员的一般形式是:结构体变量名__________。

2. 定义枚举类型的关键字是__________。

3. 设char 、int、float分别占1、2、4个字节,假设有如下定义: struct student { char name[10]; int nl; float ave; }qq; 则变量qq在内存中所占的字节数是__________。

4. 设char 、int、float分别占1、2、4个字节,假设有如下定义: union student { char name[10]; int nl; float ave; }qq; 则变量qq在内存中所占的字节数是__________。

5. 设char 、int、float分别占1、2、4个字节,假设有如下定义: union stu { char a; int b; float c; }; struct { float c; union stu x; } y; 那么变量y占用的存储空间分别为__________个字节。

6. 设有定义 struct date

{ int day ; char month ; int year ; } dd , *pd = &dd ; 请写出:使用指针变量pd引用结构体成员 dd .day 的另一种描述形式__________。

7. 结构体变量各成员占用的内存单元起始地址__________。(填“相同”或“不同”)

8. 共用体变量各成员占用的内存单元起始地址__________。(填“相同”或“不同”)

9. 设char 、int、float分别占1、2、4个字节,假设有如下定义: union stud_type { char name[5]; int num; float score; }]; union stud_type stu[10]]; 则程序运行时,系统将为stu分配__________个字节的内存空间。

10. 设char 、int、float分别占1、2、4个字节,假设有如下定义: struct stud_type { char name[5]; int num; float score; }; struct stud_type stu[10]; 则程序运行时,系统将为stu分配__________个字节的内存空间。

11. 设char、float和double型数据占用的内存空间字节数分别是1、4和8,则变量stu1在内 存中占用的字节数是__________。 struct stud_type { char name[10]; float score[5]; double average; }stu1;

12. 写出一个单链表结点的结构体类型定义:结点名为worker,分量num为整型,分量next为

指向下一结点的指针________________________________________。

13. 写出一个货品信息的结构体类型定义:结点名为goods_type,第一个分量货品号num为

整 型,第二个分量货品名name为长度为20 的字符型数组,第三个货品库存量amount为整型。__

______________________________________。

14. 在C语言中,可以给某个已有的数据类型重新命名。将int型重新命名为INTEGER,应该表

示为______________________________。

15. 在C语言中,给某个已有的数据类型重新命名的形式为:__________ 类型名

16. 结构体变量成员的引用方式是使用__________运算符。

17. 结构体指针变量成员的引用方式是使用__________运算符。

18. 设struct student{ int no;char name[12];float score[3]; } sl,* p = &sl;用指针 法给sl的成员no赋值1234的语句是____________________。

19. typedef的功能是____________________。

20. 设char 、int分别占1、2个字节,假设有如下定义: union student { int n;char a[100]; } b; 则sizeof(b)的值是__________。

解答:

1. •成员名

2. enum 3. 16 4. 10 5. 8

6. pd->day 或(*pd).day

7. 不同

8. 相同 9. 50

10. 110

新名称。

11. 38

12. struct worker { int num; struct worker *next; };

13. struct goods_type { int num; char name[20];int amount;};

14. typedef int INTEGER;

15. typedef 16. •

17. ->

18. p->no=1234或(*p).no=1234

19. 给某个已有的数据类型重新命名

20. 100

二.阅读程序写结果 1. #include struct stri_type { char ch1; char ch2; struct { int a; int b; }ins; }; int main() { struct stri_type ci; ci.ch1='a'; ci.ch2='A'; ci.ins.a=ci.ch1+ci.ch2; printf(\"%d,%c\\n\ return 0; }

2. #include struct stud_type { char num[11]; char name[11]; float score[3];

ci.ins.b=ci.ins.a-ci.ch1;

float average; }; int main() { struct stud_type stu={\"200601\ stu.average=(stu.score[0]+stu.score[1]+stu.score[2])/3; printf(\"average=%5.2f\\n\ return 0; }

3. #include union out { int a[2]; struct { int b; int c; }in; int d; }; int main() { union out e; int i; e.in.b=1; e.in.c=2; e.d=3; printf(\"%5d\ printf(\"\\n\"); return 0; }

4. #include #define PI 3.14 struct cir_type { float r; double area; }; int main() { struct cir_type cir={5.0},*p=○ p->area=PI*p->r*p->r; printf(\"area=%.3lf\\n\ return 0; }

5. #include struct int_char

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

{ int i; char ch; }; int main() { struct int_char x={9,'z'}; printf(\"%d\%5c\\n\ return 0; }

6. #include int main() { struct data { int m; int n; union { int y; int z; }da; }; struct data intdata; intdata.m=3;intdata.n=6; intdata.da.y=intdata.m+intdata.n; intdata.da.z=intdata.m-intdata.n; printf(\"%5d%5d\\n\ return 0; }

7. #include int main() { int i; float sum_average=0; struct student { int num; char name[10]; int score[2]; float average; }; struct student data[2]={{1,\"zhangsan\ for(i=0;i<2;i++) { data[i].average=(data[i].score[0]+data[i].score[1])/2.0;

sum_average=sum_average+data[i].average; } sum_average=sum_average/2; for(i=0;i<2;i++) if(sum_average>data[i].average) printf(\"%5d%10s%5.2f\ return 0; }

8. #include struct int_data { int d1,d2;}; int main() { struct int_data data[2]={{2,3},{5,6}}; int i; int sum=10; for(i=0;i<2;i++) { scanf(\"%d%d\ sum=data[i].d1+data[i].d2+sum; } printf(\"sum=%d \\n\ return 0; } 输入:20 30 40 50<回车>

9. #include int main( ) { union exa { struct { int a; int b; }out; int c; int d; }e; e.out.a=10; e.out.b=20; e.c=2; e.out.b); return 0; }

10. #include struct st {

e.d=5; printf(\"%d,%d\\n\

int a; int b; union { int e; int f; }c; }; int main( ) { struct st y; y.a=10; y.c.e=20; y.c.f=y.a; y.b=y.c.e; printf(\"%d,%d\\n\ return 0; }

11. #include struct sta { int a; char b; }; struct stb { int a; char b; struct sta c; }; int main( ) { struct stb y; y.a=10; y.b='X'; y.c.a=y.a*2; y.c.b=y.b--; printf(\"%d,%c\\n\ return 0; }

12. #include union st { int a[2];

int b[2]; int c; }; int main( ) { union st y; y.a[0]=10; y.b[1]=20; y.c=30; printf(\"%d,%d\\n\ return 0; }

13. #include struct two { int n; char ch; }; void main( ) { struct two ex1={5,'t'}; printf(\"%d,%c\\n\ }

14. #include struct two { int n; char ch; }; void func(struct two ex2); void main() { struct two ex1={6,'v'}; func(ex1); printf(\"%d,%c\\n\ getchar(); }

void func(struct two ex2) { ex2.n= ex2.n +20; ex2.ch= ex2.ch -1; }

15. #include union exa{ struct{ int a; int b; }out; int c; int d; }; void main() { union exa e; e.c=1; e.d=3; e.out.a=e.c; e.out.b=e.d; printf(\"%d,%d\\n\ }

16. #include struct stu { int a; int b; struct poi { int x; int y; }ins; }; void main() { struct stu outs; outs.a=11; outs.b=4; outs.ins.x=outs.a+outs.b; outs.ins.y=outs.a-outs.b; printf(\"%d,%d\ }

17. #include struct abc { int a, b, c; };

int main() { struct abc s[2] = {{1,2,3},{4,5,6}}; int t; t = s[0].a + s[1].c; printf(\"t=%d \\n\ return 0; }

18. #include struct st { int x, y; } data[2] = {1, 10, 2, 20}; int main() { struct st *p = data ; printf(\"%d\\n\ printf(\"%d\\n\ return 0 ; } 19. #include struct n { int x; char c; }; void func(struct n b) { b.x = 20; b.c = 'y'; } int main() { struct n a = {10, 'x'}; func(a); printf(\"%d,%c\ return 0; } 20.

#include int main() { struct EXAMPLE { struct { int x; int y; } in; int a; int b; } e; e.a = 1; e.b = 2; e.in.x = e.a * e.b; e.in.y = e.a + e.b; printf(\"%d,%d\ return 0; }

解答: 1. 162,A

2. average=78.33

3. 3 2

4. area=78.500

5. 29 x

6. -3 -3

7. 1 zhangsan65.00

8. sum=150

9. 5,20

10. 10,10

11. 20,X

12. 30,20

13. 15,s

14. 6,v

15. 3,3

16. 15,7

17. t=7

18. 10 2

19. 10,x

20. 2,3

三.补充程序

1. 该程序完成的功能是从屏幕上输入日期(年、月、日),计算其为该年的第几天。 #include struct date_type { int year; int month; int day; }; int main() { int days=0,i; struct date_type date; int mon_day[12]={31,28,31,30,31,30,31,31,30,31,30,31}; printf(\"请输入日期(年 月 日):\\n\"); scanf(\"%d%d%d\ for(i=1;i=3) ____________________________; printf(\" 所输入日期是该年第%d天\\n\ return 0; }

2. 该程序完成的功能是从屏幕上输入日期(年、月、日),计算其为该年的第几天。

#include struct date_type { int year; int month; int day; }; int main() { int days=0,i; ___________________________; int mon_day[12]={31,28,31,30,31,30,31,31,30,31,30,31}; printf(\"请输入日期(年 月 日):\\n\"); scanf(\"%d%d%d\ for(i=1;________________;i++) days=mon_day[i-1]+days; days=days+date.day; if((date.year%4==0&&date.year%100!=0||date.year%400==0)&&_______________ _) days=days+1; printf(\" 所输入日期是该年第%d天\\n\ return 0; }

3. 该程序完成的功能是从屏幕上输入日期(年、月、日),计算其为该年的第几天。 #include struct date_type { int year; int month; int day; }; int main() { int days=0,i; struct date_type date; int mon_day[12]={31,28,31,30,31,30,31,31,30,31,30,31}; printf(\"请输入日期(年 月 日):\\n\"); scanf(\"%d%d%d\ for(i=1;____________________;i++) days=mon_day[i-1]+days; days=days+date.day; if((date.year%4==0&&date.year%100!=0||___________________)&&date.month>=3) days=days+1; printf(\" 所输入日期是该年第%d天\\n\ return 0; }

4. 该程序实现从键盘输入1名职工的信息:职工号、姓名、月工资。由print函数完成这名 职工信息的输出。 #include struct employee_type { char num[20]; char name[20]; float pay; }; void print(struct employee_type emp1); int main() { struct employee_type emp; printf(\"请输入职工信息(职工号 姓名 月工资):\\n\"); scanf(\"%s%s%f\ print(_____________________); return 0; } void print(__________________________) { printf(\"****职工号 姓名 月工资****\\n\"); printf(\"%8s%8s%10.2f\\n\ }

5. 该程序完成从键盘输入10名学生信息(学号、姓名、成绩),用一个排序函数sort完成按 学生成绩降序排列,并输出学生成绩排行榜。 #include #define N 10 struct stud_type { char name[10]; int num; float score; }; void sort(struct stud_type stu[], int n); int main() { int i; struct stud_type stu[N]; printf(\"Please input %d student’s name num score:\\n\ for(i=0;ivoid sort(__________________) { int i,k,j; struct stud_type t ; for(i=0;i6. 该程序完成从键盘输入10名学生信息(学号、姓名、成绩),用一个排序函数sort完成按 学生成绩降序排列,并输出学生成绩排行榜。 #include #define N 10 struct stud_type { char name[10]; int num; float score; }; void sort(struct stud_type stu[], int n); int main() { int i; struct stud_type stu[N]; printf(\"Please input %d student’s name num score:\\n\ for(i=0;ik=j ; if (k!=i) {__________; __________; __________; } } }

7. 该程序完成从键盘输入10名学生信息(学号、姓名、成绩),用一个排序函数sort完成按 学生成绩降序排列,并输出学生成绩排行榜。 #include #define N 10 struct stud_type { char name[10]; int num; float score; }; void sort(struct stud_type stu[], int n); int main() { int i; ________________________; printf(\"Please input %d student’s name num score:\\n\ for(i=0;i}

8. 该程序完成从键盘输入10名学生信息(学号、姓名、成绩),用一个排序函数sort完成按 学生成绩降序排列,并输出学生成绩排行榜。 #include #define N 10 struct stud_type { char name[10]; int num; float score; }; void sort(struct stud_type stu[], int n); int main() { int i; struct stud_type stu[N]; printf(\"Please input %d student’s name num score:\\n\ for(i=0;i9. 该程序完成从键盘输入10名学生信息(学号、姓名、成绩),用一个排序函数sort完成按 学生成绩降序排列,并输出学生成绩排行榜。 #include #define N 10 struct stud_type

{ char name[10]; int num; float score; }; void sort(struct stud_type stu[], int n); int main() { int i; _______________________; printf(\"Please input %d student’s name num score:\\n\ for(i=0;i10. 从键盘输入一整数,显示与之对应的星期值,当输入-1时结束。 #include int main() { enum week_type { mon=1,tue,wed,thu,fri,sta,sun }workday; int i; do { printf(\"Please input integer(end:-1)\\n\");

scanf(\"%d\ workday=(________________)i; switch(________________) { case sun:printf(\"Sunday\\n\"); break; case mon:printf(\"Monday\\n\"); break; case tue:printf(\"Tuesday\\n\"); break; case wed:printf(\"Wednesday\\n\"); break; case thu:printf(\"Thursday\\n\"); break; case fri:printf(\"Friday\\n\"); break; case sta:printf(\"Saturday\\n\"); break; default:printf(\"Input error\\n\"); break; case -1:printf(\"Goodbye!\\n\"); } }while(________________); return 0; }

解答:

1. &date.year,&date.month,&date.day days=mon_day[i-1]+days days=days+1 days

2. struct date_type date i=3 days

3. &date.year,&date.month,&date.day i4. emp.num,emp.name,&emp.pay emp struct employee_type emp1 emp1.num,emp1.name,emp1.pay

5. stu[i].name ,&stu[i].num,&stu[i].score stu[i].name,stu[i].num,stu[i].score struct stud_type stu[],int n k=j

6. stu,N t=stu[i] stu[i]=stu[k] stu[k]=t

7. struct stud_type stu[N] struct stud_type stu[], int n k=i k=j

8. stu[i].name ,&stu[i].num,&stu[i].score struct stud_type stu[],int n

struct stud_type t k!=i

9. struct stud_type stu[N] stu[i].name,stu[i].num,stu[i].score k=j stu[k]=t

10. &i enum week_type workday i!=-1

四.改错题 解答: 五.编程一 解答: 六.编程二 解答:

第九章 指针

一.填空

1. 假定在一维数组b[10]中,元素b[5]的指针为p,则p+4所指向的元素为__________。

2. 指针变量是一种专门存放__________的变量。

3. 函数中的形参和调用时的实参都是变量时,传递方式为值传递;形参和实参都是数组名 时,传递方式为__________。

4. 设有数组a[10];则数组元素a[3]的地址可以写成__________。

5. 定义int b[10]; 若元素b[5]的指针为p1,元素b[9]的指针为p2,则p2- p1的值为______ ____。

6. int *p, a; 则语句 p=&a; 中的运算符&是__________符号。

7. 设int a[]={0,1,2,3,4,5,6,7,8,9},*p=a,则*p+4= __________。

8. 定义int a[10]={11,12,13,14,15}, *p=&a[5]; 假设&a[0]和&a[1]的值分别是2000和200 2,则p的值是__________。

9. 对变量的访问方式有直接访问和间接访问两种。其中,将变量a的地址存放在另外一个变

量p中,访问时先从p中取出变量a的地址,再按照a的地址访问a的值,该方式称为__________ 访问。

10. int *p 的含义是____________________。

11. 定义int a[10]={11,12,13,14,15}, *p=&a[5]; 则表达式a[0]+*p的值是__________。

12. 定义int a[10]={1,3,5,7,9,11,13,15,17,19},*p=a;执行语句printf(\"%d\输出 结果是__________。

13. 定义int m=5,n=9,t,*p=&m,*q=&n;顺序执行语句t=*p;*p=*q;*q=t;此时m的值是 _______ ___。

14. 已知 int a[5] = { 2, 3, 4, 5, 6 }; int *p = a+2; 则表达式 *p*a[3] 的值是_____ _____。

15. 假定在一维数组array[10]中,元素array[5]的指针为p,则p-4所指向的元素为________ __。

16. 数组名代表的是____________________。

17. 若int a[3][3]={1,2,3,4,5,6,7,8,9};则*(*(a+2)+1)的值是__________。

18. 若int a[ ][3]={1,2,3,4,5,6,7,8,9};则*(*a+1)的值是__________。

19. 若有int a[3]={10,12,30};则a+1是数组元素__________的地址。

20. 函数调用时参数有值传递和__________传递两种参数传递方式。

解答: 1. b[9]

2. 地址

3. 地址传递

4. &a[3]或a+3 5. 4

6. 取地址 7. 4

8. 2010

9. 间接

10. 定义指针变量p,p指向整型变量。

11. 11 12. 8 13. 9

14. 20

15. array[1]

16. 数组元素的首地址 17. 8 18. 2

19. a[1]

20. 地址

二.阅读程序写结果 1. #include int main() { int i=0,a[5]={11,12,13},*q; for(q=a;qprintf(\"\\n\"); return 0; }

2. #include void fun(int *p); int main() { int a[5]={1,2,3,4,5},*r=a; fun(r); printf(\"%d\\n\ return 0; } void fun(int *p) { p=p+2; printf(\"%d\\n\ }

3. #include int main() { int a[3][3]={0,1,2,3,4,5,6,7,8}; int *p,(*q)[3]; int i=0; for(q=a;q4. #include #include int main() { char str[20]=\"I am a student.\ char *q=\"You are a teacher.\"; p=p+7; q=q+10; strcpy(p,q); puts(str); return 0; }

5. #include void swap(int x, int y) { int z; z=x;

x=y; y=z; } void pswap(int *x, int *y) { int z; z=*x; *x=*y; *y=z; } void main() { int a=3, b=2; printf(\"first:a=%d, b=%d \\n\ swap(a,b); printf(\"second:a=%d,b=%d\\n\ pswap(&a,&b); printf(\"third:a=%d,b=%d\ }

6. #include void f(int a, int b, int *c, int *d) { a=30; b=40; *c=a+b; *d=*d-a; } void main() { int a=10,b=20,c=30,d=40; f(a,b,&c,&d); printf(\"%d,%d,%d,%d\ }

7. #include void ast(int *cp, int *dp) { int x=4,y=3; *cp=++x+y; *dp=x-y; } void main() { int c, d; ast(&c,&d); printf(\"%d\\n%d\\n\ }

8. #include void main() { char s[]=\"ABCD\ for(p=s+1;p9. #include void main() { char *p=\"I am a student.\"; p=p+3; printf(\"%s\ }

10. #include void main( ) { char *p=\"This is a programe.\"; p=p+10; printf(\"%s\ }

11. #include void add(int *p, int n) { int *pend = p + n; for( ; p12. #include int f(int x,int *y); void main() { int a,b,c; a=3; b=5; c=f(a,&b); printf(\"%d,%d,%d\\n\ }

int f(int x,int *y) { int a=2; x=x+a; *y=x+a; return(a); }

13. #include void fun (int x , int *y ); int main() { int a = 2 , b = 3 , *c = &b; fun(a, c); printf(\"a=%d, b=%d, c=%d\\n\ return 0; } void fun( int x , int *y ) { int a = 4; *y = x + a; x = *y; }

14. #include void sub(int x, int y, int *z) { *z = y - x; } int main() { int a, b, c; sub(10, 5, &a); sub(7, a, &b); sub(a, b, &c); printf(\" % 4d, % 4d, % 4d\\n\ return 0; }

15. #include int main() { char a[] = \"language\ p = a; while (*p != 'u') { printf(\" % c\ p++;

} return 0; }

16. #include int stre(char str[]) { int num = 0; while(*(str + num) != '\\0') num++; return num; } int main() { char str[10], *p = str; gets(p); printf(\" %d\\n\ return 0; } 输入:happy<回车>

17. #include void f(int x, int *y) { x=x%10; *y=*y/10+x; } int main() { int a=88,b=99,*c; c=&b; f(a,c); printf(\"%d,%d\\n\ return 0; }

18. #include void main() { char a[][7]={ \"Teacher\ char *p=a[0]; p=p+3; printf(\"%s\\n%s\\n\ }

19. #include void main() { char a[][7]={ \"Teacher\ char (*p)[7]=a;

printf(\"%s\\n%s\\n\ }

20. #include void ast(int x, int y, int *a, int *b) { *a=x+y; *b=*a-y; } void main() { int a, b, c, d; a=10; b=20; ast(a,b,&c,&d); printf(\"%d,%d\\n\ }

解答:

1. 16 17 18 5 5 2. 3 1

3. 0 3 4 6 7 8

4. I am a teacher.

5. first:a=3, b=2 second:a=3,b=2 third:a=2,b=3

6. 10,20,70,10 7. 8 2

8. BCD CD D

9. m a student.

10. programe.

11. 11 12 13 14 15

12. 3,7,2

13. a=2, b=6, c=6

14. -5, -12, -7

15. L A N G

16. 5

17. 88,17

18. TeacherTom cherTom

19. TeacherTom Tom

20. 30,10

三.补充程序

1. 该程序实现输入两个整数,按先小后大的顺序输出,调用函数实现交换位置。 #include void swap ( int *x, int *y ); int main ( ) { int x, y; printf ( \"请输入两个数(空格分隔):\" ); scanf ( \"%d %d\ if ( x > y ) swap ( _________ ); printf ( \" %4d %4d \\n\ return 0; } void swap ( int *p1, int *p2 ) { int p; _________; _________; _________; }

2. 该程序实现输入两个整数,按先小后大的顺序输出,调用函数实现交换位置。 #include void swap ( int *x, int *y ); int main ( ) { int x, y; printf ( \"请输入两个数(空格分隔):\" ); scanf ( \"%d %d\ if (_________ ) swap ( &x, &y ); printf ( \" %4d %4d \\n\ return 0; } void swap ( _____________) { _________; p = *p1; *p1 = *p2; *p2 = p; }

3. 该程序实现输入两个整数,按先小后大的顺序输出,调用函数实现交换位置。 #include void swap ( _______________ ); int main ( ) { int x, y; printf ( \"请输入两个数(空格分隔):\" ); scanf ( \"%d %d\ if ( x > y ) swap ( ______________ ); printf ( \" %4d %4d \\n\ return 0; } void swap ( int *p1, int *p2 ) { _________________ ; p = *p1; *p1 = *p2; *p2 = p; }

4. 该程序实现输入两个整数,按先小后大的顺序输出,调用函数实现交换位置。 #include void swap ( _______________ );

int main ( ) { int x, y; printf ( \"请输入两个数(空格分隔):\" ); scanf ( \"%d %d\ if (__________) swap ( &x, &y ); printf ( \" %4d %4d \\n\ return 0; } void swap ( int *p1, int *p2 ) { int p; ___________; *p1 = *p2; *p2 = p; }

5. 该程序实现输入两个整数,按先小后大的顺序输出,调用函数实现交换位置。 #include void swap ( int *x, int *y ); int main ( ) { int x, y; printf ( \"请输入两个数(空格分隔):\" ); scanf ( \"%d %d\ if ( x > y ) swap (__________); printf ( \" %4d %4d \\n\ return 0; } void swap ( int *p1, int *p2 ) { int p; p = *p1; _________; _________; }

6. 利用指针变量自增的方式输出一维数组b中的所有元素。 #include #define SIZE 3 int main() { int i, b[]={1,2,3};

int *p; for (_______;________; _________) printf(\"*p=%d\\n\ }

7. 输入一个八进制数并转换为十进制数。八进制转换为十进制数的方法是按权相加,即将 八进制每位上的数乘以位权,然后相加之和即是十进制数。利用数组存放八进制数的各位数 码。 #include #define N 6 int main () { int n, temp ; char s [ N ], * p = s; printf ( \"请输入八进制数:\" ); gets (_____); for ( _________; (* p ) != ' \\0 '; _________) { temp = * p - '0'; n = n * 8 + temp; } printf ( \"对应的十进制数:%d\\n\ return 0; }

8. 输入一个八进制数并转换为十进制数。八进制转换为十进制数的方法是按权相加,即将 八进制每位上的数乘以位权,然后相加之和即是十进制数。利用数组存放八进制数的各位数 码。 #include #define N 6 int main () { int n, temp ; char s [ N ], * p = s; printf ( \"请输入八进制数:\" ); gets ( _________ ); for ( n = 0; ______________; p ++ ) { temp = * p - '0'; _____________; }

printf ( \"对应的十进制数:%d\\n\ return 0; }

9. 判断一个字符串是否为回文(指从左至右和从右至左读都是一样的字符串)。 #include #define N 11 int main ( ) { int i = 0, n = 0; char a [ N ] = \" \"; char * p1, * p2; printf ( \"请输入小于%d位的整数: \ scanf ( \"%s\ for (_______; (*p2) != ' \\0 '; p2 ++ ) n ++; p1 = a; p2 = a+n-1; for ( i = 1; p1 < p2; i ++ ) { if (__________ ) break; ___________; ___________; } if ( i > n / 2 ) printf ( \"Yes, %s是回文!\\n\ else printf ( \"No, %s不是回文!\\n\ return 0 ; }

10. 判断一个字符串是否为回文(指从左至右和从右至左读都是一样的字符串)。 #include #define N 11 int main ( ) { int i = 0, n = 0; char a [ N ] = \" \"; char * p1, * p2; printf ( \"请输入小于%d位的整数: \ scanf ( \"%s\ for (p2=a; (*p2) != ' \\0 '; p2 ++ ) ________; p1 = a; p2 = a+n-1; for ( i = 1; p1 < p2; i ++ ) { if (*p1!=*p2) ________; _________; _________;

} if ( i > n / 2 ) printf ( \"Yes, %s是回文!\\n\ else printf ( \"No, %s不是回文!\\n\ return 0 ; }

解答: 1. &x, &y p = *p1 *p1 = *p2 *p2 = p

2. x > y x, y int *p1, int *p2 int p

3. int *x, int *y &x, &y &x, &y int p

4. int *x, int *y x > y x, y p = *p1

5. &x, &y x, y *p1 = *p2

*p2 = p

6. p=b p9. p2 = a * p1 != * p2 p1 ++ p2 --

10. n ++ break p1 ++ p2 --

四.改错题 解答: 五.编程一

解答: 六.编程二 解答:

第十章 文件

一.填空 解答:

二.阅读程序写结果 解答:

三.补充程序 解答: 四.改错题

1. 下列给定程序中,函数fun()的功能是:从字符串s中,取出所有大写字母。程序的功能 是从文件中读出字符串,进行如上处理后,输出到屏幕上。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 #include void fun(char s) { int i, j; for(i=j=0;s[i]!='\\n';i++) if(s[i]>='A'|| s[i]<='Z') s[j]=s[i]; s[j]='\\0'; } int main() { char s[80]; FILE *fp; if(fp=fopen(\"d:\\\\content.txt\ { printf(\"Cannot open file\\n Press any key to exit!\"); return 1; } fgets(s,30,fp); fun(s); printf(\"The string after deleted: \"); puts(s); printf(\"\\n\\n\"); return 0; fclose(fp); }

2. 下列给定程序中,函数fun()的功能是:从字符串s中,将大写字母转换成小写字母。程序 的功能是从键盘读入一个字符串,进行如上处理后,写入D盘上指定文件中。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 #include void fun(char s[]) { int i; for(i=0;s[i]!='\\n';i++) if(s[i]>='A'&& s[i]<='Z') s[i]=s[i]+32; s[i]='\\0'; } int main() { char *s; FILE fp; gets(s); if((fp=fopen(\"d:\\\\content.txt\ { printf(\"Cannot open file\\n Press any key to exit!\"); return 1; } fun(s); fputs(fp, s); printf(\"\\n\\n\"); fclose(fp); return 0; }

3. 程序功能说明:该程序完成从文本文件中读入10名学生信息(学号、姓名、成绩),并用 格式输出显示到屏幕上。 #include #define N=10 struct stud_type { char name[10]; int num; float score; } void main() { int i; struct stud_type stu[N]; FILE *fp; If((fp=fopen(''d:\\\\student.txt'', ''w'')) ==NULL) { printf(''Cannot open file\\n Press any key to exit!'');

getch(); } for(i=0;i4. 程序功能说明:从键盘上输入10名学生信息(学号、姓名、成绩),写入磁盘文件D盘文

件student.txt中。 #include #define N 10 struct stud_type { char *name; int num; float score; } void main() { int i; struct stud_type stu[N]; FILE *fp; If((fp=fopen(''d:\\student.txt'', ''w'')) ==NULL) { printf(''Cannot open file\\n Press any key to exit!''); getch(); } for(i=0;i #define N 10 struct student { char name[10]; int num; int age;

char addr[15]; } s[N]; void save() int main() { int i; printf(\"please input student information:\\n\"); for(i=0;i6. 以下程序中有五处错误,请改正。 #include #include int main( ) { FILE fp; char ch; if((fp = fopen(\"d:\est.txt\ { printf(\"Cannot open file\\n Press any key exit!\"); getch( ); return 1;

/*写文件,并判断是否

} printf(\"input a string:\\n\"); ch = getchar( ); while(ch != \\n) { fputs(ch,fp); ch = getchar( ); } rewind(fp); ch = fgetc(fp); while(ch != \"EOF\") { putchar(ch); ch = fgetc(fp); } printf(\"\\n\"); fclose(fp); return 0; }

7. 以下程序中有五处错误,请改正。 #include #include int main( ) { FILE *fp; char ch; if(fp = fopen(\"d:\\\est.txt\ { printf(\"Cannot open file\\n Press any key exit!\"); getch( ); return 1; } printf(\"input a string:\\n\"); ch = getchar( ); while(ch != ‘\\0’) { fputc(fp, ch); ch = getchar( ); } rewind(fp); ch = fgetc(fp); while(ch !=end) {

putchar(ch); ch = fgetc(fp); } printf(\"\\n\"); fclose( ); return 0; }

8. 将d:\\lang\c文件夹下的文件deposit.c内容输出到屏幕上。有5处错误,请改正。 #include #include int main( ) { char ch; FILE fp; if ((fp=fopen(“d:\\\\lang\\\c\\\\deposit.c”,”r”))=NULL) { printf(“Cannot open file \\n”); break; } while ((ch=getchar())!=EOF) putchar(ch); fclose(ch); return 0; }

9. 将d:\\lang\c文件夹下的文件deposit.c内容全部以小写字母输出到屏幕上。 #include #include void main( ) { char ch; FILE *fp; if ((fp=fopen(\"d:\\lang\c\\deposit.c\ { printf(\"Cannot open file \\n\"); return 1; } while (ch=fgetc(fp)!=EOF) { if ((ch>='A'||ch <='Z')) ch=ch+32; puts(ch); } fclose(fp); return 0; }

10. 以下程序中用户由键盘输入一个文件名,然后输入一串字符(用#结束输入)存放到此文

件文件中形成文本文件,并将字符的个数写到文件尾部。

#include #include void main() { FILE *fp; char ch,fname[32]; int count=0; printf(\"Input the filename :\"); scanf(\"%s\ if ((fp=fopen(\"fname\ { printf(\"Can't open file:%s \\n\ exit(0); } printf(\"Enter data:\\n\"); while ((ch=getchar())!=\"#\") { fputc(fp, ch); count++; } fprintf(\"\\n%d\\n\ fclose(fp); }

11. 下面程序的功能是从filename1中将文件拷贝到filename2,其中源文件和目标文件名均 从键盘输入。有五处错误,请改正。 #include #include void main() { FILE *fp1,fp2; char ch,*fname1,*fname2; printf(\"Input the source file name :\"); scanf(\"%s\ if ((fp1=fopen(fname1,\"r\"))==NULL) { printf(\"Can't open source file:%s \\n\ exit(0); } printf(\"Input the targate file name :\"); scanf(\"%s\ if ((fp2=fopen(fname2,\"w\"))==NULL) { printf(\"Can't open targate file:%s \\n\ exit(0);

} while((ch=fgetc(*fp1))=EOF) fputc(ch,fp2); fclose(fp1); fclose(fp2); }

12. 下面程序的功能是从filename1中将内容读出,显示在屏幕上。其中文件名由键盘输入。 有五处错误,请改正。 #include #include void main() { FILE fp1; char ch,*fname1; printf(\"Input the file name :\"); scanf(\"%s\ if ((fp1=fopen(fname1,’r’))==NULL) { printf(\"Can't open source file:%s \\n\ exit(0); } while(ch=fgetc(fp1)!=EOF) put(ch); fclose(fp1); }

13. 下列程序中存在5处C语言语法错误,请识别并改正。程序的功能是在已建立的文件write

string.txt中追加一个字符串,并将文件整个内容输出。 #include #include int main { FILE *fp; char ch,st[20];

if((fp=fopen(\"d:\\\\lang\\\c\\\\writestring.txt\ { printf(\"Cannot open file strike any key exit!\"); getchar(); return 1; } printf(\"input a string:\\n\"); scanf(\"%c\ fgets(fp, st); rewind(); while(ch=fputc(fp)!=EOF) putchar(ch); printf(\"\\n\"); fclose(fp); return 0; }

14. 以下程序的功能:把文件source.txt的内容输出到屏幕上。(共5个错误点) #include #include int main() { char *fp; char ch; fp=fopen(\"source.txt\ if(fp=NULL) { printf(\"\\nCannot open file\\nStrike any key exit!\\n\"); getchar(); exit(1); } ch=fgetc(fp); if(ch!=EOF) { printf(\"%c\ ch=fgetc(fp); } fclose(*fp); }

15. 以下程序的功能:把文件source1.txt和文件source2.txt的内容相连,输出到屏幕上。 共5个错误点,请改正。

#include #include int main() { FILE *fp1,fp2; char ch; fp1=fopen(\"source1.txt\ fp2=fopen(\"source2.txt\ if(fp1==NULL&& fp2==NULL) { printf(\"\\nCannot open file\\nStrike any key exit!\\n\"); getchar(); exit(1); } ch=fgetc(fp2); if(ch!=EOF) { fputc(ch,fp1); ch=fgetc(fp2); } fclose(fp1,fp2); return 0; }

16. 下面程序的功能是统计文件中字符的个数,其中有5处错误,请查找并改正(每个2分) #include #include void main() { FILE *fp; int count; char ch; *fp=fopen(\"source.txt\ if(*fp=NULL) { printf(\"\\nCannot open file\\nStrike any key exit!\\n\"); getchar(); exit(1); } ch=fgetc(fp); while(ch!=EOF) { count++; ch=fgetc(fp); }

printf(\"\\n字符个数=%f\\n\ fclose(fp); return 0; }

17. 以下程序的功能:把文件source.txt的内容读出,压缩掉其中的空格,存入文件target. txt中,其中有5出错误,请检查并改正。 #include #include int main() { FILE *fp1,fp2; char ch; fp1=fopen(\"source.txt\ fp2=fopen(\"target.txt\ if(fp1=NULL|| fp2=NULL) { printf(\"\\nCannot open file\\nStrike any key exit!\\n\"); getchar(); exit(1); } ch=fgetc(fp1); if (ch!=EOF) { while (ch!=' ') fputc(ch,fp2); ch=fgetc(fp1); } fclose(fp1,fp2); return 0; }

18. 程序功能说明:该程序完成从文本文件中读入10名学生信息(学号、姓名、成绩),求成

学生平均分,显示在屏幕上。其中有5处错误,请检查并改正。 #include #define N 10; struct stud_type { char name[10]; int num; float score; };

void main() { int i; struct stud_type stu[N]; float s=0; FILE *fp; If((fp=fopen(''d:\\\\student.txt'', ''w'')) ==NULL) { printf(''Cannot open file\\n Press any key to exit!''); getch(); } for(i=0;i19. 以下程序的功能:把字符串“hello world”及文件source.txt的内容相连,输出到文件 target.txt中。(共5个错误点,请改正) #include #include int main() { FILE *fp1,*fp2; char ch; char str= \"hello world\"; fp1=fopen(\"d:\\source.txt\ fp2=fopen(\"d:\arget.txt\ if(fp1==NULL&& fp2==NULL) { printf(\"\\nCannot open file\\nStrike any key exit!\\n\"); getchar(); exit(1); } fputs(str, fp2); while(ch=fgetc(fp1)!=EOF) { fputc(ch,fp2);

} fclose(fp1); fclose(fp2); return 0; }

20. 下面程序的功能是统计文件中大写字符的个数,其中有5处错误,请查找并改正。 #include #include int main() { FILE *fp; int count; char ch; *fp=fopen(\"source.txt\ if(*fp=NULL) { printf(\"\\nCannot open file\\nStrike any key exit!\\n\"); getchar(); return 1; } ch=fgetc(fp); if (ch!=EOF) { if (ch>=’A’&&ch<=’Z’) count++; ch=fgetc(fp); } printf(\"\\n大写字符个数=%f\\n\ fclose(); return 0; }

解答:

1. (1)if((fp=fopen(''d:\\\\content.txt'', ''r''))==NULL) (2)void fun(char *s) (3)for(i=j=0; s[i]!= ´\\0´;i++) (4)if(s[i]>='A'&& s[i]<='Z') (5) s[j++]=s[i];

2. (1)for(i=0;s[i]!='\\0';i++) (2)char s[80]; (3)FILE *fp; (4)if((fp=fopen(\"d:\\\\content.txt\ (5)fputs( s,fp);

3. (1)#define N 10 (2)struct stud_type { char name[10]; int num; float score; }; (3) If((fp=fopen(''d:\\\\student.txt'', ''r'')) ==NULL) (4), (5) fscanf(fp, \"%s%d%f\

4. (1)char name[30] (2)struct stud_type { char name[10]; int num; float score; }; (3) If((fp=fopen(''d:\\\\student.txt'', ''w'')) ==NULL) (4) scanf(\"%s%d%f\ (5) fprintf(fp,\"%8s%5d%8.2f\\n\

5. void save(); scanf(\"%s%d%d%s\ FILE *fp; if (fwrite(&s[i],sizeof(struct student),1,fp)=0) fclose();

6. ① FILE *fp; ② if((fp = fopen(\"d:\\\est.txt\ ③ while(ch !=’ \\n’) ④ fputc(ch,fp); ⑤ while(ch != EOF)

7. if((fp = fopen(\"d:\\\est.txt\ while(ch != ‘\\n’) fputc(ch, fp); while(ch !=EOF) fclose(fp );

8. FILE *fp; if ((fp=fopen(\"d:\\\\lang\\\c\\\\deposit.c\ return 1; while ((ch=fgetc(fp))!=EOF) fclose(fp);

9. int main( ) if ((fp=fopen(\"d:\\\\lang\\\c\\\\deposit.c\ while ((ch=fgetc(fp))!=EOF) if ((ch>='A'&&ch <='Z')) ch=ch+32; putchar(ch);

10. scanf(\"%s\ if ((fp=fopen( fname,\"w+\"))==NULL) while ((ch=getchar())!='#') fputc(ch,fp); fprintf( fp,\"\\n%d\\n\

11. 1、FILE *fp1,*fp2; 2、char ch,fname1[32],fname2[32]; 3、printf(\"Can't open targate file:%s \\n\ 4、5、while((ch=fgetc(fp1))!=EOF)

12. 1、FILE *fp1 ; 2、char ch,fname1[32]; 3、if ((fp1=fopen(fname1, \"r\"))==NULL) 4、while((ch=fgetc(fp1))!=EOF) 5、putchar(ch);

13. 1、if((fp=fopen(\"d:\\\\lang\\\c\\\\writestring.txt\ ; 2、scanf(\"%s\ 3、fgets(st, fp); 4、rewind(fp); 5、while((ch=fputc(fp))!=EOF)

14. FILE *fp; fp=fopen(\"source.txt\ if(fp= =NULL) while(ch!=EOF) fclose(fp);

15. FILE *fp1,*fp2; fp1=fopen(\"source1.txt\ if(fp1==NULL|| fp2==NULL) while(ch!=EOF) fclose(fp1); fclose(fp2);

16. int main() int count=0; fp=fopen(\"source.txt\ if(fp==NULL) printf(\"\\n字符个数=%d\\n\

17. FILE *fp1,*fp2; if(fp1==NULL|| fp2==NULL) while(ch!=EOF) if (ch!=' ') fputc(ch,fp2); fclose(fp1); fclose(fp2);

18. (1)#define N 10 (2)If((fp=fopen(''d:\\\\student.txt'', ''r'')) ==NULL)

(3)fscanf(fp, \"%s%d%f\ (4) s=s+stu[i].score; (5) fclose(fp);

19. char str[]= \"hello world\"; fp1=fopen(\"d:\\\\source.txt\ fp2=fopen(\"d:\\\arget.txt\ if(fp1==NULL|| fp2==NULL) while((ch=fgetc(fp1))!=EOF)

20. fp=fopen(\"source.txt\ if(fp==NULL) while(ch!=EOF) printf(\"\\n大写字符个数=%d\\n\ fclose(fp);

五.编程一 解答: 六.编程二 解答:

因篇幅问题不能全部显示,请点此查看更多更全内容