全国计算机二级C语言笔试选择题分类模拟题6.docx
- 文档编号:3889957
- 上传时间:2022-11-26
- 格式:DOCX
- 页数:23
- 大小:35.95KB
全国计算机二级C语言笔试选择题分类模拟题6.docx
《全国计算机二级C语言笔试选择题分类模拟题6.docx》由会员分享,可在线阅读,更多相关《全国计算机二级C语言笔试选择题分类模拟题6.docx(23页珍藏版)》请在冰豆网上搜索。
全国计算机二级C语言笔试选择题分类模拟题6
二级C语言笔试选择题分类模拟题6
选择题
1.有以下程序
#include<stdio.h>
main()
{inta[3][4]=(1,3,5,7,9,11,13,15,17,19,21,23},(*p)[4]=a,i,j,k=0;
for(i=0;i<3;i++)
for(j=0;j<2;j++)k=k+*(*(p+i)+j);
printf("%d\n",k);
}
程序运行后的输出结果是______。
A.60
B.68
C.99
D.108
答案:
A
[解答]k累加a[0][0],a[0][1],a[1][0],a[1][1],a[2][0],a[2][1],结果为60,答案选择A。
2.以下不能将s所指字符串正确复制到t所指存储空间的是______。
A.do{*t++=*s++;}while(*s);
B.for(i=0;t[i]=s[i];i++);
C.while(*t=*s){t++;s++;}
D.for(i=0,j=0;t[i++]=s[j++];);
答案:
A
[解答]do{*t++=*s++;}while(*s);不能。
因为当*s=0时,while(*s)跳出循环,这样字符串结束标志\0没有复制给*t,造成*t不完整。
注意,*t++=*s++是先执行*t=*s,然后才进行t=t+1,s=s+1。
选项B、C、D都能将\0复制过去。
3.有以下函数
intfun(char*x,char*y)
{intn=0;
while((*x==*y)&&*x!
='\0'){x++;y++;n++;}
returnn;
}
函数的功能是______。
A.统计x和y所指字符串中最前面连续相同的字符个数
B.查找x和y所指字符串中是否有'\0'
C.将y所指字符串赋给x所指存储空间
D.统计x和y所指字符串中相同的字符个数
答案:
A
[解答]本题中由循环条件可知,当遇到“\0”或“x与y所指的字符的值不相等”其中的一个条件时就结束循环,因此本题函数的功能是统计x和y所指字符串中最前面连续相同的字符个数。
4.有以下程序
#include<stdio.h>
main()
{
charch[]="uvwxyz",*pc;
pc=ch;
printf("%c\n",*(pc+5));
}
程序运行后的输出结果是______。
A.z
B.0
C.元素ch[5]的地址
D.字符y的地址
答案:
A
[解答]main函数输出字符串第6个元素对应的数据,所以答案为A。
5.设有如下程序段
#include<stdio.h>
chars[20]="Beijing",*p;
p=s;
则执行p=s;语句后,以下叙述正确的是______。
A.可以用*p表示s[0]
B.s数组中元素的个数和p所指字符串长度相等
C.s和p都是指针变量
D.数组s中的内容和指针变量p中的内容相同
答案:
A
[解答]本题主要考查的是字符数组、字符串和字符指针的一些概念。
数组元素个数,是在定义数组的时候确定的,本题的s数组元素个数是20。
而字符串长度,是从该字符串的第1个字符开始,一直到\0字符为止,所历经的字符个数,\0不算在内。
所以本题p所指字符串("Beijing")的长度为7。
因此选项B的叙述不正确。
s是数组名,而不是指针变量,因此选项C不正确。
数组s中除了包含字符串“Beijing”外,还包含其后的20个以内字节的内容,而指针变量p中包含的只是数组s的首地址。
因此选项D的说法也不正确。
6.若有以下程序段
charstr[4][12]={"aa","bbb","ccccc","d"},*strp[4];
inti;
for(i=0;i<4;i++)strp[i]=str[i];
不能正确引用字符串的选项是______。
A.strp
B.str[0]
C.strp[3]
D.*strp
答案:
A
[解答]strp是字符串指针数组,不能作为字符串的引用。
7.有以下程序
#include<stdio.h>
main()
{inta[5]={2,4,6,8,10},*p,**k;
p=a;k=&p;
printf("%d",*(p++));
printf("%d\n",**k);
}
程序运行后的输出结果是______。
A.24
B.44
C.22
D.46
答案:
A
[解答]*(p++),表达式为a[0]的值,为2,执行后p指向a[1],**k为*p实际为a[1],输出4,所以选择A。
8.设有以下函数:
voidfun(intn,char*s)
{……}
则下面对函数指针的定义和赋值均正确的是______。
A.void(*pf)(int,char*);pf=fun;
B.void*pf();pf=fun;
C.void*pf();*pf=fun;
D.void(*pf)(int,char;)pf=&fun;
答案:
A
[解答]赋值给函数指针,需要函数的参数一致,返回值一致,才可以赋值。
选项A正确。
9.以下叙述中正确的是______。
A.在C语言中,预处理命令行都以”#”开头
B.预处理命令行必须位于C源程序的起始位置
C.#include<stdio.h>必须放在C程序的开头
D.C语言的预处理不能实现宏定义和条件编译的功能
答案:
A
[解答]预处理命令行、#include没有必要放在程序的开头部分,C语言可以实现宏定义和条件编译,所以选择A。
10.以下关于宏的叙述中正确的是______。
A.宏替换没有数据类型限制
B.宏定义必须位于源程序中所有语句之前
C.宏名必须用大写字母表示
D.宏调用比函数调用耗费时间
答案:
A
[解答]宏定义写在函数的花括号外边,作用域为其后的程序,通常在文件的最开头,因此B选项中宏定义必须位于源程序中所有语句之前是错误的。
宏名一般用大写,但不是必须用大写,因此C选项错误。
宏展开不占运行时间,只占编译时间,函数调用占运行时间(分配内存、保留现场、值传递、返回值),因此D选项错误。
11.若程序中有宏定义行:
#defineN100
则以下叙述中正确的是______。
A.在编译程序对C源程序进行预处理时用100替换标识符N
B.宏定义行中定义了标识符N的值为整数100
C.上述宏定义行实现将100赋给标识符N
D.在运行时用100替换标识符N
答案:
A
[解答]常量定义在编译时替换,所以答案选择A。
12.有以下程序
#include<stdio.h>
#defineN2
#defineMN+1
#defineNUM(M+1)*M/2
main()
{printf("%d\n",NUM);}
程序运行后的输出结果是______。
A.8
B.4
C.9
D.6
答案:
A
[解答]NUM展开后,(N+1+1)*N+1/2值为8。
13.有以下程序
#include<stdio.h>
#definePT3.5;
#defineS(x)PT*x*x;
main()
{inta=1,b=2;printf("%4.1f\n",S(a+b)):
}
程序运行后的输出结果是______。
A.程序有错无输出结果
B.31.5
C.7.5
D.14.0
答案:
A
[解答]宏定义不是C语句,末尾不需要有分号。
因此语句"printf("%4.1fn”,S(a+b));"展开后为"printf("%4.1fn",3.5;*a+b*a+b;);",所以程序会出现语法错误。
14.设有宏定义:
#defineIsDIV(k,n)((k%n==1)?
1:
0)
且变量m已正确定义并赋值,则宏调用:
IsDIV(m,5)&&IsDIV(m,7)
为真时所要表达的是______。
A.判断m被5和7整除是否都余1
B.判断m是否能被5和7整除
C.判断m被5或者7整除是否余1
D.判断m是否能被5或者7整除
答案:
A
[解答]IsDIV(k,n)判断k被n整除是否余1,所以IsDIV(m,5)&&IsDIV(m,7)就是判断m被5和7整除是否都余1。
15.若有以下程序
#include<stdio.h>
#defineS(x)x*x
#defineT(x)S(x)*S(x)
main()
{intk=5,j=2;
printf("%d,%d\n",S(k+j),T(k+j));
}
则程序的输出结果是______。
A.17,37
B.49,2401
C.17,289
D.49,289
答案:
A
[解答]S(k+j)展开后为5+2*5+2值为17,T(k+j)展开后5+2*5+2*5+2*5+2值为37,所以答案选择A。
16.若有以下程序
#include<stdio.h>
#defineS(x)(x)*(x)
#defineT(x)S(x)/S(x)+1
main()
{intk=3,j=2;
printf("%d,%d\n",S(k+j),T(k+j));
}
则程序的输出结果是______。
A.25,26
B.25,2
C.11,12
D.11,2
答案:
A
[解答]S(k+j)展开后,(3+2)*(3+2)值为25,T(k+j)展开后,(3+2)*(3+2)/(3+2)*(3+2)+1值为26答案选择A。
17.有以下程序
#include<stdio.h>
#defineSUB(X,Y)(X+1)*Y
main()
{inta=3,b=4;
printf("%d\n",SUB(a++,b++));
}
程序运行后的输出结果是______。
A.16
B.20
C.12
D.25
答案:
A
[解答]SUB展开后,(a+++1)*b++,a++表达式的值为3,b++表达式的值为4,所以(3+1)*4值为16。
18.下面结构体的定义语句中,错误的是______。
A.structord{intx;inty;intz;}structorda;
B.structord{intx;inty;intz;};structorda;
C.structord{intx;inty;intz;}a;
D.street{intx;inty;intz;)a;
答案:
A
[解答]A选项structord{intx;inty;intz;}structorda;错误,不能在定义结构体的同时,又用结构体类型名定义变量,应该写成B选项或者D选项的格式。
19.以下结构体类型说明和变量定义中正确的是______。
A.typedefstruct
{intn;charc;}REC;
RECt1,t2;
B.structREC;
{intn;charc;);
RECt1,t2;
C.typedefstructREC;
{intn=0;charc='A';}t1,t2;
D.struct
{intn;charc;}REC;
RECt1,t2;
答案:
A
[解答]B选项和C选项中,REC后不应加分号,D选项,没有typedef,REC不能作为类型名。
所以答案选择A。
20.有以下程序
#include<stdio.h>
main()
{
structSTU{charname[9];charsex;doublescore[2];};
structSTUa={"Zhao",'m',85.0,90.0},b={"Qian",'f',95.0,92.0};
b=a;
printf("%s,%c,%2.0f,%2.0f\n",b.name,b.sex,b.score[0],b.score[1]);
}
程序的运行结果是______。
A.Zhao,m,85,90
B.Qian,m,85,90
C.Zhao,f,95,92
D.Qian,f,95,92
答案:
A
[解答]结构体可以整体传递,b=a,则结构体b里的数据为a的数据,所以选择A。
21.有以下程序
#include<stdio.h>
typedefstruct{intb,p;}A;
voidf(Ac)/*注意:
c是结构变量名*/
{intj;
c.b+=1;c.p+=2;
}
main()
{inti;
Aa={1,2};
f(a);
printf("%d,%d\n",a.b,a.p);
}
程序运行后的输出结果是______。
A.1,2
B.2,4
C.1,4
D.2,3
答案:
A
[解答]结构体变量可以作为函数的参数和返回值。
作为函数的实参时,可以实现函数的传值调用。
当使用结构体变量作为函数的形参时,实参也应该是结构体变量名以实现传值调用,实参将拷贝的副本传递给形参,在被调用函数中改变形参值对于调用函数中的实参没有影响。
因此本题选择A。
22.有以下定义和语句
structworkers
{intnum;charname[20];charc;
struct
{intday;intmonth;intyear;}s;
};
structworkersw,*pw;
pw=&w;
能给w中year成员赋1980的语句是______。
A.w.s.year=1980;
B.w.year=1980;
C.pw->year=-1980;
D.*pw.year=1980;
答案:
A
[解答]嵌套的结构体定义,要访问内层的成员,需要一层层用“.”访问,所以答案选择A。
23.设有定义:
struct{charmark[12];intnum1;doublenum2;}t1,t2;
若变量均已正确赋初值,则以下语句中错误的是______。
A.t2.mark=t1.mark;
B.t2.num1=t1.num1;
C.t1=t2;
D.t2.num2=t1.num2;
答案:
A
[解答]字符数组不能整体赋值,所以A错误。
24.若有以下程序
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedefstructstu{
char*name,gender;
intscore;
}STU;
voidf(char*p)
{
p=(char*)malloc(10);
strcpy(p,"Qian");
}
main()
{
STUa={NULL,'m',290},b;
a.name=(char*)malloc(10);
strcpy(a.name,"Zhao");
b=a;
f(b.name);
b.gender='f';b.score=350;
printf("%s,%c,%d,",a.name,a.gender,a.score);
printf("%s,%c,%d\n",b.name,b.gender,b.score);
}
则程序的输出结果是______。
A.Zhao,m,290,Zhao,f,350
B.Zhao,m,290,Qian,f,350
C.Qian,f,350,Qian,f,350
D.Qian,m,290,Qian,f,350
答案:
A
[解答]f函数在新开辟的空间操作,并没有改变b.name的值,所以答案选择A。
25.有以下程序
#include<stdio.h>
structS
{inta,b;}data[2]={10,100,20,200};
main()
{structSp=data[1];
printf("%d\n",++(p.a));
}
程序运行后的输出结果是______。
A.21
B.11
C.20
D.10
答案:
A
[解答]声明data是结构体型S的数组。
初始化时data[0].a=10;data[0].b=100;data[1].a=20;data[1].b=200。
主函数中p=data[1];即p.a=data[1].a;p.b=data[1].b;执行语句printf("%dn",++(p.a));打印输出时p.a先增1再打印。
即p.a=data[1].a=20,先增1等于21,因此程序运行结果是21。
26.以下叙述中正确的是______。
A.在调用函数时,可以将结构体变量作为实参传给函数
B.函数的返回值不能是结构体类型
C.函数的返回值不能是结构体指针类型
D.结构体数组不能作为参数传给函数
答案:
A
[解答]函数的返回值可以是结构体类型、结构体指针类型,结构体数组可以作为参数传给函数,所以答案选择A。
27.以下叙述中正确的是______。
A.结构体中可以含有指向本结构体的指针成员
B.结构体变量的地址不能作为实参传给函数
C.结构体数组名不能作为实参传给函数
D.即使是同类型的结构体变量,也不能进行整体赋值
答案:
A
[解答]结构体变量的地址、结构体数组名都可以作为函数参数,同类型的结构体变量,可以进行整体赋值,所以答案选择A。
28.有以下程序
#include<stdio.h>
structS{intn;inta[20];};
voidf(structS*P)
{inti,j,t;
for(i=0;i<p->n-1;i++)
for(j=i+1;j<p->n;j++)
if(p->a[i]>p->a[j]){t=p->a[i];p->a[i]=p->a[j];p->a[j]=t;}
}
main()
{inti;structSs={10,{2,3,1,6,8,7,5,4,10,9}};
f(&s);
for(i=0;i<s.n;i++)printf("%d,",s.a[i]);
}
程序运行后的输出结果是______。
A.1,2,3,4,5,6,7,8,9,10,
B.10,9,8,7,6,5,4,3,2,1,
C.2,3,1,6,8,7,5,4,10,9,
D.10,9,8,7,6,1,2,3,4,5,
答案:
A
[解答]本题的子函数f的功能是对结构体变量s中第二个成员数组中所有的数据进行从小到大的冒泡排序,因此结果是A。
29.有以下程序
#include<stdio.h>
#include<string.h>
typedefstruct{charname[9];charsex;floatscore[2];}STU;
STUf(STUa)
{STUb={"Zhao",'m',85.0,90.0};inti;
strcpy(a.name,b.name);
a.sex=b.sex;
for(i=0;i<2;i++)a.seore[i]=b.score[i];
returna;
}
main()
{STUc={"Qian",'f1,95.0,92.0},d;
d=f(c);
printf("%s,%c,%2.0f,%2.0f\n",d.name,d.sex,d.score[0],d.score[1]);
}
程序的运行结果是______。
A.Zhao,m,85,90
B.Qian,m,85,90
C.Qian,f,95,92
D.Zhao,f,95,92
答案:
A
[解答]f函数返回的结构体与f函数内定义的b结构体相同,所以答案选择A。
30.若有以下程序
#include<stdio.h>
typedefstructstu{
charname[10],gender;
intscore;
}STU;
voidf(STUa,STUb)
{b=a;
printf("%s,%c,%d,",b.name,b.gender,b.score);
{
main()
{STUa={"Zhao",'m',290},b={"Qian",'f',350};
f(a,b);
printf("%s,%c,%d\n",b.name,b.gender,b.score};
}
则程序的输出结果是______。
A.Zhao,m,290,Qian,f,350
B.Zhao,m,290,Zhao,m,290
C.Qian,f,350,Qian,f,350
D.Zhao,m,290,Zhao,f,350
答案:
A
[解答]f函数将结构体a赋值给b,然后输出,注意这是值传递,不会改变main中结构体b值,所以答案选择A。
31.有以下结构体说明、变量定义和赋值语句
structSTD
{charname[10];
intage;
charsex;
}s[5],*ps;
ps=&s[0];
则以下scanf函数调用语句有错误的是______。
A.scanf("%d",ps->age);
B.scanf("%d",&s[0].age);
C.scanf("%c",&(ps->sex));
D.scanf("%s",s[0].name};
答案:
A
[解答]ps->age不是地址,不能用于scanf函数中。
所以选择A。
32.有以下程序
#include<stdio.h>
structord
{intx,y;}dt[2]={1,2,3,4]
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 全国计算机 二级 语言 笔试 选择题 分类 模拟
![提示](https://static.bdocx.com/images/bang_tan.gif)