资源描述
C语言程序设计复习题一、 判断题(本大题共60个小题)1. C程序执行的入口是main()函数,所以main函数必须放在程序的开头。(B)2. 定义一个函数包括数据说明部分和执行语句部分,两者可以交叉出现。(B)3. 注释内容太多会影响程序的执行效率。(B)4. 变量要“先定义,后使用”。(A)5. 字符常量a与字符串常量a没有区别。(B)6. 数学公式y=-6xz+52(a-5)+3写成C语言表达式是y=-6*x*z+5*2*(a-5)+3。(B)7. 数学公式y=|x|+ab-c写成C语言表达式是y=fabs(x)+a*b-c。(A)8. 表达式5/2+5.0/2+7%6 的值为5.5。(A)9. 设int b=7;float a=2.5,c=4.7;则表达式 a+(int)(b/2*(int)(a+c)/2)%4 的值为:4.5。(B)10. 设int a=12; 则表达式a/=a+a的值是0.5。(B)11. 在C语言中,运算符!比&的优先级高。(A)12. 在C语言中,运算符的优先级最小的是逗号运算符。(A)13. scanf(%d,%d,&x,&y);的输入格式:3,4。(A)14. 以下程序运行结果是:1,7,0 (A)void main() int x=1,y=1,z=10; if(z 0) x=3; else x=5; printf( %d, ,x); if(z=y 0) x=3; else if(y=0) x=5; else x=7; printf( %d,%d ,x,z); 15. 该程序运行结果是:BCother (A)void main() char x=B; switch(x) case A: printf(“A”); case B: printf(“B”); case C: printf(“C”); default: printf(“other”); 16. 下面程序段运行时输出结果是a=2,b=8 (B)void main() int x=1,y=1,a=2,b=7;switch(x) case 1: switch(y) case 0: a+;break; case 1: b+;break; case 2: a+;b+;break;case 3: a+;b+;printf(a=%d,b=%dn,a,b);17. 下面程序,当输入为:abc? 时,执行结果是:abc (A)void main() char c; c=getchar(); while (c!=? ) putchar(c); c=getchar(); 18. 该程序运行结果是: # (A)void main() int i; for(i=1;i=5;i+) if(i%2) putchar(); putchar(#); 19. break语句可用于循环语句和if语句中。(B)20. continue语句不可用于循环语句中。(B)21. 以下程序的功能是判断一个数是否是素数 (A)#include#include void main( ) int m,i; scanf( %d ,& m); for(i=2;i sqrt(m) printf(“%d 是素数 ,m); else printf(“%d 不是素数 ,m); 22. 以下程序的功能是计算2+4+6+8+.+98+100。(B)void main() int i,s ; for(i=2;i =100;i+=2 ) s+=i; (注意s的初始值)23. 数组的下标是从1开始计数的。(B)24. 若有int s4=1,2,3,4;,则ss0+2*s2-s3的值是4。(A)25. 下面程序段运行时输出结果是:0 15 24 (A)void main() int i=0,a10; for(i=0;i =9;i+) ai=i*3; printf( %d %d %d ,a0,a5,a8); 26. 下面程序段运行时输出结果是: 1 0 3 3 4 5 6 6 (B)void main() int a8=1,0,1,0,1,0,1,0,i; for(i=2;i 8;i+) ai+= ai-1 + ai-2; for(i=0;i 8;i+) printf(“%d ”,ai); 27. 以下程序的功能是:将一个数组中的元素按逆序重新存放并打印交换后的数组。(A) #define N 7 #include void main() static int aN=12,9,16,5,7,2,1,k,s; for (k=0;k N/2;k+) s=ak; ak=aN-1-k; aN-1-k =s; printf( n交换后的数组:n ); for(k=0;k N;k+)printf( %4d ,ak); 28. 若有定义int a35;则排列在数组中的第9个元素是a13。(A)29. 下面程序段运行时输出结果是:456 (B)void main() int a3= 1,2,3,4,5,6,7,8,9,i,k=2; for(i=0;i0 。(A)34. 以下程序的功能是:字符串a连接到字符串b,并显示字符串b。(B)void main() char a200=”how are you.”, b200; int i=0; while(ai != 0 ) bi=ai; i+; bi= 0 ; printf(“新字符串是%s”,b); 35. 当运行以下程序时,从键盘输入:AAAaaaAAA Abcd234abc AAaa,运行结果为:AaaAAAaaa。void main() char s80, c=a; int i=0; scanf(%s,s); (注意scanf遇到空格的处理,与gets的不同) while(si+!=0) if(si = c) si=si-32; else if(si=c-32) si=si+32; puts(s); (A)36. 下面程序段运行时输出结果是:6 (B)void main() int *p,a=5,b=1; p=& a; *p=10; a=*p+b; printf(“%d”,a); 37. 下面程序段运行时输出结果是:135 (A)void main() int a23=1,3,5,7,9,11; int m,*ptr; ptr=& a01;m=(*ptr)*(*(ptr+1)*(*(ptr+3); printf( %d ,m); 38. 下面程序段运行时输出结果是: -5, -12, -7(A)void sub(int x,int y,int *z) *z=y-x; void main() int a,b,c;sub(10,5,&a); sub(7,a,&b); sub(a,b,&c); printf(%4d,%4d,%4dn,a,b,c); 39. 下面程序段运行时输出结果是:4 (A)fun(char *s) char *p=s; while (*p) p+; return(p-s);void main() char *str=abcd; int i; i=fun(str); printf(%d,i);40. int *f();表示函数返回一个整型指针。(A)41. 下面程序段运行时输出结果是:0,0 1,3 (B)f() int x=0; static int y=0; printf( %d,%d ,x,y); x+; y=y+3; void main() int i; for(i=0;i 2;i+) f(); 42. 下面程序段运行时输出结果是2 (A)int f(int n) int s; if(n=1|n=2) s=1; else s=n-f(n-1); return s; void main() printf(“%d”,f(3);43. 下面程序段运行时输出结果是7 (B)void fun(int x,int y,int z) z=x+y; void main() int a=3; fun(5,2,a); printf(%d,a); 44. 在定义函数时,函数名后面的括号中的变量名称为实参。(B)45. 为了保证被调用函数不返回任何值,其函数定义的类型应为 void 。(A)46. 若定义的函数没有参数,则函数名后的圆括号可以省略。(B)47. 函数的实参和形参可以是相同的名字。(A)48. 函数调用中,形参与实参的类型和个数必须保持一致。(A)49. 函数的函数体可以是空语句。(A)50. 在调用一个函数的过程中又出现直接或间接调用该函数本身,称为函数的递归调用。(A)51. 在函数内定义的变量是局部变量,在函数外定义的变量是外部变量。外部变量是全局变量。(A)52. 变量的存储类别有 自动型 、 静态型 、 寄存器型 、和 外部类型 共4种,它们分别用 auto 、 static 、 register 、 extern 标识。(A)53. 对10个数进行从小到大排序。要求排序在函数sort内完成,用起泡算法。main函数内进行数据输入、调用排序函数sort、并输出排序后的数据。判断以下程序是否正确: (B)void sort(int a,int n) int i,j,k; for ( i=0; i n-1; i+) for ( j=0; j aj+1) k=aj;aj=aj+1;aj+1=k; void main( ) int a10, i, j, k; for ( i=0 ; i 10 ; i+) scanf( %d , & ai) ; printf( n ) ; sort(a10,10); (注意数组作函数参数)for (i=0; i 10; i+) printf(“%d, ,ai); 54. 预处理命令#include的作用是文件包含 。55. 结构体的成员不能是结构体变量。(A)56. “按位与”运算指两个运算数相应的二进制位中只要有一个为1,则该位结果值为1,比如0|0=0,1|0=1。(B)57. C语言库函数fgets(str,n,fp)的功能是从文件fp中读取n个字符串存入str指向的内存。(B)58. 函数rewind的作用是使位置指针自动移至下一个字符位置。(B)59. 函数fseek的作用是使位置指针移至第一个字符位置。(B)60. C语言中以w+方式打开文件后,可执行的文件操作是可任意读写。(B)二、 单项选择题 (本大题共45个小题)61. 一个C语言程序总是从 B 开始执行。A. 主过程 B. 主函数 C. 子程序 D.主程序 62. 下面四个选项中,均是不合法的用户标识符的选项是 C 。. BA 、x_0、do . float、1a0、_Y. x-y、goto、123 . _123、tmp、CHAR63. C语言中,int型数据在内存中的存储形式是 D 。A. ASCII码 B.原码 C.反码 D.补码64. 下列属于C语言合法的字符常量的是 C 。A. 85 B. “n” C. t D.“0”65. 下面正确的字符串常量是 C 。.a . 376 .n .37666. 不合法的常量是: D 。A. 2B. C. 3D. 48367. 字符串123的长度是 B 。A. 11 B. 7 C. 5 D. 368. 存储字符串abc376需要的字节数是 D 。.11 .13 .)6 .)769. 表达式A+4*25.0-b的正确结果是 B 。. 67 . 67.0 . 不确定 . 67L70. 下面哪个式子在a为奇数时结果为假 C 。.a%2=1 . !(a%2=0) . !(a%2) . a%271. 若x是int型变量,y是float型变量,所用的scanf调用语句格式为: scanf(x=%d,%f,&x,&y);则为了将数据10和66.6分别赋给x和y,正确的输入应是: A 。A. x=10,66.6 B. 10 66.6C. 1066.6 D. x=1066.672. w=4,x=3,y=2,z=1,则条件表达式wx?w:yz?y:z的结果为 D 。A. 4 B. 3 C. 2 D. 173. 能表示条件0x100的表达式是 D 。. 0=x=0,x=0&x=0&ch=0&ch=0|ch=975. 分析以下程序, 下列说法正确的是 D 。void main() int x=0,a=0,b=0;if(x=a+b) printf(ttttn);else printf(kkkkn);A. 有语法错,不能通过编译 B. 通过编译,但不能连接C. 输出tttt D. 输出kkkk76. 程序段如下,则以下说法中正确的是: B 。int k=-5;while(k=0) k=k+1;A. while循环执行5次 B. 循环体语句一次也不执行C. 循环是无限循环 D. 循环体语句执行一次77. 下述for循环语句 B 。int i,k;for(i=0,k=-1;k=2;i+,k+) printf(* * * *);A. 判断循环结束的条件非法 B. 是无限循环C. 只循环一次 D. 一次也不循环78. 下列程序段执行后k值为 A 。int k=0,i,j;for(i=0;i5;i+)for(j=0;j3;j+) k=k+1 ;A. 15 B. 3 C. 5 D. 879. 以下关于数组的描述正确的是 C 。A. 数组的大小是固定的,但可以有不同的类型的数组元素。B. 数组的大小是可变的,但所有数组元素的类型必须相同。C. 数组的大小是固定的,但所有数组元素的类型必须相同。D. 数组的大小是可变的,但可以有不同的类型的数组元素。80. 在c语言中引用数组元素时,其数组下标的数据类型允许是 C 。A整型常量 B.整型表达式C整型常量或整型表达式 D.任何类型的表达式81. 对以下说明语句的正确理解是 B 。 int a10=6,7,8,9,10;A将5个初值依次赋给a1至a5B将5个初值依次赋给a0至a4C将5个初值依次赋给a6至a10D因为数组长度与初值的个数不相同,所以此语句不正确82. 在执行int a3=1,2,3,4,5,6;语句后,a11的值是 D 。A. 4 B. 1 C. 2 D. 583. 对于类型相同的两个指针变量之间,不能进行的运算是 C 。A. B. =C. +D. -84. 以下不能正确赋值的是 A 。A. char s110;s1=test; B. char s2=t,e,s,tC. char s320= test; D. char s44= t,e,s,t85. 对字符串Boy进行完整赋值的操作是 B 。Achar s3 = B,o,y; B. char s = Boy;Cchar s3 = Boy;D.char s3; s=Boy;86. 在C语言程序中,以下描述正确的是 B 。A. 函数的定义可以嵌套,但函数的调用不可以嵌套B. 函数的定义不可以嵌套,但函数的调用可以嵌套C. 函数的定义和函数的调用均不可以嵌套D. 函数的定义和函数的调用均可以嵌套87. 以下函数调用语句中实参的个数为 A 。exce(v1,v2),(v3,v4,v5),v6);A. 3B. 4C. 5D. 688. 下述函数定义形式正确的是 C 。A. int f(int x; int y)B. int f(int x,y)C. int f(int x, int y)D. int f(x,y: int)89. 关于函数参数,说法正确的是 A 。A. 实参与其对应的形参各自占用独立的内存单元B. 实参与其对应的形参共同占用一个内存单元C. 只有当实参和形参同名时才占用同一个内存单元D. 形参是虚拟的,不占用内存单元 90. 一个函数的返回值由 D 确定。A. return语句中的表达式B. 调用函数的类型C. 系统默认的类型D. 被调用函数的类型91. 当调用函数时,实参是一个数组名,则向函数传送的是_B_。A数组的长度 B.数组的首地址C数组每一个元素的地址 D.数组每个元素中的值92. 若有以下说明:int a10=1,2,3,4,5,6,7,8,9,10 ,*p=a ;则数值为3 的表达式是 C 。A. *p+3 B. *(p+3) C. *p+=2 D. p+293. 下面程序用于输出数组中的最大值,则程序段中空白处应是 A 。void main() int a5=3,2,5,6,4,*p,*s;for(p=a,s=a;p-a10;p+) if( ) s=p;printf(“max is %d”,*s);A. *s*p B. sp C.asp-s94. 设有如下的程序段:char str =“china ;char *ptr ;ptr=str ;执行上面的程序段后 ,*(ptr+5)的值为 B 。A. o B. 0 C. 不确定的值 D. o的地址95. 以下程序输出结果为 A 。main() char *str=zhao,qian,sun,li; int i; for (i=0;i data.aD.p.data.a101. C语言可以处理的文件类型是 B 。A. 文本文件和数据文件 B. 文本文件和二进制文件C. 数据文件和二进制文件 D. 数据代码文件102. 如果要打开C盘file文件夹下的abc.dat文件,fopen函数中第一个参数应为 D 。A. c:fileabc.datB. c:fileabc.datC. c:fileabc.dat D. c:fileabc.dat103. 若想对文本文件只进行读操作,打开此文件的方式为 A 。ArB.WC.aD.r+104. 在C程序中,可把整型数以二进制形式存放到文件中的函数是 C 。A.fprintf函数 B.fread函数 C.fwrite函数 D.fputc函数105. 打开文件,操作完毕后用 C 函数关闭它。A.fopenB.openC.fcloseD.close三、 编程题(本大题共1016个小题)106. 求200到800之间所有能被3整除但不能被7整除的数的和。答:#include void main() int i,sum=0; for(i=200;i=800;i+) if(i%3=0&i%7!=0) sum=sum+i; printf(TheVsumVis: %dn,sum);107. 输入一百分制成绩,要求输出成绩等级A,B,C,D,E。90分及以上为A ,80-89分为B,70-79分为C,60-69分为D,60分以下为E。 答:#include void main( ) int score,temp; char grade; scanf(%d,&score); if (score100)|(score0) printf(ndata errorn); else if(score= =100) temp=9; else temp=score/10; switch (temp) case 9 : grade=A;break; case 8 : grade=B;break; case 7: grade=C;break; case 6: grade=D ; break; case 5: case 4: case 3: case 2: case 1: case 0: grade=E ; printf(%d,%cn, score,grade); 108. 输入任意十个数,打印出它们中的最大数、最小数。答:#include void main( ) int i, k,min,max;scanf(%d,&k);i=1;max=min=k;for(i=2;i=10;i+) scanf(%d,&k);if(maxk) min=k;printf(最大:%dn,max);printf(最小:%dn, min); 109. 输入一行字符,统计其中的英文字母、数字、空格和其他字符个数。答:#include void main( ) int n1,n2,n3,n4;char c;n1=n2=n3=n4=0;c=getchar();while(c!=n) if(c=a&c=A&c=0&c=9) n2+;else if(c= ) n3+;else n4+;c=getchar(); /why?printf(%d %d %d %dn,n1,n2,n3,n4);110. 求1!+2!+3!+100!。答:#include void main()int i;double t,s;i=1;t=i; s=t;for(i=2;i=100;i+) t=t*i s+=t; printf(%ld ,s);111. 打印如下7行7列的左直角三角形:答:#include void main( ) int i,j; for (i=1;i=7;i+) for (j=1;j=i;j+) printf ( *); printf(n); 112. 打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数, 其各位数字立方和等于该数本身。例如 153是一个水仙花数,因为 153。答:方法1:#include void main( ) int i,k1,k2,k3; for (i=100;i=999;i+) k1=i%10; k2=i/10%10; k3=i/100; if (i=k1*k1*k1+k2*k2*k2+k3*k3*k3) printf(%d=%d3+%d3+%d3n,i,k1,k2,k3); 方 法 2#include void main( ) int k1,k2,k3,i; for (k1=1;k1=9;k1+) for (k2=0;k2=9;k2+) for (k3=0;k3=9;k3+) i=k1*100+k2*10+k3; if (i=k1*k1*k1+k2*k2*k2+k3*k3*k3) printf(%d=%d3+%d3+%d3n,i,k1,k2,k3); 有10个地区的面积,要求对它们按由小到大的顺序排列(采用起泡法排序)。113. 有10个地区的面积,要求对它们按由小到大的顺序排列(采用起泡法排序)。答:#include void main( )int a10; int i,j,t;printf(input 10 numbers :n);for (i=0;i10;i+) scanf(%d,&ai); printf(n);for(j=0;j9;j+)for(i=0;iai+1) t=ai;ai=ai+1;ai+1=t;printf(the sorted numbers :n);for(i=0;i10;i+) printf(%d ,ai);printf(n);114. 已知5个整数,已经由大到小排好序,现输入一个数,将其插入到该数组适当位置,使其仍然有序。答:#include void main( ) int a6=20,15,12,8,6;int i,k=9;if(k=0;i-)if(kai)ai+1=ai;else break;ai+1=k;for (i=0;i6;i+)printf(%d ,ai);115. 有一行文字,要求删去某一个字符。此行文字和要删去的字符均由键盘输入,要删去的字符以字符形式输入(如输入 a表示要删去所有的 a字符)。答:#include void main() char str1100,str2100;char ch;int i=0,k=0;while (str1i=getchar()!=n) i+;str1i=0;scanf(%c,&ch);for (i=0;str1i!=0;i+) if (str1i!=ch) str2k=str1i; k+; str2k=0;printf(n%sn,str2);116. 有一个 34的矩阵,编程求出其中值最大的那个元素的值,以及其所在的行号和列号。答:#include void main() int a34,i,j,max,x,y; for (i=0;i3;i+)for(j=0;j4;j+) scanf(“%d”,&aij); max=a00;x=y=0; for (i=0;i3;i+)for(j=0;j4;j+) if (maxaij) max=aij;x=i;y=j;117. 任意输入10个学生4门课成绩,求每门课的最高分,放入一个一维数组中,并输出每个学生成绩和每门课的最高分。答:#include void main() int a410,b4,i,j; for(i=0;i4;i+) for(j=0;j10;j+) scanf(%d,&aij); for(i=0;i4;i+) bi=ai0; for(j=1;j10;j+) if(biaij) bi=aij; for(i=0;i4;i+) for(j=0;j10;j+) printf(%5d,aij); printf( max=%5dn,bi); 118. 有10个整数的数组中找出最小的数与最后一个交换。要求:编写函数实现上述交换功能,在main()函数里进行数据输入、函数调用并打印。答:#include #define N 10void f(int a,int n) int i, t, j=0, min=a0; for(i=1;i=n-1;i+) if(aimin) min=ai;j=i; t=an-1; an-1=aj; aj=t;void main() int aN,i; for(i=0;iN;i+) scanf(%d,&ai); f(a,N); for(i=0;iN;i+) printf(%5d,ai); 119. 输入N个数到数组中,输出所有大于N个数平均值的数。要求:定义函数average,计算N个数的平均值用函数实现;在主函数main中输入任意10个数,调用average,输出大于平均值的数。答:#include #define N 10float average(float s,int n) int i;float sum=0; for(i=0;in;i+)sum+=si; return sum/n; void main()float aN,avr; int i; for(i=0;iN;i+)scanf(“%f”,&ai); avr=average(a,N); for(i=0;iavr) printf(“%f”,&ai); 120. 打印出1-100之间的全部素数(要求编写两个函数,一个命名为prime,用于判断一个数是否是素数,另一个是main函数,在main函数中调用该函数实现打印1-100之间的全部素数)。答:int prime(int m) int i; for(i=2;im;i+) if(m%i=0) return 0; return 1;void main()int i;for(i=2;i100;i+)if(prime(i) printf( %d ,i);121. 编一函数mystrcat,将两个字符串连接起来(即实现字符串连接函数strcat()的功能)。在main函数内实现对该函数的调用,即输入任意两个字符串,调用该函数,并把连接后的字符串输出。答:#include void mystrcat (char a,char b)int i,j;for(i=0;ai!=0;i+);for(j=0;bj!=0;j+)ai+=bj;ai=0;void main()char a80,b30;gets(a);gets(b);mystrcat (a,b); puts(a);puts(b);共22页,第22页
展开阅读全文