二级C语言31真题含答案与解析交互Word下载.docx
《二级C语言31真题含答案与解析交互Word下载.docx》由会员分享,可在线阅读,更多相关《二级C语言31真题含答案与解析交互Word下载.docx(28页珍藏版)》请在冰豆网上搜索。
∙D.1.10
1
D
3.
以下函数返回a所指数组中最小的值所在的下标值
fun(int*a,intn)
{inti,j=0,p;
p=j;
for(i=j;
i<n;
i++)
if(a[i]<a[p])______;
return(p);
}
在横线处应填入的是
A)i=p
B)a[p]=a[i]
C)p=j
D)p=i
[解析]该程序先判断a[i]<a[p],如果条件为真,则a[i]比当前设定的最小值小(p保留的当前最小元素的下标),那么将i赋给p,即将比较过的最小元素下标保留在p中,作为下面判断的标准。
4.
下列叙述中正确的是
∙A.线性链表是线性表的链式存储结构
∙B.栈与队列是非线性结构
∙C.双向链表是非线性结构
∙D.只有根结点的二叉树是线性结构
[解析]一个非空的数据结构如果满足下列两个条件:
①有且只有一个根结点;
②每一个结点最多有一个前件,也最多有一个后件,则称为线性结构。
线性链表是线性表的链式存储结构,故选项A的说法是正确的。
栈与队列是特殊的线性表,它们也是线性结构,故选项B的说法是错误的;
双向链表是线性表的链式存储结构,其对应的逻辑结构也是线性结构,而不是非线性结构,故选项C的说法是错误的;
二叉树是非线性结构,而不是线性结构,故选项D的说法是错误的。
5.
有以下程序:
point(char*p){P+=3;
)
{
charb[4]={'
a'
'
b'
c'
d'
},*p=b;
point(p);
printf("
%c\n"
*p);
程序运行后的输出结果是______。
∙A.a
∙B.b
∙C.c
∙D.d
[解析]本题的考点是C语言的函数参数的传递方式(传值)。
函数poret的形参是一个char型指针p,当调用point(p)时,将指针p的值传递给形参,函数point中的p+=3,并不影响主程序main中的p值,因此函数调用结束后,p仍指向b的首地址,输出*p的值应是字符a。
6.
下列选项中不属于结构化程序设计方法的是______。
∙A.自顶向下
∙B.逐步求精
∙C.模块化
∙D.可复用
[解析]结构化程序设计方法的主要原则可以概括为:
自顶向下,逐步求精,模块化,限制使用goto语句。
7.
下列叙述中正确的是
。
∙A.数据的逻辑结构与存储结构必定一一对应
∙B.由于计算机存储空间是向量式的存储结构,因此,数据的存储结构一定是线性结构
∙C.程序设计语言小的数组.般是顺序存储结构,因此,利用数组只能处理线性结构
∙D.以上3种说法都不对
[解析]一种数据的逻辑结构根据需要可以表示成多种存储结构,数据的逻辑结构与存储结构不一定一一对应,选项A错误。
计算机的存储空间是向量式的存储结构,但一种数据的逻辑结构根据需要可以表示成多种存储结构,如线性链表是线性表的链式存储结构,数据的存储结构不一定是线性结构,因此选项B错误。
数组一般是顺序存储结构,但利用利用数组也能处理非线性结构。
选项C错误。
由此可知,只有选项D的说法正确。
8.
软件工程的理论和技术性研究的内容主要包括软件开发技术和
∙A.消除软件危机
∙B.软件工程管
∙C.程序设计自动化
∙D.实现软件可重用
B
[解析]软件工程的目标是:
在给定的成本、进度的前提下,开发出具有有效性、可靠性、可理解性、可维护性、可重用性、可适应性、可移植性、可追踪性和可互操作性且满足用户需求的产品。
基于这一目标,软件工程的理论和技术性研究的内容主要包括软件开发技术和软件工程管理。
9.
以下选项中不属于C语言的类型的是
∙A.signedshortint
∙B.unsignedlongint
∙C.unslgnedint
∙D.longshort
本题考核的知识点是c语言中的数据类型。
在选项中很明显选项A为无符号短整型,选项B为无符号长整型,选项C为无符号整型,而选项D的类型在C语言中不存在。
所以,4个选项中D为所选。
10.
有下列程序:
{intk=5;
while(--k)
%d"
k-=3);
\n"
);
执行后的输出结果是
∙A.1
∙B.2
∙C.4
∙D.死循环
[解析]在程序语句中,k的初始值为5,进行第1次while循环后,k自减1为4,非0,执行循环体里的printf语句,输出1,此时k的值变为1。
程序执行第2次循环时,k自减1变为0,为假,退出while循环语句。
所以程序的最后结果为1。
11.
在“文件包含”预处理语句的使用形式中,当#include后面的文件名用””(双撇号)括起时,寻找被包含文件的方式是
∙A.直接按系统设定的标准方式搜索目录
∙B.先在源程序所在的目录搜索,如没找到,再按系统没定的标准方式搜索
∙C.仅仅搜索源程序所在目录
∙D.仅仅搜索当前目录
[解析]#include“文件名”,预处理程序首先在引用被包含文件的源文件所在的目录下搜索指定的文件,如没找到,再按系统指定的标准目录搜索。
12.
以下程序的输出结果是______。
main()
{
chara[]="
programming"
,b[]="
language"
;
char*p1,*p2;
inti;
p1=a;
p2=b;
for(i=0;
i<7;
if(*(p1+i)==*(p2+i))printf("
%c"
,*(p1+i));
}
∙**
**
13.
有以下结构体说明和变量定义,如图所示,指针p、q、r分别指向此链表中的3个连续结点。
structnode
{intdata;
structnode*next;
}*p,*q,*r;
现要将q所指结点从链表中删除,同时要保持链表的连续,以下不能完成指定操作的语句是
∙A.p->next=q->next;
∙B.p-next=p->next->next;
∙C.p->next=r;
∙D.p=q->enxt;
[解析]本题考查链表结点的删除。
q->next中存放的是r所指结点的首地址,将r所指结点的首地址存于p->next中,则实现删除q所指结点的功能,并保持链表连续,p所指结点与r所指结点相连。
14.
下面说明不正确的是
∙A.chara[10]="
china"
∙B.chara[10],*p=a;
p="
chiua"
∙C.char*a;
a="
∙D.chara[10],*p;
p=a="
[解析]C语言中操作一个字符串常量的方法有:
①把字符串常量存放在一个字符数组之中。
②用字符指针指向字符串,然后通过字符指针来访问字符串存储区域。
当字符串常量在表达式中出现时,根据数组的类型转换规则,它被转换成字符指针。
本题选项D)错误的关键是对数组初始化时,可以在变量定义时整体赋初值,但不能在赋值语句中整体赋值。
15.
下列程序的输出结果是
#include<stdio.h>
intfun(intx)
intp;
if(x==0‖x==1)
return3;
else
p=x-fun(x-2);
returnp;
voidmain()
\n%d"
fun(5));
∙A.5
∙B.3
∙C.7
∙D.1
[解析]本题考查函数的递归调用。
在函数递归调用时,fun(5):
a=5-fun(3)->fun3:
a=3-fun
(1)->fun
(1):
a=3,反推回去fun(3):
a=3-3=0->fun(5):
a=5-0=5,最后的计算结果为5。
16.
以下程序段的输出结果是
char
s[]="
\\141\141abc\t"
;
printf
("
%d\n"
strlen(s));
∙A.
9
∙B.
12
∙C.
13
∙D.
14
[解析]本题考核的知识点是字符串的长度。
字符数组中可以存放字符串,但字符数组的长度并不是字符串的长度,字符串的长度是指字符数组中存放的有效字符个数,即,'
\0'
之前的字符数。
字符数组s中依次存放的字符是:
'
\"
1"
4"
141"
a"
b"
c"
\t'
和最后一个字符串结束标记'
,故字符串的长度是9。
所以,4个选项中A为所选。
17.
有三个关系R、S和T如下:
由关系R和S通过运算得到关系T,则所使用的运算为______。
∙A.笛卡儿积
∙B.交
∙C.并
∙D.自然连接
4
[解析]自然连接是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉,所以根据T关系中的有序组可知R与S进行的是自然连接操作。
18.
阅读下列程序段,则程序的输出结果为
#include"
stdio.h"
#defineM(X,Y)(X)*(Y)
#defineN(X,Y)(X)/(Y)
inta=5,b=6,c=8,k;
k=N(M(a,b),c);
,k);
∙A.3
∙B.5
∙C.6
∙D.8
[解析]带参数的宏定义命令行形式如下:
#define宏名(形参表)替换文本。
首先进行M的宏替换,之后再进行N的宏替换,替换后的表达式为(a)*(b)/(c)。
19.
charp[]={'
,'
},q[]="
abc"
%d%d\n"
sizeof(p),sizeof(q));
程序运行后的输出结果是______。
∙A.4
4
3
∙C.3
∙D.4
3
C
[解析]字符数组有两种定义方式:
一种是逐个字符赋给数组中各元素,如本题中“p[]={'
}的定义,由于定义时没有给出数组大小,此时字符个数就是数组的长度;
另一种是将字符串作为字符数组来处理,如题中“q[]="
”的定义形式。
C语言规定,字符串以'
作为结束符,并占用一个存储空间。
sizeof()函数是计算变量或数组所分配到的内存空间的大小,故本题的输出结果是34。
20.
有以下程序段:
intj;
floaty;
charname[50];
scanf("
%2d%f%s"
&j,&y,name);
当执行上述程序段,从键盘上输入555667777abc后,y的值为______。
[解析]它是格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中。
其中的格式命令可以说明最大域宽。
在百分号(%)与格式码之间的整数用于限制从对应域读入的最大字符数。
所以j的值为55,y的值为166.0,字符数组name为7777abe。
21.
以下不能正确定义二维数组的选项是______。
∙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}};
[解析]选项D在定义数组a时没有指定第二维的长度,错误。
22.
在关系数据库模型中,通常可以把(
)称为属性,其值称为属性值。
∙A.记录
∙B.基本表
∙C.模式
∙D.字段
[解析]数据库表中字段转化为属性,把记录的类型转化为关系模式。
23.
以下fun函数返回数组中最大值的下标:
intfun(int*s,intn)
{inti,k;
for(i=0,k=i;
if(s[i]>s[k])______;
return(k);
在横线处应填入的内容是______。
∙A.++k
∙**=k
∙**++
**=i
[解析]fun函数的功能是返回数组中最大值的下标。
通过for循环语句,每次将最大的数给k,即k=i,因此D选项正确。
24.
一个C语言程序是由
∙A.一个主程序和若干子程序组成
∙B.函数组成
∙C.若干过程组成
∙D.若干子程序组成
[解析]一个C源程序是由一个main函数和若干个其他函数组成的。
函数是C程序的基本单位,被调用的函数可以是系统提供的库函数,也可以是用户根据需要自己定义的函数。
25.
以下叙述中正确的是______。
∙A.一条语句只能定义一个数组
∙B.每个数组包含一组具有同一类型的变量,这些变量在内存中占有连续的存储单元
∙C.数组说明符的一对方括号中只能使用整型常量,而不能使用表达式
∙D.在引用数组元素时,下标表达式可以使用浮点数
[解析]A选项中,一条语句只能定义一个数组是不准确的,可以通过一条语句定义多个数组;
C选项中,数组说明符的一对方括号中可以是整型常量,可以是整型常量表达式;
D选项中,在引用数组元素时,下标表达式必须是整型的。
B选项正确。
26.
以下语句的输出结果是
%d,%d,%u\n"
,016,16,-16);
∙A.16,16,65420
∙B.14,16,6542
∙C.16,16,-16
∙D.14,16,-16
27.
数据库技术的根本目标是要解决数据的________。
∙A.存储问题
∙B.共享问题
∙C.安全问题
∙D.保护问题
28.
#include
<stdio.h>
charcchar(char
eh)
if(ch>='
A,&
&
ch<='
Z'
)
ch=ch-'
A'
+'
returnch;
chars[]="
ABC+abc=defDEF"
,*p=s;
while(*p)
*p=cchsr(*p);
p++;
%s\n"
,s);
∙A.abc+ABC=DEFdef
∙B.abc+abc=defdef
∙C.abcABCDEFdef
∙D.abcabcdefdef
[解析]本题中cchar函数的作用是:
如果参数ch是大写字母,则将它转换成小写字母,而对大写字母以外的字符不起作用。
29.
冒泡排序在最坏情况下的比较次数是
∙A.n(n+1)/2
∙B.nlog2n
∙C.n(n-1)/2
∙D.n/2
[解析]冒泡排序的基本思想是:
将相邻的两个元素进行比较,如果反序,则交换;
对于一个待排序的序列,经一趟排序后,最大值的元素移动到最后的位置,其它值较大的元素也向最终位置移动,此过程称为一趟冒泡。
对于有n个数据的序列,共需n-1趟排序,第i趟对从1到n-i个数据进行比较、交换。
冒泡排序的最坏情况是待排序序列逆序,第1趟比较n-1次,第2趟比较n-2次,依此类推,最后一趟比较1次,一共进行n-1趟排序。
因此,冒泡排序在最坏情况下的比较次数是(n-1)+(n-2)+…+1,结果为n(n-1)/2。
30.
有如下程序:
<stdio.h>
floatx=2.0,y;
if(x<0.0)
y=0.0;
elseif(x>10.0)
y=1.0/x;
else
y=1.0;
%f/n"
,y);
该程序的输出结果是
∙A.0.000000
∙B.0.250000
∙C.0.500000
∙D.1.000000
[解析]本题中,x=2.0,因此执行elsey=1.0,并且以“%f”输出。
31.
有以下定义语句,编译时会出现编译错误的是______。
∙**a='
\x2d'
\n'
**a="
aa"
[解析]D选项中将字符串常量“aa”赋给字符变量a是错误的。
32.
执行下列程序中的输出语句后,a的值是
inta;
(a=2*3,a*5,a+7));
∙A.17
∙B.37
∙D.13
[解析]本题考查逗号表达式.本题的返回值是a+7,a=2*3=6,a+7=13(注意:
本题问的是a的值,而不是程序的输出值)。
33.
#include<stdio.h>
{chara='
H'
a=(a>='
&
a<='
)?
(a-'
):
a;
,a);
程序运行后的输出结果是
[解析]多元运算符问号前面表达式为真,所以(a-'
)赋值给a,括号里的运算是把大写字母变成小写字母,所以答案应为选项D。
34.
下列工具中为需求分析常用工具的是
∙A.PAD
∙B.PFD
∙C.N—S
∙D.DFD
35.
在下列几种排序方法中,要求内存量最大的是______。
∙A.插入排序
∙B.选择排序
∙C.快速