二级C语言笔试476.docx
《二级C语言笔试476.docx》由会员分享,可在线阅读,更多相关《二级C语言笔试476.docx(22页珍藏版)》请在冰豆网上搜索。
二级C语言笔试476
二级C语言笔试-476
(总分:
92.00,做题时间:
90分钟)
一、选择题(总题数:
40,分数:
60.00)
1.下列叙述中错误的是()。
A)一种数据的逻辑结构可以有多种存储结构
B)数据的存储结构与数据的处理效率无关
C)数据的存储结构与数据的处理效率密切相关
D)数据的存储结构在计算机中所占的空间不一定是连续的
(分数:
2.00)
A.
B. √
C.
D.
解析:
[解析]数据的存储结构分为顺序结构和链式结构,一个数据的逻辑结构可以有多种存储结构。
顺序结构中数据元素所占的存储空间是连续的,而链式存储结构中,数据元素所占的存储空间不一定是连续的。
数据的存储结构与数据的处理效率密切相关。
2.软件按功能可以分为:
应用软件、系统软件和支撑软件(或工具软件),下面属于系统软件的是()。
A.编辑软件B.操作系统
C.教务管理系统D.浏览器
(分数:
1.00)
A.
B. √
C.
D.
解析:
[解析]编辑软件和浏览器属于工具软件,教务系统是应用软件。
3.软件工程的理论和技术性研究的内容主要包括软件开发技术和()。
A)消除软件危机B)软件工程管C)程序设计自动化D)实现软件可重用
(分数:
1.00)
A.
B. √
C.
D.
解析:
[解析]软件工程的目标是:
在给定的成本、进度的前提下,开发出具有有效性、可靠性、可理解性、可维护性、可重用性、可适应性、可移植性、可追踪性和可互操作性且满足用户需求的产品。
基于这一目标,软件工程的理论和技术性研究的内容主要包括软件开发技术和软件工程管理。
4.下列选项中不属于面向对象程序设计特征的是
A)继承性B)多态性
C)类比性D)封装性
(分数:
2.00)
A.
B.
C. √
D.
解析:
[解析]面向对象程序设计的3个主要特征是封装性、继承性和多态性。
5.结构化程序设计主要强调的是()。
A)程序的规模B)程序的效率
C)程序设计语言的先进性D)程序的易读性
(分数:
2.00)
A.
B.
C.
D. √
解析:
[解析]程序不光是编写完就结束了,为了测试和维护程序,往往还有其他人阅读和跟踪程序,因此,程序设计的风格应该强调简单和清晰,即程序的易读性,“清晰第一,效率第二”。
6.设有如下3个关系表R、S、T。
下列操作中正确的是
A)T=R∩SB)T=R∪SC)T=R×SD)T=R/S
(分数:
2.00)
A.
B.
C. √
D.
解析:
[解析]本题考查数据库的关系代数运算。
R表中只有一个域名A,有两个记录(也叫元组),分别是m和n;S表中有两个域名,分别是B和C,其所对应的记录分别为1和3。
注意观察表T,它是由R的第一个记录依次与S的所有记录组合,然后再由R的第二个记录与S的所有记录组合,形成的一个新表。
上述运算恰恰符合关系代数的笛卡儿积运算规则。
关系代数中,笛卡儿积运算用“×”来表示。
因此,上述运算可以表示为T=R×S。
7.结构化程序设计的核心和基础是()。
A)结构化分析方法B)结构化设计方法C)结构化设计理论D)结构化编程方法
(分数:
2.00)
A.
B.
C. √
D.
解析:
[解析]结构化程序设计的核心和基础是结构化设计理论,其中包括:
结构化分析方法、结构化设计方法和结构化编程方法。
8.关系数据库管理系统能实现的专门关系运算包括()。
A)排序、索引、统计B)选择、投影、连接
C)关联、更新、排序D)显示、打印、制表
(分数:
1.00)
A.
B. √
C.
D.
解析:
[解析]关系数据库管理系统的专门关系运算包括选择运算、投影运算和连接运算。
9.下列对于软件测试的描述中正确的是()。
A)软件测试的目的是证明程序是否正确
B)软件测试的目的是使程序运行结果正确
C)软件测试的目的是尽可能多地发现程序中的错误
D)软件测试的目的是使程序符合结构化原则
(分数:
1.00)
A.
B.
C. √
D.
解析:
[解析]软件测试是为了尽可能多地发现程序中的错误,尤其是发现至今尚未发现的错误。
10.有以下程序:
main()
inta=[10]1,2,3,4,5,6,7,8,9,10,*p=&a[3],*q=p+2;
printf("%d/n",*p+*q);
程序运行后的输出结果是______。
A)16B)10C)8D)6
(分数:
1.00)
A.
B. √
C.
D.
解析:
[解析]p指向了a[3]的地址,且*p=a[3]=4,又有*q=p-2;则q指向了a[5]的地址,且*q=a[5]=6,最后输出为10。
11.下列叙述错误的是()。
A)在C语言中的保留字必须小写
B)变量的存储类型决定了变量的存储位置及其生存期
C)宏定义以#define开头,行未必须加分号
D)在C语言中的注释行可以出现在程序的任何位置
(分数:
1.00)
A.
B.
C. √
D.
解析:
[解析]本题涉及C语言最基本的4个知识点:
①C语言的保留字必须小写:
②变量的存储类型不同,其存储位置和生存期也不一样;③C语言允许其注释部分出现在程序中的任何位置;④宏定义以#define开头,行末不需要加分号。
12.可以在C语言程序中用做用户标识符的一组标识符是()。
A)void
123
BBN
B)aa
abc
cas
C)as+b3
-123
If
D)6f
Do
SIG
(分数:
1.00)
A.
B. √
C.
D.
解析:
[解析]C语言规定,标识符是由字母、数字或下画线组成,并且它的第一个字符必须是字母或者下画线。
13.表示关系a≤b≤c的C语言表达式为()。
A)(a<=b)&&(b<=c)
B)(a<=b)and(b<=c)
C)(a<=b<=c)
D)(a<=b)&(b<=c)
(分数:
2.00)
A. √
B.
C.
D.
解析:
[解析]本题考查逻辑与运算符&&。
在C语言中使用运算符“&&”连接两个表达式,也可以表示逻辑与运算符。
在C语言中不允许出现a<=b<=c这种格式。
14.设intx=2,y=1;表达式(!
x||y--)的值是()。
A.0B.1C.2D.-1
(分数:
1.00)
A.
B. √
C.
D.
解析:
[解析]因x为2.所以!
x表达式值为0,因y为1,y--表达式的值为1然后自减1,y为0,所以!
x||y--表达式的值为1。
15.以下程序段的输出结果是
inta=1234;
printf("%2d/n",a);
A)12B)34C)1234D)提示出错、无结果
(分数:
1.00)
A.
B.
C. √
D.
解析:
[解析]在C语言中,对于不同类型的数据用不同的格式字符输出,其中,“%d”是按整型数据的实际长度输出;在“%md”中,m为指定的输出字段的宽度,如果数据的位数小于m,则左端补以空格,若大于m,则按实际位数输出。
16.若有条件表达式(exp)?
a++:
b--,则以下表达式中能完全等价于表达式(exp)的是
A)(exp==0)B)(exp!
=0)C)(exp==1)D)(exp!
=1)
(分数:
1.00)
A.
B. √
C.
D.
解析:
[解析]条件运算符要求有3个操作对象,称三日(元)运算符,它是C语言中唯一的一个三目运算符。
条件表达式的一般形式为:
表达式17表达式2:
表达式3。
其求解顺序是:
先求解表达式1,若为非0(真)则求解表达式2,此时表达式2的值就作为整个条件表达式的值。
若表达式1的值为0(假),则求解表达式3,表达式3的值就是整个条件表达式的值,注意++、--的用法。
17.下列程序的输出结果是()
#include<stdio.h>
main()
inta=3,b=2,c=1;
if(a<b)
if(b<0)c=0;
elsec++;
printf("%d/n",c);
A)0B)2C)1D)3
(分数:
2.00)
A.
B.
C. √
D.
解析:
[解析]本题考查if语句。
第一个if语句,先判断条件,发现a<b不成立,不再执行下列的语句,直接执行最后的printf输出语句,然后结束程序,整个过程c的值没有发生变化。
18.两次运行下列的程序,如果从键盘上分别输入3和1,则输出结果是()。
main()
intx;
scanf("%d",&x);
if(x++>2)printf("%d",x);
elseprintf("%d/n",x--);
A)4和2B)4和1C)4和0D)3和1
(分数:
1.00)
A. √
B.
C.
D.
解析:
[解析]本题考查ifelse语句。
首先scanf函数通过键盘读入x的值。
当x=3时,第一个if语句,先判断条件,取x的值3和2比较,然后将x的值加1,发现条件成立,执行下列的printf语句,输出x的值4。
当x=1时,第一个if语句,先判断条件,取x的值1和2比较,然后将x的值加1(x的值变为2),发现条件不成立,执行下列的else语句,先输出x的值2,再将x的值减1。
19.fseek函数的正确调用形式是
A)fseek(文件指针,起始点,位移量)B)fseek(文件指针,位移量,起始点)
C)fseek(位移量,起始点,文件指针)D)fseek(起始点,位移量,文件指针)
(分数:
2.00)
A.
B. √
C.
D.
解析:
[解析]本题考查函数fseek的用法。
fseek函数的调用形式为:
fseek(文件指针,位移量,起始点)
“起始点”用0、1或2代替;0代表“文件开始”,1为“当前位置”,2为“文件末尾”。
“位移量”指以“起始点”为基点,向前移动的字节数。
ANSIC和大多数C版本都要求位移量是long型数据。
这样,当文件长度大于64KB时不致出现问题。
ANSIC标准规定在数字末尾加一个字母L表示long型。
20.下列循环体的执行次数是()。
#include<stdio.h>
main()
inti,j;
for(i=0,j=1;i<j+1;i+=1,j--)
printf("%d/n",j);
A)3B)2C)1D)0
(分数:
1.00)
A.
B.
C. √
D.
解析:
[解析]本题考查for循环。
第一次循环前先判断循环条件,此时i=0,j=1,i<j+1成立,循环第一次;第二次循环前先判断循环条件,此时i=1,j=0,(j--是先使用j的值再减1),i<j+1不成立,结束循环。
21.下列关于宏的叙述中正确的是()。
A.宏名必须用大写字母表示B.宏定义必须位于源程序中所有语句之前
C.宏替换没有数据类型限制D.宏调用比函数调用耗费时间
(分数:
1.00)
A.
B.
C. √
D.
解析:
[解析]本题考查宏的相关知识点。
宏名没有大小写限制。
宏定义可以放在程序中的任何位置,其有效范围是从定义开始到文件结束。
宏替换可以代替任何数据类型,不受数据类型的限制。
函数影响运行时间,宏调用影响编译时间。
22.有以下程序:
maln()
inti,s=0,t[]=1,2,3,4,5,6,7,8,9;
for(i=0;i<9;i+=2)s+=*(t+i);
printf("%d/n",s);
程序执行后的输出结果是______。
A)45B)20C)25D)36
(分数:
2.00)
A.
B.
C. √
D.
解析:
[解析]通过for循环语句s=*(t+0)+*(t+2)+*(t+4)+*
(t+6)+*(t+8)=1+3+5+7+9=25。
23.有以下程序(提示:
程序中fseek(fp,-2L*sizeof(int),SEEK_END);语句的作用是使位置指针从文件末尾向前移2*sizeof(int)字节):
#include<stdio.h>
main()
FILE*fp;inti,a[4]=1,2,3,4,b;
fp=fopen("data.dar","wb");
for(i=0;i<4;i++)fwrite(&a[i],sizeof(int),1,fp);
fclose(fp);
fp=fopen("data.dar","rb");
fseek(fp,-2L*sizeof(int),SEEK_END);
fread(&b,sizeof(int),1,fp);/*从文件中读取sizeof(int)字节的数据到变量b中*/
fclose(fp);
printf("%d/n",b);
执行后的输出结果()。
A)2B)1C)4D)3
(分数:
1.00)
A.
B.
C.
D. √
解析:
[解析]Leek(fp,-2L*sizeof(int),SEEK_END);语句的作用是使位置指针从文件末尾向前移2*sizeof(int)字节,调用此函数后指针指向a[2],fread(&b,sizeof(int),1,fp)是从文件中读取sizeof(int)字节的数据到变量b中,也就是从文件中读取数据3到变量b中。
24.有下列程序:
intfun(intn)
if(n==1)return1;
else
return(n+fun(n-1));
main()
intx;
scanf("%d",&x);x=fun(x);printf("%d/n",x);
执行程序时,给变量x输入10,程序的输出结果是()。
A.55B.54C.65D.45
(分数:
1.00)
A. √
B.
C.
D.
解析:
[解析]本题在函数intfun(intn)的定义中又出现了对函数fun的调用,所以函数fun是递归函数。
因而在主函数中调用x=fun(x)时,当输入10赋给变量x时,递归调用的过程为:
fun(10)=10+fun(9)=10+9+fun(8)=10+9++8+fun(7)
=10+9++8+7+fun(6)=10+9++8+7+6+fun(6)
=10+9++8+7+6+5+fun(4)
=10+9++8+7+6+5+4+fun(3)
=10+9++8+7+6+5+4+3+fun
(2)
=10+9++8+7+6+5+4+3+2+fun
(1)
=10+9++8+7+6+5+4+3+2=55
25.下列程序执行后的输出结果是
voidrune(int*a,intb[])
b[0]=*a+6;
main()
inta,b[5];
a=0;b[0]=3;
fune(&a,b);
printf("%d/n",b[0]);
A)6B)7C)8D)9
(分数:
2.00)
A. √
B.
C.
D.
解析:
[解析]函数的实参分别为变量a的地址和b数组名,函数调用时将变量a的地址传给指针变量a,数组名b作为实参,形参也为b数组,当数组中各元素的值发生变化时,实参数组元素的值也随之发生变化,所以输出的b[0]应为6。
26.以下程序的输出结果是()。
#include<stdio.h>
main()
intn=4;
while(n--)printf("%d",--n);
A)20B)31C)321D)210
(分数:
1.00)
A. √
B.
C.
D.
解析:
[解析]n--是先使用后自减,--n是先自减后使用。
n=4时,执行n--后,n变为3,执行--n后,n变为2,所以,第一次输出时,n为2;同上过程,第二次输出时,n为0。
27.下列说法正确的是()。
A)在C语言中,可以使用动态内存分配技术,定义元素个数可变的数组
B)在C语言中,数组元素的个数可以不确定,允许随机变动
C)在C语言中,数组元素的数据类型可以不一致
D)在C语言中,定义了一个数组后,就确定了它所容纳的元素的个数
(分数:
1.00)
A.
B.
C.
D. √
解析:
[解析]本题考查数组的两个知识点:
①在C语言中,数组元素的个数是确定的,不允许随机变动,数组定义好之后,它所能容纳的元素的个数也就确定了;②同一个数组中所有元素的类型是一样的。
28.下列程序执行的输出结果是()。
#inClUde<stdio.h>
main()
chara[2][4];
strcpy(a,"are");strcpy(a[1],"you");
a[0][3]='&';
printf("%s/n",a);
A)are&youB)youC)areD)&
(分数:
2.00)
A. √
B.
C.
D.
解析:
[解析]strcpy(a,"are")中数组名a代表数组首地址的地址常量,该操作把are复制到a中,a[0][3]='&',且strcpy(a[1],"you")把you复制到a[1]中,故输出a为“are&you”。
29.有以下程序:
#include<stdio.h>
#definef(x)x*x*x
main()
inta=3,s,t;
s=f(a+1);t=f((a+1));
printf("%d,%d/n",s,t);
程序运行后的输出结果是()。
A.10,64B.10,10C.64,10D.64,64
(分数:
1.00)
A. √
B.
C.
D.
解析:
[解析]本题考查参数的宏定义。
第一次函数调用求s的值,x=a+1,所以x*x*x应写成a+1*a+1*a+1,没有括号优先级,结果为10,第二次函数调用x*x*x可写成(a+1)*(a+1)*(a+1),所以结果为64。
30.以下不能对二维数组a进行正确初始化的语句是
A)inta[2][3]=0;
B)inta[][3]=1,2,0;
C)inta[2][3]=1,2,3,4,5,6;
D)inta[][3]=1,2,3,4,5,6;
(分数:
2.00)
A.
B.
C. √
D.
解析:
[解析]关于二维数组的初始化,我们需要掌握如下方法:
①所赋初值个数与数组元素的个数相同;②所赋初值行数少于数组行数时,系统将自动给后面各行的元素补初值0;③在给二维数组赋初值时可以不用行花括号对。
选项C)应该是inta[3][2]={{1,2},{3,4},{5,6,}};
31.根据下列的定义,能打印出字母P的语句是()
structstucharname[10];
intage;
;
stmctstus[10]="John",11,
"Paul",12,
"Mary",11,
"adam",12
:
A)printf("%c",s[3].name);B)printf("%c",s[3].name[1]);
C)printf("%c",s[2].name[11]);D)printf("%c",s[1].name[0]);
(分数:
1.00)
A.
B.
C.
D. √
解析:
[解析]本题主要考查按结构数组元素方式引用结构成员。
字母P为“Paul”的第一个字母,是结构体s[1]的name成员的第二个元素的值,即s[1].name[0]的值。
32.已知有结构体:
structsk
inta;
floatb;
data,*p;
若有p=&data,则对data的成员a的正确引用是()。
A)(*p).data.aB)(*p).a;C)p->data.aD)p.data.a
(分数:
2.00)
A.
B. √
C.
D.
解析:
[解析]本题主要考查结构指针:
p=&data,访问结构体的成员,可以通过结构变量访问,即data.a,也可以用等价的指针形式:
(*p).a和p->a来访问结构体变量中的成员。
33.有以下程序:
#include<stdio.h>
intfun(int*k)
intb=0;
b=*k+b:
return(b);
main()
inta[10]=1,2,3,4,5,6,7,8,i;
for(i=2;i<4;i++)printf("%d",fun(&a[i]));
printf("/n");
程序运行后的输出结果是()。
A)1012B)810C)34D)1028
(分数:
2.00)
A.
B.
C. √
D.
解析:
[解析]b是局部变量,因此当i=2时,fun
(2)的值为3,i=3时为4
34.fseanf函数的正确调用形式是
A)fseanf(fp,格式字符串,输出表列);
B)fseanf(格式字符串,输出表列,fp);
C)fscanf(格式字符串,文件指针,输出表列);
D)fscanf(文件指针,格式字符串,输入表列);
(分数:
2.00)
A.
B.
C.
D. √
解析:
[解析]fscanf的格式为:
(文件指针,格式字符串,输入表列)。
35.变量a中的数据用二进制表示的形式是01011101,变量b中的数据用二进制表示的形式是11110000。
若要求将a的高4位取反,低4位不变,所要执行的运算是
A)a^bB)a|bC)a&bD)a<<4
(分数:
2.00)
A. √
B.
C.
D.
解析:
[解析]对于任何二进制数,和1进行异或运算都会对其取反,而和0进行异或运算不会产生任何变化。
36.设x=011050,则x=x&01252的值是()。
A)0000001000101000B)1111110100011001
C)0000001011100010D)1100000000101000
(分数:
2.00)
A. √
B.
C.
D.
解析:
[解析]本题主要考查按位与运算,x=011050的二进制形式为000100100010t000,01252的二进制形式为0000001010101010,两者相与得0000001000101000。
37.若有以下语句
typedefstructS
intg;charh;T;
以下叙述中正确的是()。
A)可用S定义结构体变量B)可用T定义