浙工大C语言复习题与参考答案 下载本文

C程序设计复习题集 目 录

一、C语言程序设计复习题

⒈ 单项选择题 ??????????????????? 41 ⒉ 填 空 题 ??????????????????? 45 ⒊ 写输出结果题 ??????????????????? 46 ⒋ 程序填空题 ??????????????????? 53 ⒌ 编 程 题 ???????????????????? 61 三、C语言程序设计复习题答案

⒈ 单项选择题 ???????????????????? 62 ⒉ 填 空 题 ???????????????????? 63 ⒊ 写输出结果题 ???????????????????? 63 ⒋ 程序填空题 ???????????????????? 64 ⒌ 编程题(参考) ???????????????????? 65

C程序设计习题集 1

C语言程序设计复习题

1 单项选择题

在每小题的四个备选答案中选出一个正确的,并将正确答案号码填在题后括号内。 1. 用C语言编写的源文件经过编译,若没有产生编译错误,则系统将( )。 A、生成可执行目标文件 B、生成目标文件 C、输出运行结果 D、自动保存源文件

2. 在C集成环境执行菜单命令“运行”,若运行结束且没有系统提示信息,说明( )。 A、源程序有语法错误 B、源程序正确无误

C、源程序有运行错误 D、源程序无编译、运行错误,但仅此无法确定其正确性 3. 程序运行输出了错误的结果,可以排除下列哪一个因素( )。

A、算法错误 B、运行时输入数据错误 C、未通过编译 D、系统资源配置不当 4. 下列各个错误中,属于编译错误的是( )。

A、数组下标超界 B、“==”误写为“!=” C、死循环 D、括号不配对 5. 若int类型数据字长为4,其最大值为( )。

A、2 B、2-1 C、2-1 D、2 6. 常数的书写格式决定了常数的类型和值,03322是( )。 A、16进制int类型常数 B、8进制int类型常数 C、10进制int类型常数 D、10进制long int类型常数 7.“e2”是( )。

A、实型常数100 B、值为100的整型常数 C、非法标识符 D、合法标识符 8. 要为字符型变量a赋初值,下列语句中哪一个是正确的( )。

A、char a='3'; B、char a=\、char a=%; D、char a=*; 9. 要为float类型变量x、y、z赋同一初值3.14,下列说明语句哪一个是正确的( )。 A、float x,y,z=3.14; B、float x,y,z=3*3.14; C、float x=3.14,y=3.14,z=3.14; D、float x=y=z=3.14; 10. 语句“float pi=3.1415926535;”将( )。

A、导致编译错误 B、说明pi为初值3.1415926535的单精度实型常数 C、导致运行时的溢出错误 D、说明pi为初值3.141593的单精度实型常数 11. 算术运算符、赋值运算符和关系运算符的运算优先级按从高到低依次为( )。 A、算术运算、赋值运算、关系运算 B、算术运算、关系运算、赋值运算 C、关系运算、赋值运算、算术运算 D、关系运算、算术运算、赋值运算 12. 关系运算符中优先级最低的运算符是( )。

A、“>=”和“<=” B、“>”和“<” C、“==”和“!=” D、“<=”和“<” 13. 逻辑运算符中,运算优先级按从高到低依次为( )。

A、&&,!,|| B、||,&&,! C、&&,||,! D、 !,&&,|| 14. 对C程序在作逻辑运算时判断操作数真、假的表述,下列哪一个是正确的( )。 A、0为假非0为真 B、只有1为真 C、-1为假1为真 D、0为真非0为假 15. 表达式 x==0&&y!=0||x!=0&&y=0等效于( )。

31

31

32

32

2 C程序设计习题集

A、x*y==0&&x+y!=0 B、x*y==0&&(x+y==0) C、x==0||y==0 D、x*y=0||x+y=0 16. 表达式!x||a==b等效于( )。

A、!((x||a)==b) B、!(x||y)==b C、!(x||(a==b)) D、(!x)||(a==b) 17. 下列格式符中,哪一个可以用于以8进制形式输出整数( )。 A、%d B、? C、%o D、%ld 18. 下列格式符中,哪一个可以用于以16进制形式输出整数( )。 A、d B、%8x C、?6 D、%d

19. a是int类型变量,c是字符变量。下列输入语句中哪一个是错误的( )。 A、scanf(\、scanf(\ C、scanf(\、scanf(\

20. 字符变量ch='A',int类型变量K=25,语句printf(\输出( )。 A、65,253 B、65 253 C、65,25 D、A 25 21. 下列各语句序列中,能够且仅输出整型变量a、b中最大值的是( )。 A、if(a>b) printf(\ B、printf(\ C、if(a>b) printf(\ D、if(a

22. 下列各语句序列中,能够将变量u、s中最大值赋值到变量t中的是( )。 A、if(u>s)t=u; t=s; B、t=s; if(u>s)t=u; C、if(u>s)t=s; else t=u; D、t=u; if(u>s)t=s; 23. 下列各语句中,能够输出整型变量a、b中最大值的是( )。

A、printf(\、(a>b)? printf(\ C、printf(\、printf(\24. 下列语句应将小写字母转换为大写字母,其中正确的是( )。

A、if(ch>='a'&ch<='z') ch=ch-32; B、if(ch>='a'&&ch<='z')ch=ch-32; C、ch=(ch>='a'&&ch<='z')?ch-32:''; D、ch=(ch>'a'&&ch<'z')?ch-32:ch; 25. 求整数1至10的和并存入变量s,下列语句中错误的是( )。

A、s=0;for(i=1;i<=10;i++) s+=i; B、s=0;i=1;for(;i<=10;i++) s=s+i; C、for(i=1,s=0;i<=10;s+=i,i=i+1); D、for(i=1;s=0;i<=10;i++) s=s+i; 26. 若sizeof(int)为2,计算1至10的乘积,下列语句序列中正确的是( )。 A、int jc=1; for(int i=2;i<=10;i++) jc*=i; B、for(float jc=1,int i=2;i<=10;i++,jc*=i); C、float jc=1; for(int i=2;i<=10;jc*=i,i=i+1); D、for(float jc=1;i=2;i<=10;i++) jc*=i;

27. 下列语句中,哪一个可以输出26个大写英文字母( )。

A、for(a='A';a<='Z';printf(\、for(a='A';a<'Z';a++)printf(\ C、for(a='A';a<='Z';printf(\、for(a='A';a<'Z';printf(\28. 与语句 while(i>=0&&i<=10) { if(i++==5)continue; printf(\ 功能相同的是( )。

A、for(;i>=0&&i<=10;i++) if(i!=5) printf(\

C程序设计习题集 3

B、for(;i>=0&&i<=10;i++) if(i==5) printf(\

C、for(;i>=0&&i<=10;i++) if(i!=5) printf(\ D、for(;i<=0&&i>=10;i++) if(i!=5) printf(\

29. 下列语句中与语句 while(1){if(i>=100)break;s+=i;i++;} 功能相同的是( )。 A、for(;i<100;i++) s=s+i; B、for(;i<100;i++;s=s+i); C、for(;i<=100;i++) s+=i; D、for(;i>=100;i++;s=s+i); 30. 下列各语句定义了数组,其中哪一个是不正确的( )。

A、char a[3][10]={\、int x[2][2]={1,2,3,4}; C、float x[2][]={1,2,4,6,8,10}; D、int m[][3]={1,2,3,4,5,6}; 31. 下列各语句定义了数组,其中哪一个是正确的( )。

A、char a[10],*p=a[0] B、int d[2][]={1,2,3,4,5,6}; C、float x[][3]={1,2,4,6,8,10}; D、int m[][]={\32. 数组定义为 int a[3][2]={1,2,3,4,5,6},下列表述中正确的是( )。 A、数组元素a[3][2]的值为6 B、数组元素a[6]的值为6 C、数组元素a[0]的值为1 D、a[0]不是int类型的数组元素 33. 用宏名定义一个字符串,下列表述中哪一个是正确的( )。 A、#define pi=3.14159; B、define pi=3.14159 C、#define pi \、#define pi(3.14159);

34. 定义带参数的宏计算两式乘积(如x+3·x-5与x-6),下列定义中哪个是正确的( )。 A、#define muit(u,v) u*v B、#define muit(u,v) u*v; C、#define muit(u,v) (u)*(v) D、#define muit(u,v)=(u)*(v) 35. 宏定义 #define div(a,b) a/b 的引用 div(x+5,y-5) 替换展开后是( )。 A、x+5/y-5 B、x+5/y-5; C、(x+5)/(y-5) D、(x+5)/(y-5); 36. 定义带参数的宏“#define jh(a,b,t) t=a;a=b;b=t”,使两个参数a、b的值交换,下 列表述中哪个是正确的( )。

A、不定义参数a和b将导致编译错误 B、不定义参数a、b、t将导致编译错误 B、不定义参数t将导致运行错误 D、不必定义参数a、b、t类型 37. 下列语句定义p为指向float类型变量d的指针,其中哪一个是正确的( )。 A、float d,*p=d; B、float d,*p=&d; C、float *p=&d,d; D、float d,p=d; 38. 对语句“int a[10],*p=a;”,下列表述中哪一个是正确的( )。

A、*p被赋初值为a数组的首地址 B、*p被赋初值为数组元素a[0]的地址 C、p被赋初值为数组元素a[1]的地址 D、p被赋初值为数组元素a[0]的地址 39. p1指向某个整型变量,要使指针p2也指向同一变量,哪一个语句是正确的( )。 A、p2=*&p1; B、p2=**p1; C、p2=&p1; D、p2=*p1; 40. 假如指针p已经指向变量x,则&*p相当于( )。

A、x B、*p C、&x D、**p 41. 假如指针p已经指向某个整型变量x,则(*p)++相当于( )。 A、p++ B、x++ C、*(p++) D、&x++ 42. 数组定义为“int a[4][5];”,引用“a+3”表示( )。

A、a数组第4列的首地址 B、a数组第1行第4列元素的值

2

4 C程序设计习题集

C、a数组第4行的首地址 D、a数组第1列第4行元素的值 43. 数组定义为“int a[4][5];”,引用“a[1]+3”表示( )。

A、a数组第2行第4列元素的地址 B、a数组第2行第4列元素的值 C、a数组第4行的首地址 D、a数组第1行第4列的首地址 44. 数组定义为“int a[4][5];”,引用“*(*a+1)+2”表示( )。 A、a[1][0]+2 B、a数组第1行第2列元素的地址 C、a[0][1]+2 D、a数组第1行第2列元素的值 45. 数组定义为“int a[4][5];”,下列哪一个引用是错误的( )。 A、*a B、*(*(a+2)+3) C、&a[2][3] D、++a

46. 共用体定义为“union data {char ch;int x;} a;”,下列哪一个是正确的( )。 A、a.ch='x';a=10; B、a='x',10; C、a.x=10;a.ch='x'; D、a='x'; 47. 共用体定义为“union data {char ch;int x;} a;”,下列哪一个是不正确的( )。 A、a={'x',10}; B、a.x=10;a.x++; C、a.ch='x';a.ch++; D、a.x=10;a.ch='x'; 48. 按位与运算:int a=7,b=12,c=a&b; 变量c的值是( )。 A、19 B、4 C、5 D、9 49. 按位或运算:int a=6,b=8,c=a|b; 变量c的值是( )。 A、2 B、14 C、48 D、-2 50. 按位异或运算:int a=14,b=15,c=a^b; 变量c的值是( )。 A、1 B、15 C、-1 D、29 51. 按位取反运算:int a=16,c=~a;,变量c的值是( )。 A、17 B、7 C、84 D、-17 52. 左移运算:int a=16,c=a<<2; 变量c的值是( )。 A、67 B、4 C、1 D、64 53. 右移运算:int a=16,c>>2; 变量c的值是( )。 A、8 B、1 C、4 D、64

54. 以“只读”方式打开文本文件a:\\aa.dat,下列语句中哪一个是正确的( )。 A、fp=fopen(\、fp=fopen(\ C、fp=fopen(\、fp=fopen(\55. 以“追加”方式打开文本文件a:\\aa.dat,下列语句中哪一个是正确的( )。 A、fp=fopen(\、fp=fopen(\ C、fp=fopen(\、fp=fopen(\56. 为读写建立一个新的文本文件a:\\aa.dat,下列语句中哪一个是正确的( )。 A、fp=fopen(\、fp=fopen(\ C、fp=fopen(\、fp=fopen(\

C程序设计习题集 5

2 填空题

1. 设float x=2.5,y=4.7; int a=7;,表达式 x+a%3*(int)(x+y)%2/4 的值为 。 2. 设 int x=17,y=5; 执行语句 x+=--x%--y 后x的值为 。 3. 设 int x=17,y=5; 执行语句 x%=x++/--y 后x的值为 。

4. 设 int a=7,b=6,c=5;,表达式 (a+b)>(c*c)&&b==c||c>b 的值为 。 5.设 int a=3,b=5,c=7;,表达式a>c||c>b!=0&&c==b+a 的值为 。 6.已知三角形边长a、b、c和s=(a+b+c)/2,计算其面积的算术表达式为 。 7. 方程ax+bx+c=0系数a、b、c且存在两个实根,计算其中一个实根的算术表达式为 。

8. p为本金,r为1年期存款年利率,计算存款p元5年到期时本金、利息总和(计复利)的算术表达式为 。

9.将数学式 (x+1)e 写作算术表达式为 。 10.ch是字符变量,判断ch为大写英文字母的逻辑表达式为 。 11. 判断int类型变量n是否为两位整数的逻辑表达式为 。 12. 判断变量a、b的值均不为0的逻辑表达式为 。 13. 判断变量a、b是否绝对值相等而符号相反的逻辑表达式为 。 14. 判断变量a、b中必有且只有一个为0的逻辑表达式为 。 15. m是值为两位数的整型变量,判断其个位是奇数而十位数是偶数的逻辑表达式为 。 16. 求解赋值表达式 a=5+(c=6)后表达式值、a、c的值依次为 。 17. 求解赋值表达式 a=(b=10)%(c=6),表达式值、a、b、c的值依次为 。 18. 求解逗号表达式 x=a=3,6*a后,表达式值、x、a的值依次为 。 19. 求解逗号表达式 (a=15,a*4),a+5,表达式值、a的值依次为 。 20. 求变量a、b中最大值的条件表达式为 。

21. 若 a=13、b=25、c=-17,条件表达式 ((y=(a='a'&&s<='z')?s-32:s; 字符变量s的值为 。 23. 整型变量x的值为25,语句\的输出结果为 。 24. 整型变量m的值为27,语句 printf(\的输出结果为 。 25. 语句printf(\的输出结果为 。

26. 若int k=10, 循环语句while (k=0) k=k-1; 执行 次。

27.若int k=2, 循环语句while (k!=0) { printf(\执行 次。 28. 若int i=10,s=0;,执行语句while(s+=i--,--i);后s、i值分别为 。 29. 语句for(int s,i=1;i<=100;s+=i,i++); 能否计算1~100的和?原因是 。 30. 若int类型变量字长为2,程序段 int jc=1; for(int i=2;i<10;i++)jc*=i; 能否计算10的阶乘? 原因是 。

31. 定义a为共有10个元素的静态存储int类型数组的语句为 。 32. 定义a为长度为10的字符串、同时为字符串赋初值\的语句为 。 33. 定义a为共有5个元素的一维整型数组、同时定义p为指向a数组首地址的指针变量的语句为 。

34. 定义a为4行5列的整型数组、同时定义p为指向a数组首地址的指针变量的语句为 。 35. 如定义语句为“char a[]=\”,

2x

2

6 C程序设计习题集

语句\的输出结果为 。 36. 定义语句为 char a[15],b[]=\,则语句 printf(\ 的输出结果为 。

37. 定义 char a[]=\,语句 printf(\输出 。 38. 定义 char a[10]=\,语句\输出结果为 。 39. 定义 char a[]=\,语句 printf(\输出 。 40. 定义 char a[]=\,

执行for(int i=0;*p!='\\0';p++,i++); 后i的值为 。

41. 宏定义 #define f(x,y) printf(x,y) 的引用 f(\置换展开后为 。 42. 宏定义 #define f(x,y) fopen(x,y) 的引用 f(\置换展开后为 。 43. 宏定义 #define f(c) c>='A'&&c<='Z' 的引用 f(x[i]) 置换展开后为 。 44.表达式 3&5、3|5、3||5 的值分别为 、 、 。

45.设 int x=707,表达式 x^x、x|x、~x^x 的值分别为 、 、 。

46.设 int x=0707,表达式 ~x&&x、!x&&x、x>>3&~0的值分别为 、 、 。 47. 函数的参数为int类型时,虚参与实参结合的传递为 。 48. 函数的参数为float类型时,虚参与实参结合的传递为 。 49. 函数的参数为char* 类型时,虚参与实参结合的传递为 。 50. 函数的实参为常量时,虚参与实参结合的传递为 。 51.对下列递归函数,函数调用f(3)的返回值是 。 int f(int n) { return((n==0)?1:f(n-1)+2);}

52.函数f定义如下,调用f(\的返回值为 。 int f(char *s) { int k=0; while(*s) k+=*s++-'0'; return k;}

53. 函数change定义如下,a=10、b=5,执行 change(a,b)后a、b的值分别为 。 void change(int a,int b) { int t=0; t=a; a=b; b=t;}

54. 开辟一个存储n个int数据的内存区、并将内存区首地址送入p(指向int类型的指针变量)的语句为 。

55.释放由p所指向的内存区的语句为 。

56.fp为文件位置指针,将fp移到离当前位置25个字节处的语句为 。

C程序设计习题集 7

3 写输出结果题

1. #include void main()

{ char ch; int k=0;

for(ch='A';ch<'H';ch++,k++) if(k%2==0) printf(\ printf(\

} 输出结果: 2. #include void main( ) { int k=0; char c='A'; do {

switch (c++) {

case 'A': k++; break; case 'B': k--;

case 'C': k+=2; break; case 'D': k=k%2; break; case 'E': k=k*10; break; default: k=k/3; } k++;

} while(c<'G');

printf(\

} 输出结果: 3. #include void main()

{ int a[6]={12,4,17,25,27,16},b[6]={27,13,4,25,23,16},i,j; for(i=0;i<6;i++) {

for(j=0;j<6;j++) if(a[i]==b[j])break; if(j<6) printf(\ }

printf(\

} 输出结果:

4. #include void main()

{ int a[8]={1,0,1,0,1,0,1,0},i;

for(i=2;i<8;i++) a[i]+=a[i-1]+a[i-2]; for(i=0;i<8;i++) printf(\ printf(\

} 输出结果: 5. #include

8 C程序设计习题集

void main()

{ int s=1,t=1,a,n; scanf(\ for(int i=1;i

t=t*10+1; s=s+t; 输入数据:2,4 }

s*=a; printf(\输出结果: }

6. #include

#define PR(x,y) printf(\ void main( )

{ int x=3,y=2,z=1; 输出结果:

PR(\ PR(\ PR(\ } 7. #include void main()

{ int a[5]={2,4,6,9,12},b[6]={2,3,4,6,8,9}; for(int i=0;i<5;i++) for(int j=0;j<6;j++) if(*(a+i)==*(b+j)) printf(\ printf(\

} 输出结果: 8. #include #include

void main() 输出结果: { char str1[]=\ for(int i=0;i<4;i++) { printf(\

str1[i]=' '; str1[strlen(str1)-1]='\\0'; } }

9. #include void main()

{ char a[5][8]; 输出结果: for(int i=0;i<5;i++) for(int j=0;j<8;j++)

if(i==0||i==4) a[i][j]='-'; else a[i][j]=' ';

for(i=1;i<4;i++){ a[i][0]='|'; a[i][5]='|'; } for(i=0;i<5;i++) a[i][6]='\\0'; for(i=0;i<5;i++) printf(\ }

C程序设计习题集 9

10. #include void main()

{ char a[8],temp; int i,j; 输出结果: for(i=0;i<7;i++) a[i]='a'+i;

for(i=0;i<3;i++) { temp=a[0]; for(j=1;j<7;j++) a[j-1]=a[j]; a[6]=temp;a[7]='\\0'; printf(\ } }

11. #include

void main() 输出结果: { int i,j,n;

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

for(j=1;j<=i;j++) printf(\

n=7-2*i; for(j=1;j<=n;j++) printf(\ printf(\ } }

12. #include void main()

{ char a[8],temp; int j,k;

for(j=0;j<7;j++) a[j]='a'+j; 输出结果: a[7]='\\0'; for(j=0;j<3;j++) { temp=a[6]; for(k=6;k>0;k--) a[k]=a[k-1]; a[0]=temp; printf(\

} }

13. #include 输出结果: void print(int,char,int);

void main()

{ print(3,'*',1); print(2,'*',3); print(1,'*',5); print(2,'#',3); print(2,'#',3); } void print(int begin,char pzf,int n) { char a[50];

for(int i=0;i

10 C程序设计习题集

a[begin+i]='\\0'; printf(\ }

14. #include

void main() 运行时输入: 5 –7 3 { int a,b,c,find(int,int,int); scanf(\

printf(\输出结果: } int find(int a,int b,int c) { int u,s,t;

u=((u=(a>b)?a:b)>c)? u:c; t=((t=(a

15. #include

void fun1(int n,int a[][3]) 输出结果: { for(int i=0;i

for(int j=0;j

} void main()

{ int a[3][3]={{6,4,2},{8,6,4},{9,6,3}}; fun1(3,a);

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

for(int j=0;j<3;j++) printf(\ printf(\ } }

16. #include int fun3(int m) { int i;

if(m==2||m==3) return 1; 输出结果: if(m<2||m%2==0) return 0;

for(i=3;i

void main() { int n;

for(n=1;n<10;n++) if(fun3(n)==1) printf(\ }

C程序设计习题集 11

17. #include

void sub(int *a,int *b,int *c,m,n)

{ int i,j; 输出结果: for(i=0;i

for(j=0;j

void main()

{ int i,x[5]={1,5,3,8,4},y[3]={9,-4,6},z[8]; sub(x,y,z,5,3);

for(i=0;i<8;i++) printf(\ printf(\ }

18. #include

void sort(char *a[],int n) 输出结果: { int i,j,l; char *temp; for(i=0;i

if(strcmp(a[j],a[l])<0) l=j;

if(l!=i){ temp=a[i]; a[i]=a[l]; a[l]=temp; } } }

void main()

{ char *name[4]; int k;

char ch[4][15]={\ for(k=0;k<4;k++) name[k]=ch[k]; sort(name,4);

for(k=0;k<4;k++) printf(\ }

19. #include \

void pline(char *a,char c,int l,int n) { int i;

for(i=1;i

{ char a[80];

int i; void (*pf)(char*,char,int,int);

pf=pline;

for(i=1;i<5;i++){ (*pf)(a,'$',5-i,2*i-1); puts(a); } }

12 C程序设计习题集

20. #include \

int binary(int x,int a[],int n) 输出结果: { int low=0,high=n-1,mid; while(low<=high) { mid=(low+high)/2;

if(x>a[mid]) high=mid-1; else if(x

return -1; }

void main( )

{ static int a[]={4,0,2,3,1}; int i,t,j; for(i=1;i<5;i++) { t=a[i]; j=i-1;

while(j>=0 && t>a[j]) { a[j+1]=a[j]; j--; } a[j+1]=t; }

printf (\ }

21. #include

#include 输出结果: void main( )

{ double f(double,int);

printf(\ }

double f(double x,int n) { double t;

if(n==1) t=x;

else { if(n/2*2==n)t=x*f(x,n/2); else t=x*pow(f(x,n/2),2.0); } return t; }

22. #include

double x,u,v 输出结果: double t(double a,double(*f)(double)) { return(*f)(a*a); } double f(double x) { return 2.0*x; } double g(double x) { return 2.0+x; } void main()

C程序设计习题集 13

{ x=4.0;u=t(x,f);v=t(x,g);

printf(\ }

23. #include void main()

{ static struct s1{ char c[4],*s; }; s1={\

static struct s2{char *cp; struct s1 ss1;} s2={\

printf(\输出结果: printf(\ printf(\ printf (\ }

24. #include

struct s1{ char *s; int i; struct s1 *s1p; }; void main()

{ static s1 a[]={{\ int i;

for(i=0;i<2;i++) { 输出结果: printf(\ printf(\ } }

14 C程序设计习题集

4 程序填空题

1. 输入2个整数,输出它们的最小公倍数和最大公约数。 #include void main( )

{ int m,n,gbs,gys;

scanf( ⑴ );

for(gbs=m; ⑵ ; gbs=gbs+m); gys= ⑶

⑷ }

2. 输入N个实数,输出其中的最大值、最小值。 #include void main()

{ float no1,nmax,nmin; ⑴ scanf(\ nmax=no1; ⑵ for(i=2;i<=n;i++) {

scanf(\⑶ );

if(nox>nmax) nmax=nox; ⑷ }

printf(\ }

3. 输入20个数,输出它们的平均值,输出与平均值之差的绝对值为最小的数组元素。 #include ⑴ void main()

{ float a[20],pjz=0,s,t; int i,k; ⑵ for(i=0;i<20;i++) pjz+=a[i]; ⑶ s=fabs(a[0]-pjz); for(i=1;i<20;i++)

if(fabs(a[i]-pjz)

4. 输入若干字符,分别统计数字字符个数、英文字母个数,输入换行符时输出统计结果。 #include void main()

C程序设计习题集 15

{ char ch; ⑴

while(( ⑵ )!='\\n') { if(ch>='0'&&ch<='9') s1++;

if(ch>='a'&&ch<='z' ⑶ ) s2++; }

⑷ }

5. 输入m,求n使 n!<=m<=(n+1)!,例如输入726,应输出n=6。 ⑴ void main()

{ int ⑵ ;

scanf( ⑶ ); for(n=2;jc<=m;n++) jc=jc*n;

printf(\⑷ ); }

6. 下列程序计算并输出方程 X+Y+Z=1989 的所有整数解。 #include void main()

{ ⑴

for(i1=-45;i1<=45;i1++)

for( ⑵ )

for(i3=-45;i3<=45;i3++) if( ⑶ ) printf( ⑷ ,i1,i2,i3); }

7. 下列程序求n(n的值由运行时确定)个正整数的最小公倍数。 #include #include void main()

{ int *p,i,n,gbs; ⑴ p= ⑵ ;

for(i=0;i

l1: for(i=1;i

8. 调用find函数求实参数组中最大值,再调用find函数求实参数组中最小值。 #include void main()

{ float s,a[7]={2,6,3,8,3,12,9},find(float*,int,int); s=find(a,7,1); ⑴

2

2

2

16 C程序设计习题集

⑵ printf(\ }

float find(float *p,int n,int flag) { int i; float t,fh;

if(flag>=0) fh=1; else fh=-1; ⑶ for(i=1;it*fh) t=*(p+i); ⑷ }

9. 对数组按值从大到小的顺序排序后输出。 #include void main()

{ float a[7]={2,6,3,8,3,12,9}; void sort(float*,int); ⑴

for(int i=0;i<7;i++) printf(\ printf(\ }

void sort( ⑵ ) { int i,j,k; float t; for(i=0;i

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

10. 下列程序读入时间将其加1秒后输出,格式为 hh: mm: ss,当小时等于24小时置为0。 #include

struct { int hour, minute, second; } time; void main(void)

{ scanf(\⑴ ); time.second++; if( ⑵ ==60) {

⑶ time.second=0; if(time.minute==60) {

time.hour++; time.minute=0;

if( ⑷ ) time.hour=0; } }

printf (\ }

11. 将编号从⑴到⑾的同学围成一圈,按下列顺序贺卡:⑴、⑶、⑹、⑻、⑾、⑵、⑸、⑺、⑽、⑴、⑷、??,计算至少发到第几张时,每位同学发到的贺卡数同样多。

#include void main()

C程序设计习题集 17

{ int num=1,jg=2,ip=1,i,m[12]; for(i=1;i<12;i++) m[i]=0; while(1) {

m[ip]++; num++; ip+=jg; if(ip>11) ⑴

if(jg==3) jg=2; else ⑵

for(i=2;i<=11;i++) if( ⑶ ) break; if( ⑷ ) break; }

printf (\发到第%d张时每人手中贺卡数一样多\\n\⑸ ); }

12. 下列函数可以对一维数组按值从大到小或从小到大排序。 void sort(float *p,int n,int swich) { int fh,i,j,l; ⑴ if(swich==0) fh=-1; ⑵ ; for(i=0;i

for(j=i+1; ⑶ ;j++) if(*(p+j)*fh> ⑷ ) l=j; t=*(p+i); *(p+i)=*(p+l); *(p+l)=t; } }

13. 下列函数用矩形公式求f(x)在[a,b]的定积分: 先M等份积分区间求得积分近似值,再2M等份求得积分近似值,再4M等份求得积分近似值,??,当两次积分近似值之差的绝对值小于eps时返回计算结果。

float sum(float a,float b,int m,float eps) { float h,s1=0,s2,x; ⑴ while(flag) {

s2=0; x=a; h=(b-a)/m

for(i=1;i<=m;i++) { s2+=(f(x)+f(x+h))*h/2; x=x+h; } ⑵ s1=s2; m=m*2; }

⑶ }

14. 下列函数输出一行字符:先输出kb个空格,再输出n个指定字符(由实参指定)。 #include

void print( ⑴ ) { int i;

for(i=1;i<=kb;i++) ⑵

18 C程序设计习题集

for( ⑶ ) printf(\ ⑷ }

15. 下列函数求任意阶多项式 a0+a1X+a2X+...+anX 的值并返回多项式的值。 float sum( ⑴ ) { float y,t=1; ⑵ y=*a;

for(i=1;i<=n;i++){ ⑶ y+=*(a+i)*t; }

⑷ }

16. 下列函数在n个元素的一维数组中,找出最大值、最小值并传送到调用函数。 #include

void find( ⑴ ) { int k; ⑵ *max=*p; ⑶ for(k=1;k

if( ⑷ ) *max=t;

if(t<*min) *min=t; } }

17. 下列函数用于将任意方阵(行数等于列数的二维数组)转置。

void mt( ⑴ ) 如数组 1 11 -3 -2 { int i,j; float t; 2 3 4 5 for(i=0;i

(a+i*n+j)=*(a+j*n+i); 1 2 7 4 ⑶ 11 3 -4 5 } -3 4 4 6 } -2 5 2 7 18.下列程序读入六个字符串,排序后输出。 #include

void sort(char *a[],int n) { int i,j,l; char *temp; for(i=0;i

2

n

C程序设计习题集 19

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

void main()

{ char *name[6],ch[6][30]; int k; for(k=0;k<6;k++) ⑵

for(k=0;k<6;k++) gets(name[k]); ⑶ for(k=0;k<6;k++) puts(name[k]); }

19.输入若干个学生的姓名、学号、数学、英语、计算机成绩到文件中student.dat。 #include void main()

{ ⑴ char name[8],numb[8]; ⑵ scanf(\⑶ for(i=1;i<=n;i++) {

scanf(\

fprintf(fp,\ }

⑷ ; }

20 C程序设计习题集

5 编程题

1. 编程,统计在所输入的50个实数中有多少个正数、多少个负数、多少个零。

2.一个数如恰好等于它的因子之和,这个数就称为“完数”。编程序找出1000以内的所有完数,并输出其因子(6是一个\完数\,它的因子是1,2,3)。

3. 输入20个整数,输出其中能被数组中其它元素整除的那些数组元素。

4. 输入两个数组(数组元素个数自定),输出在两个数组中都出现的元素(如a[5]={2,3,4,5,6},b[6]={3,5,7,9,10,-1},则输出3、5)。 5. 编写函数,处理n行、n列的二维数组:将每一行的元素同除以该行上绝对值最大的元素。

6. 编写函数,求m行、n列的二维数组全体元素中负数的个数。 7. 编写函数,返回在一个整数组中出现次数最多的数及其出现次数。

8. 编写函数,在n个元素的一维数组中,找出最大值、最小值并传送到调用函数。 9. 编写函数,统计m行n列二维数组中有多少正数、多少个负数,多少个零,并返回统计结果。

10. 编写一个函数print,打印一个学生的成绩数组,该数组中有5个学生的数据记录,每个记录包括num,name,score[3],用主函数输入这些记录,用print函数输出这些记录。

11. 把文本文件d1.dat复制到文本文件d2.dat中,要求仅复制d1.dat中的英文字符。 12. 编程,把文本文件d1.dat复制到d2.dat(其中大写英文字母要转换为小写字母)。 13. 求出1至100之间的素数(只能被1和自身整除的数)并顺序写入文件su.dat。 14.已知顺序文件C.DAT 存放着程序设计基础的考试成绩,每个记录包含学号(8位字符)和成绩(三位整数)两个数据。编程,从文件中读入学生成绩,将大于或等于60分的学生成绩再形成一个新的文件SCORE60.DAT保存在A盘上,并显示出学生总人数(少于1000)、平均成绩和及格人数。

C程序设计习题集 21

C语言程序设计复习题答案

1 单项选择题

1. B 2. D 3. C 4. D 5. B 6. B 7. D 8. A 9. C 10. D 11. B 12. C 13. D 14. A 15. A 16. D 17. C 18. B 19. B 20. A 21. C 22. B 23. D 24. B 25. D 26. C 27. C 28. A 29. A 30. C 31. C 32. D 33. C 34. C 35. A 36. D 37. B 38. D 39. A 40. C 41. B 42. C 43. A 44. C 45. D 46. C 47. A 48. B 49. B 50. A 51. D 52. D 53. C 54. D 55. B 56. B

2 填空题

1. 2.5 2. 16 3. 2 4. 0 5.0 6.sqrt(s*(s-a)*(s-b)*(s-c)) 7. (-b+sqrt(b*b-4*a*c))/2/a 8. p*pow(1+r,5) 9.(x+1)*exp(2*x) 10.ch>='A'&&ch<='Z' 11. abs(n)>9&&abs(n)<100 12. a!=0&&b!=0 13. a==-b 14. a==0&&b!=0||b==0&&a!=0 15. m%2==1&&m/10%2==0

16. 11、11、6 17. 4、4、10、6 18. 18、3、3 19. 20、15 20. (a>b)?a:b 21. –17 22. 'D' 23. 31 24. m=1b 25. small 26. 0 27.2 28. 30、0 29. s未定义初值0 30. jc存放10!字长不够

31. static int a[10]; 32. char a[10]=\34. int a[4][5],*p=a[0]; 35. windows 95 36. windows 95 37. 5 38. 7 39. windows 40. 8

41. printf(\44.1、7、1 45.0、707、-1 46.1、0、56 47. 值传递 48. 值传递 49. 地址传递 50. 值传递 51.7 52.17 53. 10、5 54. p=(int*)malloc(n*sizeof(int)); 55.free(p); 56.fseek(fp,25l,1);

3 写输出结果题

1. A C E G 2. K=8 3. 4 25 27 16 4. 1 0 2 2 5 7 13 20 5. SUM=2468 6. x|y&z=3 、x^y&~z=1、x&y&z=0、!x|x=1、~x|x=-1

22 C程序设计习题集 7. 2 4 6 9

20. 1 21. 256.000000 22. U=32.000v=18.000 23.a,d 24. 0 abc,def e ghi,mno 1 hi,no i

4 程序填空题

1. ⑴ \⑵ gbs%n!=0

⑶ m*n/gbs; ⑷ printf(\ 2. ⑴ int i,n; float nox; ⑵ nmin=no1;

⑶ &nox ⑷ else if(nox ⑵ for(i=0;i<20;i++) scanf(\ ⑶ pjz/=20; t=a[0]; ⑷ printf(\ 4. ⑴ int s1=0,s2=0; ⑵ ch=getchar()

⑶ ||ch>='A'&&ch<='Z' ⑷ prnitf(\

5. ⑴ #include ⑵ m,n,jc=1 ⑶ \⑷ n-2 6. ⑴ int i1,i2,i3 ⑵ i2=-45;i2<=45;i2++ ⑶ i1*i1+i2*i2+i3*i3==1989 ⑷ \ 7. ⑴ scanf(\⑵ (int*)malloc(n*sizeof(int)) ⑶ gbs%*(p+i)!=0 ⑷ goto l1;

8. ⑴ printf(\⑵ s=find(a,7,-1); \也可以改为其它负数 ⑶ t=*p; ⑷ return t; 9. ⑴ sort(a,7); ⑵ float *p,int n ⑶ *(p+j)>*(p+k) ⑷ t=*(p+i);

10. ⑴ &time.hour,&time.minute,&time.second

⑵ time.second ⑶ time.minute++; ⑷ time.hour==24 11. ⑴ ip-=11; ⑵ jg=3; ⑶ m[i]!=m[1] ⑷ i==12 ⑸ num-1 12. ⑴ float t; ⑵ else fh=1 ⑶ j

C程序设计习题集 23

13. ⑴ int i,flag=1; ⑵ if(fabs(s1-s2)

15. ⑴ flaot *a,int n,float x ⑵ int i; ⑶ t=t*x; ⑷ return y; 16. ⑴ float *p,float *max, float *min, int n ⑵ float t; ⑶ *min=*p; ⑷ t>*max

17. ⑴ flaot *a,int n ⑵ j=i+1;j ⑵ name[k]=ch[k]; ⑶ sort(name,6);

19. ⑴ FILE *fp; ⑵ int m,e,c,i,n; ⑶ fp=fopen(\⑷ fclose(fp);

5 编程题参考答案

1.编程,统计在所输入的50个实数中有多少个正数、多少个负数、多少个零。 #include \ #define N 50 void main()

{ float x; unsigned int s1,s2,s3,i; s1=s2=s3=0;

for(i=1;i<=N;i++) {

scanf(\ }

printf(\负数%u个,零%u个,正数%u个\\n\ }

2..编程,找出1000以内的所有完数,并输出其因子。 #include \ void main() { int i,j,s=1;

for(i=1;i<=1000;i++,s=1) {

for(j=2;j<=i/2;j++) if(i%j==0) s+=j; // 求 i的因子和 if(s==i) {

printf(\如果i 是完数则输出其各因子 for(j=2;j<=i/2;j++) if(i%j==0) printf(\ printf(\ } } }

3. 输入一个正整数,输出它的所有质数因子。 #include \ void main() { int m,i=2;

24 C程序设计习题集 printf(\请输入一个整数:\

while(m!=1) if(m%i==0){ printf(\ printf(\ }

4. 输入20个整数,输出其中能被数组中其它元素整除的那些数组元素。 #include \ #define N 20 void main() { int a[N],i,j;

for(i=0;i

if(a[i]%a[j]==0&&i!=j) { printf(\ }

5. 输入两个数组(数组元素个数自定),输出在两个数组中都出现的元素。 #include \ #define NA 6 #define NB 8 void main()

{ float a[NA],b[NB]; int i,j;

for(i=0;i

if(a[i]==b[j]) { printf(\ }

6. 编写函数,处理n行n列维数组:将每一行的元素同除以该行上绝对值最大的元素。 #include \ #include \

void div(float** a,int n) { int i,j; float x; for(i=0;i

for(j=1;jfabs(x)) x=*(*(a+i)+j); for(j=0;j

return; }

void main() // 函数引用示例

{ float b[3][3]={{1,2,3},{4,5,6},{7,8,9}}; int i,j; float* c[3];

for(i=0;i<3;i++) c[i]=b[i]; div(c,3); for(i=0;i<3;i++) {

C程序设计习题集 25

for(j=0;j<3;j++) printf(\ } }

7. 编写函数,求m行、n列的二维数组全体元素中负数的个数。 #include

int sum(float **a,int m,int n) { int i,j; int y=0;

for(i=0;i

void main() // 函数引用示例

{ float b[2][3]={{-1,2,-3},{4,-5,-6}}; int i; float* c[2]; for(i=0;i<2;i++) c[i]=b[i]; printf(\ }

8. 编写函数,返回在一个整数组中出现次数最多的数及其出现次数。 #include

void fun(float *a,int n,int *k,float *x) { int i,j,y; *k=0;

for(i=0;i

for(j=0;j*k) { *k=y; *x=*(a+i); } }

return; }

void main() // 函数引用示例

{ float c[10]={0,4,2,4,3,2,4,-3,1.5,7.6},t; int m;

fun(c,10,&m,&t); // 若说明float *t; int *m; printf(\元素%f出现次数为%d\\n\引用为 fun(c,10,m,t) 将

} // 产生悬挂指针的错误,即t、m不只指向确定的存储单元。 9. 编写函数,在n个元素的一维数组中,找出最大值、最小值并传送到调用函数。 #include

void num(float *b,int n,float *max,float *min) { *max=*b; *min=*b;

for(int i=1;i

if(*(b+i)>*max) *max=*(b+i); if(*(b+i)<*min) *min=*(b+i); }

return; }

void main() // 函数引用示例

{ float a[10]={1,3,4,2,6,7,12,5,9,8},x,y;

26 C程序设计习题集 num(a,10,&x,&y); printf(\最大值为%f,最小值为%f。\\n\ }

10. 编写一个函数,统计m行n列二维数组中有多少个正数、多少负数,多少个零,并返回统计结果。

#include

void sub(float** a,int m,int n,int *fs,int *lin,int *zs) { int i,j; *fs=*lin=*zs=0;

for(i=0;i

else if(*(*(a+i)+j)==0) (*lin)++; else (*zs)++; return; }

void main() // 函数引用示例

{ float b[5][3]={{-1,5,2},{3,0,-2},{0,-3,5},{4,7,-8},{3,4,5}},*c[5]; int i,k1,k2,k3;

for(i=0;i<5;i++) c[i]=b[i]; sub(c,5,3,&k1,&k2,&k3); printf(\负数%d个,零%d个,正数%d个。\\n\ }

11. 编写函数print,打印一个学生的成绩数组,该数组中有若干个学生的数据记录,每个记录包括num,name,score[3]。 #include

struct student { char num[7],name[9];int score[3]; }; // 尾部分号不得遗漏 void print(struct student* s,int n)

{ int i; // 运算符'*'、'&'的优先级均低于运算符'.' for(i=0;i

printf(\ (*(s+i)).score[0],(*(s+i)).score[1],(*(s+i)).score[2]); return; }

void main()

{ struct student t[4]; int i; for(i=0;i<4;i++)

scanf(\ &t[i].score[1],&t[i].score[2]); print(t,4); }

12. 把文本文件d1.dat复制到文本文件d2.dat中,要求仅复制d1.dat中的英文字符。 #include void main()

{ FILE *fpd1,*fpd2; char ch;

C程序设计习题集 27

fpd1=fopen(\ while(fscanf(fpd1,\

if(ch>='A'&&ch<='Z'||ch>='a'&&ch<='z') fprintf(fpd2,\ fclose(fpd1); fclose(fpd2); }

13. 求出1至100之间的素数(只能被1和自身整除的数)并顺序写入文件su.dat。 #include #include void main()

{ FILE *fp; int i,j,k=2;

fp=fopen(\ for(i=5;i<100;i=i+2) {

for(j=3;j<=sqrt(i);j=j+2) if(i%j==0) break;

if(j>sqrt(i)) { fprintf(fp,\ }

fclose(fp); }

14.顺序文件C.DAT每个记录包含学号(8位字符)和成绩(三位整数)两个数据项。从文件读入学生成绩,将大于或等于60分的学生成绩再形成一个新的文件SCORE60.DAT保存在A盘上,并显示出学生总人数、平均成绩和及格人数。 #include #include void main()

{ FILE *fp1,*fp2; char s[9]; int x,zrs=0,pjcj=0,jgrs=0; fp1=fopen(\ fscanf(fp1,\ do {

zrs++; pjcj+=x;

if(x>=60) { jgrs++; fprintf(fp2,\ fscanf(fp1,\ } while(!feof(fp1));

printf(\总人数:%d 平均成绩:%d 及格人数:%d\\n\ fclose(fp1); fclose(fp2); }