二级C语言分类模拟题508.docx
- 文档编号:8545849
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:15
- 大小:24.22KB
二级C语言分类模拟题508.docx
《二级C语言分类模拟题508.docx》由会员分享,可在线阅读,更多相关《二级C语言分类模拟题508.docx(15页珍藏版)》请在冰豆网上搜索。
二级C语言分类模拟题508
二级C语言分类模拟题508
(总分:
52.00,做题时间:
90分钟)
一、选择题(总题数:
35,分数:
52.00)
1.下列排序方法中,最坏情况下比较次数最少的是______。
(分数:
2.00)
A.冒泡排序
B.简单选择排序
C.直接插入排序
D.堆排序 √
解析:
[解析]冒泡排序、直接插入排序与简单选择排序法在最坏情况下均需要比较n(n-1)/2次,而堆排序在最坏情况下需要比较的次数是nlog2n,因此本题答案为D。
2.以下选项中,能用作数据常量的是______。
(分数:
2.50)
A.115L √
B.0118
C.1.5e1.5
D.o115
解析:
[解析]A选项中115L表示115是长整型数据,合法。
B选项是八进制常量的表示方法,但是在八进制中不能含有数字8,因此B选项错误。
C选项中e后面应该是整数,不能是小数(1.5),因此C选项错误。
D选项中八进制常量应该是数字“0”开始,而不是字母“o”开始。
故本题答案为A。
3.有以下程序:
#include<stdio.h>
main()
{inta=1,b=2;
for(;a<8;a++){b+=a;a+=2;}
printf("%d,%d/n",a,b);
程序运行后的输出结果是______。
(分数:
1.00)
A.9,18
B.8,11
C.7,11
D.10,14 √
解析:
[解析]第一次循环a的值为1,满足条件,执行b+=a与a+=2,则b的值变为3,a的值变为3。
执行a++,a的值为4,满足条件进入第二次循环,执行完循环体后b的值为7,a的值为6。
执行a++,a的值为7,满足条件进入第三次循环,执行完循环体后b的值为14,a的值为9。
执行++,a的值变为10,不满足条件,循环结束。
所以选择D选项。
4.输出语句:
printf("%d/n",11+011);的输出结果是______。
(分数:
1.00)
A.20 √
B.22
C.022
D.021
解析:
[解析]printf("%d/n",11+011),11为十进制,011为八进制形式,打印格式%d表示十进制格式输出,因此,先将八进制数转化为十进制,011(8)=81×1+1×80=9,相当于printf("%d/n",11+9),故答案为20,A选项正确。
5.设有如下定义:
struct{intn;charc;}a[2],*p=a;
则以下错误引用结构体成员n的是______。
(分数:
1.00)
A.(*a)->n √
B.a[0].n
C.p->n
D.(*p).n
解析:
[解析]若已定义了一个结构体变量和一个同一结构体类型的指针变量,并使该指针指向同类型的变量,则可用以下3种形式来引用结构体变量中的成员,其中结构体变量名也可以是已定义的结构体数组的数组元素:
结构体变量名.成员名;指针变量名->成员名;(*指针变量名).成员名。
题目中a为数组名是地址常量,不是指针变量,A选项引用错误。
a[0]为变量名,B选项引用正确。
p为指针,且正确的指向结构体变量,C选项引用正确。
D选项符合第三种引用方式,引用正确。
6.以下程序中函数sort()的功能是对数组a中的数据进行由大到小的排序。
#include<stdio.h>
voidsort(inta[],intn)
{inti,j,t;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(a[i]<a[j])
{t=a[i];a[i]=a[j];a[j]=t;
}
}
main()
{inta[10]={1,2,3,4,5,6,7,8,9,10),i;
sort(&a[1],7);
for(i=0;i<10;i++)
printf("%d,",a[i]);
}
程序运行后的输出结果是______。
(分数:
2.00)
A.1,2,3,4,5,6,7,8,9,10,
B.10,9,8,7,6,5,4,3,2,1,
C.1,8,7,6,5,4,3,2,9,10, √
D.1,2,10,9,8,7,6,5,4,3,
解析:
7.程序调试的任务是______。
(分数:
1.00)
A.设计测试用例
B.验证程序的正确性
C.发现程序中的错误
D.诊断和改正程序中的错误 √
解析:
[解析]程序调试的主要任务是改正程序中的错误,而软件测试是发现错误。
8.有以下程序:
#include<stdio.h>
main()
{
charch[]="uvwxyz",*pc;
pc=ch;
printf("%c/n",*(pc+5));
}
程序运行后的输出结果是______。
(分数:
1.00)
A..z √
B.0
C.元素ch[5]的地址
D.字符y的地址
解析:
[解析]语句pe=ch;使得指针变量指向字符数组ch的首地址,即指向字符"u"。
则pe+5指向的是字符向后移动5位,指向字符"z"。
所以输出的*pe+5的值即为"z"。
因此A选项正确。
9.对于基类型相同的两个指针变量之间,不能进行的运算是______。
(分数:
1.00)
A.<
B.=
C.+ √
D.-
解析:
10.有以下程序:
#include<stdio.h>
doublef(doublex);
main()
{doublea=0;
inti;
for(i=0;i<30;i+=10)a+=f((double)i);
printf("%3.0f/n",a);
}
doublef(doublex)
{returnx*x+1;}
程序运行后的输出结果是______。
(分数:
1.00)
A.500
B.401
C.503 √
D.1404
解析:
[解析]本题重点考察函数的定义和调用,第一次循环,a=0,i=0,返回值a=0*0+1+0=1;第二次循环,a=1,i=10,返回值a=10*10+1+1=102;第三次循环,a=102,i=20,返回值a=20*20+1+102=503;第四次循环,a=503,i=30,不符合i<30,跳出循环,最后结果输出a=503。
11.C语言中,下列不合法的字符常量是______。
(分数:
1.00)
A."/xff"
B."/65"
C."&"
D."/028" √
解析:
[解析]选项A,"/xff"中"/x"组合表示是一个十六进制数ffH=10进制的255,它代表一个不可见字符的ASCII码,合法。
选项B"/65"同理""十三个十进制数"/ddd"表示的是八进制数。
"/65"="/065"=10进制的53,是"F"的ASCII码表示。
选项C,单"&"字,合法。
选项D中"/028"同上表示是一个八进制数,但八进制数中逢八则进一,是不会出现8的,所以格式虽对但数值错了。
不合法。
12.有以下程序:
#include<stdio.h>
intfun(intx[],intn)
{staticintsum=0,i;
for(i=0;i<n;i++)sum+=x[i];
returnsum;
}
main()
{inta[]={1,2,3,4,5},b[]={6,7,8,9},s=0;
s=fun(a,5)+fun(b,4);printf("%d/n",s);
}
程序执行后的输出结果是()。
(分数:
1.00)
A.45
B.50
C.60 √
D.55
解析:
[解析]函数fun的功能是求数组的n个元素之和。
fun(a,5)=15。
由于sum是静态局部变量,所以保持15不变,fun(b,4)=45,所以s=fun(a,5)+fun(b,4)=60。
13.有两个关系R、S如下:
R
A
B
C
a
3
2
b
0
1
c
2
1
S
A
B
a
3
b
0
c
2
由关系R通过运算得到关系S,则所使用的运算为______。
(分数:
2.00)
A.选择
B.投影 √
C.插入
D.连接
解析:
[解析]投影运算是指对于关系内的域指定可引入新的运算。
本题中S是在原有关系R的内部进行的,是由R中原有的那些域的列所组成的关系。
所以选择B。
14.以下叙述中正确的是______。
(分数:
2.00)
A.C语言程序将从源程序中第一个函数开始执行
B.可以在程序中由用户指定任意一个函数作为主函数,程序将从此开始执行
C.C语言规定必须用main作为主函数名,程序将从此开始执行,在此结束 √
D.main可作为用户标识符,用以命名任意一个函数作为主函数
解析:
[解析]main是主函数的函数名,表示这是一个主函数。
每一个C源程序都必须有且只能有一个主函数。
程序要从main函数开始执行,最后在main函数中结束。
本题选C。
15.若变量已正确定义为int型,要给a、b、c输入数据,正确的输入语句是______。
(分数:
1.00)
A.read(a,b,c);
B.scanf("%d%d%d",a,b,c);
C.scanf("%D%D%D",&a,%b,%c);
D.scanf("%d%d%d",&a,&b,&c); √
解析:
[解析]scanf是键盘输入语句,%d是打印十进制文件,&x就是把你从键盘输入的值赋给X,后面依此类推,因此正确答案为D。
16.有以下程序:
#include<stdio.h>
voidf(intx[],intn)
{if(n>1)
{printf("%d,",x[0]);
f(&x[1],n-1);
printf("%d,",x[0]);
}
else
printf("%d,",x[0]);
}
main()
{intz[3]={4,5,6};
f(z,3);
printf("/n");
}
程序运行后的输出结果是______。
(分数:
1.00)
A.6,5,4,6,5,4,
B.4,5,6,5,4, √
C.4,5,6,4,5,6,
D.6,5,4,5,6,
解析:
[解析]本题考查了函数的递归调用,在main函数中调用f(z,3)后,系统进入f()函数,随后进入if语句,输出x[0];再进入f()函数时,存在&x[1]函数的递归,输出x[1];再进入f()函数,再进行递归,输出x[2];随后结束返回输出上一个f()函数,输出x[1];再返回第一个f()函数中,输出x[0],程序运行后的输出结果是4,5,6,5,4。
因此答案为B选项。
17.下面程序的输出结果为______。
#include<string.h>
main()
{
charP[17]="abc"="ABC".STR[50]="xyz";
strcpy(str,strcat(p1,p2));
printf(%s,str);
}
(分数:
2.00)
A.xyzabcABC
B.abcABC √
C.xyzabc
D.xyzABC
解析:
[解析]strcpy(strl,s1):
作用是将字符串s1拷贝到字符数组strl中去。
strcat(字符数组1,字符数组2):
把字符串2接到字符串1的后面,结果放在字符数组1中,函数调用后返回字符数组1的地址。
本题定义了三个字符数组pl,p2,str,strcat(pl,p2)函数的作用是将字符串数组p2接到字符串p1的后面,结果放在字符数组p1中,再通过strcpy()函数将该字符串拷贝到str数组中,原str数组中的字符串xyz被覆盖,因此打印输出字符串str即可得到abcABC。
18.有以下程序:
#include<stdio.h>
main()
{
inta=1,b=2,c=3,x;
x=(a^b)&c;
printf("%d/n",x);
}
程序运行后的输出结果是______。
(分数:
1.00)
A.3 √
B.1
C.2
D.0
解析:
[解析]本题考查位运算符以及相关运算,^为按位或,&为按位与,那么a^b为3,再与c按位与仍然为3,所以答案为A选项。
19.下列选项中,能正确定义数组的语句是______。
(分数:
1.00)
A.intnum[0..2008];
B.intnum[];
C.intN=2008;intnum[N];
D.#defineN2008intnum[N]; √
解析:
[解析]C语言不允许定义动态数组,定义数组的大小必须为常量表达式。
A选项错误,C语言中数组没有此类型的定义方法;B选项错误,定义数组应指明数组大小,如果不指明数组大小,需要给定初值的个数;C选项错误,N为变量,不能用来定义数组大小。
因此D选项正确。
20.下列合法的声明语句是______。
(分数:
1.00)
A.int_abc=50; √
B.doubleint=3+5e2.5;
C.longdo=1L;
D.float3_asd=3e-3;
解析:
[解析]标识符是由字母、数字或下划线组成,并且它的第一个字符必须是字母或下划线。
B选项int不是表达变量类型的标识符,它不能再用做变量名和函数名。
C选项do是C语言的一个关键字。
D选项标识符只能以字母或下划线开始。
21.若有以下程序:
#include<stdio.h>
voidfun(float*a,float*b)
{floatw;
*a=*a+*a;w=*a;*a=*b;*b=w;
}
main()
{floatx=2..0,y=3.0,*px=&x,*py=&y;
fun(px,py);printf("%2.0f,%2.0f/n",x,y);
}
程序的输出结果是______。
(分数:
2.50)
A.4,3
B.2,3
C.3,4 √
D.3,2
解析:
[解析]#include<stdio.h>
voidfun(float*a,float*b)//a即指向px的指针,b即指向py的指针,则*a指向x,*b指向y
{
floatw;
*a=*a+*a;//将x地址存放的数据自加,x变为4
w=*a;
*a=*b;
*b=w;//将x和y地址里面的数据互换,则x变为3,y变为4
}
main()
{
floatx=2.0,y=3.0,*px=&x,*py=&y;//px和py分别是指向x和y地址的指针
fun(px,py);
printf("%2.0f,%2.0f/n",x,y);//%2.0f表示结果前面有2个空格,小数点后有0位,即保留到个位
}
22.以下程序调用fun函数求数组中最大值所在元素的下标:
#include<stdio.h>
voidfun(int*s,intn,int*k)
{inti;
for(i=0,*k=i;i<n;i++)
if(s[i]>s[*k])______;
}
main()
{inta[5]={1,6,2,8,0},k;
fun(a,5,&k);
printf("%d%d/n",k,a[k]);
}
在横线处应填入的内容是______。
(分数:
1.00)
A.*k=i √
B.k=i
C.*k=i-s
D.k=i-s
解析:
[解析]fun函数的功能是求数组中最大值所在元素的下标。
通过for循环语句,每次将最大的数给*k,即*k=i。
因此A选项正确。
23.以下叙述中正确的是
(分数:
1.00)
A.C程序中注释部分可以出现在程序中任意合适的地方 √
B.花括号“{”和“}”只能作为函数体的定界符
C.构成C程序的基本单位是函数,所有函数名都可以由用户命名
D.分号是C语句之间的分隔符,不是语句的一部分
解析:
[解析]C语言函数、语句的概念、注释以及C程序的基本结构,“/*”与“*/”之间的信息称为注释信息,在C语言中,允许在任何能够插入空格符的位置插入注释,但C语言的注释不能进行嵌套;在C语言中,函数体是从花括号“{”开始,到花括号“}”结束。
但没有规定花括号“{”和“}”只能作为函数体定界符;选项C中前半句是正确的,在C程序中由有一个或多个函数所组成,但不是所有的函数都由用户自己命名,有些函数比如库函数,主函数main()就不能由用户来命名;在C语言中明确规定每条语句以分号“;”结束,分号是语句不可缺少的一部分。
24.有三个关系R、S和T如下:
R
A
B
C
a
1
2
b
2
1
c
3
1
S
A
D
c
4
T
A
B
C
D
c
3
1
4
则由关系R和S得到关系T的操作是______。
(分数:
1.00)
A.自然连接 √
B..交
C.投影
D..并
解析:
[解析]自然连接是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉,因此根据T中元组可以判断关系R和S做的是自然连接操作,答案为A。
25.若i、j已定义成int型,则下列程序段中内循环体的总执行次数是______。
for(i=6;i>0;i--)
for(j=0;j<4;j++){…}
(分数:
2.50)
A.20
B.24 √
C.25
D.30
解析:
[解析]本题考查for循环的使用。
对于第1个for循环,任何一个i,内层j的循环都要使j=0到3,j=4时不符合,所以退出j循环;然后i减1,j仍然要从0~3,j=4时退出j循环直到i变成0,退出i循环。
第一条for语句执行6次,第二条for语句执行4次,所以内循环体执行6*4=24次。
26.设一棵树的度为3,共有27个结点,其中度为3,2,0的结点数分别为4,1,10。
该树中度为1的结点数为______。
(分数:
1.00)
A.12 √
B.13
C.11
D.不可能有这样的树
解析:
[解析]在树结构中,一个结点所拥有的后件个数称为该结点的度,所有结点中最大的度称为树的度。
根据题意,度为3的树第1层1个根结点,第2层3个子结点,每个子结点下各3个子结点,所以第3层共9个子结点,前3层共13个结点。
第3层有一个结点度为2即有2个子结点,本层其他结点各1个子结点;即第4层共10个结点。
前4层共23个结点。
第4层中的两个结点下各有一个子结点,即第5层有2个结点,此2个结点下各有一个子结点。
第3层有8个度为1的结点,第4层有2个度为1的结点,第5层有2个度为1的结点,8+2+2=12。
故本题答案为A选项。
27.设有如下定义:
intarr[]={6,7,8,9,10};
int*ptr;
ptr=arr;
*(ptr2)=2;
printf("%d,%d/n",*ptr,*(ptr2));
则下列程序段的输出结果为______。
(分数:
2.50)
A.8,10
B.6,8
C.7,9
D.6,2 √
解析:
[解析]程序中ptr指针指向数组arr的首地址,*ptr=arr[0]=6,*(ptr2)=2,故选D。
28.有以下程序:
#include<stdio.h>
intm=13;
intfun2(intx,inty)
{intm=3;
return(x*y-m);
}
main()
{inta=7,b=5;
printf("%d/n",fun2(a,b)/m);
}
程序运行后的输出结果是
(分数:
1.00)
A.1
B.2 √
C.7
D.10
解析:
29.有以下程序
#include<stdio.h>
main()
{
inti,t[][3]={9,8,7,6,5,4,3,2,1};
for(i=0;i<3;i++)
printf("%d",t[2-i][i]);
}
程序执行后的输出结果是______。
(分数:
2.00)
A.357 √
B.753
C.369
D.751
解析:
[解析]本题考查的是for循环与二维数组的定义和引用。
当定义二维数组的初始化列表只使用一重花括号时,其中的每个值依次代表从第1行的第1个元素起,直到第1行满,接着代表第2行、第3行……的每一个元素。
程序中的循环将循环3次,循环变量i的值分别是0、1、2,所以3次循环中输出的数分别是:
t[2-0][0]、t[2-1][1]、t[2-2][2],即t[2][0]、t[1][1]、t[0][2],所以最后输出的结果为357。
故应该选择A。
30.以下叙述中错误的是______。
(分数:
1.00)
A.只要类型相同,结构体变量之间可以整体赋值
B.函数的返回值类型不能是结构体类型,只能是简单类型 √
C.可以通过指针变量来访问结构体变量的任何成员
D.函数可以返回指向结构体变量的指针
解析:
[解析]本题考查结构体相关知识。
函数返回值可以是结构体,所以B选项错误。
31.若有下列定义(设int类型变量占2个字节):
inti=8,j=9;
则下列语句:
printf("i=%%d,j=%%d/n",i,j);
输出的结果是______。
(分数:
2.50)
A.i=8,j-9
B.i=%d,j=%d √
C.i=%8,j=%9
D.8,9
解析:
[解析]本题考查函数的输出格式。
在printf函数中,格式说明符中有两个“%”,表示将第1个%后面的字符原样输出,并不输出其对应的变量值。
32.下列定义变量的语句中错误的是______。
(分数:
2.50)
A.int_int;
B.doubleint_;
C.charFor;
D.floatUS$; √
解析:
[解析]C语言规定,变量的标识符只能由字母、数字和下划线3种字符组成,且首字符必须为字母或下划线。
在C语言中大写字母和小写字母被认为是两个不同的字符。
选项A定义的变量标识符int和选项B定义的变量标识符int与C语言的关键字int是不同的,是正确的变量标识。
选项C定义的变量标识符For与C语言中的关键字for是两个不同的标识符,所以选项C是正确的,而选项D包含有特殊字符$,因而其不符合C语言的变量命名规定。
33.以下选项中,能用作用户标识符的是______。
(分数:
1.00)
A._0_ √
B.8_8
C.void
D.unsigned
解析:
[解析]
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 二级 语言 分类 模拟 508