9299.net
大学生考试网 让学习变简单
当前位置:首页 >> 农学 >>

C语言程序设计复习练习题

C语言程序设计复习练习题


C 语言程序设计复习/练习题
说明: ★本套练习题仅仅反映考试的题型,只作为考前的复习和参考。 ★这些题目基本涵盖了课程的基本知识和重点内容。要利用好这些题目,关键 不能靠死记硬背,而是透过题目掌握其涉及的知识点和程序所涉及的重要算法。 一、单选题
1. C 程序的基本构成单位是 A)文件 B)命令 C)函数 D)语句 【 B)字符常量 C)变量 D)函数 【 】 】 【 】

2. 在 C 语言中,'a'是 A)字符串常量

3. 在 C 语言中,“a=b=c=5”属于哪种表达式? A)关系 B)赋值 C)逻辑 D)非法

4. 设 a、b 为整型,则表达式(a=2,b=5,b++,a+b)的值是 A)2 B)6 C)7 D)8





5. 若有以下变量定义: int b=2; float a=5; 则表达式“a/b”之值为 A)2.5 B)2 C)3 D)5/2 【 】 【 】

6. 若 j=3,则表达式(++j)+(j++)的值为 A)6 B)7 C)8 D)10

7. 以下只能输入单个字符的函数是 A)printf( ) B)puts( ) C)getchar( ) D)putchar( )





8. 若 a 的原值为 4,则表达式“a*=a-=3”运算后,a 的值是 A)13 B)4 C)3 D)1 【





9. 若 a=5、b=3、c=1,则表达式“a>b>c”的值为 A)0 B)1 C)3 D)5



10. 若有代数式:

3a e bc
以下错误的 C 语言表达式是 A)a/b/c*e*3 B)3*a*e/b/c C)3*a*e/b*c D)a*e/c/b*3 【 】

11. 下列能输出字符数组 str 中字符串的语句是 A)printf("%c",str[0]); C)printf("%s",str[]); B)printf("%s",str); D)putchar(str); 【 D)*x==p 【 B)整型、实型、字符型 】 】

12. 若 p=&x,则下列关系表达式之值为 1 的是 A)p==x B)*p==x C)&p==x

13. C 语言中最基本的数据类型包括 A)整型、实型、逻辑型



C)整型、逻辑型、字符型

D)整型、实型、字符串型 【 】

14. C 语言中,要求运算对象必须是整型数据的运算符是 A)% B)/ C)\ D)&&

15. 表示数学关系“x≥y≥z”的 C 语言表达式是 A)x>=y>=z B)x>=y || y>=z C)x>=y&&y>=z D)x≥y≥z





16. 以下说法中正确的是 A)C 程序总是从文件中第一个函数开始执行 B)C 程序中,只有 main( )函数才可以调用其他函数 C)C 程序总是从 main( )函数开始执行 D)C 程序中的 main( )函数必须放在程序的开头 17. 若有定义: int a=7; float x=2.5,y=4.7; 则表达式 x+a%3*(int)(x+y)%2/4 的值为 A)2.5 B)2.75 C)3.5 D)0









18. 设变量 a 是整型,f 是实型,i 是双精度型,则表达式 10+'a'+i*f 值的数据类型为 A)int 19. 有输入语句: scanf("%d,%d",&a,&b); 为使变量 a、b 分别为 5 和 3,从键盘输入数据的正确形式为 A)5 3<回车> B)5,3<回车> C)a=5 b=3<回车> B)float C)double D)不确定





【 D)a=5,b=3<回车>



20. 定义如下变量和数组: int j; int x[3][3]={1,2,3,4,5,6,7,8,9}; 则下面语句的输出结果是 for(j=2; j>=0; j--) printf("%2d",x[j][2-j]); A)1 5 9 B)1 4 7 C)7 5 3 D)3 6 9 【 】 21. 执行下面程序后,a 的值是 #define SQR(x) x*x void main( ) { int a=10,k=2,m=1; a=SQR(k+m); printf("%d\n",a); } A)10 B)5 C)2 D)1 【 】 22. 以下叙述不正确的是 A)在函数内部定义的变量是局部变量






B)函数中的形式参数是局部变量 C)全局变量的作用范围仅限于其所在的整个文件 D)局部变量的作用范围仅限于本函数 23. 设 a=3,b=4,c=2,d=1,则表达式“a>b?a:c>d?c:d”的值为 A)4 B)3 C)2 D)1 【 】

24. 有以下程序段: x=-1; do x=x*x; while(!x); 执行时,循环体执行的次数为 A)0 B)1 C)2 D)不确定 【 】 【 】

25. 以下不正确的 if 语句形式是 A)if(x>y&&x!=y); B)if(x==y) x+=y; C)if(x!=y) scanf("%d",&x) else scanf("%d",&y); D)if(x<y) {x++;y++;} 26. 以下程序的输出结果是 void main( ) { int x=2,y=-1,z=2; if(x<y) if(y<0) z=0;





else z+=1; printf("%d\n",z); } A)0 B)1 C)2 D)3 【 】 27. 以下能正确计算 1×2×3×…×10 的程序段是 A) i=1,s=1; do {s=s*i;i++;} while(i<11); C) for(i=1,s=0;i<=10;i++) s=s*i; D)for(i=1,s=1;;i++) s=s*i; 【 】 B) s=1;i=1; while(i<=10) s=s*(++i);

28. 若 j 为整型变量,则以下循环执行次数是 for(j=0;j==0;) A)无限次 printf("%d",j--); B)0 次 C)1 次 D)2 次 【

29. 若有说明:int a[10];则对 a 数组元素的正确引用是




A)a[3.5]

B)a(8)

C)a[6-5]

D)a[10] 【 】

30. C 语言规定,变量做实参时,它和对应形参之间的数据传递方式是 A)地址传递 B)单向值传递 C)双向值传递 D)由用户指定传递方式

31. C 中,一个 float 类型的数据在内存中占用的字节数是 A) 1 32. 设有程序段: int k=5; while (k<=0) k--; 则下列描述中正确的是 A) while 循环执行 5 次 C) 循环语句一次也不执行 33. 下面程序段的运行结果是 char c[5]={ 'a', 'b', '\0', 'c', '\0' }; printf(“%s”, c); A) 'a''b' B) ab C) Abc D) "abc" 34. 以下不正确的字符串赋值语句是 A) char *s; s="abcde"; C) char s[10]; s="abcde"; B) char s[ ]="abcde"; D) char *s="abcde"; B) 循环是无限循环 D) 循环体语句执行一次 【 B) 2 C) 4 D) 8















35. 设 p1、p2 是指向 int 型一维数组的指针变量,k 为 int 型变量,以下错误的语句是 A) k=*p1+*p2; B) p2=k; C) p1=p2; D) k=p2-p1; 36. 下面程序的输出结果是 void main( ) { char s[ ]= "ABCD"; char *p; for (p=s;p<s+4;p++) printf(“%s\n”, p); } A) ABCD BCD CD D B) A B C D C) D C B A D) ABCD ABC AB A

【 【

】 】

37. 以下关于 C 函数的定义和调用描述正确的是 A) 函数的定义可以嵌套,但函数的调用不可嵌套 B) 函数的调用可以嵌套,但函数的定义不可嵌套 C) 函数的定义和调用均可以嵌套 D) 函数的定义和调用均不可嵌套 38. 以下关于变量的作用域说法正确的是 A) 在不同函数中不能使用相同名字变量











B) 在函数外部定义的变量只在本函数范围内有效 C) 在函数内的复合语句定义的变量在本函数内有效 D) 形式参数是局部变量 39. 以下关于变量的作用域叙述不正确的是 A) 在函数内部定义的变量是局部变量 B) 函数中的形式参数是局部变量 C) 全局变量的作用范围仅限于其所在的文件 D) 局部变量的作用范围仅限于本函数 40. 以下关于 C 函数参数说法不正确的是 A) 实参可以是常量、变量和表达式 B) 形参可以是常量、变量和表达式 C) 实参可以为任意数据类型 D) 形参应与对应的实参类型一致 41. 以下关于 C 函数返回值的叙述正确的是 A) 被调函数中只有使用 return 语句才能返回主调函数 B) 使用一个 return 语句可以返回多个函数值 C) 函数返回值类型取决于 return 语句中的表达式类型 D) 函数返回值类型取决于定义该函数时所指定的类型 42. 在 C 中,“a>b>c”属于哪种表达式? A) 关系 B) 赋值 C) 逻辑 D) 非法 【 C) ++5 D) x!=y 】 【 】 【 】 【 】 【 】

43. 以下不合法的 C 表达式是 A) 10 || 8 B) 12==9+1

44. 给定以下程序段: int n=10; while (n>6) { n--; printf(“%3d”,n); } 以上程序段输出结果是 A) 10 9 8 B) 9 8 7 C) 10 9 8 7 D) 9 8 7 6 【 】 【 】

45. 若 i,j 已定义为 int 型,则以下程序段中内循环总的执行次数是 for (i=5; i>0; i--) for (j=1; j<6; j++) {……} A) 30 B) 24 C) 25 D) 20

46. 若已定义:float *p, m=3.14159; 则使 p 指向 m 正确的赋值语句是 A) p=m; B) p=&m; C) *p=m; D) *p=&m;





47. 若已定义:char s[10]; 则下面表达式中不能作为 s[1]地址的是






A) s++

B) s+1

C) &s[0]+1

D) &s[1] 【 】

48. 已知:int a=3, b=5, t; 要将 a 和 b 中的数值进行交换,错误的程序段是 .. A. a=a+b; b=a-b; a=a-b; C. t=a; b=a; a=t; B. t=a; a=b; b=t; D. t=b; b=a; a=t;

49. 关于 C 程序中的#include <math.h>,错误的描述是 .. A. 它是 C 语言的预编译命令 C. 用于将 math.h 包含进来 50. 下列 C 程序段的输出结果是 int a=0; switch(a) { case 0: printf(“a=0”); case 1: printf(“a=1”); default: printf(“default”); } A. a=0 B. a=0default C. a=0a=1default D. default B. 在程序中该行尾部不需要分号 D. math.h 是一个函数









51. 已知:int a, x, y; 有语法错误的 C 语句是 .. A. while(x) y++; B. while(x+y=0) a++; C. while(x<y); D. while(y=5) ++x;





52. 对于 do … while( )语句,错误的说法是 .. A. 用条件控制循环体的重复执行 C. 循环体有可能一次也不执行 B. 循环体至少要执行一次 D. 循环体中可以包含若干条语句





53. 已知:int a, x, y; 有语法错误的 C 语句是 .. A. while(x) y++; B. while(x+y=0) a++; C. while(x<y); D. while(y=5) ++x;





54. 已知:int a[5], *ip=a; 利用 ip 为数组元素 a[4]赋值的正确 C 语句是 A. scanf(“%d”, ip+3); C. scanf(“%d”, *(ip+3)); B. scanf(“%d”, ip+4); D. scanf(“%d”, *(ip+4));





55. 对于 C 语句:char *a[2]={“abcd”, “ABCD”}; 叙述正确的是 A. a 是指针变量 二、填空题 1. 函数是 C 程序的基本构成单位,C 程序总是从________开始执行的。 2. 赋值表达式 x*=y+5 的另一种书写形式为__________。 3. 已知 a=10,b=20,c=3,则表达式 a>b || c 的值为_________。 4. 整数 m 既能被 3 整除又能被 4 整除的逻辑表达式为__________。 B. a 是指针数组 C. a 是数组指针 D. a 是字符串





5. 若有定义:double a[10][5]; 则数组 a 中行下标最大值为____,列下标最大值为____。 6. 若有定义:int a[ ]={1,4,6,5,8,9}; 则 *(a+5) 的值为__________。 7. 设有如下定义 int a[5][6],*p; 取数组元素 a[4][2]的地址放到 p 中的语句为_________。



8. 未加特别说明(说明为静态的)的全局变量是外部的,能被其它文件中的函数使用,而在引用 它的文件中,需要用关键字_________说明。 9. 已知 a=10,b=20,则表达式!a>b 的值为___________。 10. 写出 0<x<1 的 C 逻辑表达式________。 11. 写出判断字符变量 c 所存字符是否为字母的逻辑表达式 12. 实现变量 a 和 b 交换的语句或语句序列是 。 。

13. 若有定义:int a[10],*p=a; 则元素 a[5]的值用 p 表示的形式是__________。 14. 若有定义:int *p[4]; 则标识符 p 表示_________。 15. 凡是函数中未指定存储类型的局部变量,其默认的存储类型为__________。

三、程序填空
1. 下面程序的功能是:从键盘输入一个字符,若是大写字母,则转换为小写字母并输出,若为小 写字母则直接输出,请在_____处填上合适内容,使程序完整。 include <stdio.h> void main( ) { char ch; ch=getchar( ); if (_______________) ch+=32; printf(“%c”, ch); } 2. 下面程序的功能是:求 1~100 间的偶数和,请在_____处填上合适内容,使程序完整。 #include <stdio.h> void main( ) { int num, sum=0; for (num=2; num<=100; num=num+2) ________________; printf("1-100 间的偶数和是:%d\n", sum); } 3. 下面程序段是求 n!的递归函数,请将函数补充完整。 double fac(int n) { double result; if (n= =1) result=1; else result=____________; _____________; } 4. 以下程序的功能是:输入一整数 n,判断是否为素数。 #include <stdio.h> void main( ) { int i, n;



scanf(“%d”,&n); for (i=2; __________; i++) if (n%i==0) break; if (_________) printf(“%d is a prime number.\n”, n); else printf(“%d is not a prime number.\n”, n); } 5. 如下程序实现字符串逆序 #include <stdio.h> #include <string.h> void main() { char *p1, *p2, c, s[50]; scanf(“%s”, s); p1=s; p2=s+strlen(s)-1; for(; { ; } printf(“The new string is %s\n”, s); } ; p1++, p2--)

四、阅读程序
1. include <stdio.h> void main( ) { char ch; int cnt1=0,cnt2=0; while ((ch=getchar( ))!='\n') if (ch>='a'&&ch<='z') cnt1++; else cnt2++; printf("COUNT=%d\n",cnt1); } 若输入“This is a C program.”,运行结果:_____________________ 2. #include <stdio.h> void main( ) { int i, j, temp; int a[]={0,1,2,3,4,5,6,7,8,9}; for(i=0, j=9; i<j; i++, j--) {temp=a[i]; a[i]=a[j]; a[j]=temp;}


for(j=0; j<10; j++) printf("%2d", a[j]); } 运行结果:____________________________ 3. #include <string.h> #include <stdio.h> void main( ) { char str1[]="good",str2[]="morning"; int i, j; for(i=strlen(str1),j=0;str2[j]!='\0'; i++, j++) str1[i]=str2[j]; str1[i]='\0'; printf("string1=%s",str1); } 运行结果:___________________________ 4. #include <stdio.h> void main( ) { int i, j, pos; float val, a[10]; for(i=0; i<10 ;i++) scanf("%f", &a[i]); val=a[0]; for(j=0; j<10; j++) if (a[j]>val) {val=a[j]; pos=j;} printf("Max=%f,position:%d", val, pos); } 本程序的功能是:_______________________________ 5. #include <stdio.h> float average(int x[], int n) { int i; float sum=0; for(i=0;i<n;i++) sum+=x[i]; return(sum/n); } void main( ) { int a[5]={2,4,6,8,10};


float rst; rst=average(a,5); printf("result=%f\n",rst); } 运行结果:____________________________ 6. 给定如下程序: #include <stdio.h> void main( ) { char grade; scanf(“%c”, &grade); switch (grade) { case 'A': printf("85—100\n"); break; case 'B': printf("70—84\n"); break; case 'C': printf("60—69\n"); break; case 'D': printf("<60\n"); break; default: printf("error\n"); } } 当程序运行时,从键盘输入“b”,输出的结果是:___________。 7. 给定如下程序: #include <stdio.h> void main( ) { int a[5]={2,5,3,7,6}, i, j, t; for (i=0; i<4; i++) for (j=0; j<4-i; j++) if (a[j]>a[j+1]) { t=a[j]; a[j]=a[j+1]; a[j+1]=t; } for (i=0; i<5; i++) printf(“%3d”, a[i]); } 该程序的功能是:_________________。 输出的结果为:___________________。 8. 给定如下程序: #include <stdio.h> void fun( ) { auto int b=0; static int c=4; b++; c++;
10

priintf("b=%d c=%d\n", b, c); } void main( ) { int i; for (i=0; i<3; i++) fun( ); } 运行结果是____________。 9. 给定如下程序: #include <stdio.h> #include <string.h> void main() { char *p1, *p2, c, s[50];

gets(s); p1=s; p2=s+strlen(s)-1; for(; p1<p2; p1++, p2--) { c=*p1; *p1=*p2; *p2=c; } printf(“The new string is %s\n”, s); } 此程序的功能是:____________。 10. 给定如下程序: #include <stdio.h> void main() { int len(char *p);

int length; char str[80]; gets(str); length=len(str); printf(“LEN=%d\n”, length); } int len(char *p) { int n=0; while(*p) { } n++; p++;

11

return(n); } 此程序的功能是:_________________

五、程序改错(要求:不得增加或删除语句,在括号中指出错误并在其后横线上更正。)
1.下列程序用来求任意两整数的最大公约数,其中两处有误,请指出错误所在并将其更正。 #include <stdio.h> void main( ) { int temp,m,n,x; printf("Enter two numbers:\n"); scanf("%d,%d",&m,&n); if (m<n) temp=m;m=n;n=temp; for(x=n; x>1; x--) if (m%x==0&&n%x==0) continue; printf("\n 最大公约数为:%d",x); }

( (

) )

2.下列程序用“起泡法”对输入的 10 个字符按由大到小排序,其中 5 处有误,请将程序改正。 #include <stdio.h> void main( ) { void sort(char [], int); char str[10],*p=str; int i; printf("输入 10 个字符:\n"); scanf("%s",&str); sort(*p,10); printf("排序结果:\n"); for(;p<str+10;) printf("%c", p++); } void sort(char a[], int m); { int i, j; char c; for(i=1; i<m; i++) for(j=0; j<m; j++) if(a[j]<a[j+1]) c=a[j], a[j]=a[j+1], a[j+1]=c;

12

} ( ( ( ( ( ) ) ) ) )

六、按要求编程
1. 编写 0~100 之间偶数之和的程序。 2. 编程计算 1!+2!+3!+…+20!。 3. 统计由键盘输入的任意一串字符中空格的个数。 4. 编写程序找出 1—100 之间的素数,并统计素数的个数。 5. 打印杨辉三角形(10 行)。要求:使用二维数组和循环语句实现。 1 1 1 1 …… 6. 从键盘输入 10 个数,找出最大值与最小值,并计算它们的平均值。 7. 写一个函数求两个整数的最大公约数,函数原型为:int gongyue(int m, int n),在主函数中从 键盘输入两个整数,然后调用 gongyue 函数,并输出结果。 8. 写一个函数对任意长度的字符串按由大到小排序,函数原型为:void sort(char str[]),在主函数 中输入字符串,然后调用 sort 函数,并输出排序结果。 9. 已知 Fibonacci 数列的前两项为 1,其后各项为前两项之和。用递归函数输出此数列的前 20 项, 每行输出 10 个数。 10. 使用指针将键盘输入的任意字符串进行逆序并输出。 1 2 3 1 3 1

13


推荐相关:
网站首页 | 网站地图
All rights reserved Powered by 大学生考试网 9299.net
文档资料库内容来自网络,如有侵犯请联系客服。zhit325@qq.com