二级C语言笔试356Word文件下载.docx
《二级C语言笔试356Word文件下载.docx》由会员分享,可在线阅读,更多相关《二级C语言笔试356Word文件下载.docx(30页珍藏版)》请在冰点文库上搜索。
for(j=1-1;
j>=0;
j--)
%d"
,a[j]);
/n"
);
A)10000B)10010C)00110D)10100
B.
4.下列不是合法的C语言语句是()。
A)a=5
B)inti;
i++;
C);
D);
[解析]选项A)是一个表达式,它后面没有分号结尾(C语言中规定语句必须以分号结束),所以它不是语句;
选项B)用一个花括号把几条语句括起来了,这是一个复合语句;
选项C)中只有一个分号,是一个空语句;
选项D)是个复合语句,也是一个空语句。
5.设有如下函数:
fun(floatx)
x*=x++;
x);
return(x);
则函数的类型是______。
A)floatB)void
C)intD)无法确定
C.
[解析]函数fun缺省返回值类型时,系统将默认为int型。
形参x是float型,和函数返回值类型不一致,此时,以函数返回值类型为准。
6.有如下程序
intx=1,a=0,b=0;
switch(x)
case0:
b++;
case1:
a++;
case2:
a%d,b=%d/n"
,a,B);
该程序的输出结果是______。
A)a=2,b=1B)a=1,b=1C)a=1,b=0D)a=2,b=2
[解析]在这个switch语句中,因为x的值为1,所以执行case1:
后面的a++,这样a=1。
但又由于其下没有break语句,所以其后面的语句“a++;
b++”也将被执行,这样一来,a=2,b=1。
7.下列4项说法中,不正确的是______。
A)数据库减少了数据冗余B)数据库中的数据可以共享
C)数据库避免了一切数据的重复D)数据库具有较高的数据独立性
[解析]数据库系统具有以下4个特点:
数据的集成性、数据的高共享性与低冗余性、数据的独立性、数据统一管理与控制。
8.数据独立性是数据库技术的重要特点之一。
所谓数据独立性是指______。
A)数据与程序独立存放
B)不同的数据被存放在不同的文件中
C)不同的数据只能被对应的应用程序所使用
D)以上三种说法都不对
[解析]数据独立性是数据与程序间的互不依赖性,即数据库中数据独立于应用程序而不依赖于应用程序。
也就是说,数据的逻辑结构、存储结构与存取方式的改变不会影响应用程序。
数据独立性一般分为物理独立性与逻辑独立性两级。
9.若有以下定义和语句,则输出结果是
chars1[10]="
abed!
"
*s2="
/n123//"
;
%d%d/n"
strlen(s1),strlen(s2));
A)55B)105C)107D)58
[解析]strlen函数的作用是求出字符串的实际长度。
字符串"
abcd!
的实际长度为5,字符串"
的实际长度也为5(/n为1个字符,//为1个字符)。
10.设a和b均为double型变量,且a=5.5、b=2.5,则表达式(int)a+b/b的值是
A)6.500000B)6C)5.500000D)6.000000
[解析]本题考查的知识点是运算符的优先级。
在这个表达式中,优先级最高的是(int)a,也就是对5.5取整,结果是5,其次是b/b,即2.5/2.5,结果是1.000000,最后相加结果为6.000000(表达式的最终结果为实型),所以4个选项中D正确。
11.按通信距离划分,计算机网络可以分为局域网和广域网。
下列网络中属于局域网的是()
A)Internet
B)CERNET
C)Novell
D)CHINANET
12.下列关于线性表的叙述中,不正确的是()。
A)线性表可以是空表
B)线性表是一种线性结构
C)线性表的所有结点有且仅有一个前件和后件
D)线性表是由n个元素组成的一个有限序列
[解析]线性表是一种线性结构,由n(n≥0)个元素组成,所以线性表可以是空表。
但是在线性表中,第一个结点没有前件,最后一个结点没有后件,其他结点有且只有一个前件和后件。
所以选项C)是错误的。
13.下列程序的输出结果是()。
#include<stdio.h>
inta=4;
(a+=a-=a*a));
A)-8B)14C)0D)-24
[解析]表达式a+=a-=a*a看起来复杂,其实将它分成两个表达式来计算就简单了:
①第一个表达式(a-=a*a)=(a=a-a*a=-12);
②第二个表达式(a+=a-=a*a)=(a=a+a=-24)。
14.若有定义语句:
intk[2][3],*pk[3];
,则以下语句中正确的是()。
A)pk=k;
B)pk[0]=&k[1][2];
C)pk=k[0];
D)pk[1]=k;
[解析]本题考查的是指针数组的运用。
pk是指针数组名,是一个常量,不能被赋值,因此选项A)和C)都不正确。
pk中的元素是int型指针,而二维数组名是指向一维数组的指针常量,即行指针,两者之间不可隐式转换,所以选项D)的赋值是错误的。
故应该选择B)。
15.设已有定义:
floatx;
则以下对指针变量p进行定义且赋初值的语句中正确的是______。
A)float*p=1024;
B)int*p=(float)x;
C)floatp=&x;
D)float*p=&x;
16.若有下面的说明和定义,则sizeof(structaa)的值是______。
structaa
intrl;
doubler2;
floatr3;
uninuucharul[5];
longu2[2]ua;
mya;
A)30B)29C)24D)22
[解析]结构体变量所占内存长度是各成员占的内存长度之和,每个成员分别占有自己的内存单元;
共用体变量所占的内存长度等于最长的成员的长度。
结构体变量aa中,成员r1占2个字节,r2占8个字节,r3占4个字节,共用体ua占8个字节,所以共占用2+8+4+8=22个字节。
17.已定义以下函数:
fun(Char*p2,char*p1)
while((*p2=*p1)!
='
/0'
)p1++;
p2++;
函数的功能是()。
A)将p1所指字符串复制到p2所指内存空间B)将p1所指字符串的地址赋给指针p2
C)对p1和p2两个指针所指字符串进行比较D)检查p1和p2两个指针所指字符串中是否有'
,
[解析]fun()函数中声明了两个字符串指针作为形参,在其函数体中用了一个while循环,首先while括号内表达式*p2=*p1是将p1所指的内容赋值到p2所指的存储空间中,然后在判断是否为'
,表达式的值为真时,执行循环体,指针p1和p2分别下移一位,当p1指向字符'
/n'
时,表达式的值为假,循环结束,故此函数的功能是将p1所指字符串复制到p2所指内存空间中。
所以,4个选项中选项A符合题意。
18.有下列程序段:
intk=0,a=1,b=2,c=3;
k=a<b?
b:
a;
k=k>c?
c=k;
执行该程序段后,k的值是()。
A)3B)2C)1D)0
[解析]因为a<b成立,所以条件表达式a<b?
a的值等于b的值等于2,因此变量k的值等于2。
又因为k=2>c=3不成立,所以条件表达式k>c?
c:
k的值等于k的值等于2。
把条件表达式k>c?
k的值赋给变量k,因而变量k的值等于2。
因此,选项B)为正确答案。
19.有下列程序:
structst
int(x,y)date[2]=1,10,2,20;
structst*p=date;
%d,"
,p->y);
,(++p)->x);
程序的运行结果是()。
A)10,1B)20,1C)10,2D)20,2
[解析]data[2]是两个结构体组成的数组,p指向结构体数组的首地址,p->y访问第一个结构体的第二个元素;
(++p)x访问第二个结构体的第一个元素。
所以输出为10.2。
20.C语言库函数fgets(str,n,fp)的功能是______。
A)从fp指向的文件中读取长度n的字符串存入str指向的内存
B)从fp指向的文件中读取长度不超过n-1的字符串存入str指向的内存
C)从fp指向的文件中读取n个字符串存入str指向的内存
D)从str读取至多n个字符到文件fp
[解析]fgets函数的作用是从指定的文件读入一个字符串。
fgets(str,n,fp);
中的n为要求得到的字符的个数,但只从fp指向的文件输入n-1个字符,然后在最后加—个'
字符,因此得到的字符串共有n个字符。
21.下列程序的运行结果是()。
inta=-5,b=1,c=1;
intx=0,Y=2,z=0;
if(c>0)x=x+y;
if(a<=0)
if(b>0)
if(c<=0)y=x-y;
elseif(c>0)Y=x-y;
elsez=y;
%d,%d,%d/n"
,x,y,z);
A)2,2,0B)2,2,2C)0,2,0D)2,0,2
[解析]本题考查ifelse语句的使用。
先判断第1个if语句,因为c=1>0,所以x=x+y=0+2=2。
第1个if语句,因为a=-5<0,所以进入下列的复合语句。
经判断发现,复合语句中第2个if语句的条件均不满足,不执行任何语句退出,在这个过程中y和z的值没有发生变化。
22.有下列程序:
intk=5;
while(--k)printf("
k-=3);
);
执行后的输出结果是()。
A)1B)2C)4D)死循环
[解析]在程序语句中,k的初始值为5,进行第1次while循环后,k自减1为4,非0,执行循环体里的printf语句,输出1,此时k的值变为1。
程序执行第2次循环时,k自减1变为0,为假,退出while循环语句。
所以程序的最后结果为1。
23.C语言中,组成数据文件的成分是______。
A)记录B)数据行C)数据块D)字符(字节)序列
[解析]C语言中的文件是流式文件。
流式文件是一种无结构文件,即整个文件是一串字符流或二进制流。
文件的存取以字符或字节为单位。
24.下列叙述中正确的是
A)顺序存储结构的存储一定是连续的,链式存储结构的存储空间不一定是连续的
B)顺序存储结构只针对线性结构,链式存储结构只针对非线性结构
C)顺序存储结构能存储有序表,链式存储结构不能存储有序表
D)链式存储结构比顺序存储结构节省存储空间
[解析]顺序存储方式是把逻辑上相邻的结点存储在物理上相邻的存储单元里,结点之间的关系由存储单元的邻接关系来体现。
其优点是占用最少的存储空间。
所以选项D错误。
顺序存储结构可以存储如二叉树这样的非线性结构,所以选项B错误。
链式存储结构也可以存储线性表,所以选项C错误。
25.以下不正确的定义语句是()。
A)doublex[5]=2.0,4.0,6.0,8.0,10.0;
B)inty[5]=0,1,3,5,7,9;
C)charc1[]='
1'
'
2'
3'
4'
5'
D)charc2[]='
/x10'
/xa'
/x8'
[解析]在一维数组中要注意的是作为下标表达式的常量表达式的值必须大于等于0,选项B)中定义有5个元素,但赋值时有6个元素,所以是错误的。
26.下列程序的输出结果是
#include"
stdio.h"
#defineM(x,y)x%y
inta,m=12,n=100;
a=M(n,m);
,a--);
A)2B)3C)4D)5
[解析]带参数的宏定义命令行形式如下:
#define宏名(形参表)替换文本
在编译的时候编译预处理程序用“替换文本”来替换宏,即M(n,m)被替换为n%m,之后计算,将计算的结果赋给a。
注意,宏替换是在编译时由预处理程序完成的,宏替换不占用运行的时间,而函数调用是在程序运行时进行的,在函数的调用过程中需要占用一系列的处理时间。
27.有以下程序
#include<stdio.h>
voidfun(int*a,intn)/*fun函数的功能是将a所指数组元素从大到小排序*/
intt,i,j;
for(i=0;
i<n-1;
i++)
for0=i+l;
j<n;
j++)
if(a[i]<a[j])t=a[i];
a[i]=a[j];
a[j]=t;
intc[10]=1,2,3,4,5,6,7,8,9,0,i;
fun(c+4,6);
i<10;
i++)printf("
%d,"
c[i]);
A)1,2,3,4,5,6,7,8,9,0,B)0,9,8,7,6,5,1,2,3,4,
C)0,9,8,7,6,5,4,3,2,1,D)1,2,3,4,9,8,7,6,5,0,
[解析]本题考查的知识点是:
for循环的简单应用。
题目中fun()函数的作用是排序,从形参指针a所指位置开始,对其后n个int型元素进行从大到小排序。
主函数中,调用fun()函数传入的两个实参分别为c+4和6,即从数组c的第5个元素开始,对其后连续的6个元素进行从大到小排序。
所以,最后通过for循环输出数组c的值为“1,2,3,4,9,8,7,6,5,0,”,故应该选择D。
28.待排序的关键码序列为(15,20,9,30,67,65,45,90),要按关键码值递增的顺序排序,采取简单选择排序法,第一趟排序后关键码15被放到第()个位置。
[解析]选择排序的基本思想是扫描整个线性表,从中选出最小的元素,将它交换到表的最前面,然后对剩下的子表采用同样的方法,直到子表为空。
所以第一趟排序后,将选出最小的元素9放在第一个位置,元素15则放在第二个位置。
29.有以下程序:
#include
voidWriteStr(char*fn,char*str)
FILE*fp;
fp=fopen(fn,"
w"
fputs(str,fp);
fclose(fp);
WriteStr("
t1.dat"
"
start"
end"
程序运行后,文件t1.dat中的内容是______。
A)startB)endC)startendD)endrt
[解析]本题的考点是C语言的文件操作。
函数WriteStr的作用是:
用“文本写”方式打开指定的文件fn,写入字符串str并关闭。
而主函数main中调用了两次WriteStr,分别向文件t1.dat中写入字符串“start”和“end”,由于打开文件的方式是写方式,第二次打开冲掉第一次写的内容。
文件t1.dat中最后的内容是第二次写入的字符串“end”。
因此正确选项是B。
30.若有以下定义和语句:
()
ints[4][5](*ps)[5];
ps=s;
则对s数组元素的正确引用形式是
A.psq+1
B.*(ps+3)
C.ps[0][2]
D.*(ps+1)+3
31.有以下程序
#include<stdio.h>
intf(intt[],intn);
inta[4]=1,2,3,4,s;
s=f(a,4);
,s);
intf(intt[],intn)
if(n>0)returnt[n-1]+f(t,n-1);
elsereturn0;
程序运行后的输出结果是
A)4B)10C)14D)6
[解析]函数的功能是求数组所有元素的和。
递归表示为a[3]+a[2]+a[1]+a[0]+f(t,0)=10。
32.以下能正确定义一维数组的选项是
A)inta[5]=0,1,2,3,4,5B)chara[]='
0'
,'
;
C)chara='
A'
B'
C'
D)inta[5]="
0123"
[解析]选项A)中,定义的初值个数大于数组的长度;
选项C)中,数组名后少了中括号;
选项D)中,整型数组不能赋予字符串。
33.有以下程序
#definePT3.5;
#defineS(x)PT*x*x;
inta=1,b2;
printf("
%4.1f/n"
S(a+b);
程序运行后的输出结果是______。
A)14.0B)31.5C)7.5D)程序有错无输出结果
[解析]本题考查的是宏定义。
带参数的宏定义是按#define命令行中指定的字符串从左到右进行转换,其定义的—般形式为:
#define宏名(参数表)字符串,因此在程序中宏定义后面不能有分号“;
”,所以程序运行出错,没有输出结果,因此,选项D是正确的。
34.以下叙述中错误的是()。
A)C语言中对二进制文件的访问速度比文本文件快
B)C语言中,随机文件以二进制代码形式存储数据
C)语句FILEfp;
定义了一个名为fp的文件指针
D)C语言中的文本文件以ASCII码形式存储数据
[解析]定义文件类型指针变量的一般形式为:
FILE*指针变量名;
因此选项C是错误的,应该选择C。
35.有以下程序:
intx,i;
for(i=1;
i<=50;
x=i:
if(x%2=0)
if(x%3=0)
if(x%7=0)
,i);
输出结果是()。
A)28B)27C)42D)41
[解析]只有当3个if条件同时成立,即能够同时被2、3、7整除时,才输出i的值,而从0到50能够同时被2、3、7整除的数只有42,故选择C选项。
36.若有以下的说明,对初值中整数2的正确引用方式是()。
staticstruct
charch;
inti;
doublex;
a[2][3]=a'
a'
1,3,4,5,'
b'
2,7,9,8,'
c'
31,93;
A)a[0][1].chB)a[0][1].iC)a[0][0].iD)a[0][2].i