二级C语言分类模拟题541.docx
《二级C语言分类模拟题541.docx》由会员分享,可在线阅读,更多相关《二级C语言分类模拟题541.docx(16页珍藏版)》请在冰豆网上搜索。
二级C语言分类模拟题541
二级C语言分类模拟题541
(总分:
60.00,做题时间:
90分钟)
一、选择题(总题数:
40,分数:
60.00)
1.在printf的格式字符中,e格式字符的作用是______。
(分数:
2.00)
A.以十六进制无符号形式输出整数
B.以带符号的十进制形式输出整数
C.以指数形式输出实数 √
D.以字符形式输出,且只输出一个字符
解析:
2.数据结构中,与所使用的计算机无关的是数据的______。
(分数:
2.50)
A.存储结构
B.物理结构
C.逻辑结构 √
D.线性结构
解析:
[解析]数据的逻辑结构反映的是数据元素之间的逻辑关系,与使用的计算机无关。
3.有两个关系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,则所使用的运算为______。
(分数:
1.00)
A.选择
B.投影 √
C.插入
D.连接
解析:
[解析]投影运算是从关系模式中挑选若干属性组成新的关系,这是从列的角度进行的运算,相当于对关系进行垂直分解。
本题中,S是在原有关系R的内部进行的,是由R中原有的那些域的列所组成的关系,因此选择B。
4.以下不能正确定义二维数组的选项是______。
(分数:
2.00)
A.inta[2][2]={{1},{2)};
B.inta[][2]={1,2,3,4};
C.inta[2][2]={{1},2,3}; √
D.inta[2][]={{1,2),{3,4}};
解析:
5.有以下程序:
#inelude<stdio.h>
#include<string.h>
typedefstructStu{
charname[10];
chargender;
intscore;
}STU;
voidf(char*name,char*gender,int*score)
{strcpy(name,"Qian");
*gender="f";
*score=350;
}
main()
{STUa={"Zhao","m",290},b;
b=a;
f(b.name,&b.gender,&b.score);
printf("%s,%c,%d,",a.name,a.gender,a,score);
printf("%s,%c,%d/n",b.name,b.gender,b.score);
}
程序运行后的输出结果是______。
(分数:
1.00)
A.Zhao,m,290,Qian,f,350 √
B.Qian,in,290,Zhao,m,290
C.Zhao,m,290,Zhao,m,290
D.Zhao,m,290,Qian,m,290
解析:
[解析]main函数中,首先定义两个结构体stu类型的变量a,b,把a成员信息复制给b成员后,再调用函数f(),在f()函数中,利用指针重新对b成员信息进行赋值,分别输出a,b,成员信息,答案为A选项。
6.有如下程序:
#include<stdio.h>
voidconvert(charch)
{
if(eh<"X")convert(ch+1);
printf("%c",ch);
main()
{
convert("W");
printf("/n");
}
程序运行后的输出结果是______。
(分数:
1.00)
A.YZ
B.VW
C.XY
D.XW √
解析:
[解析]在main函数中,执行convert("W")函数,因为‘W’比‘X’小,满足if语句,再执行convert(ch+1);此时ch="X",不满足条件,输出X,完成后,返回上一次convert中,输出上次ch="W",因此答案为D选项。
7.有以下程序:
#include<stdio.h>
intsum(int*array,intlen)
{
if(len==1)
returnarray[1];
else
returnarray[1]+sum(array+1,len-1);
}
main()
{
intarray[5]={0,9,1,2},res;
res=sum(array,3);
printf("%d/n",res);
}
程序运行后的输出结果是______。
(分数:
1.00)
A.27
B.11
C.8
D.12 √
解析:
[解析]main()函数先定义一个数组array,调用sum(array,3)函数,此时函数形参array指向数组首地址,形参len的值为3,在sum函数中,array[1]指向数组中的元素9,sum函数调用3次,完成的功能是将数组array[1]+array[2]+array[3]累加后返还给输出,累加后的值为12。
因此,答案为D选项。
8.以下对联合类型叙述正确的是______。
(分数:
2.00)
A.可以对联合变量名直接赋值
B.使用联合变量的目的是为了节省内存 √
C.任何一个联合变量可以同时引用联合中的不同成员
D.联合类型定义中不能同时出现结构类型的成员
解析:
9.若定义:
inta=511,*b=&a;,则printf("%d/n",*b);的输出结果为______。
(分数:
0.50)
A.无确定值
B.a的地址
C.512
D.511 √
解析:
10.以下程序段的执行结果为______。
#definePLUS(X,Y)X+Y
main()
{intx=1,y=2,z=3,sum;
sum=PLUS(x+y,z)*PLUS(y,z);
printf("SUM=%d",sum);
}
(分数:
1.00)
A.SUM=9
B.SUM=12 √
C.SUM=18
D.SUM=28
解析:
[解析]表达式sum=PLUS(x+y,z)*PLUS(y,z)用带参的宏替换为sum=x+y+z*y+z,sum的值为12。
11.以下程序的输出结果是______。
#include<stdio.h>
main()
{inta=4,b=3,c=2,d=1;
printf("%d",a<b?
a:
d<c?
d:
b);}
(分数:
2.00)
A.1 √
B.3
C.2
D.4
解析:
12.算法中,对需要执行的每一步操作,必须给出清楚、严格的规定.这属于算法的______。
(分数:
2.00)
A.正当性
B.可行性
C.确定性 √
D.有穷性
解析:
[解析]算法具有5个特性:
有穷性、确定性、可行性、有零个或多个输入、有一个或多个输出。
13.设有某函数的说明为:
int*func(inta[10],intn);
则下列叙述中,正确的是______。
(分数:
1.00)
A.形参a对应的实参只能是数组名
B.说明中的a[10]写成a[]或*a效果完全一样 √
C.func的函数体中不能对a进行移动指针(如a++)的操作
D.只有指向10个整数内存单元的指针,才能作为实参传给a
解析:
[解析]本题重点考查返回指针值的函数的相关知识。
返回指针值的函数,一般定义形式为:
类型名*函数名(参数列表)。
fune函数被定义为指针型函数,它的一个形参为整型数组a,形参a对应的实参可以是数组名和指针,A、D错误。
实参传递给形参a的是地址值,实参和形参指向同一段内存单元,在fune函数体内对形参a进行移动指针操作,可以改变实参的值,C错误。
14.对长度为n的线性表作快速排序,在最坏情况下,比较次数为______。
(分数:
1.00)
A..n
B.n-1
C.n(n-1)
D.n(n-1)/2 √
解析:
[解析]快速排序最坏情况就是每次选的基准数都和其他数做过比较,共需比较(n-1)+(n-2)+…+1=n(n-1)/2,故选D。
15.在执行完下面的C语句段之后,则B的值是______。
chara="A";
intb;
B=((34&&56)&&(a<"b"));
(分数:
2.00)
A.0
B.1 √
C.TRUE
D.FALSE
解析:
16.以下各选项中的代码段执行后,变量y的值不为1的是______。
(分数:
1.00)
A.intx=5,y=0;if(5)y=1;
B.intx=5,y=0;if(x)y=1;
C.intx=10,y=0;if(x=y)y=1; √
D.intx=5,y=10;if(x=y)y=1;
解析:
[解析]选项A的if条件表达式5的值为真,执行y=1,y的值为1;选项B的if条件表达式x的值为5,也是真,执行y=1,y的值为1;选项C的if条件表达式x=y是赋值语句,将y的值0赋给x,表达式的值为0,if语句不执行,y值为0;选项D的if条件表达式x=y是赋值语句,将y的值10赋给x,表达式的值为10,执行y=1,y的值为1。
故本题答案为C选项。
17.以下程序的输出结果是______。
main()
{chara[]="programming",b[]="language";
char*p1,*p2;
inti;
p1=a;p2=b;
for(i=0;i<7;i++)
if(*(p1+i)==*(p2+i))printf("%c",*(p1+i));
}
(分数:
2.00)
A.gm
B.rg
C.or
D.ga √
解析:
18.有以下程序:
#include<stdio.h>
#defineSUB(X,Y)(X+1)*Y
main()
{inta=3,b=4;
printf("%d/n",SUB(a++,b++));
}
程序运行后的输出结果是______。
(分数:
5.00)
A.25
B.20
C.12
D.16 √
解析:
[解析]本题考查宏定义。
宏定义只是做简单的替换,++运算符是先使用后自增1,所以语句SUB(a++,b++)=(a+++1)*b++(a+++1)*b++=(3+1)*4=16,选项D正确。
19.关于程序设计基本概念,以下叙述错误的是______。
(分数:
1.00)
A.计算机可以直接执行由任意高级语言编写的程序 √
B.高级语言都有与之对应的编译程序或解释程序
C.用任何一种计算机高级语言都可以把算法转换为程序
D.结构化算法可以解决任何复杂的问题
解析:
[解析]计算机只能识别机器语言,不能直接识别由高级语言编写的程序,故答案为A选项。
20.以下叙述中正确的是()。
(分数:
1.00)
A.预处理命令行必须位于C源程序的起始位置
B.在C语言巾,预处理命令行都以"#"开头 √
C.每个C程序必须在开头包含预处理命令行;#include<stdio.h>
D.C语言的预处理不能实现宏定义和条件编译的功能
解析:
[解析]预处理命令行可以出现在C源程序的任何位置,故选项A不正确。
#include<stdio.h>预处理命令行的意思是将stdio.h头文件插入源程序中该行命令所在的位置,表示我们将在后续行中用到stdio.h头文件中定义的函数或类型,若程序中没有用到这些函数或类型就可以不用包含此头文件,故选项C不正确。
C提供的预处理功能主要有:
宏定义、文件包含和条件编译三种功能,故选项D不正确。
在C语言中,预处理命令行都以”#”开头,故应该选择B。
21.有如下程序:
#include<stdio.h>
main()
{
inti,*ptr;
intarray[5]={5,3,1};
for(ptr=array,i=0;i<5;i++,ptr++)
{
if(*ptr==0)
putchar("X");
else
putchar("A"+*ptr);
}
printf("/n");
}
程序运行后的输出结果是______。
(分数:
1.00)
A.FDBXX √
B.FFFXX
C.FDBBB
D.ABCDE
解析:
[解析]在对数组进行初始化时,如果对数组的全部元素赋以初值,定义时可以不指定数组长度,如果被定义数组的长度与初值个数不同,则数组长度不能省略;如果在说明数组时给出了长度,但没有给所有的元素赋予初始值,而只依次给前面的几个数组元素赋予初值,那么C语言将自动对余下的元素赋初值,则array={5,3,1,0,0}。
程序执行过程为:
执行for循环,将数组首地址赋给指针ptr,依次遍历每一个元素,如果数组元素为0则输出‘X’,如果不为0则按照字母表输出字符‘A’后第array[i]个字符。
程序运行后的输出结果为:
FDBXX,故A选项正确。
22.若有定义语句:
int(*p)[M];其中的标识符p是
(分数:
1.00)
A.M个指向整型变量的指针
B.指向M个整型变量的函数指针
C.一个行指针,它指向具有M个整型元素的一维数组 √
D.具有M个指针元素的一维指针数组,每个元素都只能指向整型量
解析:
23.有以下程序:
#include<studio.h>
#defineF(X,Y)(X)*(Y)
main()
{
inta=3,b=4;
printf("%d/n",F(a++,b++));
}
(分数:
1.00)
A.12 √
B.15
C.16
D.20
解析:
[解析]本题考核的知识点是宏与自增运算符的综合运用.在程序中先用表达式将宏替换掉,则输出语句中的表达式为(a++)*(b++),而a++的值为3,b++的值为4。
因此最后的值为3*4=12。
所以,4个选项中选项A符合题意。
24.设有以下程序段:
structperson
{
floatweight;
charsex;
charname[10];
}rec,*ptr;
ptr=&rec;
从键盘读入字符串给结构体变量rec的name成员,错误的输入语句是______。
(分数:
1.00)
A.scanf("%s",rec->name); √
B.scanf("%s",rec.name);
C.scanf("%s",(*ptr).name);
D.scanf("%s",ptr->name);
解析:
[解析]题中声明了—个结构类型person的同时,定义了2个结构变量,一个为rec,另一个为指针变量ptr。
A选项中,rec是一个结构体变量,结构体变量访问结构成员的方式应该为:
"rec.成员名",这里用法错误,答案为A选项。
25.以下叙述中错误的是______。
(分数:
1.00)
A.C语言编写的函数源程序,其文件名后缀可以是C
B.C语言编写的函数都可以作为一个独立的源程序文件
C.C语言编写的每个函数都可以进行独立的编译并执行 √
D.一个C语言程序只能有一个主函数
解析:
[解析]函数是指预先定义功能块,其目的是提高程序的重用性。
在C语言中函数的源程序,后缀名可以为C。
C语言所编写的函数都可以是一个独立的源文件。
一个C语言程序只能有一个主函数。
C语言中编写的函数不是每个都可以独立地编译和执行的,因为C语言中程序的开始为主函数,如果程序中没有主函数则无法进行编译和执行。
26.字符串"//"ABCDEF"/"的长度是____。
(分数:
1.00)
A.15
B.10 √
C.7
D.8
解析:
[解析]本题涉及字符串最基本两个概念:
①字符串的长度是指字符串中字符的个数,但不包括字符串结束符:
②以反斜杠“/”开头的特殊字符序列,意思是把反斜杠后面的字符序列转换成特定的含义,而不是原来的含义,不包含在字符串长度之内,“1”连同后面的字符为一个长度。
27.有以下程序:
#include<stdio.h>
intfun()
{
staticintx=1;
x+=1;
returnX;
}
main()
{
iti,s=1;
for(i=1;i<=5;i++)s+=fun();
printf("%d/n",s);
}
程序运行后的输出结果是______。
(分数:
1.00)
A.120
B.11
C.6
D.21 √
解析:
[解析]fun函数中的变量x为静态局部变量,占用固定的内存单元,下一次调用时仍可以保留上次调用时的直。
也就是说,如果多次调用fun函数,x的定义只在第一次调用时有效,从第二次调用开始,x的定义相当于不存在,直接使用上次x的值。
fun函数被调用了5次,每次调用后的返回值累加到s上。
5次调用后,x的值为6,s的值为1+2+3+4+5+6=21,因此D选项正确。
28.C语言程序的执行是______。
(分数:
2.00)
A.从程序的主函数开始,到程序的主函数结束 √
B.从程序的主函数开始,到程序的最后一个函数结束
C.从程序的第一个函数开始,到程序的最后一个函数结束
D.从程序的第一个函数开始,到程序的主函数结束
解析:
29.以下选项中,能够正确利用随机函数rand(),产生一个英文字母的表达式是______。
(分数:
1.00)
A.rand()%2==0?
rand()%"A":
rand()%"a"
B.rand()%26+"A"||rand()%26+"a"
C.rand()%26+"A"&&rand()%26+"a"
D.rand()%2==0?
rand()%26+"A":
rand()%26+"a" √
解析:
[解析]rand()函数是产生随机数的函数,它可以生成0~RAND_MAX之间的一个随机数,其中RAND_MAX是stdlib.h中定义的一个整数。
通常如果我们需要随机0~N-1之间的一个随机数,需要使用rand()的结果对N求模即可。
选项A中,rand()%2只有两个值0或1,所以当rand()%2的结果为0时,整个表达式的值是rand()%"A",这里"A"要转换成ASCII码值65,所以结果为0~64之间的一个随机数,当rand()%2的结果为1时,整个表达式的值是rand()%"a","a"的ASCII码值为97,所以结果是0~96之间的一个随机数,可见选项A错误;逻辑或运算符||或逻辑与运算符&&的结果都只能是0或非0,所以选项B、C也是错误的;选项D中,如果rand()%2的结果为0,那么整个表达式的值为rand()%26+"A",0~25之间任一个数与"A"的和都是一个大写字母;如果rand()%2的值为1,整个表达式的值为:
rand()%26+"a",0~25之间任一个数与"a"的和都是一个小写字母,所以选项D正确;本题答案为D。
30.以下定义数组的语句中错误的是______。
(分数:
2.00)
A.intnum[2][4]={{1,2},{3,4},{5,6}} √
B.intnum[][3]={{1,2},3,4,5,6);
C.intnum[]={1,2,3,4,5,6};
D.intnum[][4]={1,2,3,4,5,6};
解析:
[解析]intnum[2][4]定义2行4列数组,赋值给num数组3行错误。
所以选择A。
31.下面程序的运行结果是______。
#include<stdio.h>
#include<string.h>
main()
{char*s1="abDuj";
char*s2="ABdUG";
intt;
t=strcmp(s1,s2);
printf("%d",t);
}
(分数:
2.00)
A.正数 √
B.负数
C..零
D.不确定的值
解析:
32.若fp已正确定义并指向某个文件,当未遇到该文件结束标志时函数feof(fp)的值为
(分数:
1.00)
A.0 √
B.1
C.-1
D.一个非0值
解析:
[解析]文件尾测试函数feof()的应用,读取文件时,当文件中的数据全部读完后,文件位置指针将位于文件的结尾。
此时如果读数据,将会出现错误。
为了保证读写数据的正确性,需要进行文件尾测试,文件尾测试使用函数feof(),它的功能是测试fp指向的文件是否到达文件尾。
若到达文件尾,返回值为非0,否则返回值为0。
在本题中fP指向的某文件还没有到了文件尾,因此返回0。
33.设x=011050,则x=x&01252的值是______。
(分数:
1.00)
A.0000001000101000 √
B.1111110100011001
C.0000001011100010
D.1100000000101000
解析:
[解析]本题主要考查按位与运算,x=011050的二进制形式为00010010000101000,01252的二进制形式为0000001010101010,两者相与得0000001000101000。
34.函数调用strcat(strcpy(str1,str2),str3)的功能是______。
(分数:
2.50)
A.将字符串str1复制到字符串str2中后再连接到字符串str3之后
B.将字符串str1连接到字符串str2之后再复制到字符串str3之后
C.将字符串str2复制到字符串str1之后再将字符串str3连接到字符串str1之后 √
D.将字符串str2连接到字符串str1之后再将字符串str1复制到字符串str3中
解析:
[解析]strcat(s1,s2)函数的功能是把s2字符串连接到s1字符串末尾,strcpy(s1,s2)是把s2字符串复制到s1字符串,要保证s1的容量。
35.有三个关系R,S和T如下:
R
A
B
C
a
1
2
b
2
1
c
3
1
S
A
B
C
d
3
2
T
A
B
C
a
1
2
b
2
1
c
3
1
d
3
2
其中关系T由关系R和S通过某种操作得到,该操作为______。
(分数:
2.00)
A.选择
B.投影
C..交
D..并 √
解析:
[解析]在关系T中包含了关系R与S中的所有元组,所以进行的是并的运算,答案为D。
36.下面说明不正确的是
(分数:
2.00)
A.chara[10]="china";
B.chara[10],*p=a;p="china"
C.char*a;a="china";
D.chara[10],*p;p=a="china" √
解析:
[解析]C语言中操作一个字符串常量的方法有:
①把字符串常量存放在一