试题七Word格式.docx
《试题七Word格式.docx》由会员分享,可在线阅读,更多相关《试题七Word格式.docx(16页珍藏版)》请在冰豆网上搜索。
{inta=2,i,k;
for(i=0;
i<
2;
i++)
k=funa(a++);
k);
A)3B)0C)5D)4
8.下面程序的输出结果是____。
voidnum()
{externintx,y;
inta=15,b=10;
x=a-b;
y=a+b;
intx,y;
{inta=7,b=5;
num();
%d,%d\n"
x,y);
A)12,2B)5,25C)1,12D)输出不确定
9.下面程序的输出结果是____。
{inta=2,i;
3;
%4d"
f(a));
f(inta)
b++;
c++;
return(a+b+c);
A)777B)71013C)7911D)789
10.下面程序的输出结果是____。
try()
{staticintx=3;
x++;
return(x);
main()
{inti,x;
i<
=2;
i++)
x=try();
x);
A)3B)4C)5D)6
第二大题(每题2分)
1.输入n值,输出高度为n的等边三角形。
例如当n=4时的图形如下:
*
***
*****
*******
voidprt(charc,intn)
{if(n>
0)
{printf("
%c"
c);
①;
{inti,n;
scanf("
%d"
&
n);
for(i=1;
=n;
{②;
③;
\n"
);
2.下面的函数实现N层嵌套平方根的计算。
doubley(doublex,intn)
{if(n==0)
return(0);
elsereturn(sqrt(x+(①)));
3.函数revstr(s)将字符串s置逆,如输入的实参s为字符串"
abcde"
,则返回时s为字符串"
edcba"
。
递归程序如下:
revstr(char*s)
{char*p=s,c;
while(*p)p++;
if(s<
p)
{c=*s;
*s=*p;
②;
revstr(s+1);
如下是由非递归实现的revstr(s)函数:
revstr(s)
char*s;
while(*p)p++;
④;
while(s<
p)
⑤=*p;
*p--=c;
4.下面函数用递归调用的方法,将str中存放的长度为n的字符串反转过来,例如原来是"
ABCDE"
,反序为"
EDCBA"
voidinvent(char*str,intn)
{chart;
t=*str;
*str=*(str+n-1);
*(str+n-1)=t;
if(n>
2)invent(①,n-2);
else②;
5.从键盘上输入10个整数,程序按降序完成从大到小的排序。
intarray[10];
sort(int*p,int*q)
{int*max,*s;
if(①)
return;
max=p;
for(s=p+1;
s<
=q;
s++)
if(*s>
*max)
swap(③);
sort(④);
}
swap(int*x,int*y){inttemp;
temp=*x;
*x=*y;
*y=temp;
{inti;
printf("
Enterdata:
for(i=0;
10;
i++)
array[i]);
sort(⑤);
Output:
for(i=0;
%d"
array[i]);
第三大题5分
编写一个简单计算器程序,输入格式为:
data1opdata2。
其中data1和data2是参加运算的两个数,op为运算符,它的取值只能是+、-、*、/。
参考答案
第一大题
1.答案:
A
注释:
int型表示整数的范围是-32768~32767。
2.答案:
B
3.答案:
数组元素在内存中按行排列,此数组的前3个元素的值分别是3、2、1,表达式中虽然数组下标的写法似乎每行有3个元素,和定义时的3行2列不一致,但是C语言引用数组元素时是根据数组的首地址和给出的下标进行运算决定元素的地址。
题中表达式引用了数组前3个元素。
4.答案:
D
5.答案:
当除数y为0时,程序发生溢出错误。
6.参考答案:
B
函数fun进行了递归调用,实际进行的运算是5×
4×
3×
2×
1×
10。
主函数内说明的局部变量w屏蔽了外部变量w,所以在主函数中外部变量w是不可见的,在调用printf函数时表达式"
fun(5)*w"
中w的值是10。
7.参考答案:
D
main函数三次调用了函数funa,在funa函数中的静态变量c仅在第一次调用时进行了初始化,再次调用时不再对静态变量赋初值。
8.参考答案:
main函数和num函数中都说明了变量a和b,由于它们是内部变量,所以它们分别在说明它们的函数内有效。
外部变量x和y在函数num之后被说明,而在num函数中又要引用它们,所以在num函数中用关键字"
extern"
说明变量x和y是一个外部变量,也就是通知计算机这两个变量在fun函数以外被说明,此处不是定义两个int型变量。
9.参考答案:
函数f中的变量c是静态变量,仅在第一次调用函数f时它被初始化为3,第二次调用函数f时c的值是4,第三次调用函数f时c的值是5。
10.参考答案:
第二大题
①prt(c,n-1)②prt('
'
n-i)③prt('
*'
i)
函数prt的功能是输出n个字符c。
①y(x,n-1)
这显然是一个递归问题,首先要对原来的数学函数定义形式进行变形,推导出原来函数的等价递归定义。
可以推导出原来函数的递归定义如下。
y(x,n)=x当n=0时
y(x,n)=sqrt(x+y(x,n-1))当n>
0时
①p--②*p='
\0'
③*p=c④p--⑤*s++
在递归算法中,指针s指向字符串首部要反向的字符,即要将指针s所指向的字符与指针p所指向的字符串尾的字符('
)进行交换,在交换过程中,将尚没有交换的字符串的中间部分作为一个整体,进行递归处理。
程序中首先执行"
c=*s"
,将首字符存入临时变量;
然后执行"
*s=*p"
,将尾字符存入串首;
执行"
revstr(s+1)"
是递归处理串的中间部分,这时,在②处应当填入"
*p='
,即存入串结束标记。
这是这一程序中的关键所在。
在③处要完成将存在临时变量c中的字符存入串尾的工作,应当填写"
*p=c"
①str+1②return①改为n-2
①p>
=q②max=s③p,max
④p+1,q⑤&
array[0],&
array[9]
本程序中的排序部分采用的是递归算法。
函数sort的两个形参的含义是:
对指针p和指针q之间的数据进行排序。
由语句"
for(s=p+1;
s++)"
中指针p和指针q之间的关系可以得出:
指针p不应在指针q之后,因此①处应填"
p>
=q"
、⑤处应填"
&
array[0],&
array[9]"
由于变量max是指向当前最大值的指针,则当找到新的最大值时,max中保存的应该是新的最大值的指针,因此②处应填"
max=s"
当调用函数swap交换两个变量值的时候,要求实参是变量的地址,因此,③处应填"
p,max"
将最大值存入指针p所指的单元。
由于问题的要求是"
从大到小"
排序,通过执行一次函数sort使最大值已经放到了指针p所指的单元中,因此,下一遍排序的时候,只要对指针p之后的元素进行即可,所以④处应填"
p+1,q"
第三大题
参考答案:
main()
{floatdata1,data2;
/*定义两个操作数变量*/
charop;
/*操作符*/
Enteryourexpression:
%f%c%f"
data1,&
op,&
data2);
/*输入表达式*/
switch(op)/*根据操作符分别进行处理*/
{case'
+'
:
/*处理加法*/
%.2f+%.2f=%.2f\n"
data1,data2,data1+data2);
break;
case'
-'
/*处理减法*/
%.2f-%.2f=%.2f\n"
data1,data2,data1-data2);
/*处理乘法*/
%.2f*%.2f=%.2f\n"
data1,data2,data1*data2);
/'
/*处理除法*/
if(data2==0)/*若除数为0*/
Divisionbyzero.\n"
else
%.2f/%.2f=%.2f\n"
data1,data2,data1/data2);
break;
default:
/*输入了其它运算符*/
Unknownoperater.\n"
数据结构
第一大题填空题(本大题共10小题,每小题2分,若有两个空格,每个空格1分,共20分)不写解答过程,将正确的答案写在每小题的空格内。
错填或不填均无分。
1.数据的逻辑结构是从逻辑关系上描述数据,它与数据的_________无关,是独立于计算机的。
2.在一个带头结点的单循环链表中,p指向尾结点的直接前驱,则指向头结点的指针head可用p表示为head=____________。
3.栈顶的位置是随着_________操作而变化的。
4.在串S=“structure”中,以t为首字符的子串有_______个。
5.假设一个9阶的上三角矩阵A按列优先顺序压缩存储在一维数组B中,其中B[0]存储矩阵中第1个元素a1,1,则B[31]中存放的元素是__________。
6.已知一棵完全二叉树中共有768结点,则该树中共有_________个叶子结点。
7.已知一个图的广度优先生成树如右图所示,则与此相
应的广度优先遍历序列为__________。
8.在单链表上难以实现的排序方法有_________和_________。
9.在有序表(12,24,36,48,60,72,84)中二分查找关键字72时所需进行的关键字比较次数为___________。
10.多重表文件和倒排文件都归属于_________文件。
第二大题5分
画出下列广义表的共享结构图形表示
P=(((z),(x,y)),((x,y),x),(z))
1.答案:
存储(或存储结构)
2.答案:
p->next->next
3.答案:
进栈和退栈
4.答案:
12
a4,8
6.答案:
384
7.答案:
Abefcdg
8.答案:
快速排序、堆排序、希尔排序
9.答案:
2
10.答案:
多关键字
第二大题
图1图2
数据库
第一大题(每题1分)
1.下列有关数据库的描述,正确的是______。
A、数据库是一个DBF文件B、数据库是一个关系C、数据库是一个结构化的数据集合D、数据库是一组文件
2.下列说法中,不属于数据模型所描述的内容的是______。
A、数据结构B、数据操作C、数据查询D、数据约束
3.用二维表数据来表示实体及实体之间联系的数据模型称为______。
A、实体--联系模型B、层次模型C、网状模型D、关系模型
4.下列函数中函数值为字符型的是______。
A、DATE()B、TIME()C、YEAR()D、DATETIME()
5.DBAS指的是______。
A、数据库管理系统B、数据库系统C、数据库应用系统D、数据库服务系统
第二大题(每题2分)
1.设有图书管理数据库:
图书(总编号C(6),分类号C(8),书名C(16),作者C(6),出版单位C(20),单价N(6,2))
读者(借书证号C(4),单位C(8),姓名C(6),性别C
(2),职称C(6),地址C(20))
借阅(借书证号C(4),总编号C(6),借书日期D(8))
对于图书管理数据库,求CIE单位借阅图书的读者的人数。
下面SQL语句正确的是______。
SELECT______FROM借阅WHERE;
借书证号_______
A、COUNT(DISTINCT借书证号)
IN(SELECT借书证号FROM读者WHERE单位="
CIE"
)
B、COUNT(DISTINCT借书证号)
IN(SELECT借书证号FROM借阅WHERE单位="
C、SUM(DISTINCT借书证号)
D、SUM(DISTINCT借书证号)
IN(SELECT借书证号FOR借阅WHERE单位="
2.查询订购单号(字符型,长度为4)尾字符是"
1"
的错误命令是______。
A、SELECT*FROM订单WHERESUBSTR(订购单号,4)="
B、SELECT*FROM订单WHERESUBSTR(订购单号,4,1)="
C、SELECT*FROM订单WHERE"
$订购单号
D、SELECT*FROM订单WHERERIGHT(订购单号,1)="
3.在关系模型中,为了实现"
关系中不允许出现相同元组"
的约束应使用______。
A、临时关键字B、主关键字C、外部关键字D、索引关键字
4.根据"
职工"
项目文件生成emp_sys.exe应用程序的命令是______。
A、BUILDEXEemp_sysFROM职工B、BUILDAPPemp_sys.exeFROM职工
C、LIKEEXEemp_sysFROM职工D、LIKEAPPemp_sys.exeFROM职工
5.当前盘当前目录下有数据库:
学院.dbc,其中有"
教师"
表和"
学院"
表。
"
表:
有SQL语句:
SELECTDISTINCT系号FROM教师WHERE工资>
=;
ALL(SELECT工资FROM教师WHERE系号="
02"
与如上语句等价的SQL语句是______。
A、SELECTDISTINCT系号FROM教师WHERE工资>
(SELECTMAX(工资)FROM教师WHERE系号="
B、SELECTDISTINCT系号FROM教师WHERE工资>
(SELECTMIN(工资)FROM教师WHERE系号="
C、SELECTDISTINCT系号FROM教师WHERE工资>
ANY(SELECT工资FROM教师WHERE系号="
D、SELECTDISTINCT系号FROM教师WHERE工资>
SOME(SELECT工资FROM教师WHERE系号="
1、答案C
2、答案C
3、答案D
4、答案B
5、答案C
1、答案:
A
2、答案:
C
3、答案:
4、答案:
B
5、答案:
软件工程
1、什么是软件工程?
2、需求分析的基本任务是什么?
3、欲开发一个银行的活期存取款业务的处理系统:
储户将填好的存/取款单和存折交给银行工作人员,然后由系统作以下处理;
(1)业务分类处理:
系统首先根据储户所填的存/取款单,确定本次业务的性质,并将存/取款单和存折交下一步处理;
(2)存款处理:
系统将存款单上的存款金额分别记录在存折和帐目文件中,并将现金存入现金库;
最后将存折还给储户;
(3)取款处理:
系统将取款单上的取款金额分别记录在存折和帐目文件中,并从现金库提取现金;
最后将现金和存折还给储户。
绘制该系统的数据流图和软件结构图。
4、软件测试的策略?
5、为什么在软件开发中,不能用简单增加人员的方法来缩短开发时间?
答案:
软件工程是指导计算机软件开发和维护的工程学科。
(1)它采用工程的概念、原理、技术和方法来开发和维护软件;
(2)它将管理技术与当前经过时间考验的而证明是正确的技术方法结合起来;
(3)它强调使用生存周期方法学和结构分析和结构技术;
(4)经过人们长期的努力和探索,围绕着实现软件优质高产这个目标,从技术到管理两个方面做了大量的努力,逐渐形成了"
软件工程学"
这一新的学科。
答案:
准确定义未来系统的目标,确定为了满足用户的需要系统必须做什么。
绘制该系统的数据流图和软件结构图。
顶层
一层
二层
软件结构图
(1)
在任何情况下都应使用边界值分析的方法。
(2)
必要时用等价类划分法补充测试方案。
(3)
必要时再用错误推测法补充测试方案。
(4)
对照程序逻辑,检查已设计出的测试方案。
根据对程序可靠性的要求采用不同的逻辑覆盖标准,再补充一些测试方案。
5、为什么在软件开发中,不能用简单增加人员的方法来缩短开发时间?
大量软件开发实践说明:
向一个已经延迟的项目追加开发人员,可能使它完成得更晚。
因为当开发人员以算术级数增长时,而人员之间的通信将以几何级数增长,往往"
得不偿失"