C语言自测练习.docx
《C语言自测练习.docx》由会员分享,可在线阅读,更多相关《C语言自测练习.docx(32页珍藏版)》请在冰豆网上搜索。
C语言自测练习
C语言自测练习
一.单项选择题
1.为了避免嵌套的条件语句if-else的二义性,C语言规定:
else与(B)配对。
A.缩进位置相同的ifB.其之前最近的ifC.其之后最近的ifD.同一行上的if
2.已知:
inty;执行语句y=5%3;则变量y的结果是(A)。
A.2B.-2C.1D.-1
3.具有相同类型的指针变量与数组a,不能进行的操作是(D)。
A.p=a;B.*p=a[0];C.p=&a[0];D.p=&a;
4.用于函数返回值的语句是(A)。
A.returnB.continueC.breakD.printf
5.设intm=1,n=2;则m++==n的结果是(A)。
A.0B.1C.2D.3
6.设inta=2,b=2;则++a+b的结果是(D)。
A.2B.3C.4D.5
7.已知:
inta,b;用语句scanf(“%d%d”,&a,&b);输入a,b的值时,不能作为输入数据分隔符的是(A)。
A.,B.空格C.回车D.Tab
8.凡在函数中未指定存储类别的变量,其隐含的存储类别为(A)。
A.autoB.staticC.externD.register
9.若对函数类型未加显示说明,则函数的隐含类型是(C)。
A.voidB.doubleC.intD.char
10.在inta[5]={1,3,5};语句中,数组元素a[1]的值是(C)。
A.1B.0C.3D.5
11.已知inta=3,*p=&a;则*p的值是(D)。
A.变量a的地址值B.无意义C.变量p的地址值D.3
12.已知struct{inti;charc;floata;}test;则sizeof(test)的值是(D)。
A.4B.5C.6D.7
13.C语言中合法的变量名是(B)。
A.2xB.x_1C.doubleD.x*2
14.数学表达式x≤y≤z,C语言中的正确表达式是(D)。
A.x<=y<=zB.x<=y,y<=zC.x<=y||y<=zD.!
(x>y)&&y<=z
15.下面实型常量的错误形式是(D)。
A.-253.000B.-253.C.0.253e3D.2.53e+3.5
16.已知inti=3,j;j=++i;则i和j的值分别为(B)。
A.i=3,j=4B.i=4,j=4C.i=4,j=3D.i=3,j=3
17.下列表达式的值为0的是(C)。
A.3%5B.3/5.0C.3/5D.3<5
18.执行scanf(“%c%c”,&a,&b);语句使变量a、b分别为'A'和'B',正确输入是(A)。
A.AB<回车>B.AB<回车C.A,B<回车>D.A<回车>B<回车>
19.C语言程序由函数组成,它的(B)。
A.主函数必须在其它函数之前,函数内可以嵌套定义函数
B.主函数可以在其它函数之后,函数内不可以嵌套定义函数
C.主函数必须在其它函数之前,函数内不可以嵌套定义函数
D.主函数必须在其它函数之后,函数内可以嵌套定义函数
20.为程序输入数据,而打开文本文件file1,正确的函数调用是()。
A.fopen(“file1”,“r”)B.fopen(“file1”,“w”)
C.fopen(“file1”,“rb”)D.fopen(“file1”,“wb”)
21.已知intx=1;表达式!
(x>0)?
x+1:
x-1的结果为(B)。
A.1B.0C.2D.x<0
22.ax2+bx+c的C语言表达式是(C)。
A.ax*x+bx+cB.a×x×x+b×x+cC.a*x*x+b*x+cD.a·x·x+b·x+c
23.循环for(i=1;i<=100;i++){if(i>10)break;printf(“*”);};输出的*号个数是(C)。
A.100B.101C.10D.11
24.在调用函数时,实参和形参都是简单变量,它们之间的数据传递方式是(B)。
A.双向地址传递B.单向值传递C.由用户决定
D.由实参传递给形参,也可以由形参传递给实参
25.下面定义语句中错误的是(C)。
A.inta[]={1,2};B.char*p=”CHINA”;C.intn=5,a[n];D.intx=’A’;
26.定义二维数组a[3][4]中,其中元素a[1][2]的地址为(D)。
A.aB.a[0]C.a[1]D.a[1]+2
27.有如下程序,其输出结果是(A)。
#include
voidmain()
{intx=1,a=0,b=0;
switch(x){case0:
b++;case1:
a++;case2:
a++;b++;};printf(“a=%d,b=%d\n”,a,b);}
A.a=2,b=1B.a=1,b=1C.a=1,b=0D.a=2,b=2
28.下面对C语言正确的描述是(B)。
A.写程序时,大小写字母没有区别B.源程序经编译连接后,可生成可执行文件
C.每个语句和数据定义的最后可以没有分号
D.语言允许直接访问物理地址,可以进行位运算,它属于低级语言
29.下列选项中不是C语句的是(A)。
A.++tB.;C.k=i=j;D.{a/=b=1;b=a%2;}
30.以下程序的输出是(C)。
#includevoidmain(){inta=9;a+=a-=a+a;printf(“%d”,a);}
A.18B.9C.-18D.-9
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
voidmain(){intm=7,n=4;floata=38.4,b=6.4,x;x=m/2+n*a/b+1/2;printf(“%f\n”,x);}
A.27.B.27.C.28.D.28.
33.在下列选项中,没有构成死循环的程序段是(C)。
A.inti=100;while
(1){i=i%100+1;if(i>100)break;}B.for(;;);
C.intk=0;do{++k;}while(k>=0);D.ints=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.3B.4C.5D.6
36.以下叙述中正确的是(B、C、D)。
A.在函数中必须要有return语句B.函数中可以有多个return语句,但只执行其中的一个
C.return语句中必须要有一个表达式D.函数值并不总是通过return语句传回调用处
37.以下正确的定义语句是(B)。
A.intn=5,a[n][n];B.inta[][3]={{1,2,},{3,4},{5,6}};
C.inta[][3];D.inta[][]={{1,2,},{3,4},{5,6}};
38.在程序运行时某局部变量始终占据固定的存储单元,其存储类别应该是(C)。
A.autoB.registerC.staticD.extern
39.C语言规定,标识符的第一个字母必须是(D)。
A.字母B.数字C.下划线D.字母或下划线
40.下面不正确的字符常量是(A)。
A.“c”B.‘Y’C.‘w’D.‘9’
41.下面4组选项中,均是正确的八进制或十六进制的选项是(C)。
A.016B.0abcC.010D.0a12
0x8f017-0x117ff
0180xa0x16-123
42.下面程序段的输出结果是(A)。
inta[10]={1,2,3,4,5,6,7,8,9,10},*p=a;printf(“%d\n”,*(p+2));
A.3B.4C.1D.2
43.C语言允许函数值类型缺省定义,此时该函数值隐含的类型是(B)。
A.floatB.intC.voidD.double
44.若二维数组a有m列,则在a[i][j]之前的元素个数为(B)。
A.j*m+iB.i*m+jC.j*m+i+1D.i*m+j+1
45.若要用fopen函数打开一个新的二进制文件,该文件要既能读也能写,则文件方式字符串应是()。
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.20B.24C.25D.30
47.在以下一组运算符中,优先级别最高的是(C)。
A.<=B.=C.%D.&&
48.以下叙述中正确的是(A)。
A.构成C程序的基本单位是函数B.可以在一个函数中定义另一个函数
C.main函数必须放在其他函数之前D.所有被调函数一定要在调用之前进行定义
49.以下程序运行市,若从键盘输入:
102030<回车>,输出的结果是(C)。
#include
voidmain()
{inti=0,j=0,k=0;scanf(“%d%*d%d”,&i,&j,&k);printf(“%d%d%d\n”,i,j,k);}
A.102030B.10020C.10300D.103030
50.若执行以下程序时,从键盘上输入9<回车>,输出结果是(B)。
#include
voidmain()
{intn;scanf(“%d”,&n);if(n++<10)printf(“%d\n”,n);elseprintf(“%d\n”,n--);}
A.11B.10C.9D.8
51.以下程序运行后的输出结果是(D)。
#include
voidmain()
{inti=1,j=2,k=3;if(i++==1&&(++j==3||k++=3))printf(“%d%d%d\n”,I,j,k);}
A.123B.234C.223D.233
52.下面程序运行后的输出结果是(C)。
#include
voidmain(){inta=5,b=4,c=6,d=0;printf(“%d\n”,d=a>b?
(a>c?
a:
c):
(b));}
A.5B.4C.6D.0
53.下面程序运行后的输出结果是(D)。
#include
voidmain()
{intp[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.58B.56C.45D.24
54.以下能正确定义一维数组的是(B)。
A.inta[5]={0,1,2,3,4,5};B.chara[]={0,1,2,3,4,5};
C.chara={‘A’,‘B’,‘C’};D.inta[5]=”0123”;
55.已有定义:
intn=2,*p=&n,*q=p;以下非法的赋值语句是(D)。
A.p=q;B.*p=*q;C.n=*q;D.p=n;
56.下面程序运行后的输出结果是()。
#include#definef(x)x*x
voidmain(){inti;i=f(4+4)/f(2+2);printf(“%d\n”,i);}
A.28B.22C.16D.4
57.C语言中的简单数据类型包括(B)。
A.整型、实型、逻辑型B.整型、实型、字符型
C.整型、字符型、逻辑型D.整型、实型、字符型、逻辑型
58.已知inti=5;执行语句i+=i;后i的值是(A)。
A.10B.11C.12D.ABC答案都不对
59.C语言中下列运算符的操作数必须是int型的是(A)。
A.%B./C.-D.++
60.已知:
intx,y,z,w;scanf(“%4d-%3d-%2d-%1d”,&x,&y,&z,&w);
printf(“%4d+%3d+%2d+%1d”,x,y,z,w);若输出结果为:
1234+123+12+1,则正确的输入形式为(C)。
A.B.1234123121C.1234-123-12-1D.1234+123+12+1
61.执行语句:
printf(“Theprogram\’snameisc:
\\tools\book.txt”);后输出为(D)。
A.Theprogram’snameisc:
tools\book.txtB.Theprogram’snameisc:
\tools\book.txt
C.Theprogram’snameisc:
\\tools\book.txtD.Theprogram’snameisc:
\toolook.txt
62.以下语句有语法错误的是(B)。
A.if(x>y);B.if(x!
=y)scanf(“%d”,x)elsescanf(“%d”,y);
C.if(x==y)x+=y;D.if(x63.下列关于switch语句和break语句的结论中,正确的是(B)。
A.break语句是switch语句的一部分B.在switch语句中可以根据需要使用或不使用break语句;
C.在switch语句中必须使用break语句D.switch语句是break语句的一部分
64.若inti=10;执行下列程序段后,变量i的正确结果是(D)。
switch(i){case9:
i+=1;case10:
i+=1;case11:
i+=1;default:
i+=1;}
A.10B.11C.12D.13
65.执行语句for(i=0;i++<3;);后变量i的值为(C)。
A.2B.3C.4D.5
66.要说明一个有10个int型元素的数组,应当选择语句(A)。
A.inta[10];B.inta[2,5];C.inta[];D.int*a[10];
67.已知:
inta[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.已知:
charb[5],*p=b;则正确的赋值语句是(C)。
A.b=“abcd”;B.*b=“abcd”;C.p=“abcd”;D.*p=“abcd”;
75.设x、y均为整型变量,且x=10、y=3,则以下语句的输出结果是(D)。
printf(“%d,%d\n”,x--,--y);
A.10,3B.9,3C.9,2D.10,2
76.若有定义intx,y;并已正确赋值,则以下选项中与表达式(x-y)?
(x++):
(y++)中的(x-y)等价的是(C)。
A.(x-y>0)B.(x-y<0)C.(x-y<0||x-y>0)D.(x-y==0)
77.以下程序的输出结果是(D)。
#includevoidmain(){inta=3;printf(“%d\n”,(a+=a-=a*a));}
A.-6B.12C.0D.-12
78.若x是整型变量,表达式(x=10/4)的值是(D)。
A.2.5B.2.0C.3D.2
79.有以下程序,运行后的输出结果是(B)。
#includevoidmain(){inta=0,b=0;a=10;b=20;printf(“a+b=%d\n”,a+b);}
A.a+b=10B.a+b=30C.30D.出错
80.以下非法的赋值语句是(C)。
A.n=(i=2,++i);B.j++;C.++(i+1);D.x=j>0;
81.设有数组定义:
chararray[]=“China”;则数组array所占的空间为(C)。
A.4个字节B.5个字节C.6个字节D.7个字节
82.有以下程序,若运行时从键盘输入:
6,5,65,66<回车>,则输出结果是(A)。
#includevoidmain(){chara,b,c,d;
scanf(“%c,%c,%d,%d”,&a,&b,&c,&d);printf(“%c,%c,%c,%c\n”,a,b,c,d);}
A.6,5,A,BB.6,5,65,66C.6,5,6,5D.6,5,6,6
83.程序段:
intn=1;printf(“%d%d%d\n”,n,++n,n--);的输出结果是(A)。
A.111B.122C.123D.121
84.在宏定义#definePI1.11596中,用宏名PI代替的是一个(C)。
A.单精度数B.双精度数C.常量D.字符串
85.在C语言程序中,在函数内部定义的变量称为(B)。
A.全局变量B.局部变量C.静态变量D.寄存器变量
86.在C语言中,合法的字符常量是(D)。
A.‘\084’B.‘0x43’C.‘ab’D.‘\0’
87.已知字母‘A’的ASCII码为十进制65,则程序段:
charch1,ch2;ch1=‘A’+‘5’-‘3’;ch2=‘A’+‘6’-‘3’;printf(“%d,%c\n”,ch1,ch2);的输出结果是(A)。
A.67,DB.B,CC.C,DD.不确定的值
88.已知p为指针变量,a为数组名,i为整型变量,下列赋值语句不正确的是(D)。
A.p=&i;B.p=a;C.p=&a[i];D.p=10;
89.若要定义a为3×4的二维数组,正确的定义语句是(B)。
A.floata(3,4);B.floata[3][4];C.floata3.4;D.floata[3,4];
90.在下面语句中,其含义为“p为指向含n个元素的一维数组的指针变量”的是(D)。
A.intp[n]B.int*p()C.int*p(n)D.int(*p)[n]
二.填空题
1.一个良好的算法是由3种基本结构按照一定规律组成的,这3种基本结构是顺序结构、选择结构和循环结构。
2.函数strcmp返回的值等于零时,说明两个字符串相等。
3.设a=1,b=2,c=3,d=4,则表达式a
a:
ca:
d的结果是1。
4.C语言程序在主(main)函数中结束程序的运行。
5.设a=2、b=3、c=4为整型变量,则执行语句a*=16+(b++)-(++c);后a的值是28。
6.在定义函数时,用void类型加以说明,函数不返回值。
7.在函数内定义的变量称为局部变量。
8.设有定义charw;intx;floaty;doublez;并已赋确定的值,则表达式w*x+z-y的类型为double。
9.C语言程序是由函数组成,程序的执行都是从主开始的。
10.已知intb=2,a=3;表达式a*=b,a+b的结果是8。
11.结构化程序设计的三种基本结构是、、。
12.设i,j,k均为int型变量,则执行for(i=0,j=10;i<=j;i++,j--)k=i+j;循环后k值为10。
13.设有数据定义intk=4,*p=&k;则表达式p==&k的值为1。
14.函数调用时,实参和形参均为数组名,其传递方式为传送地址。
15.若ch已定义为字符型变量,且已赋值,判断ch中是否为字母的表达式为ch>=’a’&&ch<=’z’||ch>=’A’&&ch<=’Z’。
16.已知uniontype{inti;double*p;}temp;则系统为temp分配的空间为2字节。
17.若有定义和语句:
chars[12]=“abook!
”;printf(“%d\n”,strlen(s));则输出结果是7。
18.设有变量定义:
inti;floatf;charname[50];当执行语句scanf(“%2d%f%2s”,&i,&f,name);时,输入字符55566777后,name的值是77。
19.若有函数定义fun(doublea){returna*a*a;},则函数返回值的类型是int。
20.以下语句实现将整型变量a和b的值对调的功能:
t=a;a=b;b=t;
21.若有语句chark,*p;要将指针变量p指向字符型变量k,则C语句为p=&k。
22.有inta=3,b=4,c=5;则表达式!
(a+b)+c-1&&b+c/2的值为1。
23.若有函数max(a,b),为了使指针变量p指向函数max,则正确的赋值语句是p=max。
24.若intx=5,n=5;则表达式x+=n++后,x的值是10