C语言题库(31页).doc
-C语言题库-第 31 页一、判断题(每题1分),又可以嵌套调用.( × )2.unsigned 和void 在C 中都是保留字.( ) +i 表示对变量i 自加1. ( )4.C 语言源程序的基本结构单位是main 函数. ( × )1. ( )6.char a='a','b','c'char b="abc"数组a和数组b 占用的内存空间大小不一样. ( )int i=10,,j=2; 则执行完i*=j+8;后i 的值为28. (× )8.int i,*p=&i;是正确的C 说明。( )9.While 循环语句的循环体至少执行一次. ( × )int a22=1,2,3;则a01的值为0. ( )11. 7&3+12的值是15.( × )12. C 语言本身不提供输入输出语句,输入和输出操作是由函数来实现的.( )13. 若 a=3,b=2,c=1 则关系表达式"(a>b)=c" 的值为"真". ( )14. 在C 语言中,整型数据在内存中占2个字节. ( × )15. 对二维数组a 来说,由于a+1与*(a+1)的值相等,因此二者的含义是一样的. (× )16. break 语句可用于循环体内,它将退出该重循环. ( )17. 将一个字符串"abc"赋给字符串变量str 的方法是str="abc". (× )18. 参加位运算的数据可以是任何类型的数。( × )19. C 语言规定:在一个源程序中,main 函数的位置必须在最开始. ( × )20. 静态外部变量只在本文件内可用. ( )21. 若有宏定义:#define S(a,b) t=a;a=b;b=t由于变量t 没定义,所以此宏定义是错误的.( × )22. 字符串只能存放在字符型数组中. ( )23. 若 a=3,b=2,c=1 则关系表达式"(a>b)=c" 的值为"真". ( )24. 在标准C 中,"="是判断两个数是否相等. ( × )25. 函数调用可以出现在执行语句中,但不能出现在表达式中. (× )26. break 语句可用于循环体内,它将退出该重循环. ( )27. strcat(s1,s2)函数是将字符串s1复制到字符串s2中. (× )28. 函数若无返回值,则它一定无形参。( × )29. C 语言是一种结构化程序设计语言. ( )30. 静态外部变量只在本文件内可用. ( )31. 关系运算符<= 与 = 的优先级相同.( × )32. C 语言中的整型常量有3种表示方法. ( )33. C 语言中只能逐个引用数组元素而不能一次引用整个数组. ( )34. char *p="girl"的含义是定义字符型指针变量p,p 的值是字符串"girl". ( × )35. 静态变量和外部变量都是全局变量,它们的存储是静态的. (× )36. 共同体变量所占的内存长度等于最长的成员的长度。 ( )37. 由于主函数首部经常缩写成main(),所以它不可能有形式参数. (× )38. 通过return 语句,函数可以带回一个或一个以上的返回值。( × )39. C 语言俗称"低级语言的高级形式",这说明C 语言的功能不强. ( × )40. 程序进行编译时,不为形式参数分配存储空间. ( )41. C 语言的当型循环是先执行循环后判断条件.( × )42. "+"运算符的优先级比"+"运算符的优先低.( × )43. 指针就是地址,因此一个变量的指针就是该变量的地址. ( )44. 在if 语句中,else 前一个语句可不加"" ( × )45. return 后面括号里的表达式的值即是此函数的值. ( )46.char a='a','b','c'char b="abc"数组a和数组b 占用的内存空间大小不一样. ( )47. 结构体类型只有一种。 (× )48. 在任何情况下,对二维数组的初始化都可以省略第一维的大小。( × )49. 结构化程序设计所规定的三种基本控制结构是顺序、选择、输出. ( × )5int a22=1,2,3;则a01的值为0. ( )二、单项选择题(每题2分)1C语言中运算对象必需是整型的运算符是 (A)A. %B. / C. !D. *2.C程序的执行是从( A )A本程序的main函数开始,到main函数结束B本程序文件的第一个函数开始,到本程序文件的最后一个函数结束C本程序的main函数开始,到本程序文件的最后一个函数结束D本程序文件的第一个函数开始,到本程序main函数结束3.以下选项中,( D )是不正确的 C 语言字符型常量。 A. 'a' B. 'x41' C. '101' D. "a"4. 以下程序的输出结果是( C )A0 B. 1 C. 3 D. 不确定的值 #include<stdio.h>main( ) int x=10, y=3; printf(“%dn”,y=x/y); a 的正确说明是( C )A.int a3 B.float a(3,4)C.double a14 D.float a(3)(4)6.字符串"ABC"在内存占用的字节数是( B )。 A. 3 B. 4 C. 6 D. 8 7下列运算符中优先级最高的运算符是(A)A! B.% C.-= D.&&( A ) A. 1 B. 2 C. 3 D. 4 #include<stdio.h>main( ) int w=4,x=3,y=2,z=1; printf(“%dn”,(w<x?w:z<y?z:x); 9.以下叙述正确的是(D)A.do-while语句构成的循环不能用其他语句构成的循环代替.B.do-while语句构成的循环只能用break语句退出C.用do-while语句构成循环时,只有在while后的表达式为非零时结束循环D.用do-while语句构成循环时,只有在while后的表达式为零时结束循环10.在定义一个结构体变量时,系统分配给它的内存是( D )。B.结构体中最后一个成员所需内存量 C.成员中占内存量最大者所需容量 D.各成员所需内存量的总和,则对a 数组元素地址的正确引用是( C ).int a5,*p=a;A*(p+5) B*p+2C*(a+2) D*&a512.下列定义不正确的是( C )。A B#define S 345Cint max(x,y); int x,y; Dstatic char c;C 语言中,形参的缺省存储类是( A )。Aauto BregisterCstatic Dextern14以下函数调用语句中实参的个数是( A ).exce(v1,v2),(v3,v4,v5),v6);A3 B4 C5D615. 以下描述中,正确的是( C )A预处理是指完成宏替换和文件包含中指定的文件的调用B预处理指令只能位于C 源文件的开始CC 源程序中凡是行首以#标识的控制行都是预处理指令D预处理就是完成C编译程序对C源程序第一遍扫描,为编译词法和语法分析作准备16以下字符中不是转义字符的是( C )A.a B.b C.c D.17. C 语言程序中必须有的函数是( B )18有定义:int a=8,b=5,c;, 执行语句c=a/b+0.4;后,c 的值为 ()AB1CD219. 以下程序的输出结果是( D )Ai=2,j=1,k=3 B. i=1,j=1,k=2 C. i=4,j=2,k=4D. i=1,j=1,k=3 #include<stdio.h>main( )int i,j,k,a=3,b=2;i=(-a=b+)?-a:+b;j=a+;k=b;printf("i=%d,j=%d,k=%dn",i,j,k);20. 下列选项中正确的语句组是( D )。A.char s8; s="Beijing"B.char *s; s="Beijing"C.char s8; s="Beijing"D.char *s; s="Beijing"21. 若已定义x 为int 类型变量,下列语句中说明指针变量p 的正确语句是().Aint p=&x;Bint *p=x;Cint *p=&x;D*p=*x;22sizeof(float)是().A一种函数调用B一个不合法的表达式C一个整型表达式D一个浮点表达式23. 已知year 为整型变量,不能使表达式(year%4=0&&year%100!=0)|year%400=0的值为"真"的数据是().A1990B1992C1996D200024. 下面有关for 循环的正确描述是 ( D )A.for 循环只能用于循环次数已经确定的情况B.for 循环是先执行循环体语句,后判断表达式C.在for 循环中,不能用break 语句跳出循环体D.for 循环的循环体语句中,可以包含多条语句,但必须用花括号括起来25. 在位运算中,操作数每右移一位,其结果相当于().A操作数乘以2B操作数除以2C操作数乘以16D操作数除以1626. 以下能对二维数组a 进行正确初始化的语句是()。Aint a2=1,0,1,5,2,3;Bint a3=1,2,3,4,5,6;Cint a24=1,2,3,4,5,6;Dint a3=1,0,1,1,1;27. C 语言中的文件的存储方式有()。A只能顺序存取B只能随机存取(或直接存取)C可以顺序存取,也可随机存取D只能从文件的开头进行存取28. 以下只有在使用时才为该类型变量分配内存的存储类说明是()。Aauto 和 static Bauto 和 registerCregister 和 static D.extern 和 register29关于return 语句,下列正确的说法是( C ).A在主函数和其他函数中均可出现B必须在每个函数中出现C可以在同一个函数中出现多次D只能在除主函数之外的函数中出现一次30. 以下叙述中不正确的是().A预处理命令行都必须以#号开始B在程序中凡是以#号开始的语句行都是预处理命令行CC 程序在执行过程中对预处理命令行进行处理D以下是正确的宏定义 #defineIBM_PC31一个C语言程序是由(C)组成的。 A主程序 B子程序 C函数 D过程32判断char型变量c1是否为小写字母的最简单且正确的表达式为(D)。 A. 'a'<=c1<='z' B. (c1>=a)&&(c1<=z) C. ('a'<=c1)|('z'>=c1) D. (c1>='a')&&(c1<='z')33为了判断两个字符串s1和s2是否相等,应当使用(D)。 A. if (s1=s2) B. if (s1=s2) C. if (strcpy(s1,s2) D. if( strcmp(s1,s2) = 0 )34. 设a,b都是int型变量,则表达式:(a=2,b=5,a>b? a+ : b+ ,a+b)的值为(B)。A. 7 B. 8 C. 9 D. 235. 设x、y和t均为int型变量,则以下语句:t=x; x=y; y=t;的功能是(D)。A. 把x和y按从大到小排列 B. 把x和y按从小到大排列C. 无确定结果 D. 交换x和y中的值36. 下面标识符中,合法的用户标识符为(D)。A.37. 循环语句while(!E);中的表达式!E等价于(C)。A. E!0 B. E!1 C. E0 D. E138. 设有以下语句,则( A ) 不是对a数组元素的正确引用,其中0i<10。 int a10 = 0,1,2,3,4,5,6,7,8,9; int *p = a; 供选择的答案是: A. ap-5 B. *(&ai) C. pi D. *(a+i)39. 若用数组名作为函数调用的实参,传递给形参的是 (A)。40. 在一个文件中定义的全局变量的作用域为(D)。 A.本程序的全部范围; B.本文件的全部范围; C.函数内的全部范围; D.从定义该变量的位置开始到文件结束。 41. 以下语句中,指针s所指字符串的长度为(A)。 char *s=”HellotWorldn”; A13 B12 C14 D1042若调用一个函数,且此函数中没有return语句,则正确的说法是:该函数(D)。A没有返回值 B返回若干个系统默认值C能返回一个用户所希望的函数值 D返回一个不确定的值43. 以下只有在使用时才为该类型变量分配内存的存储类说明是()。Aauto 和 static Bauto 和 registerCregister 和 static D.extern 和 register44关于return 语句,下列正确的说法是( C ).A在主函数和其他函数中均可出现B必须在每个函数中出现C可以在同一个函数中出现多次D只能在除主函数之外的函数中出现一次45. 设有下列程序段,则scanf函数调用语句中对结构体变量成员的不正确引用为( B )。struct student char name20; int age; char sex;stu5, *p;p=stu; A. scanf("%s", stu0.name); B. scanf("%d", p->age); C. scanf("%c", &(p->sex); D. scanf("%d", &stu0.age);46若x、y、j 和k 都是int 型变量,则计算表达式x=( k=32,j=6, i=4)后,x 的值为( C )。A4 B.16 C.32 D.5247 C 语言中标识符只能由字母、数字和下划线组成,且第一个字符(B)。A.必须为字母 B.必须为字母或下划线C.必须为下划线 D.可以是字母、数字和下划线中任一种字符48在C 语言中,引用数组元素时,其数组下标的数据类型允许是( C )。A.整型常量 B.整型表达式C.整型常量或整型表达式 D.任何类型的表达式49. 执行下列语句后的输出为( A )。int j=-1;if(j<=1) printf("*n");else printf("%n");A.* B.% C.%c D.有错,执行不正确50. 以下各选项企图说明一种新的类型名,其中正确的是( C )。Atypedef v1 int; Btypedef v2=int;Ctypedef int v3; Dtypedef v4: int;51. 先用语句定义字符型变量c,然后要将字符a 赋给c,则下列语句中正确的是( A ).A.c='a' B.c="a" C.c="97" D.C='97'52. 用户定义的函数不可以调用的函数是( C )。A.非整型返回值的B.本文件外的C.main 函数D.本函数下面定义的53. 与实际参数为实型数组名相对应的形式参数不可以定义为(C).A.float a;B.float *a;C.float a;D.float (*a)3;54. 下列程序段的输出结果为(C).int a=7,b=9,t;t=a*=a>b?a:b;printf("%d",t);A.7B.9C.63D.4955. 若有int *p=(int *)malloc(sizeof(int);则向内存申请到内存空间存入整数123的语句为(A)。A.scanf("%d",p);B.scanf("%d",&p);C.scanf("%d",*p);D.scanf("%d",*p);56. 以下描述中正确的是().A.由于 do-while 循环中循环体语句只能是一条可执行语句,所以循环体内不能使用复合语句B.do-while 循环由do 开始,用while 结束,在 while(表达式)后面不能写分号C.在 do-while 循环体中,一定要有能使while 后面表达式的值变为零("假")的操作D.do-while 循环中,根据情况可以省略while57在位运算中,操作数每左移一位,其结果相当于(A)。A操作数乘以2B操作数除以2C操作数除以4D操作数乘以458. 以下只有在使用时才为该类型变量分配内存的存储类说明是()。Aauto 和 static Bauto 和 registerCregister 和 static D.extern 和 register59若char a10;已正确定义,以下语句中不能从键盘上给a 数组的所有元素输入值的语句是(D).Agets(a); Bscanf("%s",a);Cfor(i=0;i<10;i+)ai=getchar(); Da=getchar();60. 设有下列程序段,则scanf函数调用语句中对结构体变量成员的不正确引用为( B )。struct student char name20; int age; char sex;stu5, *p;p=stu; A. scanf("%s", stu0.name); B. scanf("%d", p->age); C. scanf("%c", &(p->sex); D. scanf("%d", &stu0.age);61以下标识符中,不能作为合法的C 用户定义标识符的是( C ).62. 以下数组定义中不正确的是( D ).A.int a23; B.int b3=0,1,2,3;C.int c100100=0; D.int d3=1,2,1,2,3,1,2,3,4;63. 设有说明:char w;int x;float y;double z;则表达式w*x+z-y值的数据类型为( D )。Afloat Bchar Cint Ddouble64. 下列各m 的值中, 能使m%3=2&&m%5=3&&m%7=2为真的是( B )。A8 B23 C17 D665. 以下正确的说法是:在C 语言中( A ).A:实参和与其对应的形参各占用独立的存储单元B:实参和与其对应的形参共占用一个存储单元C:只有当实参和与其对应的形参同名时才共占用存储单元D:形参是虚拟的,不占用存储单元66. 经过以下语句定义后, 表达式z+=x>y?+x:+y 的值为( C ).int x=1,y=2,z=3;A2 B3 C6 D567若有说明: int a4=0,0;则下面不正确的叙述是(D).A.数组a 的每个元素都可得到初值0B.二维数组a 的第一维大小为1C.因为二维数组a 中第二维大小的值除经初值个数的商为1,故数组a 的行数为1D.有元素a00和a01可得到初值0,其余元素均得不到初值068. 以下对枚举类型名的定义中正确的是(B)。A.enum a=sum,mon,tue;B.enum a sum=9,mon=-1,tue;C.enum a="sum","mon","tue"D.enum a "sum","mon","tue"69. putchar 函数可以向终端输出一个(D)。A.整型变量表达式值B.实型变量值C.字符串D.字符或字符型变量值70.在定义一个结构体变量时,系统分配给它的内存是( D )。B.结构体中最后一个成员所需内存量 C.成员中占内存量最大者所需容量 D.各成员所需内存量的总和7,则对a 数组元素地址的正确引用是( C ).int a5,*p=a;A*(p+5) B*p+2C*(a+2) D*&a572. 若a=1,b=2则 a|b 的值是(D)。A0B1C2D373. 为了避免在嵌套的条件语句 if-else 中产生二义性,C 语言规定:else 子句总是与( B )配对。A缩排位置相同的if B其之前最近的ifC其之后最近的if D同一行上的if74下列说法不正确的是(A)A主函数main 中定义的变量在整个文件或程序中有效B不同函数中,可以使用相同名字的变量C形式参数是局部变量D在一个函数内部,可以在复合语句中定义变量,这些变量只在复合语句中有效75. 以下描述中,正确的是( C )A预处理是指完成宏替换和文件包含中指定的文件的调用B预处理指令只能位于C 源文件的开始CC 源程序中凡是行首以#标识的控制行都是预处理指令D预处理就是完成C编译程序对C源程序第一遍扫描,为编译词法和语法分析作准备三、程序填空题(每题8分)1. 利用全局变量计算长方体的体积及三个面的面积。int s1,s2,s3;int vs(int a,int b,int c) int v; v= (1) ;s1=a*b;s2=(2) ;s3=a*c;return v;#include<stdio.h>main()int v,l,w,h;clrscr();printf("ninput length,width and height: ");scanf("%d%d%d", (3) ,&w,&h);v= (4) ;printf("v=%d s1=%d s2=%ds3=%dn",v,s1,s2,s3);getch();答案:(1)a*b*c (2)b*c (3)&l (4)vs(l,w,h)2. 以下程序的功能是用冒泡法对数组a 进行由小到大的排序。void fun(int a,int n)int i,j,t;for (j=0; (1) ;j+)for (i=0; (2) ;i+)if( (3) )t=ai;ai=ai+1;ai+1=t;#include<stdio.h>main()int i,a10=3,7,5,1,2,8,6,4,10,9; (4) ;for(i=0;i<10;i+)printf("%3d",ai);答案:(1) j<=n-1 (2) i<n -1-j (3) ai>a i + 1 (4) fun(a,10)3. 输入a,b,c三个值,输出其中最大者。#include <stdio.h>int main()int a,b,c,max; printf("please input a,b,c:n"); scanf("%d,%d,%d",(1) ); (2) if (max<b) max=b; if ((3) ) max=c; printf("The largest number is %dn", (4) ); return 0;答案:(1)&a,&b,&c (2)max=a; (3)max<c (4)max4. 以下程序的功能是用选择法对10个整数进行由小到大的排序。#include <stdio.h>int main()int i,j,min,temp,a11; printf("enter data:n"); for (i=1;i<=10;i+) printf("a%d=",i); scanf("%d",(1) ); printf("n"); printf("The orginal numbers:n"); for (i=1;i<=10;i+) printf("%5d",ai); printf("n"); for (i=1;i<=9;i+) (2) for ((3) ;j<=10;j+)if (amin>aj) min=j; temp=ai; ai=amin; amin=temp; printf("nThe sorted numbers:n"); for (i=1;i<=10;i+) printf("%5d",(4) ); printf("n"); return 0;答案:(1) &ai (2) min=i; (3) j=i+1 (4) ai5. 要将“China”译成密码,密码规律是:用原来的字母后面第4个字母代替原来的字母。例如,字母“A”后面第4个字母是“E”,用“E”代替“A”。因此,“China”应译为”Glmre”。 #include <stdio.h>int main()char c1=(1) ,c2='h',c3='i',c4='n',c5='a' c1=(2) ; c2=(3) ; c3=(4) ; c4=(5) ; c5=(6) ; printf("password is %c%c%c%c%cn",c1,c2,c3,c4,c5); putchar(c1);putchar(c2);(7) ;putchar(c4);(8) ;putchar('n'); return 0;答案:(1)'C'(2)c1+4 (3)c2+4 (4)c3+4 (5) c4+4 (6)c5+4 (7)putchar(c3) (8)putchar(c5)6. 给出一个百分制成绩,要求输出成绩等级A,B,C,D,E。90分以上为A,8089为B,7079为C6069为D,60分以下为E。#include <stdio.h>int main() float score; char grade; printf("请输入学生成绩:"); scanf("%f",&score); while (1) )printf("n 输入有误,请重输");scanf("%f",&score); switch(2) ) case 10:case 9: grade='A'break;case 8: grade='B'break;case 7: grade='C'break;case 6: grade='D'break;(3) printf("成绩是 %5.1f,相应的等级是%cn ",score,grade);return 0;答案:(1) score>100|score<0 (2) (int)(score/10) (3) case 5:case 4:case 3:case 2:case 1:case 0: grade='E'7. 要将“China”译成密码,密码规律是:用原来的字母前面第4个字母代替原来的字母。例如,字母E用A 代替, Z 用U代替, 字母D用Z 代替,字母C用Y 代替, B 用X代替,A 用W代替。 #include <stdio.h>int main()char c1= ,c2='h',c3='i',c4='n',c5='a' c1=(1) ; c2=c2-4 ; c3=(2) ; c4=(3) ; c5=(4) ; printf("password is %c%c%c%c%cn",c1,c2,c3,c4,c5); return 0;答案:(1)c1+22 (2)c3-4 (3) c4-4 (4)c5+22 8. 输入4个整数,要求按由小到大顺序输出。#include <stdio.h>int main() int t,a,b,c,d; printf("请输入四个数:"); scanf("%d,%d,%d,%d",&a,&b,&c,&d); printf("a=%d,b=%d,c=%d,d=%dn",a,b,c,d); if (a>b) (1) if (a>c) t=a;a=c;c=t; if (a>d) (2) if (b>c) t=b;b=c;c=t; if (b>d) (3) if ((4) ) t=c;c=d;d=t; printf("排序结果如下: n"); printf("%d %d %d %d n" ,a,b,c,d); return 0;答案:(1) t=a;a=b;b=t; (2) t=a;a=d;d=t; (3) t=b;b=d;d=t;(4)c>d9. 下面的程序用来求出所有的水仙花数。所谓水仙花数是指一个3位数,它的各位数字的立方和恰好等于它本身。#include <stdio.h>int main() int i,j,k,n; printf("parcissus numbers are "); for (n=100;(1) ;n+) i=n/100; (2) ; k=(3) ; if ((4) ) printf("%d ",n); printf("n"); return 0;答案:(1)n<1000 (2)j=n/10-i*10 (3)n%10 (4)n=i*i*i + j*j*j + k*k*k10. 以下程序的功能是:从键盘上输入若干个学生的成绩(用输入负数结束输入),统计出平均成绩,并输出低于平均分的学生成绩。请填空。#include "stdio.h"main() int n=0,i; float x1000,sum=0.0,ave,a;printf("Enter ma