《C语言》复习题160题08级.docx
《《C语言》复习题160题08级.docx》由会员分享,可在线阅读,更多相关《《C语言》复习题160题08级.docx(32页珍藏版)》请在冰豆网上搜索。
《C语言》复习题160题08级
注:
颜色字母为答案,请大家把颜色先去掉,做完再核对答案!
(2010年)
===============================================================================
一、单项选择题(共200题,1~80为基本概念题,81~160题为程序阅读题)
●基本概念题
第1、2章概述、数据类型、运算符与表达式
1.计算机能直接执行的程序是:
A)源程序B)目标程序C)汇编程序D)可执行程序
2.下列叙述中错误的是:
A)计算机不能直接执行用C语言编写的源程序
B)程序经C编译程序编译后,生成后缀为.obj的文件是一个二进制文件
C)后缀为.obj的文件,经连接程序生成后缀为.exe的文件是一个二进制文件
D)后缀为.obj和.exe的二进制文件都可以直接运行
3.若变量均已正确定义并赋值,以下合法的C语言赋值语句是:
A)x=y==5;B)x=n%2.5;C)x+n=i;D)x=5=4+1;
4.若以下选项中的变量已正确定义,则正确的赋值语句是:
A)x1=26.8%3B)1+2=x2C)x3=0x12D)x4=1+2=3;
5.若已定义x和y为double类型,则表达式:
x=1,y=x+3/2的值是:
A)2.0B)2C)2.5D)1
6.已知字符’A’的ASCⅡ代码值是65,字符变量c1的值是’A’,c2的值是’D’,
执行语句printf("%d,%d",c1,c2-2);后,输出结果是:
A)A,BB)A,68C)65,66D)65,68
7.main()
{chara1=’M’,a2=’m’;printf("%c\n",(a1,a2));}
根据以上程序,以下叙述中正确的是:
A)程序输出大写字母MB)程序输出小写字母m
C)格式说明符不足,编译出错D)程序运行时产生出错信息
8.已有定义:
intx=3,y=4,z=5;,则表达式!
(x+y)+z-1&&y+z/2的值是:
A)6B)0C)2D)1
9.设x和y均为int型变量,则以下语句:
x+=y;y=x-y;x-=y;的功能是:
A)交换x和y中的值B)把x和y按从小到大排列
C)无确定结果D)把x和y按从大到小排列
10.以下选项中非法的表达式是
A)0<=x<100B)i=j==0C)(char)(65+3)D)x+1=x+1
11.若x和y代表整型数,以下表达式中不能正确表示数学关系|x-y|<10的是:
A)abs(x-y)<10B)x-y>-10&&x-y<10C)(x-y)<-10||!
(y-x)>10D)(x-y)*(x-y)<100
12.若执行以下程序段:
inta=1,b=2,m=2,n=2;(m=a>b)&&++n;则n的值是:
A)1B)2C)3D)4
13.若有表达式(w)?
(-x):
(++y),则其中与w等价的表达式是:
A)w==1B)w==0C)w!
=1D)w!
=0
14.设已有定义inta=5,b=6,c=7,d=8,m=2,n=2;
则逻辑表达式(m=a>b)&&(n=c>d)运算后,n的值为:
A)0B)1C)2D)3
15.已有定义:
charc;,程序前面已在命令行中包含ctype.h文件,不能用于判断c中的字符是否为大写字母的表达式是:
A)isupper(c)B)’A’<=c<=’Z’C)’A’<=c&&c<=’Z’D)c<=(‘z’-32)&&(‘a’-32)<=c
第3章语句和控制结构
16.以下叙述中错误的是
A)C语言是一种结构化程序设计语言
B)结构化程序有顺序、分支、循环三种基本结构组成
C)使用三种基本结构构成的程序只能解决简单问题
D)结构化程序设计提倡模块化的设计方法
17.有以下程序段
intm=0,n=0;charc='a';
scanf("%d%c%d",&m,&c,&n);printf("%d,%c,%d\n",m,c,n);
若从键盘上输入:
10A10<回车>,则输出结果是:
A)10,A,10B)10,a,10C)10,a,0D)10,A,0
18.若有说明语句:
inta,b,c,*d=&c;,则能正确从键盘读入三个整数分别赋给a、b、c的语句是:
A)scanf("%d%d%d",a,b,*d);B)scanf("%d%d%d",&a,&b,&d);
C)scanf("%d%d%d",a,b,d);D)scanf("%d%d%d",&a,&b,d)
19.若在定义语句:
inta,b,c,*p=&c;之后,接着执行以下选项中的语句,则能正确执行的语句是:
A)scanf("%d",a,b,c);B)scanf("%d%d%d",a,b,c);C)scanf("%d",p);D)scanf("%d",&p);
20.有定义语句:
intx,y;,若要通过scanf("%d,%d",&x,&y);语句使变量x得到数值11,变量y得到数值12,下面四组输入形式中,错误的是:
A)1112<回车>B)11,12<回车>C)11,12<回车>D)11,<回车>12<回车>
21.若变量已正确定义为int型,要通过语句scanf(”%d,%d,%d”,&a,&b,&c);给a赋值1、给b赋值2、给c赋值3,以下输入形式中错误的是:
(□代表一个空格符)
A)□□□1,2,3<回车>B)1□2□3<回车>C)1,□□□2,□□□3<回车>D)1,2,3<回车>
22.有以下程序段
intj;floaty;charname[50];scanf("%2d%f%s",&j,&y,name);
当执行上述程序段,从键盘上输入555667777abc后,y的值为:
A)55566.0B)566.0C)7777.0D)566777.0
23.当用户要求输入的字符串中含有空格时,应使用的输入函数是:
A)scanf()B)getchar()C)gets()D)getc()
24.C语言中用于结构化程序设计的三种基本结构是:
A)顺序、选择、循环B)if、switch、breakC)for、while、do-whileD)if、for、continue
25.要使以下程序中t的输出结果为4,则输入a和b应满足的条件是:
main()
{ints=1,t=1,a,b;
scanf("%d%d",&a,&b);
if(a>0)s+=1;
if(a>b)t=s+t;
elseif(a==b)t=5;
elset=2*s;
printf("%d\n",t);
}
A)a>0并且a0并且a>bD)a<0并且a>b
26.有以下程序段
intn,t=1,s=0;
scanf("%d",&n);
do{s=s+t;t=t-2;}while(t!
=n);
为使此程序段不陷入死循环,从键盘输入的数据应该是:
A)任意正奇数B)任意负偶数C)任意正偶数D)任意负奇数
27.在循环语句的循环体中,continue语句的作用是:
A)立即终止整个循环B)继续执行continue语句之后的循环体各语句
C)结束本次循环D)结束本次循环并跳出循环
28.若变量已正确定义,有以下程序段,其输出结果是:
i=0;
doprintf("%d,",i);while(i++);
printf("%d\n",i);
A)0,0B)0,1C)1,1D)程序进入无限循环
29.若定义inti;,则循环语句:
for(i=2;i==0;)printf("%d",i--);执行次数是:
A)无限次B)2次C)1次D)0次
30.若有如下程序段,其中s、a、b、c均已定义为整型变量,且a、c均已赋值(c大于0)
for(s=a,b=1;b<=c;b++)s=s+1;
则与上述程序段功能等价的赋值语句是:
A)s=a+b;B)s=a+c;C)s=s+c;D)s=b+c;
第4章函数与程序结构
31.对于一个正常运行的C程序,以下叙述中正确的是:
A)程序的执行总是从main函数开始,在main函数结束
B)程序的执行总是从程序的第一个函数开始,在main函数结束
C)程序的执行总是从main函数开始,在程序的最后一个函数中结束
D)程序的执行总是从程序的第一个函数开始,在程序的最后一个函数中结束
32.以下正确的叙述是:
A)在C语言中,main函数必须位于文件的开头
B)C语言的每行中只能写一条语句
C)C语言本身没有输入、输出语句
D)main函数可以在任何地方出现
33.C语言中,函数值类型的定义可以缺省,此时函数值的隐含类型是:
A)voidB)intC)floatD)double
34.下面的函数调用语句中func(f2(v1,v2),(v3,v4,v5),(v6,max(v7,v8)));,函数的实参个数是:
A)3B)4C)5D)8
35.以下叙述中错误的是
A)用户自定义的函数中可以没有return语句
B)用户自定义的函数中可以有多个return语句,以便可以调用一次返回多个函数值
C)用户自定义的函数中若没有return语句,则应当定义函数为void类型
D)函数的return语句中可以没有表达式
36.若程序中定义了以下函数
doublemyadd(doublea,doubleb)
{return(a+b);}
并将其放在调用语句之后,则在调用之前应该对函数进行说明,以下错误的说明是:
A)doublemyadd(doublea,b);B)doublemyadd(double,double);
C)doublemyadd(doubleb,doublea);D)doublemyadd(doublex,doubley);
37.在调用函数时,如果实参是简单变量,它与对应形参之间的数据传递方式是:
A)地址传递B)双向值传递C)单向值传递D)传递方式由用户指定
38.若函数调用时的实参为变量时,以下关于函数形参和实参的叙述中正确的是:
A)函数的实参和其对应的形参共占同一存储单元
B)形参只是形式上的存在,不占用具体存储单元
C)同名的实参和形参占同一存储单元
D)函数的形参和实参分别占用不同的存储单元
39.若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是:
A)函数调用可以作为独立的语句存在B)函数调用可以作为一个函数的实参
C)函数调用可以出现在表达式中D)函数调用可以作为一个函数的形参
40.凡在函数内未指定的存储类型变量,其隐含的存储类型为:
A)registerB)staticC)externD)auto
41.以下叙述中正确的是:
A)未在定义语句中赋初值的变量初值都是随机值B)全局变量的作用域一定比局部变量大
C)static类别变量的生存期贯穿于整个程序的运行期间D)函数的形参都属于全局变量
42.在一个C语言源程序文件中所定义的全局变量,其作用域为:
A)所在文件的全部范围B)所在程序的全部范围
C)所在函数的全部范围D)由具体定义位置和extern说明来决定范围
第6章数组
43.若在main()中有定义inta[5];则数组a中所有元素的初值为:
A)不确定B)0C)1D)-1
44.若有以下定义语句:
intm[]={5,4,3,2,1},i=4;,则下面对m数组元素的引用中错误的是:
A)m[--i]B)m[2*2]C)m[m[0]]D)m[m[i]]
45.若定义a[][2]={1,2,3,4,5,6,7};则a数组中行的大小是:
A)2B)3C)4D)无确定值
46.若有定义语句:
inta[3][6];,按在内存中的存放顺序,a数组的第10个元素是
A)a[0][4]B)a[1][3]C)a[0][3]D)a[1][4]
47.以下能正确定义数组并正确赋初值的语句是:
A)intN=5,b[N][N];B)inta[1][2]={{1},{3}};
C)intc[2][]={{1,2},{3,4}}D)intd[3][2]={{1,2},{3,4}};
48.以下能正确定义二维数组的是:
A)inta[][3];B)inta[][3]=2{2*3};C)inta[][3]={1};D)inta[2][3]={{1},{2},{3,4}}
49.若定义a[][3]={1,2,3,4,5,6,7,8};,则数组a中行的大小是:
A)2B)3C)4D)无确定值
50.在以下定义中,正确的说明语句为:
A)inta['a']B)inta[3,4]C)inta[][]D)int*a[10];
51.用数组名作为函数参数时,它传递给函数是:
A)数组首地址B)整个数组C)数组的第一个值D)数组的全部地址
52.以下能正确定义一维数组的选项是:
A)inta[3]={0,1,2,3};B)chara[]={0,1,2,3,};C)chara={'A','B','C'};D)inta[3]="012";
53.若有定义语句:
chars[10]="1234567\0\0";,则strlen(s)的值是:
A)7B)8C)9D)10
第7章指针
54.设有定义:
intn1=0,n2,*p=&n2,*q=&n1;,以下赋值语句中与n2=n1;语句等价的是:
A)*p=*q;B)p=q;C)*p=&n1;D)p=*q;
55.若有定义:
intx=0,*p=&x;,则语句printf("%d\n",*p);的输出结果是:
A)随机值B)0C)x的地址D)p的地址
56.设有定义:
charp[]={’1’,’2’,’3’},*q=p;,不能计算出一个char型数据所占字节数的表达式是:
A)sizeof(p)B)sizeof(char)C)sizeof(*q)D)sizeof(p[0])
57.有如下说明inta[10]={1,2,3,4,5,6,7,8,9,10},*p=a;则数值为9的表达式是:
A)*p+9B)*(p+8)C)*p+=9D)p+8
58.有以下定义和语句:
inta[3][2]={1,2,3,4,5,6,},*p[3];p[0]=a[1];则*p[0]+1所代表的数组元素是:
A)a[0][1]B)a[1][0]C)a[1][1]D)a[1][2]
59.若有以下说明和语句,intc[4][5],(*p)[5];p=c;能正确引用c数组元素的是:
A)p+1B)*(p+3)C)*(p+1)+3D)*(p[0]+2)
60.若有定义语句:
inta[2][3],*p[3];,则以下语句中正确的是:
A)p=a;B)p[0]=a;C)p[0]=&a[1][2];D)p[1]=&a;
61.若有定义inta[3][5],i,j;(且0
A)*(a+i*5+j)B)*(a[i]+j)C)*(a+i)+jD)*(*(a+i)+j);
62.以下各语句或语句组中,正确的操作是:
A)chars[5]="abcde";B)char*s;gets(s);C)chars[5];gets(&s);D)char*s="abcde";
63.把字符串"OK!
"赋值给变量不正确的语句或语句组是:
A)chara[]="OK!
";B)chara[8]={'O','K','!
','\0'};
C)char*p;p="OK!
";D)charp;strcpy(p,"OK!
");
64.定义compare(char*s1,char*s2)函数,以实现比较两个字符串大小的功能。
以下程序运行结果为-32,选择正确答案填空。
main()
{printf(”%d\n”,compare(”abCd”,”abc”));
}
compare(char*s1,char*s2)
{while(*s1&&*s2&&){s1++;s2++;}
return*s1-*s2;
}
A)*s1!
=*s2B)*s1==*s2C)*s1=*s2D)s1!
=s2
65.有以下函数,关于aaa函数的功能叙述正确的是:
intaaa(char*s)
{char*t=s;
while(*t++);
t--;return(t-s);
}
A)求串s的长度B)比较两串的大小C)将串s复制到串tD)求串s所占字节数
66.设有定义:
intn=0,*p=&n,**q=&p;,则以下选项中,正确的赋值语句是:
A)p=1;B)*q=2;C)q=p;D)*p=5;
67.若有定义char*language[]={"FORTRAN","BASIC","PASCAL","C"};则language[2]的值是:
A)一个字符B)一个地址C)一个字符串D)不定
68.若指针p已正确定义,要使p指向两个连续的整型动态存储单元,不正确的语句是:
A)p=2*(int*)malloc(sizeof(int));B)p=(int*)malloc(2*sizeof(int));
C)p=(int*)malloc(2*2);D)p=(int*)calloc(2,sizeof(int));
第8章结构及其地数据类型
69.若要说明一个类型名STP,使得定义语句STPs;等价于char*s;,以下选项中正确的是:
A)typedefSTPchar*s;B)typedef*charSTP;
C)typedefSTP*char;D)typedefchar*STP
70.若有定义typedefcharSTR[5][20];STRs;,则s是:
A)字符指针数组变量B)字符数组变量C)字符变量D)字符指针变量
71.有以上程序段:
typedefstructNODE{intnum;structNODE*next;}OLD;以下正确的叙述是:
A)以上的说明形式非法B)NODE是一个结构体类型
C)OLD是一个结构体类型D)OLD是一个结构体变量
72.设有以下说明语句typedefstruct{intn;charch[8];}PER;,则下面叙述中正确的是:
A)PER是结构体变量名B)PER是结构体类型名
C)typedefstruct是结构体类型D)struct是结构体类型名
73.根据下面的定义,能打印出字母M的语句是:
structperson{charname[9];intage;}class[10]={"John",17,"Paul",19,"Mary",18,"Adam",16};
A)printf("%c\n",class[3].name);B)printf("%c\n",class[3].name[1]);
C)printf("%c\n",class[2].name[1]);D)printf("%c\n",class[2].name[0]);
74.设有说明如下,则能正确定义结构体数组并赋初值的语句是:
typedefstruct{intn;charc;doublex;}STD;
A)structSTDtt[2]={{1,'A',6},{2,'B',7}};B)structtt[2]={{1,'A'},{2,'B'}};
C)STDtt[2]={{1,'A',6},{2,'B',7}};D)STDtt[2]={1,"A",6,2,"",7};
75.若定义:
structss{