1、二级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、 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.int a22=1,2);B.int a2=1,2,3,4;C.int a22=1,2,3;D.int a2=1,2),3,4;解析:5.有以下程序: #inelude stdio.h #inc
3、lude string.h typedef struct Stu char name10; char gender; int score; STU; void f(char * name, char * gender, int * score) strcpy(name, Qian); * gender=f; * score = 350; main( ) STU a = 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,
4、b.name,b.gender,b.score); 程序运行后的输出结果是_。(分数:1.00)A.Zhao,m,290,Qian,f,350B.Qian,in,290,Zhao,m,290C.Zhao,m,290,Zhao,m,290D.Zhao,m,290,Qian,m,290解析:解析 main函数中,首先定义两个结构体stu类型的变量a,b,把a成员信息复制给b成员后,再调用函数f(),在f()函数中,利用指针重新对b成员信息进行赋值,分别输出a,b,成员信息,答案为A选项。6.有如下程序: #include stdio.h void convert(char ch) if(ehX)
5、convert(ch+1); printf(%c, ch); main( ) convert(W); printf(/n); 程序运行后的输出结果是_。(分数:1.00)A.YZB.VWC.XYD.XW解析:解析 在main函数中,执行convert(W)函数,因为W比X小,满足if语句,再执行convert(ch+1);此时ch=X,不满足条件,输出X,完成后,返回上一次convert中,输出上次ch=W,因此答案为D选项。7.有以下程序: #includestdio.h int sum(int*array,int len) if(len=1) return array1; else ret
6、urn array1+sum(array+1,len-1); main() int array5=0,9,1,2,res; res=sum(array,3); printf(%d/n,res); 程序运行后的输出结果是_。(分数:1.00)A.27B.11C.8D.12解析:解析 main()函数先定义一个数组array,调用sum(array,3)函数,此时函数形参array指向数组首地址,形参len的值为3,在sum函数中,array1指向数组中的元素9,sum函数调用3次,完成的功能是将数组array1+array2+array3累加后返还给输出,累加后的值为12。因此,答案为D选项。8
7、.以下对联合类型叙述正确的是_。(分数:2.00)A.可以对联合变量名直接赋值B.使用联合变量的目的是为了节省内存C.任何一个联合变量可以同时引用联合中的不同成员D.联合类型定义中不能同时出现结构类型的成员解析:9.若定义:int a=511, *b=&a;,则printf(%d/n, *b);的输出结果为_。(分数:0.50)A.无确定值B.a的地址C.512D.511解析:10.以下程序段的执行结果为_。 #define PLUS(X,Y)X+Y main() int x=1,y=2,z=3,sum; sum=PLUS(x+y,z)*PLUS(y,z); printf(SUM=%d,sum
8、); (分数:1.00)A.SUM=9B.SUM=12C.SUM=18D.SUM=28解析:解析 表达式sum=PLUS(x+y,z)*PLUS(y,z)用带参的宏替换为 sum=x+y+z*y+z,sum的值为12。11.以下程序的输出结果是_。 #includestdio.h main() int a=4,b=3,c=2,d=1; printf(%d,ab?a:dc?d:b);(分数:2.00)A.1B.3C.2D.4解析:12.算法中,对需要执行的每一步操作,必须给出清楚、严格的规定这属于算法的_。(分数:2.00)A.正当性B.可行性C.确定性D.有穷性解析:解析 算法具有5个特性:有
9、穷性、确定性、可行性、有零个或多个输入、有一个或多个输出。13.设有某函数的说明为: int*func(int a10,int n); 则下列叙述中,正确的是_。(分数:1.00)A.形参a对应的实参只能是数组名B.说明中的a10写成a或*a效果完全一样C.func的函数体中不能对a进行移动指针(如a+)的操作D.只有指向10个整数内存单元的指针,才能作为实参传给a解析:解析 本题重点考查返回指针值的函数的相关知识。返回指针值的函数,一般定义形式为:类型名*函数名(参数列表)。fune函数被定义为指针型函数,它的一个形参为整型数组a,形参a对应的实参可以是数组名和指针,A、D错误。实参传递给形
10、参a的是地址值,实参和形参指向同一段内存单元,在fune函数体内对形参a进行移动指针操作,可以改变实参的值,C错误。14.对长度为n的线性表作快速排序,在最坏情况下,比较次数为_。(分数:1.00)A.nB.n-1C.n(n-1)D.n(n-1)/2解析:解析 快速排序最坏情况就是每次选的基准数都和其他数做过比较,共需比较(n-1)+(n-2)+1=n(n-1)/2,故选D。15.在执行完下面的C语句段之后,则B的值是_。 char a=A; intb; B=(34&56)&(ab);(分数:2.00)A.0B.1C.TRUED.FALSE解析:16.以下各选项中的代码段执行后,变量y的值不为
11、1的是_。(分数:1.00)A.int x=5,y=0;if(5)y=1;B.int x=5,y=0;if(x)y=1;C.int x=10,y=0;if(x=y)y=1;D.int x=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.以下程序的输
12、出结果是_。 main() char a=programming,b=language; char *p1,*p2; int i; p1=a;p2=b; for(i=0;i7;i+) if(*(p1+i)=*(p2+i)printf(%c,*(p1+i); (分数:2.00)A.gmB.rgC.orD.ga解析:18.有以下程序: #include stdio.h #define SUB(X,Y) (X+1)*Y main( ) int a=3,b=4; printf(%d/n,SUB(a+ +,b+ +); 程序运行后的输出结果是_。(分数:5.00)A.25B.20C.12D.16解析:解
13、析 本题考查宏定义。宏定义只是做简单的替换,+运算符是先使用后自增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
14、语言巾,预处理命令行都以#开头C.每个C程序必须在开头包含预处理命令行;#include stdio.hD.C语言的预处理不能实现宏定义和条件编译的功能解析:解析 预处理命令行可以出现在C源程序的任何位置,故选项A不正确。#includestdio.h预处理命令行的意思是将stdioh头文件插入源程序中该行命令所在的位置,表示我们将在后续行中用到stdioh头文件中定义的函数或类型,若程序中没有用到这些函数或类型就可以不用包含此头文件,故选项C不正确。C提供的预处理功能主要有:宏定义、文件包含和条件编译三种功能,故选项D不正确。在C语言中,预处理命令行都以”#”开头,故应该选择B。21.有如下
15、程序: #include stdio.h main() int i,*ptr; int array5 = 5,3,1; for(ptr=array, i=0; i5; i+, ptr+) if (*ptr = 0) putchar(X); else putchar(A+*ptr); printf(/n); 程序运行后的输出结果是_。(分数:1.00)A.FDBXXB.FFFXXC.FDBBBD.ABCDE解析:解析 在对数组进行初始化时,如果对数组的全部元素赋以初值,定义时可以不指定数组长度,如果被定义数组的长度与初值个数不同,则数组长度不能省略;如果在说明数组时给出了长度,但没有给所有的元素
16、赋予初始值,而只依次给前面的几个数组元素赋予初值,那么C语言将自动对余下的元素赋初值,则array=5,3,1,0,0。程序执行过程为:执行for循环,将数组首地址赋给指针ptr,依次遍历每一个元素,如果数组元素为0则输出X,如果不为0则按照字母表输出字符A后第arrayi个字符。程序运行后的输出结果为:FDBXX,故A选项正确。22.若有定义语句:int(*p)M;其中的标识符p是(分数:1.00)A.M个指向整型变量的指针B.指向M个整型变量的函数指针C.一个行指针,它指向具有M个整型元素的一维数组D.具有M个指针元素的一维指针数组,每个元素都只能指向整型量解析:23.有以下程序: #in
17、clude studio. h #define F(X, Y) (X)*(Y) main ( ) int a=3, b=4; printf(%d/n, F(a+, b+); (分数:1.00)A.12B.15C.16D.20解析:解析 本题考核的知识点是宏与自增运算符的综合运用在程序中先用表达式将宏替换掉,则输出语句中的表达式为(a+)*(b+),而a+的值为3,b+的值为4。因此最后的值为 3*4=12。所以,4个选项中选项A符合题意。24.设有以下程序段: struct person float weight; char sex; char name10; rec, *ptr; ptr=&
18、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语言编写的函数源程序,其文件名后缀可以是CB.C语言
19、编写的函数都可以作为一个独立的源程序文件C.C语言编写的每个函数都可以进行独立的编译并执行D.一个C语言程序只能有一个主函数解析:解析 函数是指预先定义功能块,其目的是提高程序的重用性。在C语言中函数的源程序,后缀名可以为C。C语言所编写的函数都可以是一个独立的源文件。一个C语言程序只能有一个主函数。C语言中编写的函数不是每个都可以独立地编译和执行的,因为C语言中程序的开始为主函数,如果程序中没有主函数则无法进行编译和执行。26.字符串/ABCDEF/的长度是 _ 。(分数:1.00)A.15B.10C.7D.8解析:解析 本题涉及字符串最基本两个概念:字符串的长度是指字符串中字符的个数,但不
20、包括字符串结束符:以反斜杠“/”开头的特殊字符序列,意思是把反斜杠后面的字符序列转换成特定的含义,而不是原来的含义,不包含在字符串长度之内,“1”连同后面的字符为一个长度。27.有以下程序: #includestdio.h int fun() static int x=1; x+=1; return X; main() it i,s=1; for(i=1;i=5;i+) s+=fun(); printf(%d/n,s); 程序运行后的输出结果是_。(分数:1.00)A.120B.11C.6D.21解析:解析 fun函数中的变量x为静态局部变量,占用固定的内存单元,下一次调用时仍可以保留上次调用
21、时的直。也就是说,如果多次调用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.0
22、0)A.rand()%2=0?rand()%A:rand()%aB.rand()%26+A|rand()%26+aC.rand()%26+A&rand()%26+aD.rand()%2=0?rand()%26+A:rand()%26+a解析:解析 rand()函数是产生随机数的函数,它可以生成0RAND_MAX之间的一个随机数,其中RAND_MAX是stdlib.h中定义的一个整数。通常如果我们需要随机0N-1之间的一个随机数,需要使用rand()的结果对N求模即可。选项A中,rand()%2只有两个值0或1,所以当rand()%2的结果为0时,整个表达式的值是rand()%A,这里A要转换成
23、ASCII码值65,所以结果为064之间的一个随机数,当rand()%2的结果为1时,整个表达式的值是rand()%a,a的ASCII码值为97,所以结果是096之间的一个随机数,可见选项A错误;逻辑或运算符|或逻辑与运算符&的结果都只能是0或非0,所以选项B、C也是错误的;选项D中,如果rand()%2的结果为0,那么整个表达式的值为rand()%26+A,025之间任一个数与A的和都是一个大写字母;如果rand()%2的值为1,整个表达式的值为:rand()%26+a,025之间任一个数与a的和都是一个小写字母,所以选项D正确;本题答案为D。30.以下定义数组的语句中错误的是_。(分数:2
24、.00)A.int num24=1,2,3,4,5,6B.int num3=1,2,3,4,5,6);C.int num=1,2,3,4,5,6;D.int num4=1,2,3,4,5,6;解析:解析 int num24定义2行4列数组,赋值给num数组3行错误。所以选择A。31.下面程序的运行结果是_。 #includestdio.h #includestring.h main() char*s1=abDuj; char*s2=ABdUG; int t; t=strcmp(s1,s2); printf(%d,t); (分数:2.00)A.正数B.负数C.零D.不确定的值解析:32.若fp已
25、正确定义并指向某个文件,当未遇到该文件结束标志时函数feof(fp)的值为(分数:1.00)A.0B.1C.-1D.一个非0值解析:解析 文件尾测试函数feof()的应用,读取文件时,当文件中的数据全部读完后,文件位置指针将位于文件的结尾。此时如果读数据,将会出现错误。为了保证读写数据的正确性,需要进行文件尾测试,文件尾测试使用函数feof(),它的功能是测试fp指向的文件是否到达文件尾。若到达文件尾,返回值为非0,否则返回值为0。在本题中fP指向的某文件还没有到了文件尾,因此返回0。33.设x=011050,则x=x01252的值是_。(分数:1.00)A.0000001000101000B
26、.1111110100011001C.0000001011100010D.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之
27、后再将字符串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.char a10=china;B.char a10,*p=a;p=chinaC.char *a;a=china;D.char a10,*p;p=a=china解析:解析 C语言中操作一个字符串常量的方法有:把字符串常量存放在一
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1