欢迎来到千学网!
您现在的位置:首页 > 实用文 > 其他范文

C语言程序设计的试题及答案

时间:2023-01-02 07:45:35 其他范文 收藏本文 下载本文

这里给大家分享一些C语言程序设计的试题及答案,本文共9篇,供大家参考。

C语言程序设计的试题及答案

篇1:C语言程序设计的试题及答案

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”,x)的输出结果为 ______。 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”,ch1,ch2); 则输出为 ______。 40. 若有定义 char ch1='A',ch2,ch3; 执行 ch2=ch1++; ch3=++ch1; printf(“ch2=%c, ch3=% c”,ch2,ch3); 则输出为 ______。 41. 若有定义 int i=5, j, k; 执行 j=i--; k=--i; printf(“i=%d, j=%d\n”, i, j); 则输 出为 ______。 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,&b);输入语句给 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”,&m,&n,&p); printf(“%d%d%d\n”,m,n,p); 若想 从键盘上输入数据,使变量 m 中的值为 123,n 中的值为 456,p 中的值为 789,则正确的输入是 _____ ___________。 16. 有 int a; float b, c; %f\n“, a, b, c); scanf(”%2d%3f%4f“,&a,&b,&c); printf(”\na=%d, b=%f, c=

, 若 运 行 时 从 键 盘 上 输 入 9876543210< 回 车 >, 则 程 序 的 输 出 结 果 是 ___________________ __。 17. 有 int m=0256,n=256; 则 printf(“%o %o\n”,m,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”,a,c,f,x); 的输出结果是_____________________ 。 20. 若有定义和语句:int m=0xabc,n=0xabc; m-=n; 则 printf(“%o\n”,m);的输出结果是___ __________。 21. 若有 int m=32,n=032; ,则 printf(“%d,%x\n”,m,n); 执行后输出结果是______________ _____ 。 22. 若有 int a=1234; ,则 printf(“%2d\n”,a); 的输出结果是_____________________ 。 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”,x++,y+2); 的输出结果是__________________ ___ 。 25. 若有定义和语句:double d; float f; long l; int i; i=f=l=d=20/3; 则 printf(“% d %ld %f %f \n”, i,l,f,d);的输出结果是(小数点后只写一位) _____________________。 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”,k,k,k);的输出结果是_________________ ____ 。 28. 以下叙述中正确的是_____________________ 。 A) 输入项可以是一个实型常量,如:scanf(“%f”,3.5); B) 只有格式控制,没有输入项,也能正确输入数据到内存,例如:scakf(“a=%d,b=%d”); C) 当输入数据时,必须指明变量地址,例如:scanf(“%f”,&f); 29. 若有定义和语句:int u=010,v=0x10,w=10;则 printf(“%d,%d,%d\n”,u,v,w); 输出结果是 _____________________。 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”,z); 的输出结果是_____________________ 。 31. 若有 int a=2,c=5; ,则 printf(“a=%%d,b=%%d\n”,a,c);的输出结果是________________ _____ 。 32. 有 char c; int n=100; float f=10; double x; x=f*=n/=(c=50); 则 printf(“%d %f\ n”,n,x); 的输出结果是_____________________。 33. 有 int i=0,j=0,k=0; scanf(“%d%*d%d”,&i,&j,&k); printf(“%d%d%d\n”,i,j,k); 若 从键盘输入:10 20 30<回车>。输出结果是_____________________。 34. 若有 int a,b,c; a=25; b=025; c=0x25;,则 printf(“%d %d %d\n”,a,b,c); 的输出结果 是___________。 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”,j);的输出结果是_____________________

。 37. 有 int a=0; a+=(a=8); 则 printf(“%d\n”,a);的输出结果是_____________________。 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”, 2); else printf(“%d”, 1); 的输出结 果是( ). 3. 已知 char a = 'A'; 那么 if ( a >65) printf(“%s”, “bigger”); else printf(“%s” , “smaller”); 的输出结果是( ). 4. 表示“x≥ y≥ z”的 C 语言表达式是 ( 5. 在 C 语言中,用于实现选择结构的语句有( 。 6. 判断两个浮点型变量 x 和 y 是否相等一般用:if( 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) 的值为( )。 )。 ) 。 )语句和( )。 ) 语句

<1e-6 )? 。 )

解答: 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 二.阅读程序写结果 1. #include void main( ) { int x,y,t; x=7;y=9; if(x

2. #include void main( ) { int x=1,a=2,b=3; switch(x) { case 1: case 2: case 3: a--; break; b++; break; a++;b++;

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

3. #include void main( ) { char ch1 = 'E'; if(ch1 >= 'A') ch1++; else ch1+=32; printf(“ch1 = %c\n”, ch1); }

4. #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”,&a,&b,&c); 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”,ch3); return 0; }

ch3++;

篇2:C语言程序设计的试题及答案

C语言程序设计的试题及答案

________________________) if(n%i==0) ________________________ if(i>k) printf(“\t%2d”,n); } return 0; } 3. 输出 200 以内能被 5 整除的数 #include“stdio.h” int main() { ________________________ for(________________________;n<=200; ________________________) { if (n%5!=0) ________________________ printf(“%d ”,n); } return 0; } 4. 求输入的十个整数中正数的个数及其平均值 #include int main() { int i,num=0,a; float sum=0; for(i=0; ________________________;________________________) { scanf(“%d”,&a); if(a>=0) { ________________________; ________________________; } } printf(“%d plus integer's sum: %6.0f\n”,num,sum); printf(“Mean value:%6.2f\n”,sum/num); return 0; }

5. 求输入的十个整数中负数的个数及其平均值 #include int main() { int i,num,a; float sum=0; ________________________; ________________________; while(i<10) { scanf(“%d”,&a); if(a<=0) { ________________________; num++; } ________________________; } printf(“%d plus integer's sum: %6.0f\n”,num,sum); printf(“Mean value:%6.2f\n”,sum/num); 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”, j, i ,i*j);

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”,s); return 0; } 9. 求 1+2!+3!+...+20!的和. #include “stdio.h” int main() { float n, ________________________,t=1; ________________________;________________________;) { t*=n; ________________________; } printf(“1+2!+3!...+20!=%e\n”,s); return 0; }

for(n=1;

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”,s); 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”,s); } 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”,e); } 3. #include void main() { int i,n; float s=0; printf(“input n\n”); scanf(“%d”,&n); for(i=1;i<=n;i++) s=s+1./i; printf(“s=%10.6f\n”,s); } 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”,&n); 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”,&score); max=score; while (score!=-1) { sum=sum+score; if(score>max)max=score; i++; scanf(“%d”,&score); } printf(“max=%d\n”,max); printf(“average=%f\n”,(float)sum/i);

} 7. #include void main() { int i, n,x,max,min,maxi=1,mini=1; printf(“please input n:\n”); scanf(“%d”,&n); printf(“please input x:\n”); scanf(“%d”,&x); max=x;min=x; for(i=2;i<=n;i++) { scanf(“%d”,&x); if(x>max) { max=x;maxi=i;} if(x 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”,i*100+j*10+k); if(n%8==0)printf(“\n”); } } 9. #include void main() { int shuzi=0,zimu=0,kge=0,qita=0; ch=getchar(); while(ch!='\n') { if(ch==' ') kge++; else if(ch>='0'&&ch<='9')

char ch;

shuzi++; else if(ch>='a'&&ch<='z'||ch>='A'&&ch<='Z') zimu++; else qita++; ch=getchar(); } printf(“数字=%d;字母=%d;空格=%d;其它%d”,shuzi,zimu,kge,qita); } 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”,&a,&n);t=a; while(i

) ;形参实参都是

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”,p); return 0; } long fun(int x,int n) { int i; long p=1; for(i=0;i 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”,&n); 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<回车>

printf(“%5d”,i);

4. #include

void print(); int a=5; int main() { int a=1,b=2; a=a+b; print(); printf(“%d %d\n”,a,b); return 0; } void print() { int b=3; printf(“%d %d\n”,a,b); } 5. #include int fun1(int x); void fun2(int x); int main() { int x=1; x=fun1(x);

printf(“%d\n”,x); 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”,a,b,c); return 0; } int fun1(int a,int b,int c) { a=a+10; b=b+10; c=c+10; } 7. #include void fun(int x); int main() { fun(7); printf(“\n”); return 0; } void fun(int x) { if(x/2>1) printf(“%5d”,x); }

return c;

fun(x/2);

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”,a[i]); 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(“a3=%d\n”,a); } void f1(void) { printf(“a1=%d\n”,a); }

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

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; printf(“%d,%d,%d\n”,a,b,c); }

f(a,b,&c);

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

swap(a,b); printf(“a=%d,b=%d\n”,a,b); } 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”,x,y,z); } 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;i int f(int a); void main() { int a=2,i; for(i=0;i<3;i++) printf(“%d”,f(i));

} int f(int a) { int b=0,c=3; 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”,x); } int fun() { int x=3; x++; return x; }

b++;

17. #include float add(float x,float y); void main( ) { float a,b,c; a=1.0; b=2.0; printf(“%f\n”,c); } 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; }

c=add(a,b);

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

fun(a,c,d);

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”,j); } 21. #include void f(int x,int y) { int t; if(x

f(a,b);

f(a,c); f(b,c); printf(“%d,%d,%d”,a,b,c); } 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”,age(5)); } 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”,x); } 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”,x); return 0; } 26. #include void fun(int i, int j) { int x = 7; printf(“i = %d; j = %d; x = %d\n”, i, j, x); } int main() { int i = 2, x = 5, j = 7; fun(j, 6); printf(“i = %d; j = %d; x = %d\n”, i, j, x);

return 0; } 27. #include void f(int a[]) { int i=0; while(a[i]<=10) { printf(“%d”,a[i]); 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”, x, y, z); }

int main() { int x = 2, y = 3, z = 0; printf(“(1) x = %d y = %d z = %d\n”, x, y, z); add(x, y, z); printf(“(3) x = %d y = %d z = %d\n”, x, y, z); return 0; }

29. #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”, x3, x4, x1, x2); return 0; }

30. #include int x; void cube() { x = x * x * x; }

int main() { x = 5; cube(); printf(“ %d\n”, x); 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, ”, a[i]); 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”,sum);

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”, i); } 34. #include int fun(int n) { if(n<=1) return 1; else

return fun(n-1)*n; } void main() { int i,j=0; for(i=1;i<=3;i++) j+=fun(i); printf(“j=%d\n”,j); }

35. #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”, c); }

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+”, i); } 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; t; } if ( b < c ) { t = b; b = c; c = t; } if ( a < b ) { t = a; a = b; b = t; } printf( “%d”, b ); }

c = (n/100) % 10;

if ( a < b ) { t = a; a = b; b =

38. #include int funa(int a, int 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”, c); } 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;

篇3:C语言程序设计的试题及答案

C语言程序设计的试题及答案

c=swap(a,b); printf(“%d%d\n”, a,c); }

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 4. 5 3 32 5. 2 6. 11 21 31 7. 3 7 5

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”,&x,&y); ________________________; printf(“maxmum=%d”,z); 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 ”,0); } int main() { int a; printf(“input number a:\n”); scanf(“%d”,&a); ________________________ return 0; } 3. 主函数调 f1 计算 n 阶乘. #include “stdio.h” ________________________ int main() { int n; long s; scanf(“%d”,&n); ________________________ printf(“\ns=%ld\n”,s); 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”,s); 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”,&sco[i]); ________________________ printf(“average score is %5.2f”,av);

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”,&n); ________________________ printf(“%d!=%ld”,n,y); 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”,&l,&w,&h); ________________________ printf(“v=%d s1=%d s2=%d s3=%d\n”,v,s1,s2,s3); return 0; } 8. 输入两个正整数 num1,num2,求其最大公约数. #include “stdio.h” ________________________ int main() { int d; int num1,num2; printf(“please input two numbers:\n”); scanf(“%d,%d”,&num1,&num2); ________________________ printf(“gongyueshu:%d\n”,d); 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”,v); 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 为大于等于零的整数) ,要求用 n 递归函数求 x 。

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”,&m,&n); if((m<=0)||(n<=0))

{ printf(“输入错误!请重新输入!\n”); scanf(“%d%d”,&m,&n); } if(m

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

2. #include “stdio.h” int sushu(int n); void main() { int n; printf(“input n:\n”); scanf(“%d”,&n); if (sushu(n)) printf(“%d 是素数\n”,n); else printf(“%d 不是素数\n”,n); } int sushu(int n) { int i; for(i=2;i

return 1; }

3. 编程实现:输出所有的“水仙花数” 。所谓“水仙花数”是指一个 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”,i); } 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;

return

0;

4. #include “stdio.h” int wanshu(int n); void main() { int n; printf(“input n:\n”); scanf(“%d”,&n); if (wanshu(n)) printf(“%d 是完数\n”,n); else printf(“%d 不是完数\n”,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”,&n); if (huiwen(n)) printf(“%d 是回文数\n”,n); else printf(“%d 不是回文数\n”,n);

篇4:C语言程序设计的试题及答案

C语言程序设计的试题及答案

解答: 1. 162,A 2. average=78.33 3. 3 2

4. area=78.500 5. 29 6. 7. -3 -3 x

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”,&date.year,&date.month,&date.day); 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”,N); for(i=0;i

sort(stu,N); printf(“The sort is:\n”); for(i=0;i #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”,N); for(i=0;i

{ int i,k,j; struct stud_type t ; for(i=0;i #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”,N); for(i=0;i

____________; if (k!=i) { t=stu[i]; stu[i]=stu[k]; stu[k]=t; } } } 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”,N); for(i=0;i

} } 9. 该程序完成从键盘输入 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”,N); for(i=0;i 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 i

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]的值分别是 和 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”,*p+7);输出 结果是__________。 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. 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;q void fun(int *p); int main() { int a[5]={1,2,3,4,5},*r=a; fun(r); printf(“%d\n”,*r); return 0; } void fun(int *p) { p=p+2; printf(“%d\n”,*p); } 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;q #include int main() { char str[20]=“I am a student.”,*p=str; char *q=“You are a teacher.”;

p=p+7; puts(str); return 0; }

q=q+10;

strcpy(p,q);

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”, a, b); swap(a,b); printf(“second:a=%d,b=%d\n”, a,b); pswap(&a,&b); printf(“third:a=%d,b=%d”,a,b); } 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”,a,b,c,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”, c, d); } 8. #include void main() { char s[]=“ABCD”,*p; for(p=s+1;p void main() { char *p=“I am a student.”; p=p+3; printf(“%s”,p); } 10. #include void main( ) { char *p=“This is a programe.”; p=p+10; printf(“%s”,p); } 11. #include void add(int *p, int n) { int *pend = p + n; for( ; p

12. #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”,a,b,c); } 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”, a, b, *c); 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”, a, b, c); return 0; }

15. #include int main() { char a[] = “language”, *p; p = a; while (*p != 'u') { printf(“ % c”, *p - 32); 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”, stre(p)); 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”,a,b); return 0; } 18. #include void main() { char a[][7]={ “Teacher”,“Tom” , “Good”};

char *p=a[0]; p=p+3; printf(“%s\n%s\n”, a[0],p); } 19. #include void main() { char a[][7]={ “Teacher”,“Tom” , “Good”}; char (*p)[7]=a; printf(“%s\n%s\n”, a[0],++p); } 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”, c, d); } 解答: 1. 16 2. 3 1 3. 0 3 6 4 7 8

17

18

5

5

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”, &x, &y ); if ( x >y ) swap ( _________ ); printf ( “ %4d %4d \n”, x, y );

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”, &x, &y ); 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”, x, y ); 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”, &x, &y ); 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”, &x, &y ); 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 位的整数: ”,N-1 ); scanf ( “%s”, a ); 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”, a ); else printf ( “No, %s 不是回文!\n”, a ); return 0 ; } 10. 判断一个字符串是否为回文(指从左至右和从右至左读都是一样的字符串) 。 #include #define N 11 int main ( ) { int i = 0, n = 0; char a [ N ] = “ ”; char * p1, * p2; printf ( “请输入小于%d 位的整数: ”,N-1 );

scanf ( “%s”, a ); 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”, a ); else printf ( “No, %s 不是回文!\n”, a ); 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 p

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”, “r”)==NULL) { printf(“Cannot open file\n Press any key to exit!”); return 1; } fgets(s,30,fp);

篇5:C语言程序设计的试题及答案

C语言程序设计的试题及答案

7. #include int main { float x,y; scanf(“%f”,&x); switch((int)x/10) { case 0: y=1.0; printf(“y=%f\n”,y);break; case 1: y=2*x+1; printf(“y=%f\n”,y);break; case 2: y=3*x*x+2; printf(“y=%f\n”,y);break; 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) else switch( ( int ) score / 10 ) { case 10: case 9: printf(“A\n”); case 8: printf(“B\n”); case 7: printf(“C\n”); case 6: printf(“D\n”); break; break;

printf(“E\n”);

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 (n) q=15-m; else q=25+m; else if (p) q=q+p; printf(“q=%d\n”,q); } if (m)

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(!c) d=15;

if(a) d=d-10; else d=25;

else if (!b) printf(“d=%d\n”,d);

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”,&x); y = x>12 ? x + 10 : x - 12; return 0; } 输入:12<回车>17. #include int main() { float x, y; char op; double r; scanf(“%c%f%f”,&op,&x,&y); switch(op) { case '+': r = x + y; break; case '-': r = x - y; break; case '*': r = x * y; break; case '/': r = x / y; break; } printf(“%.1f”, r); return 0; } 输入:3.5<回车>18. #include “stdio.h” void main( ) { int a=7; if(a>9 || a<10) a=a%3; printf(“a=%d”, a); }

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

a=a/3;

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”, a++, --c ); } 解答: 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”,&a,&c,&b); switch(c) { case '+': printf(“%f\n”,a+b); ____________________________________________ case____________________________________________ printf(“%f\n”,a-b);break; case '*': printf(“%f\n”,a*b);break; 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”,&a,&b,&c); if(a>b) { _______________________________________ _______________________________________ } else {max=b;min=a;} ____________________________________________ max=c; if(min>c)

_____________________________________ printf(“max=%d\nmin=%d”,max,min); return 0; } 4. #include“stdio.h” int main() { int a; printf(“input integer number: ”); scanf(“%d”,&a); _____________________________________________ { 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(”A

#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”,&b); u = x

8. 输入两个运算数 x,y 和一个运算符号 op, 输出该运算结果的值, 例如输入 3+5↙得到结果 8 . #include“stdio.h” int main ( ) { float x,y,r; char op ; scanf(“%f,%c,%f”,&x,&op,&y); switch (op) { case '+': r=x+y ; _____________________________________________; _____________________________________________ r=x-y ;break; case '*' :_____________________________________________;break; _____________________________________________ r=x/y; break; }

printf(“%f”,r); 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”,a/b); 3. max=a; min=b; if(maxb) else if(a

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”,&x); if(x<0) y=1; else if(x<=5) y=2*x; else y=sqrt(x); printf(“x=%5.1fy=%8.3f\n”,x,y); } 2. #include “stdio.h” #include “math.h” void main() { float x,y; printf(“input x\n”); scanf(“%f”,&x); 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”,x,y); } 3. #include “stdio.h”

#include “math.h” #define price 2.5 void main() { float discount,cost,s; printf(“input distance\n”); scanf(“%f”,&s); if(s<250) discount=0; else if(s<800) else

discount=0.02; else if(s<1500)

discount=0.05;

discount=0.08; cost=s*(1-discount)*price; printf(“distance=%5.1f;cost=%5.1f\n”,s,cost); } 4. /*功能:求一元二次方程的解。*/ #include “math.h” #include “stdio.h” main() {float a,b,c,disc,x1,x2; scanf(“%f,%f,%f”, &a, &b, &c); disc=b*b-4*a*c; if (disc==0) printf(“x1=x2=%7.2f\n”, -b/(2*a)); /*输出两个相等的实根*/ else if (disc>0) { x1=(-b+sqrt(disc))/(2*a); /*求出两个不相等的实根*/ x2=(-b-sqrt(disc))/(2*a); printf(“x1=%7.2f,x2=%7.2f\n”, x1, x2); } else printf(“无实根\n”); } 5. #include “stdio.h” void main() { float a,b,c; printf(“输入三条边:\n”); scanf(“%f%f%f”,&a,&b,&c); 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”,&a,&b,&c); 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”,area); } else printf(“不能构成三角形 \n”); } 7. #include void main() { int score; char d; printf(“Input score\n”); scanf(“%d”,&score); 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”,score,d); } 8. #include void main() { int a,b,c,t; printf(“Input a,b,c\n”); scanf(“%d%d%d”,&a,&b,&c); t=a;

a=b; b=c; c=t; printf(“a=%d;b=%d;c=%d;\n”,a,b,c); } 9. #include void main() { char c1,c2; printf(“Input a c1=getchar(); if(c1>='a'&&c1<='z') c2=c1+'A'-'a'; else if(c1>='A'&&c1<='Z') c2=c1+'a'-'A'; else c2=c1; } 10. #include void main() { int a,b,c,max,min; printf(”Input a,b,c\n“); scanf(”%d%d%d“,&a,&b,&c); max=a;min=a; if(b>max) max=b; else if(bmax) max=c; else if(c

letter: ”);

printf(“原字符:%c 转换后为:%c\n”,c1,c2);

)、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”, a[i][j]); 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;i void main( ) { int i,s,x; s=0; x=15; if (x%i==0) printf(“i=%d,s=%d\n”,i,s); }

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

4. #include void main() { int counter=1; while(counter <= 5) printf(“%d \n”, counter ); counter++; } } 5. #include int main() { int i,sum,m,a; sum=0; m=5; for(i=0;i<=3;i++) { scanf(“%d”,&a); if(a>m) sum+=a; } printf(“sum=%d\n”,sum); 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”,m,n); return 0; }

9. #include void main() { int sum=0,n; scanf(“%d”,&n); while(n<=5) { sum+=n; n++; } printf(“sum=%d”,sum); } 输入: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”,a); } 12. #include void main( )

{ continue;

{ char k; int i; for(i=1;i<3;i++) { scanf(“%c”,&k); 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”, i, s); return 0; } 14. #include void main() { char ch; while((ch=getchar())!='\n') { if (ch>='A'&&ch<='Z') ch=ch+32; ch=ch-32; } } 输入:ABCdef<回车>

else if (ch>='a'&&ch<='z') printf(“%c”,ch);

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”, a, b); return 0; } {

16. #include int main () { int i = 0,j = 0; while (i < 10) i++; while (j++ < 10) ; printf(“i=%d,j=%d\n”,i,j); 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”,j,t); } 18. #include “stdio.h” void main() { int i=10,j; do { j = i%2; i--; } while ( i>4 ); } 19. #include “stdio.h” void main() { int i=7,j; while ( i>2)

printf( “%d”,j );

{

j = i%2; i--; } printf( “%d”,i ); }

printf( “%d”,j );

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”,t); } 解答: 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 ”,n); } 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;

篇6:C语言程序设计的试题及答案

C语言程序设计的试题及答案

} 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

方法二、#include 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”,x);----------------------------------------------------------3 分 --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 分 i++; if(i%10==0) } printf(“\n”);----------------------------------------------------------

6. #include “stdio.h” int tgshu(int n);

void main() { int n; printf(“input n:\n”); scanf(“%d”,&n); if (tgshu(n)) printf(“%d 是同构数\n”,n); else printf(“%d 不是同构数\n”,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;

} else return 0; }

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 he(int a[n][n]) { int i,sum=0; for(i=0;i

8. #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

}

9. #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”,&x); n=change(x,a); for(i=n;i>=0;i--) printf(“%1d”,a[i]); 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”,&x); n=ni(x,a); for(i=0;i<=n;i++) printf(“%1d”,a[i]); 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”,&x,&n); printf(“%d\n”,exp(x,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”,&m,&n); if(m>=n) zuhe=jch(m)/(jch(n)*jch(m-n)); printf(“%d,%d 的组合为:%d”,m,n,zuhe); } 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”,&a[i]); printf(“input x\n”); scanf(“%d”,&x); 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”,a[i].score); 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”,stu[i].no,&stu[i].score); printf(“input xno\n”); scanf(“%s”,xno); 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”, N); for(i=0;istu[m].score)m=i; return stu[m].score; } int num(datatype stu[]) { int i,n=0; for(i=0;i

16. 编程实现:输入 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”, M); for(i=0;i

void merge(int a[],int b[],int c[]) { int i,j,k; i=0;j=0;k=0; while(ib[j]) c[k++]=a[i++]; else c[k++]=b[j++]; while(i

17. 编程实现:输入 N 名职工的姓名及计算机水平考试的成绩,输出及格人数和及格的职工 信 息。要求:职工信息的输入和输出分别通过自定义函数来实现。 #define N 10 #include //#include typedef struct { char name[10]; float score; }datatype; void input(datatype work[]); void print(datatype work[]); void main() { datatype work[N]; input(work); print(work); } void input(datatype work[]) /*input 函数定义*/ { int i; printf(“请输入 %d 名 学生的姓名 成绩:\n”, N); for(i=0;i

void print(datatype work[]) /*print 函数定义*/ { int i; for(i=0;i60)printf(“%10s\n”,work[i].name); }

18. 编程实现:从键盘输入 10 名学生的信息,包括学号、姓名、成绩,用一个排序函数 sort 完成学生成绩降序排列,并输出学生排序后的结果。 #define N 10 #include //#include typedef { char num[20]; char name[20]; float score; }stutype; void input(stutype stu[]); void sort(stutype stu[]); void print(stutype stu[]); int main() { stutype stu[N]; input(stu); sort(stu); print(stu); return 0; } void input(stutype stu[]) /*input 函数定义*/ { int i; printf(“请输入 %d 名学生信息(学号 姓名 成绩):\n”, N); for(i=0;i

k=i; for(j=i+1;j

printf(“****名次 学号 姓名 成绩****\n”); for(i=0;i

19. //编程实现:任意输入一组不多于 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”,&x); while(x!=-1) { m++; a[m]=x; scanf(“%d”,&x); } printf(“输入一组不多于 10 个的升序排列的若干个整数, -1 作为输入结束标志\n”); scanf(“%d”,&x); while(x!=-1) { ins(a,&m,x); scanf(“%d”,&x); } for(i=0;i<=m;i++)

printf(“%5d”,a[i]); } 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”,a[i].name); } 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]的值分别是 0x 和 0 x,则 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”,a), 输出结果是( ) 。 30. 定义 int a[10]={1,3,5,7,9,11,13,15,17,19},*p=a;执行语句 printf(“%d”,*p+7);输出 结果是( ) 。 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”,a[ 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”,p+1);输出结果为( )。 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”,a),输 出结果是( ) 。 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. 0x 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”,m); } 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 ”, array[i]); printf(“\n”); for (i=9; i>=2; i--) array[i] = array[i-1]; array[2] = 3; for (i=0; i<10; i++) printf(“%3d ”, array[i]);

printf(“\n”); } 3. #include void main(void) { char a[]=“ABCDEFGH”,b[]=“abCDefGh”; char *p1,*p2; int k; p1=a; p2=b; for(k=0;k<=7;k++) if (*(p1+k)==*(p2+k)) printf(“%c”,*(p1+k)); 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”,a,b); } 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,”,a[i]); 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”,sum); } 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”,sum); } 9. #include void main() { int a[5]={2,6,1,3,4},n=5,i,j,t; for(i=0,j=1;j

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

if(a[i] 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,”,a[i]); 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,”,a[i-1]); } 12. #include void main() { int a[5],i,j,t; for(i=4;i>=0;i--)

scanf(“%d”,&a[i]); for(i=0;i<5;i++) a[i]=a[i]+10; for(i=0;i<5;i++) printf(“%d,”,a[i]); } 输入:42 31 24 15 16<回车>13. #include void main() { char a[][5]={“Zhong”,“Gong”, “ren”}; printf(“%s\n%s\n”, a[0],a[1]); } 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,”,a[i][i]); } 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,”,a[i][i]); } } 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”, a[6]);

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”,a[5],a[8]); 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”,a[i]); return 0; } 19. #include int main() { int num=13,len=0,i=0,a[30]; do { a[len]=num%2; }while(num); for(i=0;i int main() { int a[5]={6,9,12,16}; int x,i=3; scanf(“%d”,&x); while(i>=0 && x

num=num/2;

篇7:C语言程序设计的试题及答案

C语言程序设计的试题及答案

len++;

} a[i+1]=x; for(i=0;i<5;i++) printf(“%5d”,a[i]); 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] #include int main() { int i; char str[20]=“abcdef”; strcpy(str,“opqrst”); str[5]='\0'; for(i=0;i #include int main() { char a[10]=“AB”,b[10]=“LMNP”; 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”,str2[3][5]={“defg”,“hi\0j”,“klm”}; for(i=1;i<3;i++) strcat(str1,str2[i]); puts(str1); return 0; } 25. #include int main() { int i; char a[] = “Time”, b[] = “Tom”; for(i = 0; a[i] != '\0' && b[i] != '\0'; i++){ if (a[i] == b[i]) if (a[i] >= 'a' && a[i] <= 'z') printf(“%c”, a[i] - 32); else printf(“%c”, a[i] + 32); else printf(“*”); } return 0; } 26. #include int main() { char a[4][10] = {“1234”, “abcd”, “xyz”, “ijkm”}; int i = 3; char (*p)[10] = a; printf(“output string: \n”); for (p = a; p < a + 4; p++, i--) printf(“%c”, *(*p + i)); 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”,a[i][j]); 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”,f[i]); } return 0; } 32. #include #include int main() { char a[]=“morming”, t; int i, j=0; for(i=1;i<7;i++) if(a[j] #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;j 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”,a[i]); 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”,j);

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\t\t\t”; printf(“%d,%d\n”,strlen(s),sizeof(s)); }

{

解答: 1. m=12 2. 1 1 2 2 4 3 5 4 6 5 0 6 0 0 0 0 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. 21. m=0 22. opqr 23. LMNP 24. abchiklm 6 9 10 12 16

25. t*M 26. 4cyi 27. your book 9 28. java 9,basicjava 29. XYZdefgh 8 30. 1 0 0 0 0 01000 00100 00010 00001 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”,sum); 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;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 ________________________,v[2 ]); printf(”total:%f\n“,l); return 0; }

languag:%f\ndbase:%f\n”,v[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”,s[j][i]); ________________________ } 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”,a); 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”, a[i][j]); ________________________; } printf(“\n”); } printf(“array b:\n”); for (i=0; ________________________; i++) { for (j=0; ________________________; j++) printf(“%5d”, b[i][j]); ________________________; } 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”,t); 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] i

5. base%2; base/2; j=i-1 j>=0 6. i<2 scanf(“%f”,&s[i][j] for(j=0;j<2;j++) printf(“\n”); 7. int s[10]; scanf(“%d”,&s[i]); a=a/10; printf(“%5d”,s[i]); 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; { 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”,ci.ins.a,ci.ins.b); return 0; } 2. #include struct stud_type

struct

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

{ char num[11]; char name[11]; float score[3]; float average; }; int main() { struct stud_type stu={“01”,“wang”,80.0,85.0,70.0}; stu.average=(stu.score[0]+stu.score[1]+stu.score[2])/3; printf(“average=%5.2f\n”,stu.average); 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; printf(“%5d”,e.a[i]); printf(“\n”); return 0; }

e.d=3;

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

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”,p->area);

return 0; } 5. #include struct int_char { int i; char ch; }; int main() { struct int_char x={9,'z'}; printf(“%d\t%5c\n”,x.i+20,x.ch-2); 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”,intdata.da.y,intdata.da.z); return 0; } 7. #include int main() { int i; float sum_average=0; { int num; char name[10]; int score[2]; float average; };

struct student

struct student data[2]={{1,“zhangsan”,60,70},{2,“Lisi”,89,90}}; 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”,data[i].num,data[i].name,data[i].average); 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”,&data[i].d1,&data[i].d2); sum=data[i].d1+data[i].d2+sum; } printf(“sum=%d \n”,sum); 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); return 0; }

e.out.b=20;

e.c=2;

e.d=5;

printf(“%d,%d\n”,e.out.a,

10. #include struct st { 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”,y.c.e,y.c.f); 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”,y.c.a,y.c.b); return 0; }

12. #include union st { int a[2]; int b[2]; int c; }; int main( ) { union st y; y.a[0]=10; y.c=30; return 0;

y.b[1]=20; printf(“%d,%d\n”,y.a[0],y.a[1]); }

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

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”,ex1.n,ex1.ch); 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”,e.out.a,e.out.b); } 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”, outs.ins.x, outs.ins.y); } 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”,t); return 0; } 18. #include struct st { int x, y; } data[2] = {1, 10, 2, 20}; int main() { struct st *p = data ; printf(“%d\n”, p->y ) ; printf(“%d\n”, (++p)->x ) ; 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”, a.x, a.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”, e.in.x, e.in.y); return 0; }

篇8:C语言程序设计的试题及答案

C语言程序设计的试题及答案

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”, “w”))=NULL) { 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;i #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

请改正 。 #include #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;i

6. 以下程序中有五处错误,请改正。 #include #include

int main( ) { FILE fp; char ch; if((fp = fopen(“d:\test.txt”,“w+”)) == NULL) { 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:\\test.txt”,“w+”) == NULL) { 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\tc 文件夹下的文件 deposit.c 内容输出到屏幕上。有 5 处错误,请改正。 #include #include int main( ) { char ch; FILE fp; if ((fp=fopen(“d:\\lang\\tc\\deposit.c”,”r”))=NULL) , printf(“Cannot open file \n”); break; } while ((ch=getchar())!=EOF) putchar(ch); fclose(ch); return 0; } 9. 将 d:\lang\tc 文件夹下的文件 deposit.c 内容全部以小写字母输出到屏幕上。 #include #include void main( ) { char ch; FILE *fp; if ((fp=fopen(“d:\lang\tc\deposit.c”,“r”))==NULL) { printf(“Cannot open file \n”); return 1; } while (ch=fgetc(fp)!=EOF) {

if ((ch>='A'||ch <='Z')) } fclose(fp); return 0;

ch=ch+32;

puts(ch);

}

10. 以下程序中用户由键盘输入一个文件名,然后输入一串字符(用#结束输入)存放到此 文 件文件中形成文本文件,并将字符的个数写到文件尾部。 #include #include void main() { FILE *fp; char ch,fname[32]; int count=0; printf(“Input the filename :”); scanf(“%s”,&fname[32]); if ((fp=fopen(“fname”,“w+”))==NULL) { printf(“Can't open file:%s \n”,fname); exit(0); } printf(“Enter data:\n”); while ((ch=getchar())!=“#”) { fputc(fp, ch); count++; } fprintf(“\n%d\n”,count); fclose(fp); }

11. 下面程序的功能是从 filename1 中将文件拷贝到 filename2,其中源文件和目标文件名均 从键盘输入。有五处错误,请改正。 #include #include void main() { FILE *fp1,fp2; char ch,*fname1,*fname2; “); scanf(”%s“,fname1); if ((fp1=fopen(fname1,”r“))==NULL)

printf(”Input the source file name :

{ printf(“Can't open source file:%s \n”,fname1); exit(0); } printf(“Input the targate file name :”); scanf(“%s”,fname2); if ((fp2=fopen(fname2,“w”))==NULL) { printf(“Can't open targate file:%s \n”,*fname2); 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”,fname1); if ((fp1=fopen(fname1,’r’))==NULL) { printf(“Can't open source file:%s \n”,fname1); 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\\tc\\writestring.txt”,“w”))==NULL) { printf(“Cannot open file strike any key exit!”); getchar(); return 1; } printf(“input a string:\n”); scanf(“%c”,st); 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”, “w”); if(fp=NULL) { printf(“\nCannot open file\nStrike any key exit!\n”); getchar(); exit(1); } ch=fgetc(fp);

if(ch!=EOF) { printf(“%c”,ch); ch=fgetc(fp); } fclose(*fp); } 15. 以下程序的功能:把文件 source1.txt 和文件 source2.txt 的内容相连,输出到屏幕上。 共 5 个错误点,请改正。 #include #include int main() { FILE *fp1,fp2; char ch; fp1=fopen(“source1.txt”, “w”); fp2=fopen(“source2.txt”, “r”); 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”, “w”); 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”,count); fclose(fp); return 0; } 17. 以下程序的功能:把文件 source.txt 的内容读出,压缩掉其中的空格,存入文件 target. txt 中,其中有 5 出错误,请检查并改正。 #include #include int main() { FILE *fp1,fp2; char ch; fp1=fopen(“source.txt”, “r”); fp2=fopen(“target.txt”, “w”); 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;i

19. 以下程序的功能:把字符串“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”, “r”); fp2=fopen(“d:\target.txt”, “w”);

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”, “r”); 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”,count); 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”, “w”))==NULL) (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”, stu[i].name ,&stu[i].num,&stu[i].score); 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”, stu[i].name ,&stu[i].num,&stu[i].score); (5) fprintf(fp,“%8s%5d%8.2f\n”,stu[i].name,stu[i].num,stu[i].score); 5. void save(); scanf(“%s%d%d%s”,&s[i].name,&s[i].num,&s[i].age,s[i].addr); FILE *fp; if (fwrite(&s[i],sizeof(struct student),1,fp)=0) fclose(); 6. ① FILE *fp; ② if((fp = fopen(“d:\\test.txt”,“w+”)) == NULL) ③ while(ch !=’ \n’) ④ fputc(ch,fp); ⑤ while(ch != EOF) 7. if((fp = fopen(“d:\\test.txt”,“w+”) )== NULL) while(ch != ‘\n’) fputc(ch, fp); while(ch !=EOF) fclose(fp );

8. FILE *fp; if ((fp=fopen(“d:\\lang\\tc\\deposit.c”,“r”))==NULL) return 1; while ((ch=fgetc(fp))!=EOF) fclose(fp); 9. int main( ) if ((fp=fopen(“d:\\lang\\tc\\deposit.c”,“r”))==NULL) while ((ch=fgetc(fp))!=EOF) if ((ch>='A'&&ch <='Z')) ch=ch+32; putchar(ch); 10. scanf(“%s”,fname); if ((fp=fopen( fname,“w+”))==NULL) while ((ch=getchar())!='#') fputc(ch,fp); fprintf( fp,“\n%d\n”,count); 11. 1、FILE *fp1,*fp2; 2、char ch,fname1[32],fname2[32]; 3、printf(“Can't open targate file:%s \n”,fname2); 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\\tc\\writestring.txt”,“a+”))==NULL) ; 2、scanf(“%s”,st); 3、fgets(st, fp); 4、rewind(fp); 5、while((ch=fputc(fp))!=EOF) 14. FILE *fp; fp=fopen(“source.txt”, “r”); if(fp= =NULL) while(ch!=EOF) fclose(fp); 15. FILE *fp1,*fp2; fp1=fopen(“source1.txt”, “a+”); if(fp1==NULL|| fp2==NULL) while(ch!=EOF) fclose(fp1); fclose(fp2); 16. int main()

int count=0; fp=fopen(“source.txt”, “r”); if(fp==NULL) printf(“\n 字符个数=%d\n”,count); 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”, stu[i].name ,&stu[i].num,&stu[i].score); (4) s=s+stu[i].score; (5) fclose(fp); 19. char str[]= “hello world”; fp1=fopen(“d:\\source.txt”, “r”); fp2=fopen(“d:\\target.txt”, “w”); if(fp1==NULL|| fp2==NULL) while((ch=fgetc(fp1))!=EOF) 20. fp=fopen(“source.txt”, “r”); if(fp==NULL) while(ch!=EOF) printf(“\n 大写字符个数=%d\n”,count); fclose(fp); 五.编程一 解答: 六.编程二 解答:

篇9:c语言试题及答案

《C语言试题及答案》简介开始:C语言部分一、选择题(每小题2分,共10分)(下在各小题,分别有一个或多个正确答案,请将所有正确答案的编号,填写在该小题题干后的括号内。错选或漏选均不得分)。1、若定义:inta[2][3]{0,2,4,6,8,10};以下描述正确的有(A,C,D,E)A、*(a+1)为元素6的地址这里a+1a[1]的地址;*(a+1)的。。此内容文章属于《考试资料》栏目,以上内容为《C语言试题及答案2011-6-6 19:22:09》简单介绍,正文正式开始

C语言部分

一、选择题(每小题2分,共10分)

(下在各小题,分别有一个或多个正确答案,请将所有正确答案的编号,填写在该小题题干后的括号内。错选或漏选均不得分)。

1、若定义:int a[2][3]{0,2,4,6,8,10};以下描述正确的有( A,C,D,E )

A、*(a+1)为元素6的地址

这里a+1=a[1]的地址;*(a+1)的值是6,故A正确。

B、*(a[1]+1)的值为2

为8,故B不正确

C、**(a+1)+2的值为8

这里a+1是一个指针,指向的是a[1]. *(a+1)为a[1],a[1]指向的是a[1][0]. **(a+1)为6,加2得8,故C正确;

D、a[0]与a相同

因二者都是指针,指针的地址都是指向数组中的第一个元素的地址,故D正确。

E、a[1][2]的值为10

它是指第二行的第三个元素,为10,正确

2、对函数的正确使用方法描述( A,C,D )。

A、用数组做函数参数时,必须在主调函数和被调函数中分别定义数组

B、实参数组元素和形参数组元素类型可以不一致

C、形参数组长度可以不指定 D、形参数组长度可以大于实参数组长度

E、数组名做参数属于值传递

3、对静态变量的正确描述( A,B,D,E )

A、静态局部变量在静态存储区内分配单元( )

B、静态外部变量可以赋初值,也可以不赋初值

C、静态外部变量的作用与外部变量相同

D、静态局部变量在函数调用结束时,仍保存其值,不会随着消失。

E、静态局部变量只赋一次初值

4、下列描述正确的是( A ,C)。

A、由main 函数及其参数argc和* argv[]可以实现命令行方式

B、使用fclose关闭文件时,先释放文件指针,再写缓冲区数据到文件中

//先写缓冲区数据到文件中,再释放文件指针

C、字符数组并不要求它的最后一个字符是‘’

//是的,以字符指针指向的字符串才要求,因为只有这样,才能知道字符串的长度,而在字符数组中,不用,一样可以知道到哪里是字符数组的结尾。

D、‘A’和“A”都是字符串常量

E、若char*S=“ a17bc”;则指针变量S指向的字符串所占的字节数是7

5、在缓冲文件系统中用于读写的函数有( A,B,D )

A、putchar () B、fread() C、rewind () D、purw() E、fseek()

二、程序阅读,并给出运行结果(共10分,每题5分)。

(1)main()

{ unsigned a,b,x

int n;

a=0x763 输出结果:

n=6;

b=a<<(12n);

x=(a>>n2)^b; //+,,的优先级比<<,>>高。

printf(“ b=%x, x=%x”,b,x);

在用2个字节表示整数的系统中

结果为

d8c0

d8b6

在用4个字节表示整数的系统中

结果为

1d8c0

1d8b6

故以上两种结果都正确。

(2) #include 〈stdin.h〉

struct m {int x;

int *y;

} *p;

int a [4]={12,33,40,100};

struct m b [4]={10,&a[2],9,&a[3],8,&a[0],7,&a[1]}'

main()

{

p=b; 输出结果:

printf(“%d ”,++p>x); //>的优先级高于++,因此等于是++(p>x),为11

printf(“%d ”,(++p)>x); //p后移一个元素,其x值为9;

printf(“%d ”,++(*p>y));

//>的优先级高于*, 此时p已指向b[1],故*(p>y)为a[3]为100.自加后为101;

故输出结果为:

11

9

101

三、程序设计(共10分)

设在文件a.txt和文件b.txt中分别存有两个字符串,设计一个程序将这两个字符串按依序交叉的方式合并为一个字符串(例如“aaaaa”与“bbb”的合并结果为“abababaa”,而“bbb”与“aaaaa”的合作结果为“ bababaa”,)并将结果存入文件a.txt中。

【答案】

写程序时,可以分别读取a.txt文件和b.txt文件,注意(1),无论a文件先读完还是b文件先读完,程序都能作出适应性的判断。注意(2)把a和b合并的结果,写到一个临时文件c中,最后把c的文件覆盖到a文件中,达到题意的要求。

#include

main()

{

FILE *fp,*fq,*fr;

char ch;

if((fp=fopen(“a.txt”,“r+”))==NULL)

{ printf(“cannot open file a.txt”);

exit(0);

}

if((fq=fopen(“b.txt”,“r”))==NULL)

{ printf(“cannot open file b.txt”);

exit(0);

}

fr=fopen(“c.txt”,“w+”);

while(!feof(fp))

{

ch=fgetc(fp);

fputc(ch,fr);

if(!feof(fq))

{

ch=fgetc(fq);

fputc(ch,fr);

}

}

while(!feof(fq))

{

ch=fgetc(fq);

fputc(ch,fr);

}

rewind(fp); rewind(fr);

while(!feof(fr))

{

ch=fgetc(fr);

fputc(ch,fp);

}

fclose(fp); fclose(fq); fclose(fr);

}

1.2 四川大学2001年攻读硕士学位研究生入学考试试题 及 答案

1.2.1第2001年DDC语言程序设计 题目

一、单项选择题(在每小题的四个备选答案中,选出一个正确的答案,并将其号码写在答题纸上。请注意注明题号。每小题1分,共计6分)

1、‘ ’表示什么?

①字符串常数 ②标识符 ③变量 ④字符常量

答案:④

2、对宏定义不正确的描述是哪一个?

①在进行宏定义时,可以引用已经定义的宏名,可以层层置换

//可以引用已经定义了的宏名,可以层层置换

②宏名的有效范围包括本文件的任何位置

//宏名的有效范围定义命令之后到本源文件结束,可以用#define终止宏定义的作用域

③宠定义不是语句,不必在行末加分号

//是预处理定义语句

④对程序中双引号括起来的字符串,即使与宏名相同,也不进行置换

3、若定义static char s[20]=”computer”;则执行语句x = strlen(s);之后,x的值为多少?

①20 ②9 ③8 ④19

//strlen函数计算char*型字符串的长度的时候,并不包含末尾的;

4、以下哪一个表达式取值是正确的?

①6>5结果为6 ②6&&5结果为7

③6||5结果为7 ④6<5结果为0

5、如定义

enum weekday {one, two, thr, fou, fiv};

enum weekday working;

以下哪个是不正确的枚举变量的使用?

①working = thr; ②working =2;

③working = (enum weekday)2;

④working = (enum weekday) (53);

//不能对其赋值

6、下列说法中正确的是哪一个?

①sizeof (char) 是结果为整型的表达式

②sizeof (char) 是一个不合法的表示形式

③sizeof (char) 是一种函数调用

④sizeof (char) 是结果为实型的表达式

二、阅读程序,并回答问题(共12分)

1、下列程序的输出是什么?(3分)

# include

void main ()

x

char * aplha [6] = x“ABC”,“DEF”,“GHI”,“JKL”,“MNO”,“PQR”y;

char **p;

int i;

p = aplha;

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

printf (“%s”, p[i]);

printf (“ ”);

y

//输出结果

ABCDEFGHIJKL

刚好是字符串数组里面的前四个元素的内容连接起来

2、下列程序为什么无法将用户输入的三个整数按从小到大排序输出?应该如何修改?(6分)

# include

void swap (int x, int y)

x

int t = x;

x = y;

y = t;

y

void main ()

x

int a, b, c;

scanf (“%d, %d, %d”, &a, &b, &c);

if (a>b) swap (a, b);

if (a>c) swap (a, c);

if (b>c) swap (b, c);

printf (“%d, %d, %d”, a, b, c);

y

//函数swap采用值传递,虽然将形参x和y交换了,但是并不影响到实参。将值传递改成指针传递就可以了。

C函数参数采用值传递方式,虽然swap函数将形式参数x和y的值进行了调换,但是影响不到相应的实在参数。所以在主函数中,通过调用sawp函数调换a和b(或a或c,或b和c)的值是根本达不到目的的。

修改:

(1)(2分)

void swap (int *x, int*y)

x

int t = *x;

*x = *y;

*y = t;

y

(2)(2分)主函数

if(a>b) swap(&a,&b);

if(a>c) swap(&a,&c);

if(b>c) swap(&b,&c);

3、假设系统为基本整型量分配2个字节,为字符型量分配1个字节。下列程序完成的功能是什么?(3分)

# include

union

x

int n;

char ch [2];

yu;

void main ()

x

int m;

scanf (“%d”,&m);

u.n = m;

printf (“ %u, %u”,u.ch[0], u.ch[1]);

y

//该程序的功能,取用户输入的整数值的高字节和低字节,并按照任意整数的低字节和高字节分别输出。

三、程序设计题(12分)

假设一个文本文件中保存着100个整数,请将这100个整数按从小到大的顺序写到另一个文本文件中去,并且在新文件中每10个整数占一行。源文件名和目标文件名通过命令行参数获取。

分数分配:

变量定义 2分

命令行参数处理 1分

文件打开 1分

文件读 2分

排序 3分

文件写 2分

文件关闭 1分

# include

void main(int argc, char *argv[])

x

FILE *fin, *fout;

Int a [100], i, j, t;

if(argc!=3)

x

printf (“ You forgot to enter a filename ”);

return;

y

fin = fopen (argv[1], “r”);

fout = fopen (argv[2], “w”);

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

fscanf (fin, “%d”, &a[i]);

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

for (i = 0; i<99-i; i++)

if (a[j]>a[j+1])

xt = a[j]; a[j] = a[j+1]; a[j+1]=t;y

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

x

if (i%10 = 0)

fprintf (fout, “%s”, “ ”);

fprintf (fout, “%d”, a[i]);

y

fclose (fin);

fclose (fout);

y

1.3 四川大学2002年攻读硕士学位研究生入学考试试题 及 答案

1.3.1 第2002年DDC语言题目

C语言程序设计(共30分)

一、单项选择题(在每小题的四个备选答案中,选出一个正确答案。每小题1分,共6分)

1、如果I为整型变量,f为float型变量,c表达式'a'+I*f的类型为 。

A、字符型 B、整型 C、单精度型 D、双精度型

//即使是两个float型的数据相加,都化成double型 float型的数据在运算时一律转化成双精度型,提高其运算精度

2、关于c表达式5||(a=b+c)==3的值,正确的说法为 。

A、值为1 B、值为5 C、值为0

D、仅这一个表达式,不能确定值,必须知道a,b,c的值后才能计算。

//等号==的优先级高于||所以先计算(a=b+c)==3但是不论它为真或假,在与5进行或运算时,按照或运算的法则,只要一方为真,表达式的结果为真。

3、若整型变量a的值为50,则c表达式a>>2的值为 。

A、50 B、25 C、12.5 D、12

//每右移一位除以2,且由于a为整型,结果为整型

4、若c,c1,c2均为字符型变量,下列语句执行后。

c='a';

c1=++c;

c2=c++;

c1,c2的值分别为 。

A、c1='b',c2='c' B、c1='a', c2='c' C、c1='b',c2='b' D、c1='a',c2='b'

//前加加,先加1后使用值,后加加是先使用其值在加加,所以c加加后的值赋予c1,c1得值b,c2先使用值,再加加,c2得值b

5、以下c 语句执行后,

int i, s=0;

for (i=0;i<10;i++)s+=i;

printf ('%d ', i);

输出的内容为 。

A、0 B、9 C、10 D、11

//i值在循环外定义,所以其值循环结束仍有意义,得值10

6、以下c语句执行后,

char s1[100] =″I like C 1anguage″,s2[100];

strcpy(s2, s1);

strcat (s1, s2);

puts (s2);

输出的内容为 。

A、I B、I like C language C、I like C language I like C language

D、I like C language I like C language I like C language

//连接后的串存在s1里,对s2没有影响

二、阅读程序,写出该程序的执行结果。(4分)

# include 〈stdio.h〉

void main ( )

{ char a [3] [10]={“Beijing ”,“Shanghai”, “Chengdu”};

char p1, (*p2)[10];

p1=a[0];

p2=a;

printf(“%c ”,*(a[1]+1));

// a[1]代表是第一行字符串Shanghai,加1后得值第一个字符h的地址,*取出其地址里的值h

printf(“%c ”,*(*(a+1)+2));

// *(a+i)=a[i] 代表是第一行字符串Shanghai,加2后得值第2个字符a的地址,*取出其地址里的值

printf(“%c ”,*(p1+1));

//p1是一字符指针,加一指向第零行第1个字符e的位置,*取出其地址里的值

printf(“%c ”,*(*(p2+1)+2));

//p2为一指向数组的指针,p2是与数组名等价的指针,它指向2维数组的首行,p2+1指针指向了第一行字串Shanghai,加2后得值第2个字符a的地址,*取出其地址里的值

printf(“%s ”,*(p1+1));

//打印的从第一个字符开始的第零行余下的字符串eijing

printf(“%s ”,*(p2[2]);

//p2[2]指的是第二行,打印第二行字符串Chengdu

printf(“%s ”,*(p2+1));

//p2+1指向的是第一行字符串shanghai

三、按要求编写函数。(8分)

在一程序中定义了如下结构类型用于处理单向链表:

struct linkage {

int value;

struct linkage *pNext;

};

现已经编写出按节点的成员a值从小到大建立初始链表的函数

create ( ),如下所示:

struct linkage * create (void )

{

struct linkage * pHead;

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

pHead=NULL;

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

pHead=addItem(pHead,a[i]);

return pHead;

在该函数的for循环前,pHead为NULL;在执行整个for循环后,创建的链表如下所示:

即在被调函数addItem( )中,需要动态分配内存,生成新节点,将传入的第二参数的值赋给该节点的成员value:并通过第一个参数链表首节点确定适当位置放置该新节点。

请完成函数:

struct linkage * addItem (struct linkage *pHead, int value );

返回值指向单向链表头节点。

你可能用到下面的动态内存分配函数。

void* malloc (unsigned int size);其作用是在内存的动态存储区中分配一个长度为size的连续空间。返回值为指向分配域起始地址的指针。

1、在空链表中加第一个节点2分;

2、加到当前链表头节点前2分;

3、加到当前链表头节之后适当位置,可分为两步。2分;

4、其它部分2分,包括整体结构,变量定义,返回值。

struct linkage *addItem (struct linkgae *pHead ,int value)

{ struct linkage *p ,*q,*r,*s;

p=pHead;

if (!p)

{ r=(struct linkage *) malloc (sizeof (struct linkage));

r>a=value;

r>pNext =NULL;

pHead=r;

else if (value <=p>a)

{ r=(struct linkage *) malloc (sizeof (struct linkage));

r>a=value;

r>pNext =p;

pHead=r;

else

{ q=p>pNext;

while (q)

if (value<=q>a)

break;

else

{ p=q;

q=p>pNext;

r=(struct linkage *)malloc (sizeof (struct linkage));

r>a=value;

r>pNext=q;

p>pNext=r;

return pHead;

四、程序设计。(12分)

单位HTML文件由标签,标题和正文主体等部分组成。如下所示:

〈HTML〉

〈HEAD〉

〈TITLE〉HTML标题部分

〈/HEAD〉

这里是HTML文件的主体部分。

换新行。

〈/HTML〉

符号“<与”>“及其之间的内容是标签,如〈HTML〉,等。其它部分是标题和主体。请按以下说明和要求完成程序,将简单的HTML文件转换为TXT文件:

1. 序将简单HTML文件的有标签和换行符( )(去掉。标题部分结束(遇到标签)后加上一个换行符( )。每一个

标签换成一个换行符( )。其余部分原样保留。如上面的简单HTML文件处理为(L表示换行):

HTML标题部分L

这里是HTML文件的主体部分。L

换新行。

2.简单HTML文件的标签内没有嵌套情况,即在”<和“>”这间不会再出现“<或”>“。

3.标签内的内容大小写无关。如

,

,

等价。

4.示签的”<和“>”与标签内容间无空格。即不会出现

或< BR>等情况。

5.标题和正文中不会出现“<和”>“字符,它们通过转义字符实现,这时尤需考虑。

6.程序需要处理命令行参数。第一个参数指要处理的HTML文件名,第二个参数指定处理后要存放的文件名。这两个文件都是文本文件。

7.程序必须进行必要的出错处理,如无法打开文件等。

8.程序不需要包含头文件。

1、main()函数形参处理:2分。

2、变量定义1分。

3、打开关闭文件2分;

4、读源文件1分;

5、能从标签中找出内容〈BR〉〈/TITLE〉换为' '部分2分;

6、区分开标签和其它部分,并按要求写入目标文件2分;

7、整体结构正确2分;

void main (int argc, char *argv[])

{ char C,tag[7];

int status ,len ;

FILE*fin,*fout;

if (argc!=3)

{ printf(”参数个数不对!“)

exit (1)

if ((fin=fopen (argv [1],”r“)))==NULL)

{

printf(“打不开源文件”);

exit(1);

}

if ((fout=fopen (argv [2],”w“)))==NULL)

{

printf(”无法写入文件!“);

fclose (fin);

exit (1);

}

status =0;

while ((c=fgetc (fin)))!=EOF)

switch (C)

{

case '<':

status=1;

len=0;

break;

case ‘>’:

status=0;

if(len<=6)

tag[len]=0;

if(!strcmp(tag,”/title”)||!strcmp(tag,”br”))

fputc(‘ ’,fout);

break;

case ' ':break;

default:

if (! status)

fputc (c,fout);

else

{ len++;

if (len<=6);

tag[len1]=c;

fclose (fin);

fclose (fout);

1.4 四川大学2003年攻读硕士学位研究生入学考试试题及 答案

1.4.1 第2003年DDC语言题目

C语言程序设计(40分)

一、分析下面的 程序,写出程序执行结果。(每小题4分,共2分)

1、

#include 〈stdio.h〉

void swap (int **p1,int **p2)

{ int *t;

t=*p1;

p1=p2;

*p2=t;

void main( )

{ int a=1、b=3、*p=&a、*q=&b;

swap(&p、&q);

printf('%d、5d、%d、%d ”、a、b、*p、*q;

}

//因为在swap函数里交换的是两个参数的地址,所以参数使用的是两级指针,表示交换的是指针的地址,最终使p指向了b,q指向了a。

1,3,3,1

2.

# include

void merge (char *d、char sl、char、S2)

{ while (*sl!='' && *S2!='')

if (*sl<*s2)

d++=*sl++;

else

d++=*s2++;

while (*sl!=') *d++=sl++;

while (*s2!='') *d++=s2++;

*d='',

}

void main( )

{ char sl=“acdgh”,s2=“bcfhi”,s3[20];

merge(s3,s1,s2);

puts(s3)

}

//将两个字符串合为一个按照字母顺序排列的串

abccdfghhi

二、按要求完成C函数。(每小题10分,共20分)

1.int maxsameChar(char *s);

该函数计算字符串 s中最大连续相同的字符个数。例如,若s 为“aaabbbb”,则返回值为4;若s为“abcde”,则返回值为1。

int maxSameChar (char *s)

{ int temp=1, max=0;

char c='';

while (*s)

{ if (c==*s)

tmpe++;

else

{ c=*s;

temp=1;

if (max

max=temp;

s++;

return max;

2. struct mode *reverse(struct mode *pHead);

其中,struct node 定义如下:

struct node

{ int key ;

struct node *pNext;

};

此函数传入的pHead指向要处理的单向链表头,该链表以NULL指针结束。函数实现链表链接方向(包括pHead 指向的原头节点)的反转,如图1所示。并将新链表头指针作为函数值返回。在完成此函数时,你只能利用原有链表节点,不能申请新节点空间。

struct node* reverse (struct node* pHead)

{ struct nodt *p,*q,*t;

if (pHead==NULL)

return NULL;

p=pHead;

q=p>pNext;

while (q! NULL)

{ t =q>pNext;

q>pNext=p;

p=q;

q=t;

pHead>pNext=NULL;

pHead=p;

return pHead;

三、按要求完成简单的客车车次查询程序。(12分)

某车站需要一个简单的客车车次查询程序。说明如下:

1. 客车车次数据文件checi.txt放在c:data目录下,格式为:

T8 成都 北京西 09:30

1364 成都 北京西 14:20

K118 攀枝花 北京西 22:00

… … …

其中每行为一次车的信息,分为4个数据项:车次,始发站,终点站和离开本站时间。前三个数据项留的宽度为8字符,最后一项结束后即换行。数据项间一定有空格隔开,每一数据项内无空格。

2.你的程序对用户通过命令行参数指一的车次,在客车车次数据文件中查找相应车次信息并输出该次车的始发站,终点站和离开本站时间,如果未找到,则输出“找不到该次车信息!”。

3.你的程序可以使用标准的C库函数,可以不引用文件。程序中应给出必要的注释。

int main (int argc, char *argv [ ])

{ char info [4] [20];

FILE * fp;

int I,found=0;

if (argc!=2)

{ printf(“参数个数不正确! ”);

return 1;

fp=fopen (“c:checi. txt ”,“r”);

if (fp==NULL)

{ printf (“无法打开数据文件! ”);

return 1;

while (! feof (fp))

{ for (I=0;i<4; i++)

fscanf (fp,“%s”,info[i]);

if (!stricmp (info[0],argv[1]))

{ found=1;

printf(“始发站:%s ”,info [1]);

printf(“始发站:%s ”,info [2]);

printf(“离本站时间:%s ”,info [3]);

break;

if (! found )

printf(“找不到该次车信息! ”);

return 0;

1.5 四川大学2004年攻读硕士学位研究生入学考试试题及 答案

1.5.1 第2004年DDC语言题目

C语言程序设计(40分)

一、写出下列表达运算后a的值,设a,b 均为 int ,每个表达式运算到a=2,b=3。(5分)

(1) a+=b*5

//a=a+b*5,为17

(2) a=b++

//a=3

(3) a%=(a%=b)

//结果为0

(4) a=a>b&&b>a||a

//>的优先级高于&&和||原式理解为(a>b)&&(b>a)||a

&&运算符高于||,原式理解为((a>b)&&(b>a))||a,因为a值为2,结果为1真。或运算是有一为1

(5) a=!b

//!的运算符最高,<其次,&&最小原式理解为((!b)

二、下面的程序构造一个有向图,请画出其示意图。(10分)

include 〈stdio.h〉

struct node /*有向图的节点类型*/

{ int key;

struct node *left,*right,*up,*down;

};

int main (int argc ,char * argv [])

{ int i;

struct node nodes[5];

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

{ nodes [i].key=i;

nodes [i].left=NULL;

nodes [i].right=NULL;

nodes [i].up=NULL;

nodes [i].down=NULL;

nodes [0].left=nodes+1;

nodes [1].left=nodes;

nodes [1].up=nodes+2;

nodes [2].down=nodes+3;

nodes [3].right=nodes+4;

nodes [4].up=nodes;

nodes [4].down=nodes+1;

return 0;

三、按要求完成函数。(10分)

int sameChar sAT SamePos (char *s1,char *s2);

两个字符串的字符进行同位置比较,返回相同的字符数(串结束符‘’不比较)。

例如,若s1=“abc”,s2=“Abc”,则返回值为2。

int sameCharAtSame Pos (char *s1,char *s2)

{

int counter =0;

while (*sl && *s2)

{

if (*s1 == *s2)

counter ++;

s1++;

s2++;

return counter;

四、按要求编写程序对一种特殊字符串解码。(15分)

要处理的特殊字符串由A,C,G,U四个字符组成,如下所示:

ACUGCCCAUGAAAAACUUUUGACAC

其有效信息子串从第一次出现“AUG”后开始,遇到“UGA”结束(不包括“AUG”和“UGA”。)如上面的编码串需解码的有效子串为:

AAAAACUUU

有效子串中每3个字符(如“AAA”,“CGA”)作为一个密码子(可以保证,有效子串的长度一定为3的整数倍。)可能的密码子(62种)及相应码值以如下形式放在编码文件code.txt中(按密码子字典序排列);

AAA K

AAC N

…………

UUU F

请编写C程序对存放在文件中的特殊字符串解码,在屏幕输出解码串。如:KNF

KNE

要求:

1、编码文件code.txt放在c盘根目录下;

2、要解码的特殊字符串以文件形式存放,其串长不超过1024字符;

3、你编写的程序应能处理命令参数,指定要解码的字符串文件;

4、程序中可以使用C语言的标准库函数,不需要写出头文件;

5、程序中应有必有的注释。

#include 〈stdio.h〉

#include 〈string.h〉

struct

{

char name[4];

char code;

} table [62];

int main (int argc,char *argv [ ])

{

FILE *code? file=NULL, *string file =NULL;

char string [1024+2],buffer[4],*p,*end ;

int I;

/* 检查命令行参数*/

if (argc<=1)

/*打开编码文件以及待解码文件*/

code? file=fopen (“c:code. txt”,“r”);

string file =fopen (argv[1],“r”);

if (code_file= = NULL | | string_file = =NULL)

return 1;

/* 读编码文件,将结果记入表中 */

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

{

fscanf(code_file, “%s %c ”, tabie[i], name, &table[i].code);

}

/*读待解码文件内容到string中 */

fgets (string, sizeof (string), string_file);

/* 扫描有效子串头 */

p= strstr(string, “AUG”);

end = strstr (p + 3 , “UGA”);

/*读有效子串,查表输出解码字符,直到子串尾 */

for (p+=3; p

{

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

{

buffer [i] = p [i];

}

buffer [i] ='';

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

{

if (strcmp (buffer, table [i].name)) = = 0)

{

printf(“%c”, table[i]. code);

break;

}

}

}

/* 关闭编码文件以及待解码文件 */

fclose (code_file);

fclose (string_file);

return 0;

}

1.6 四川大学2011年攻读硕士学位研究生入学考试试题及 答案

1.6.1 第2011年DDC语言题目

C语言程序设计(50分)

一、读程序,写执行结果(8分)

1、

#include

int main( )

{ int a=4,b=3,c=1,x;

x=a>b;

printf(“%d ”,x);

//结果为1

x=a+b++;

printf(”%d ”,x);

//结果为6

x=a>b;

printf(”%d ”,x);

//结果为假,0

x=c&&b==c;

printf(”%d ”,x);

//==的运算级高于&&, c&&(b==c)结果为假0

return0;

}

2.

#include

int main( )

{ inti,j;

for(I=0;I=8;I+=2)

{ for(j=0;j<(8I)/2;j++

printf(”+”);

for(j=0;j<=I;j++)

printf(”*”);

printf( ”);

}

return0;

}

++++*

+++***

++*****

+*******

二.按要求完成函数。(28分)

1. 一种最简单的字符串加密方法是将字符串的每一字符加上一个偏移量offset(不考虑溢出)。请编写木相应的编解码函

数,其原型分别为:

char*encode(char*s,int offset);

char *decode(char *s,offset);

char *encode(char *s,int offset)

{

char *p=s;

while (*p)

{

*p +=offset;

}

renturn s;

}

char *decode(char *sm int iffset)

{

char *p= s;

while(*p)

{

*p=offset;

}

return s;

}

2编写函数将两个节点值递增的单向链表归并为一个。要求利用原节点空间。链表节点定义为:

struct node

{ int value;

struct node *pNext;

};

函数原型为:

struct node *merge(struct node *a, struct node *b);

其中a,b为要归并的两个单向链表头节点指针,函数返回值为归并后的单向链表头节点指针。

struct node

{

int value

struct node *pNext;

}

struct node *merge(struct node *a, struct node *b)

{

struct node *p;

struct node *q

struct node *t;

if (a>value <=b>vaLue)

{

p=a;

q=b

}

else

{

p=b

q=a;

}

t=p;

while (q)

{

if (p>pNext ==NULL)

{

P>Pnext=q

break;

}

if (q>value

pNext>value)

{

struct node.*k=q>pNext;

q>pNxt=p>pNext;

p>pNext=q;

q=k;

continue;

}

p=p>pNext;

}

return t;

}

三.编写程序模拟数字LED显示。(14分)

编写程序完成如下功能:用户键盘输入最多四位的整数,在屏幕上以类似LED方式显示。如用户输入为:

8234

则输出

其中每个数字字模均为7行×4列。09+个数字的字模顺序地以文本形式存放在方件C:font.txt中。

要求:

1、输出的各数字间有1个空格;

2、你的程序可以使用C语言标准库函数,不需要写出头文件;

3、程序中应有必有的注释。

char font[10][7][5];

94 int n;

95 int digit[4];

96 int length=0;

97

98/ * 装载字体文件 */

99 void load fontsO

100 {

101 int I, j, k;

102 FILE *file;

103

104 file = fopen(”c:font”,”r”);

105 if (file==NULL)

106 {

107 printf(” 打开字体文件 font. Txt 错误|n”);

108 exit(1);

109 }

110

111 for (k = 0; k<10;k++)

112 {

113 for (I=0; I<7; I++)

114 {

115 char line[10];

116 fgets(line, 5, file);

117 for (j=0; j<4;j++)

118 {

119 font[k][I][j]=line[j];

120 }

121 font[k][I][4]=0;

122 }

123 }

124

125 fclose(file);

126 }

127

128/* 将输入的整数解码为单个的数字*/

129 void decode()

130 {

131 int I;

132 int m=n;

133 for (I=0; I <4;I++)

134 {

135 digit[I]=m % 10;

136 m =m/10;

137

138 if (m==0)

139 break;

140 }

141

142 length = I + 1;

143 if (length >=4)

144 length=4;

145 }

146

147 /* 显示LED */

148 void disnlav()

149 {

150 int I,j;

151 for (I=0; I<7;I++)

152 {

153 for (j = lengthI; j>=0;j__)

154 {

155 printf(”%s”, font[j][I]);

156 printf(” ”);

157 }

158 printf(” ”);

159 }

160 }

161

162 int main()

163 {

164

165 load fonts();

166

167 scanf(”%d”, &n);

168 decode();

169 display();

170 }

C语言试题及答案的延伸阅读――c语言学习体会

记得上次开班会的时候我吹牛说要和你们一起学习c语言,不知不觉已经快半个月拉。我得对自己的话负责。今天我把借来的教材看了看,以前真的是不了解,今天才知道它是贝尔实验室的设计师Dennis在1972年设计的。c语言是其他计算机语言的基础,其他的计算机语言都是在它的基础上研发。所以学好c语言对于以后要在自动化专业有所发展的同学是非常有好处的,尤其是将来的plc编程、电子产品设计等等,都需要用到c语言。

今天我学习了一个最最简单的程序,感觉十分有收获,明白了它的最基本的道理――它也是一门语言,和我们的汉语是一样的,它也有自己的语法、逻辑结构,只要是能真正的去理解它,还是很容易学会的。

今天学习的程序如下:

#include

#include

main()

{

double x,s;

printf(“input number: ”);

scanf(“%lf”,&x);

s=sin(x);

printf(“sine of %lf is %lf ”,x,s);

}

这个的功能

c语言试题及答案

c语言试题及答案

c语言程序设计实验报告

c语言程序设计心得体会

c语言程序设计实践报告

浅谈C语言程序设计的教学方法

网络工程试题及答案

安全教育试题及答案

药理学试题及答案

心理学试题及答案

《C语言程序设计的试题及答案(共9篇).doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式

点击下载本文文档