第一章 基础知识
一.填空 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 3. 4. } printf(\"\\na=%d,b=%d\\n\} #include char ch1 = 'E'; if(ch1 >= 'A') ch1++; else ch1+=32; printf(\"ch1 = %c\\n\} #include if(x>y) { t=x;x=y;y=t;} printf(\"%d,%d\\n\" , x,y ); } 5. #include 6. #include ch3++; 7. #include 8. #include #include 10. #include printf(“$$”); printf(“*”); } 11. #include 12. #include } 13. #include 14. #include return 0; } 15. #include 16. #include 17. #include 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 20. #include 解答: 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 = x 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(max 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 8. #include b=c; c=t; printf(\"a=%d;b=%d;c=%d;\\n\ } 9. #include 第五章 循环结构 一.填空 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 number = number / 10 ; } } 2. #include 4. #include 5. #include { 输入:2 10 8 3<回车> 6. #include 7. #include 8. #include 9. #include 10. #include 11. #include 12. #include 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 14. #include 15. #include if (b >= 9) break; if (b % 3 == 1) { b += 3 ; continue ; } b -= 5; } printf(\"%d,%d\\n\ return 0; } 16. #include 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 解答: 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 5. 求输入的十个整数中负数的个数及其平均值 #include 6. 分解并打印出X的各个素数因子.如18=1*2*3*3. #include 7. 输出九九乘法表. #include } 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 2. #include 3. #include 4. #include for(j=1;j<=5;j++) printf(\"* \"); printf(\"\\n\"); } } 5. #include 7. #include 9. #include zimu++; else qita++; ch=getchar(); } printf(\"数字=%d;字母=%d;空格=%d;其它%d\ } 10. #include 第六章 函数 一.填空 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 { 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 4. #include 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 6. #include 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 8. #include 9. #include fun ( w ) ; printf ( \"\\n\" ) ; } void fun ( int k ) { if ( k>0 ) fun ( k-1 ) ; printf ( \"%d\" , k ) ; } 10. #include 11. #include 12. #include } void swap(int a,int b) { int c; c=a; a=b; b=c; } 13. #include 14. #include { int b=0,c=3; b++; c++; return(a+b+c); } 16. #include 17. #include 18. #include c=add(a,b); int a,c=80, d=-20; a=30; fun(a,c,d); printf(\"%d,%d\\n\ } 19. #include 20. #include 21. #include 22. #include 23. #include three_hellos(); } 24. #include 25. #include 26. #include 27. #include 28. #include 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 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 31. #include 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 35. } void main() { int i,j=0; for(i=1;i<=3;i++) j+=fun(i); printf(\"j=%d\\n\} #include 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 37. # include 38. #include 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 printf(\"%d%d\\n\ } 40. #include 解答: 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(m 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;i 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;i { int i,sum=0; for(i=0;i } 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;i printf(\"\\n\"); out(a); } void inp(int a[n][n]) { int i,j; for(i=0;i for(i=0;i 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 每个数都一次到位,不得在新数组中重新排序。要求数列合并通过自定义函数来实现。 #define M 4 #define N 5 #include 息。要求:职工信息的输入和输出分别通过自定义函数来实现。 #define N 10 #include 18. 编程实现:从键盘输入10名学生的信息,包括学号、姓名、成绩,用一个排序函数sort 完成学生成绩降序排列,并输出学生排序后的结果。 #define N 10 #include 的整数(-1作为输入结束标志),将其插入到该序列中,使其依然有序。要求:通过自定义 函数实现将一个整数插入到一个有序序列中,使其依然有序。 #include { 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 一.填空 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 2. #include 3. #include 4. #include 5. #include 6. #include 7. #include 8. #include 9. #include