C语言自测练习
一.单项选择题
1.为了避免嵌套的条件语句if-else的二义性,C语言规定:else与( B )配对。
A.缩进位置相同的if B.其之前最近的if C.其之后最近的if D.同一行上的if 2.已知:int y;执行语句y=5%3;则变量y的结果是( A )。 A.2 B.-2 C.1 D.-1
3.具有相同类型的指针变量与数组a,不能进行的操作是( D )。
A.p=a; B.*p=a[0]; C.p=&a[0]; D.p=&a; 4.用于函数返回值的语句是( A )。
A.return B.continue C.break D.printf 5.设int m=1,n=2;则m++==n的结果是( A )。 A.0 B.1 C.2 D.3 6.设int a=2,b=2;则++a+b的结果是( D )。 A.2 B.3 C.4 D.5 7.已知:int a,b;用语句scanf(“%d%d”,&a,&b);输入a,b的值时,不能作为输入数据分隔符的是( A )。 A., B.空格 C.回车 D.Tab
8.凡在函数中未指定存储类别的变量,其隐含的存储类别为( A )。 A.auto B.static C.extern D.register 9.若对函数类型未加显示说明,则函数的隐含类型是( C )。 A.void B.double C.int D.char 10.在int a[5]={1,3,5};语句中,数组元素a[1]的值是( C )。 A.1 B.0 C.3 D.5 11.已知int a=3,*p=&a;则*p的值是( D )。
A.变量a的地址值 B.无意义 C.变量p的地址值 D.3 12.已知struct { int i; char c; float a; }test;则sizeof(test)的值是( D )。 A.4 B.5 C.6 D.7 注:在vc++6.0中,test的存储宽度为12字节。 C语言中合法的变量名是( B )。
A.2x B.x_1 C.double D.x*2 14.数学表达式x≤y≤z,C语言中的正确表达式是( D )。
A.x<=y<=z B.x<=y,y<=z C.x<=y||y<=z D.!(x>y)&&y<=z 15.下面实型常量的错误形式是( D )。
A.-253.000 B.-253. C.0.253e3 D.2.53e+3.5 16.已知int i=3,j;j=++i;则i和j的值分别为( B )。
A.i=3,j=4 B.i=4,j=4 C.i=4,j=3 D.i=3,j=3 17.下列表达式的值为0的是( C )。
A.3%5 B.3/5.0 C.3/5 D.3<5
18.执行scanf(“%c%c”,&a,&b);语句使变量a、b分别为'A'和'B',正确输入是( A )。 A.AB<回车> B.A B<回车 C.A,B<回车> D.A<回车>B<回车> 19.C语言程序由函数组成,它的( B )。
A.主函数必须在其它函数之前,函数内可以嵌套定义函数 B.主函数可以在其它函数之后,函数内不可以嵌套定义函数 C.主函数必须在其它函数之前,函数内不可以嵌套定义函数 D.主函数必须在其它函数之后,函数内可以嵌套定义函数
20.为程序输入数据,而打开文本文件file1,正确的函数调用是( B )。
A.fopen(“file1”,“r”) B.fopen(“file1”,“w”) C.fopen(“file1”,“rb”) D.fopen(“file1”,“wb”) 21.已知int x=1;表达式!(x>0) ? x+1 : x-1的结果为( B )。 A.1 B.0 C.2 D.x<0
2
22.ax+bx+c的C语言表达式是( C )。
A.ax*x+bx+c B.a×x×x+b×x+c C.a*x*x+b*x+c D.a·x·x+b·x+c
23.循环for(i=1;i<=100;i++) { if(i>10) break; printf(“*”);};输出的*号个数是( C )。 A.100 B.101 C.10 D.11
24.在调用函数时,实参和形参都是简单变量,它们之间的数据传递方式是( B )。 A.双向地址传递 B.单向值传递 C.由用户决定 D.由实参传递给形参,也可以由形参传递给实参 25.下面定义语句中错误的是( C )。
A.int a[ ]={1,2}; B.char *p=”CHINA”; C.int n=5,a[n]; D.int x=’A’; 26.定义二维数组a[3][4]中,其中元素a[1][2]的地址为( D )。 A.a B.a[0] C.a[1] D.a[1]+2 27.有如下程序,其输出结果是( A )。
#include
{ int x=1,a=0,b=0; switch(x) { case 0: b++; case 1: a++;
case 2: a++;b++;};
printf(“a=%d,b=%d\\n”,a,b);}
A.a=2,b=1 B.a=1,b=1 C.a=1,b=0 D.a=2,b=2 28.下面对C语言正确的描述是( B )。
A.写程序时,大小写字母没有区别 B.源程序经编译连接后,可生成可执行文件 C.每个语句和数据定义的最后可以没有分号
D.语言允许直接访问物理地址,可以进行位运算,它属于低级语言 29.下列选项中不是C语句的是( A )。
A.++t B.; C.k=i=j; D.{a/=b=1;b=a%2;} 30.以下程序的输出是( C )。
#include
31.设x和y均为int变量,语句组x+=y;y=x-y;x-=y;的功能是( D )。 A.把x和y按从大到小排列 B.把x和y按从小到大排列 C.无确定结果 D.交换x和y中的值 32.以下程序的输出是( A )。 #include
float a=38.4,b=6.4,x; x=m/2+n*a/b+1/2; printf(“%f\\n”,x);}
A.27.000000 B.27.500000 C.28.000000 D.28.500000 33.在下列选项中,没有构成死循环的程序段是( C )。
A.int i=100;while(1){ i=i0+1; if(i>100) break;} B.for(; ;); C.int k=0;do{++k;}while(--k>0); D.int s=36;while(s);--s;
34.以下while循环不断输出读入的字符,当读入回车换行符时结束循环。正确的程序段是( D )。 A.while(ch=getchar()==’\\N’) B.while((ch=getchar())==’\\n’) C.while((ch=getchar()!=’\\N’) D.while((ch=getchar())!=’\\n’) 35.若以下对fun的调用是正确的:x=fun(fun(a,b,c),(a+b,a+c),a+b+c);则fun函数的形参个数为(A)。 A.3 B.4 C.5 D.6 36.以下叙述中正确的是( C )。
A.在函数中必须要有return语句 B.函数中可以有多个return语句,但只执行其中的一个 C.return语句中必须要有一个表达式 D.函数值并不总是通过return语句传回调用处 37.以下正确的定义语句是( B )。
A.int n=5,a[n][n]; B.int a[][3]={{1,2,},{3,4},{5,6}}; C.int a[][3]; D.int a[][]={{1,2,},{3,4},{5,6}};
38.在程序运行时某局部变量始终占据固定的存储单元,其存储类别应该是( C )。 A.auto B.register C.static D.extern 39.C语言规定,标识符的第一个字母必须是( D )。
A.字母 B.数字 C.下划线 D.字母或下划线 40.下面不正确的字符常量是( A )。 A.“c” B.‘Y’ C.‘w’ D.‘9’
41.下面4组选项中,均是正确的八进制或十六进制的选项是( C )。 A.016 B.0abc C.010 D.0a12 0x8f 017 -0x11 7ff 018 0xa 0x16 -123 42.下面程序段的输出结果是( A )。
int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a; printf(“%d\\n”,*(p+2)); A.3 B.4 C.1 D.2
43.C语言允许函数值类型缺省定义,此时该函数值隐含的类型是( B )。 A.float B.int C.void D.double 44.若二维数组a有m列,则在a[i][j]之前的元素个数为( B )。 A.j*m+i B.i*m+j C.j*m+i+1 D.i*m+j+1
45.若要用fopen函数打开一个新的二进制文件,该文件要既能读也能写,则文件方式字符串应是(B)。 A.“ab+” B.“wb+” C.“rb+” D.“ab”
46.若i,j已定义为int类型,则以下程序段中内循环体的总的执行次数是( A )。 for(i=5;i;i--) for(j=0;j<4;j++) {??}
A.20 B.24 C.25 D.30 47.在以下一组运算符中,优先级别最高的是( C )。 A.<= B.= C.% D.&& 48.以下叙述中正确的是( D )。
A.构成C程序的基本单位是函数 B.可以在一个函数中定义另一个函数
C.main函数必须放在其他函数之前 D.所有被调函数一定要在调用之前进行定义 49.以下程序运行市,若从键盘输入:10 20 30<回车>,输出的结果是( C )。 #include
{ int i=0,j=0,k=0;
scanf(“%d%*d%d”,&i,&j,&k); printf(“%d %d %d\\n”,i,j,k); }
A.10 20 30 B.10 0 20 C.10 30 0 D.10 30 30 50.若执行以下程序时,从键盘上输入9<回车>,输出结果是( B )。 #include
scanf(“%d”,&n); if(n++<10)
printf(“%d\\n”,n); else
printf(“%d\\n”,n--); }
A.11 B.10 C.9 D.8 51.以下程序运行后的输出结果是( D )。 #include
int i=1,j=2,k=3;
if(i++==1&&(++j==3||k++=3)) printf(“%d %d %d\\n”,i,j,k); }
A.1 2 3 B.2 3 4 C.2 2 3 D.2 3 3 52.下面程序运行后的输出结果是( C )。 #include
{ int a=5,b=4,c=6,d=0;
printf(“%d\\n”,d=a>b?(a>c?a:c):(b)); } A.5 B.4 C.6 D.0 53.下面程序运行后的输出结果是( D )。 #include
{ int p[7]={11,13,14,15,16,17,18},i=0,k=0; while(i<7&&p[i]%2) { k=k+p[i];i++;}
printf(“%d\\n”,k); }
A.58 B.56 C.45 D.24 54.以下能正确定义一维数组的是( C )。
A.int a[5]={0,1,2,3,4,5}; B.char a[]={0,1,2,3,4,5}; C.char a={‘A’,‘B’,‘C’}; D.int a[5]=”0123”; 55.已有定义:int n=2,*p=&n,*q=p;以下非法的赋值语句是( D )。 A.p=q; B.*p=*q; C.n=*q; D.p=n; 56.下面程序运行后的输出结果是( A )。 #include
i=f(4+4)/f(2+2);
printf(“%d\\n”,i); }
A.28 B.22 C.16 D.4 57.C语言中的简单数据类型包括( B )。
A.整型、实型、逻辑型 B.整型、实型、字符型
C.整型、字符型、逻辑型 D.整型、实型、字符型、逻辑型 58.已知int i=5;执行语句i+=i;后i的值是( A )。
A.10 B.11 C.12 D.ABC答案都不对 59.C语言中下列运算符的操作数必须是int型的是( A )。 A.% B./ C.- D.++
60.已知:int x,y,z,w; scanf(“M-=---”,&x,&y,&z,&w);
printf(“M+=+-+”,x,y,z,w);若输出结果为:1234+123+12+1,则正确的输入形式为( C )。 A.1234123121 B.1234 123 12 1 C.1234-123-12-1 D.1234+123+12+1 61.执行语句:printf(“The program\\’s name is c:\\\\tools\\book.txt”);后输出为( D )。
A.The program’s name is c:tools\\book.txt B.The program’s name is c:\\tools\\book.txt C.The program’s name is c:\\\\tools\\book.txt D.The program’s name is c:\\toolook.txt 62.以下语句有语法错误的是( B )。
A.if(x>y); B.if(x!=y) scanf(“%d”,x) else scanf(“%d”,y); C.if(x==y) x+=y; D.if(x 63.下列关于switch语句和break语句的结论中,正确的是( B )。 A.break语句是switch语句的一部分 B.在switch语句中可以根据需要使用或不使用break语句; C.在switch语句中必须使用break语句 D.switch语句是break语句的一部分 64.若int i=10;执行下列程序段后,变量i的正确结果是( D )。 switch(i){ case 9: i+=1; case 10: i+=1; case 11: i+=1; default : i+=1; } A.10 B.11 C.12 D.13 65.执行语句for(i=0;i++<3;);后变量i的值为( C )。 A.2 B.3 C.4 D.5 66.要说明一个有10个int型元素的数组,应当选择语句( A )。 A.int a[10]; B.int a[2,5]; C.int a[ ]; D.int *a[10]; 67.已知:int a[10];则对a数组元素正确应用的是( D )。 A.a[10] B.a[2.5] C.a(5) D.a[10-10] 68.在C语言中,二维数组元素在内存中的存放顺序是( A )。 A.按行存放 B.按列存放 C.由用户自己定义 D.由编译器决定 69.为了判断两字符串s1和s2是否相等,应当使用( D )。 A.if(s1==s2) B.if(s1=s2) C.if(strcpy(s1,s2)) D.if(strcmp(s1,s2)==0) 70.一个C语言程序总是从( B )开始执行。 A.主过程 B.主函数 C.子程序 D.主程序 71.C语言中函数( D )。 A.可以嵌套定义 B.不可以嵌套调用 C.可以嵌套调用,但不能递归调用 D.嵌套调用和递归调用均可 72.C语言中函数返回值得类型是由( D )决定的。 A.return语句中的表达式类型 B.调用该函数的主调函数类型 C.调用函数时临时 D.定义函数时所指定的函数类型 73.若int *p,a;则语句p=&a;中的运算符&的含义是( D )。 A.位与运算 B.逻辑与运算 C.取指针运算 D.取变量地址运算 74.已知:char b[5],*p=b;则正确的赋值语句是( C )。 A.b=“abcd”; B.*b=“abcd”; C.p=“abcd”; D.*p=“abcd”; 75.设x、y均为整型变量,且x=10、y=3,则以下语句的输出结果是( D )。