二级C语言笔试219.docx
- 文档编号:4834621
- 上传时间:2022-12-10
- 格式:DOCX
- 页数:22
- 大小:29.33KB
二级C语言笔试219.docx
《二级C语言笔试219.docx》由会员分享,可在线阅读,更多相关《二级C语言笔试219.docx(22页珍藏版)》请在冰豆网上搜索。
二级C语言笔试219
二级C语言笔试-219
(总分:
90.00,做题时间:
90分钟)
一、选择题(总题数:
40,分数:
60.00)
1.下列叙述中正确的是()。
(分数:
1.00)
A.一个逻辑数据结构只能有一种存储结构
B.逻辑结构属于线性结构,存储结构属于非线性结构
C.一个逻辑数据结构可以有多种存储结构,且各种存储结构不影响数据处理的效率
D.一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理的效率 √
解析:
[解析]数据的存储结构是指数据的逻辑结构在计算机存储空间中的存放形式,一种数据结构可以根据需要采用不同的存储结构,常用的存储结构有顺序和链式结构。
采用不同的存储结构,其处理的效率是不同的。
2.以下语句定义正确的是()。
(分数:
1.00)
A.inta[1][4]=1,2,3,4,5;
B.floata[3][1]=1,2,3;
C.longa[2][3]=1,1,2,1,2,3,0,0;
D.doublea[][3]=0; √
解析:
[解析]本题考查的是如何对二维数组进行赋值。
选项A)中数组第二维的大小是4,但却给赋了5个元素;选项B)中C语言规定,对于二维数组,只可以省略第一个方括号中的常量表达式而不可以省略第二个方括号中的常量表达式;选项C)中数组第一维的大小是2。
但是赋值却超过了2;选项D)中在对二维数组元素赋初值时,可以只对部分元素赋初值,未赋初值的元素自动取0。
3.以下程序的输出结果是()。
#include<stdio.h>
main()
inta=1,b=3;
if((++a<0)&&!
(b--<=0))
printf("%d,%d/n",a,b);
else
printf("%d,%d/n",b,
(分数:
1.00)
A.;
A)
解析:
[解析]解答本题的关键在于if语句条件中的表达式。
初始时a=1,b=3,所以++a=2>0,因此++a<0为假;因为是进行逻辑与(&&)运算,在&&的一个运算对象为假的前提下不用判断第二个运算对象的真假,就可以直接得出整个表达式的值为逻辑0,所以执行else语句。
4.若有以下定义(设int类型变量占2个字节)
inti=8,j=9:
则以下语句:
printf("i=%%d,j=%%%d/n",i,j);
输出的结果是()。
(分数:
1.00)
A.i=8,j=9
B.i=%d,j=%8 √
C.i=%d,j=%d
D.8,9
解析:
[解析]本题考查printf函数的格式。
printf函数中格式说明符之前插入的任何字符都按原样输出。
对于printf函数,有两个%说明,第一个%后面的内容要按原样输出。
5.有以下程序:
#include<stdio.h>
main()
inti=0,a=0;
while(i<20)
for(;;)
if((i%5)==0)break;
elsei--;
i+=13,a+=i;
pfintf("%d/n",
(分数:
1.00)
A.;
&nbs
解析:
[解析]本题考查while循环。
当i<20时,进入while循环体,循环体内的for循环实现的功能是,当i值是0或5的倍数时,执行“i+=13;a+=i;”这两条语句:
若i值不是5的倍数则一直执行for循环。
①当i=0时,执行i+=13;a+=i;i=13,a=13;②判断i=13<20,进入while循环体,i=10时,跳出for循环,执行i+=13;a+=i;i=23,a=36;③判断i=23>20,循环结束。
6.在软件开发中,需求分析阶段产生的主要文档是()。
(分数:
1.00)
A.数据字典
B.详细设计说明书
C.数据流图说明书
D.软件需求规格说明书 √
解析:
[解析]需求分析的最终结果是生成软件需要规格说明书,可以为用户、分析人员和设计人员之间的交流提供方便。
7.若运行时给变量x输入12,则以下程序的运行结果是()。
main()
intx,y;
scanf("%d",&x);
y=x>12?
x+10:
x-12;
printf("%d/n",y);
(分数:
1.00)
A.0 √
B.22
C.12
D.10
解析:
[解析]本题考查三目运算符“?
:
”。
表达式“x>12?
x+10:
x-12”即,如果x>12成立,则x+10的值即为此表达式的值,否则x-12即为此表达式的值。
因为x=12,所以x>12不成立,所以执行y=x-12=0。
8.运行下面程序时,从键盘输入字母A,则输出结果是()。
#include<stdio.h>
main()
charch;
ch=getchar();
switch(ch)
case'A':
printf("AAAA/n");
case'B':
printf("BBBB/n");
default:
printf("CCCC/n");
(分数:
1.00)
A.AAAA
B.AAAA
BBBB
C.AAAA
BBBB
CCCC √
D.AAAA
CCCC
解析:
[解析]本题考查switch语句。
因为ch=A,所以第一个switch语句,执行ease'A'后面的语句,输出AAAA,没有遇到break语句,所以接着再执行case'B'和default,分别输出BBBB和CCCC。
9.下述程序的输出结果是()。
#include<stdio.h>
voidmain()
inta[5]=1,2,3,4,5;
int*p=a,**q=&p;
printf("%d",*(p++));
printf("%d",**q);
(分数:
1.00)
A.22
B.11
C.34
D.12 √
解析:
[解析]程序首先定义了一个指向一维数组a的指针p,一个指向指针变量p的指针变量q,输出*(p++)是先输出*p即a[0]的值,再将指针p指向数组的下一个元素a[1],输出**q是输出指针p所指向单元的内容,即a[1]的值。
10.对于一个正常运行的C程序,下列叙述中正确的是()。
(分数:
1.00)
A.程序的执行总是从main函数开始,在main函数结束 √
B.程序的执行总是从程序的第一个函数开始,在main函数结束
C.程序的执行总是从main函数开始,在程序的最后一个函数中结束
D.程序的执行总是从程序中的第一个函数开始,在程序的最后一个函数中结束
解析:
[解析]一个C语言源程序无论包括了多少函数,总是从main函数开始执行,从main函数结束。
11.以下叙述正确的是()。
(分数:
1.00)
A.只能在循环体内和switch语句体内使用break语句 √
B.contiune语句的作用是结束整个循环的执行
C.在循环体内使用break语句或continue语句的作用相同
D.从多层循环嵌套中退出时,只能使用goto语句
解析:
[解析]本题考查循环的4个知识点:
①break语句可以出现在循环体内及switch语句体内,不能用于其他的语句;②continue语句的作用是结束本次循环,即跳过循环体中下面尚未执行的语句,而接着转去判定循环条件是否成立,从而确定下一次循环是否继续执行,也就是说执行contitme语句不会使整个循环终止;③在循环体内使用break语句会使循环提前终止;④从多层循环嵌套中退出时,可以使用goto语句或者break语句。
12.以下有关宏替换的叙述不正确的是()。
(分数:
1.00)
A.双引号中出现的宏名不替换
B.使用宏定义可以嵌套
C.宏定义仪仪是符号替换
D.宏名必须用大写字母表示 √
解析:
[解析]本题考查宏替换的规则。
宏替换分为简单的字符替换和带参数的宏替换两类。
使用宏时应注意以下几点:
①定义仅仅是符号替换,不是赋值语句,因此不做语法检查;②为了区别程序中其他的标识符,宏名的定义通常用大写字母,但不是必须用大写;③双引号中出现的宏名不替换;④使用宏定义可以嵌套,即后定义的宏中可以使用先定义的宏。
13.若二维数组a有m列,则在a[i][j]前的元素个数为()。
(分数:
1.00)
A.j*m+i
B.i*m+j √
C.j*m+i+1
D.i*m+j+1
解析:
[解析]二维数组的元素可以看成是按矩阵形式存放的,总是先存放第一行的元素,再存放第二行的元素。
数组第一维的下标是i,说明它前面还有i行,有i*m个元素,数组第二维的下标是j,说明它前面还有j列,有j个元素,所以共有i*m+j个元素。
14.设一棵满二叉树共有15个结点,则在该满二叉树中的叶子结点数为()。
(分数:
1.00)
A.7
B.8 √
C.9
D.10
解析:
[解析]在具有n个结点的满二叉树,其非叶子结点数为int(n/2),而叶子结点数等于总结点数减去非叶子结点数。
本题n=15,故非叶子结点数等于int(15/2)=7,叶子结点数等于15.7=8。
15.有关return语句说法不正确的是()。
(分数:
1.00)
A.系统默认的返回值类型为整型,故当函数的返回值为int型时,在函数定义时,返回值的类型说明可以省略
B.当函数有返回值时,凡是允许表达式出现的地方,都可以调用该函数
C.当函数没有返回值时,函数的返回值类型可以说明为void型,它表示“无类型”或“空类型”
D.函数的返回值类型必须与return语句中的表达式值的类型一致,但C语言也允许不同;这时,系统以函数定义时的返回值类型说明为准,并自动地将return语句中表达式的值转换为函数的返回值类型 √
解析:
[解析]函数的返回值类型一般与return语句中的表达式值的类型一致,但C语言也允许不同;这时,系统以函数定义时的返回值类型说明为准,并自动地将return语句中表达式的值转换为函数的返回值类型。
16.下述程序的输出结果是()。
#include<stdio.h>
voidmain()
chara=1,b=2;
charc=a^b<<2;
printf("/n%d",c);
(分数:
1.00)
A.9 √
B.10
C.12
D.2
解析:
[解析]本题主要考查C语言最基本的算术运算“左移(<<)”和“异或(^)”。
“左移”或“右移”运算表达式的一般形式为:
x<<n或x>>n。
“左移(<<)”运算的规则是将x的二进制位全部向左移动n位,将左边移动的高位舍弃,右边空出的位补0:
“右移(>>)”运算的规则是将x的二进制位全部向右移动n位,将右边移动的高位舍弃,左边高位空出要根据原来符号位的情况进行补充,对无符号数则补0,对有符号数,若为正数则补0,若为负数则补1。
“异或”运算是当两个运算量的相应位相同时结果为0,不相同时结果为1。
b=2的二进制为(00000010)b<<2后为00001000,a=1的二进制为00000001,所以c=a^b<<2为00001001,转化为十进制后为9。
17.算法的空间复杂度是指()。
(分数:
1.00)
A.算法程序的长度
B.算法程序中的指令条数
C.算法程序所占的存储空间
D.算法执行过程中所需要的存储空间 √
解析:
[解析]算法的空间复杂度是指执行这个算法所需要的内存空间。
一个算法所占用的存储空间包括算法程序所占的空间、输入的初始数据所占的存储空间以及算法执行中所需要的额外空间。
其中额外空间包括算法程序执行过程中的工作单元以及某种数据结构所需要的附加存储空间。
如果额外空间量相对于问题规模来说是常数,则称该算法是原地工作的。
在许多实际问题中,为了减少算法所占的存储空间,通常采用压缩存储技术,以便尽量减少不必要的额外空间。
18.若输入“abcdef”、“abdef”,以下程序的输出结果为()。
#include<stdio.h>
#lnclude<string.h>
main()
intn;
chars1[20],s2[20],p1,*p2;
scanf("%s",s1);
scanf("%s",s2);
P1=s1;
p2=s2;
n=strcmp(p1,p2);
printf("%d/n",n);
(分数:
1.00)
A.-1 √
B.0
C."abcdef"
D."abdef"
解析:
[解析]本题考查两个知识点:
①字符串比较幽数strcmp(s1,s2),若s1>s2,则返回1;若s1=s2,则返回0;若s1<s2,则返回-1。
②字符串依次比较的是它们相同位置上字符的ASCII
19.若变量都已正确说明,则以下程序段输出结果为()。
#include<stdio.h>
main()
chara='a';
intb=2;
printf(a>b?
”***a=%d":
"###b=%d",a,b);
(分数:
1.00)
A.***a=3
B.###b=3
C.***a=3##b=5
D.全部错误 √
解析:
[解析]本题考查printf函数的格式和三日运算符“?
:
”的使用。
printf函数中格式说明符之前插入的任何字符都原样输出。
本题中a>b为真,所以返回“***a=97”。
20.下列叙述中错误的是()。
(分数:
1.00)
A.在C语言中,对二进制文件的访问速度比文本文件快
B.在C语言中,随机文件以二进制代码形式存储数据
C.语句FILEfp;定义了一个名为fp的文件指针 √
D.C语言中的文本文件以ASCII码形式存储数据
解析:
[解析]在C语言中,文件指针实际上是指向一个结构体类型的指针,一般称这个结构体类型名为FILE,可以用此类型名来定义文件指针。
定义文件类型指针变量的一般形式为:
FILE*指针变量名;选项C)中少了“*”,所以选项C)错误。
21.若执行下述程序时,若从键盘输入6和8,结果为()。
main()
inta,b,s;
scanf("%d%dt",&a,&b);
s=a:
if(s=b)
s*=s;
printf("%d",s);
(分数:
2.00)
A.36
B.64 √
C.48
D.以上都不对
解析:
[解析]首先通过scanf函数把从键盘读入的数据赋给变量a和b,if语句判断如果a和b不等,执行s=s*s=64。
22.设有定义:
char*c;,以下选项中能够使字符型指针c正确指向一个字符串的是()。
(分数:
2.00)
A.charstr[]="string";c=str; √
B.scanf("%s",c);
C.c=getchar();
D.charstr[]="string";strcpy("C,str")
解析:
[解析]在题目的题干中定义了字符指针变量c,在选项A)中,首先定义字符数组str,然后再把字符数组str的首地址赋给字符指针变量c。
所以选项A)是正确的。
在选项B)中,应改成scanf("%s”,&c);在选项C)中,getchar函数的返回值是用户输入的第一个字符的ASCII码,如出错返回-1,且将用户输入的字符回显到屏幕,如用户在按回车之前输入了不止一个字符,其他字符会保留在键盘缓存区中,等待后续getchar调用读取。
即c只能指向一个字符而不能指向字符串。
在选项D)中,strcpy函数只是将str字符串中的内容赋给c,并没有使其指向str,所以选项D)是错误的。
23.下列叙述中,正确的是()。
(分数:
2.00)
A.软件交付使用后还需要进行维护 √
B.软件一旦交付使用就不需要再进行维护
C.软件交付使用后其生命周期就结束
D.软件维护是指修复程序中被破坏的指令
解析:
[解析]软件的运行和维护是指将已交付的软件投入运行,并在运行使用中不断地维护,根据新提出的需求进行必要而且可能的扩充和删改。
而软件生命周期是指软件产品从提出、实现、使用维护到停止使用退役的过程。
24.设a和b均为int型变量,且a=6,b=11,则能使值为3的表达式是()。
(分数:
2.00)
A.b%(a%4)
B.b%(a-a%5)
C.b%a-a%5
D.(b%a)-(a%4) √
解析:
[解析]表达式“a%b”表示的是求a除以b的余数。
因此,选项A):
(6%4)=2,11%2=1;选项B):
(6-6%)=5,11%5=1;选项C):
11%6-6%5=4;选项D);(11%6)-(6%4)=3。
25.有以下程序:
#include<stdio.h>
main()
intx;
scanf("%d",&x);
if(x<=0);else
if(x!
=5)printf("%d/n",x);
程序运行时,输入的值在哪个范围才会有输出结果()。
(分数:
2.00)
A.不等于5的整数
B.大于0且不等5的整数 √
C.大于0或等于5的整数
D.小于5的整数
解析:
[解析]题目中,虽然else和第二个if不在同一行上,但等价于在同一行上,因此,程序的意思是当x大于0且不等于5时将其打印出来。
26.以下不合法的用户标识符是()。
(分数:
2.00)
A.804zhang √
B._hh
C.yy614
D.If
解析:
[解析]C语言规定,标识符是由字母、数字或下划线组成,并且它的第一个字符必须是字母或下划线。
27.已知chara;intb;floate;doubled;则表达式a-b+c-d结果为()型。
(分数:
2.00)
A.double √
B.float
C.int
D.char
解析:
[解析]C语言中允许进行不同数据类型的混合运算,但在实际运算时,要先将不同类型的数据转化成同一类型再进行运算。
类型转换的一般规则是:
①运算中将所有char型转换成int型,float型转换成double型;②低级类型服从高级类型,并进行相应的转换,数据类型由低到高的顺序为:
*char->int->unsigned->long->float->double;③赋值运算中最终结果的类型,以赋值运算符左边变量的类型为准,即赋值运算符右端值的类型向左边变量的类型看齐,并进行相应转换。
28.下列选项中,不属于数据库管理的是()。
(分数:
2.00)
A.数据库的建立
B.数据库的调整
C.数据库的监控
D.数据库的校对 √
解析:
[解析]数据库管理一般包括:
数据库的建立、数据库的调整、数据库的重组、数据库的安全性控制与完整性控制、数据库的故障恢复和数据库的监控。
29.有以下程序:
#include<stdio.h>
#include<string.h>
structA
inta;charb[10];doublec;;
voidf(structA*t);
main()
structAa=1001,"ZhangDa",1098.0;
f(&
(分数:
2.00)
A.;printf("%d,%s,%6.1f/n",a.a,a.b,a.c);
voidf(st
解析:
[解析]本题主要考查是的函数调用时参数之间的传递问题。
在C语言中参数之间的传递是传值,也就是把实参的值复制一份传递给形参,而实参的值不发生变化。
但对于指针调用来说,函数直接对实参的地址操作,因此在这种情况下实参变化。
30.在下列选项中,没有构成死循环的程序段是()。
(分数:
2.00)
A.inti=100;
for(;;)
i=i%10+1;
if(i>10)break;
B.while
(1);
C.intk=0;
do++k;while(k<=10); √
D.ints=12;
while(s);
--s;
解析:
[解析]本题考查死循环的知识。
选项A)中,for循环没有任何控制语句就会一直执行下去,所以不可能通过控制表达式的值结束循环。
循环体内,i=i%10+1这个表达式的值永远小于10,所以永远不会跳出循环,是死循环;选项B)中,while中表达式永远是非0,不会结束循环;选项C)中,当k>10时,结束循环;选项D)中,while(s);后面没有任何表达式而是直接加了一个分号,会一直执行,形成死循环。
31.假设有语句sizeof(double),则它是()。
(分数:
2.00)
A.一个整型表达式 √
B.一个双精度浮点型表达式
C.一种函数调用
D.一种函数定义
解析:
[解析]sizeof(double)是C语言内部规定的一个计算参数(double)在计算机的内存中所占用的字节数量的函数,它返回一个整数值。
32.在下列关系运算中,不改变关系表中的属性个数但能减少元组个数的是()。
(分数:
2.00)
A.并
B.交 √
C.投影
D.除
解析:
[解析]关系R与S经交运算后所得到的关系是由那些既在R内又在S内的有序组所组成,记为R∩S,交运算不改变关系表中的属性个数但能减少元组个数。
33.下列程序的运行结果是()。
#include<stdio.h>
voidfun(int*s,int*p)
staticintt=3;
*p=s[t];
t--;
voidmain()
inta[]=2,3,4,5,k,x;
for(k=0;k<4;k++)
fun(a,&x);
printf("%d,",x);
(分数:
2.00)
A.5,4,3,2, √
B.2,3,4,5,
C.2,2,2,2,
D.5,5,5,5,
解析:
[解析]分析fun函数程序段,可知fun函数要实现的功能是将s中第(t+1)个元素以前的元素逆置赋给数组p。
由于fun函数定义了静态变量t=3,因此,在主函数中调用函数fun(a,&x)时,就是要将数组a中前4个元素逆置赋给数组x,最后输出x数组。
34.设R是一个2元关系,有3个元组,S是一个3元关系,有3个元组。
如T=R×S,则T的元组的个数为()。
(分数:
2.00)
A.6
B.8
C.9 √
D.12
解析:
[解析]R为n元关系,有P个元组S为m元关系,有q个元组。
两个关系笛卡儿积是一个n+m元的关系,元组个数是q×p。
所以T的元组的个数为9个。
35.已知一个文件中存放若干工人档案记录,其数据结构如下:
structa
charnumber[100];
intage;
floatp[6];
;
定义一个数组:
structanumber[10];
假定文件已正确打开,不能正确地从文件中读入10名工人数据到数组b中的是()。
(分数:
2.00)
A.fread(b,sizeof(structa)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 二级 语言 笔试 219