C语言复习范围.docx
《C语言复习范围.docx》由会员分享,可在线阅读,更多相关《C语言复习范围.docx(21页珍藏版)》请在冰豆网上搜索。
C语言复习范围
一.选择题
1.以下叙述中错误的是(A)
A.使用3种基本结构构成的程序只能解决简单问题
B.结构化程序由顺序、分支、循环3种基本结构组成
C.C语言是一种结构化程序设计语言
D.结构化程序设计提倡模块化的设计方法
2.以下四个程序中,完全正确的是(B)
A.#includeB.#include
main();main()
{/*/programming/*/{/*programming*/
printf("programming!
\n");}printf("programming!
\n");}
C.#includeD.include
main()main()
{/*/*programming*/*/{/*programming*/
printf("programming!
\n");}printf("programming!
\n");}
3.以下叙述中错误的是(A)
A.C语言中的每条可执行语句和非执行语句最终都将被转换成二进制的机器指令
B.C程序经过编译、连接步骤之后才能形成一个真正可执行的二进制机器指令文件
C.用C语言编写的程序称为源程序,它以ASCII代码形式存放在一个文本文件中
D.C语言源程序经编译后生成扩展名为.obj的目标程序
4.下列叙述中错误的是(B)
A.C程序可以由多个程序文件组成B.一个C语言程序只能实现一种算法
C.C程序可以由一个或多个函数组成D.一个C函数可以单独作为一个程序文件存在
5C语言源程序名的扩展名是(B)
A.exeB..cC..objD..cp
6.C语言规定,在一个源程序中,main函数的位置(C)
A.必须在最开始B.必须在系统调用的库函数的后面
C.可以任意D.必须在最后
7.以下关于long、int和short类型数据占用内存大小的叙述中正确的是(D)
A.均占4个字节B.根据数据的大小来决定所占内存的字节数
C.由用户自己定义D.由C语言编译系统和CPU字长决定
8.以下选项中可用作C程序合法实数的是(A)
A..1e0B.3.0e0.2C.E9D.9.12E
9.以下选项中不合法的标识符是(C)
A.printB.FORC.&aD._00
10.关于C语言中数的表示,以下叙述中正确的是(A)
A.只有整型数在允许范围内能精确无误的表示,实型数会有误差
B.只要在允许范围内整型数和实型数都能精确的表示
C.只有实型数在允许范围内能精确无误的表示,整型数会有误差
D.只有用八进制表示的数才不会有误差
11.以下定义语句中正确的是(B)
A.inta=b=0;B.charA=65+1,b='b';
C.floata=1,*b=&a,*c=&b;D.doublea=0.0,b=1.1;
12.若有定义语句:
“inta=3,b=2,c=1;”,以下选项中错误的赋值表达式是(A)。
A.a=(b=4)=3;B.a=b=c+1:
C.a=(b=4)+C;D.a=1+(b=c一4);
13.有以下程序
#include
main()
{unsignedchara=8,c;
c=a>>3;
printf(“%d\n”,c);}
程序运行后的输出结果是(C)A.32B.16C.1D.0
14.设变量已正确定义并赋值,以下正确的表达式是(C)
A.x=y*5=x+zB.int(15.8%5)C.x=y+z+5,++yD.x=25%5.0
15.现有定义inta;doubleb;floatc;chark;,则表达式a/b+c-k值的类型为(B)
A.intB.doubleC.floatD.char
16.若有定义语句:
intx=12,y=8,z;,在其后执行语句z=0.9+x/y;,则z的值为(B)
A.1.9B.1C.2D.2.4
17.设变量均已正确定义并赋值,以下与其他三组输出结果不同的一组语句是(D)
A.x++;printf("%d\n",x);B.n=++x;printf("%d\n",n);
C.++x;printf("%d\n",x);D.n=x++;printf("%d\n",n);
18.设变量均已正确定义,若要通过scanf("%d%c%d%c",&a1,&c1,&a2,&c2);语句为变量a1和a2赋数值10和20,为变量c1和c2赋字符X和Y。
以下所示的输入形式中正确的是(注:
□代表空格字符)(D)
A.10□X□20□Y<回车>B.10□X20□Y<回车>
C.10□X<回车>D.10X<回车>
20□Y<回车>20Y<回车>
19.有以下程序段:
charch;intk;
ch='a';k=12;
printf("%c,%d,",ch,ch,k);printf("k=%d\n",k);
已知字符a的ASCII十进制代码为97,则执行上述程序段后输出结果是(D)
A因变量类型与格式描述符的类型不匹配输出无定值
B.输出项与格式描述符个数不符,输出为零值或不定值
C.a,97,12k=12
D.a,97,k=12
20.以下不能输出字符A的语句是()(注:
字符A的ASCII码值为65,字符a的ASCII码值为97)(B)
A.printf(“%c\n”,,’a‘-32)B.printf(“%d\n”,’A‘)
C.printf(“%c\n”,65)D.printf(“%c\n”,’B‘-1)
21.有以下程序:
#include
main()
{inta1,a2;
charc1,c2;
scanf(“%d%c%d%c”,&a1,&c1,&a2,&c2);
printf(“%d,%c,%d,%c”,&1,c1,a2,c2);}
若想通过键盘输入,使得a1的值为12,a2的是为34,c1的值为字符a,c2的值为字符b,程序输出结果是:
12,a,34,b,则正确的输入格式是(以下□代表空格)(D)
A.12□a34□b<回车>B.12□a□34□b<回车>
C.12,a,34,b<回车>D.12a34b<回车>
22.程序段:
intx=12;
doubley=3.141593;
printf("%d%8.6f",x,y);的输出结果是(A)
A.123.141593B.123.141593C.12,3.141593D.123.1415930
23.以下关于算法的叙述中错误的是(B)
A.算法可以用伪代码、流程图等多种形式来描述B.一个正确的算法必须有输入
C.一个正确的算法必须有输出D.用流程图描述的算法可以用任何一种计算机高级语言编写成程序代码
24.以下叙述中正确的是(C)
A.用C程序实现的算法必须要有输入和输出操作
B.用C程序实现的算法可以没有输出,但必须要输入
C.用C程序实现的算法可以没有输入,但必须要有输出
D.用C程序实现的算法可以既没有输入也没有输出
25.if语句的基本形式:
if(表达式)语句,以下关于“表达式”值的叙述中正确的是(D)
A.必须是逻辑值B.必须是整数值C.必须是正数D.可以是任意合法的数值
26.若执行下述程序时,若从键盘输入6和8,结果为(B)
A.36B.64C.48D.以上都不对
27.若有条件表达式(exp)?
a++:
b--,则以下表达式中能完全等价于表达式(exp)的是(B)
A.(exp==0)B.(exp!
=0)C.(exp==1)D.(exp!
=1)
28.以下选项中,能表示逻辑值“假”的是(C)
A.1B.0.000001C.0D.100.0
29.下列叙述中正确的是(A)
A.在switch语句中,不一定使用break语句B.在switch语句中必须使用default从句
C.break语句必须与switch语句中的case配对使用D.break语句只能用于switch语句
30.有如下嵌套的if语句:
if(a
if(aelsek=C:
else
if(belsek=C;
以下选项中与上述if语句等价的语句是(C)
A.k=(a
a:
b;k=(bb:
C;
B.k=(a
((ba:
b):
((b>c)?
b:
c)
C.k=(a
((aa:
c):
((bb:
c)
D.k=(a
a:
b;k=(aa:
c;
31.有以下程序:
#include
main()
{intx=8;
for(;x>0;x--)
{if(x%3){printf("%d,",x--);continue;}
printf("%d,",--x);}}
程序的运行结果是(D)
A.7,4,2B.8,7,5,2C.9,7,6,4D.8,5,4,2
32.若i和k都是int类型变量,有以下for语句:
for(i=0,k=-1;k=1;k++)printf("*****\n");
下面关于语句执行情况的叙述中正确的是(D)
A.循环体执行两次B.循环体执行一次C.循环体一次也不执行D.构成无限循环
33.下列不构成无限循环的语句或语句组是(A)
A.n=0;B.n=0;
do{++n;}while(n<=0);while
(1){n++;}
C.n=10;D.for(n=0,i=1;;i++)
while(n);{n--;}n+=i;
34.若变量已正确定义,有以下程序段:
i=0;
doprintf("%d,",i);while(i++);
printf("%d\n",i);其输出结果是(D)
A.0,0B.0,1C.1,1D.程序进入无限循环
35.已知:
intt=0;
while(t=1)
{…}则以下叙述正确的是(B)。
A.循环控制表达式的值为0B.循环控制表达式的值为1
C.循环控制表达式不合法D.以上说法都不对
36.以下叙述中,正确的是(C)
A由于do…while循环中循环体语句只能是一条可执行语句,所以循环体内不能使用复合语句
B.do…while循环由do开始,用while结束,在while(表达式)后面不能写分号
C.在do…while循环体中,是先执行一次循环,再进行判断
D.do…while循环中,根据情况可以省略while
37.有以下程序:
#include
main()
{ints[12]={1,2,3,4,4,3,2,1,1,1,2,3},c[5]={0},i;
for(i=0;i<12;i++)c[s[i]]++;
for(i=1;i<5;i++)printf("%d",c[i]);
printf("\n");}
程序的运行结果是(C)
A.1234B.2344C.4332D.1123
38.若有定义:
inta[2][3];,以下选项中对a数组元素正确引用的是(D)
A.a[2][!
1]B.a[2][3]C.a[0][3]D.a[1>2][!
1]
39.以下错误的定义语句是(C)
A.intx[][3]={{0},{1},{1,2,3}};
B.intx[4][3]={{1,2,3},{1,2,3},{1,2,3},{1,2,3}};
C.intx[4][]={{1,2,3},{1,2,3},{1,2,3},{1,2,3}};
D.intx[][3]={1,2,3,4};
40.下列选项中错误的说明语句是(D)
A.chara[]={'t','o','y','o','u','\0'};
B.chara[]={"toyou\0"};
C.chara[]="toyou\0";
D.chara[]='toyou\0';
41.下面程序的输出结果是(A)
main()
{inta[10]={1,2,3,4,5,6,7,8,9,10},*p=a;
printf("%d\n",*(p+2));}
A.3B.4C.1D.2
42.有以下程序:
#include
#include
main()
{chara[5][10]={"china","beijing","you","tiananmen","welcome"};
inti,j;chart[10];
for(i=0;i<4;i++)
for(j=i+1;j<5;j++)
if(strcmp(a[i],a[j])>0)
{strcpy(t,a[i]);strcpy(a[i],a[j]);strcpy(a[j],t);}
puts(a[3]);}
程序运行后的输出结果是(C)
A.beijingB.chinaC.welcomeD.Tiananmen
43.在C语言中,变量的隐含存储类别是(A)
A.autoB.staticC.externD.无存储类别
44.在C语言中,只有在使用时才占用内存单元的变量,其存储类型是(A)
A.auto和registerB.extern和registerC.auto和staticD.static和register
45.以下程序的主函数中调用了在其前面定义的fun函数
#include
main()
{double a[15],k;
k=fun(a);}
则以下选项中错误的fun函数首部是(D)
A.double fun(double a[15]) B.double fun(double *a)
C.double fun(double a[]) D.double fun(double a)
46.在C语言中,函数返回值的类型最终取决于(A)
A.函数定义时在函数首部所说明的函数类型B.return语句中表达式值的类型
C.调用函数时主调函数所传递的实参类型D.函数定义时形参的类型
47.以下叙述中错误的是(C)
A.改变函数形参的值,不会改变对应实参的值
B.函数可以返回地址值
C.可以给指针变量赋一个整数作为地址值
D.当在程序的开头包含文件stdio.h时,可以给指针变量赋NULL
48.设有定义:
“doublex[10],*p=x;”,以下能给数组x下标为6的元素读人数据的正确语句是()
A.scanf("%f",&x[6]);B.scanf("%if",*(x+6));
C.scanf("%if",p+6);D.scanf("%if",p[6]);
49.若有定义语句:
“charS[3][10],(*k)[3],*p;”,则以下赋值语句正确的是(C)
A.p=S;B.p=k;C.p=s[0];D.k=s;
50.若有说明:
int*p,m=5,n;,以下正确的程序段是(C)
A.p=&n;scanf("%d",&p);B.p=&n;scanf("%d",*p)
C.scanf("%d",&n);*p=n;D.p=&n;*p=m;
51.设有定义语句int(*f)(int);,则以下叙述正确的是(B)
A.f是基类型为int的指针变量
B.f是指向函数的指针变量,该函数具有一个int类型的形参
C.f是指向int类型一维数组的指针变量
D.f是函数名,该函数的返回值是基类型为int类型的地址
52.有以下语句,则对a数组元素的引用不正确的是(D)
inta[10]={0,1,2,3,4,5,6,7,8,9},*p=a;
A.a[p-a]B.*(&a[i])C.p[i]D.*(*(a+i))
53.设有定义:
struct{charmark[12];intnum1;doublenum2;}t1,t2;,若变量均已正确赋初值,则以下语句中错误的是(C)
A.t1=t2;B.t2.num1=t1.num1;C.t2.mark=t1.mark;D.t2.num2=t1.num2;
54.以下结构体类型说明和变量定义中正确的是(A)
A.typedefstructB.typedefstruct
{intn;charc;}REC;{intn;charc;};
RECt1,t2;RECt1,t2;
C.typedefstructREC;D.struct
{intn=0;charc=’A‘;}t1,t2;{intn;charc;}REC;
RECt1,t2;
55.若有以下说明和定义:
uniondt
{inta;charb;doublec;}data;
以下叙述中错误的是(D)
data的每个成员起始地址都相同
B.变量data所占的内存字节数与成员c所占字节数相等
C.程序段:
data.a=5;printf("%f\n",data.C);输出结果为5.000000
D.data可以作为函数的实参
56.有以下程序:
#include
#defineS(x)4*(x)*x+1
main()
{intk=5,j=2;
printf(“%d\n”,S(k+j));}
程序运行后的输出结果是(B)A.197B.143C.33D.28
57.以下叙述中错误的是(A)
A.在程序中凡是以“#”开始的语句行都是预处理命令行
B.预处理命令行的最后不能以分号表示结束
C.#defineMAX是合法的宏定义命令行
D.C程序对预处理命令行的处理是在程序执行的过程中进行的
58.若程序中有宏定义行:
#defineN100则以下叙述中正确的是(B)
A.宏定义行中定义了标识符N的值为整数100
B.在编译程序对C源程序进行预处理时用100替换标识符N
C.对C源程序进行编译时用100替换标识符N
D.在运行时用100替换标识符N
三、读程序写结果题
1.执行下面的程序时从键盘上输入3和4,则输出(B)
#include
main()
{
inta,b,s;
scanf("%d%d",&a,&b);
s=a;
if(a
s=s*s;
printf("%d\n",s);
}A.14B.16C.18D.20
2.以下程序执行后输出结果是(503)
#include
main()
{
inta=4,b=3,c=5,t=0;
if(a
if(aprintf("%d%d%d\n",a,b,c);
}
若k是int型变量,且有下面的程序段,则该程序段的输出结果是(A)
k=-3;
if(k<=0)printf("####");
elseprintf("****");
A.####B.****C.####****D.有语法错误
4.若执行下面的程序时从键盘上输入5,则输出结果是(B)
#include
main()
{
intx;
scanf("%d",&x);
if(x++>5)printf("%d\n",x);
elseprintf("%d\n",x--);
}
A.7B.6C.5D.4
以下程序运行结果是(C)
#include
main()
{
doublex=2.0,y;
if(x<0.0)y=0.0;
elseif((x<5.0)&&(!
x))
y=1.0/(x+2.0);
elseif(x<10.0)y=1.0/x;
elsey=10.0;
printf("%f\n",y);
}
A.0.000000B.0.250000C.0.500000D.1.000000
6.以下程序的输出结果是(D)
#include
main()
{
inta=1,b=-1,c=2;
if(a
if(b<0)c=0;
elsec++;
elsec=-1;
printf("%d\n",c);
}A.0B.2C.3D.-1
7以下程序的输出结果是(D)
#include
main()
{
intx=1,y=2,z=3;
if(x>y)
if(yelseprintf("%d",++y);
printf("%d\n",x++);
}A.331B.41C.2D.1
8有以下程序(B)
#include
main()
{
chara='H';
a=(a>='A'&&a<='Z')?
(a+32):
a;
printf("%c\n",a);
}A.HB.hC.AD.a
9.以下程序的输出结果是(A)
#include
main()
{
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
10.若k分别等于1和2,则程序的输出结果是(A)
#include
main()
{
intc=0,k;
scanf("%d",&k);
switch(k)
{default:
c+=k;
case2:
c++;
case4:
c+=2;break;
case6:
c+=4;
}
printf("%d\n",c);
}A.43B.44C.13D.33
11.有以下程序:
(B)
#include
main()
{
inty=10;
while(y--);printf("y=%d\n",y);
}A.y=0B.y=-1C.y=1D.while构成无限循环
12.下面程序的运行结果是(B)
#include
main()
{
ints=0,i=1;
while(s<=10)
{
s=s+i*i;
i++;
}
printf("%d",--i);
}A.4B.3C.5D.6
13.以下程序段的执行结果是(B)
main()
{
inta=1,b=10;
do
{
b-=a;a++;
}while(b--<0);
printf("%d,%d\n",a,b);
}A.3,11B.2,8C.1,-1D.4,