请将每一个空的正确答案写在答题卡序号的横线上,答在试卷上不给分。
(1)软件定义时期主要包括【1】和需求分析两个阶段。
(2)软件维护活动包括以下几类:改正性维护、适应性维护、【2】维护和预防性维护。
(3)数据的逻辑结构有线性结构和【3】两大类。
(4)某二叉树中度为2的结点有n个,则该二叉树中有【4】个叶子结点。
(5)在ER图中,矩形表示 【5】。
(6)阅读下面程序,则执行后的输出结果是【6】。
#include "stdio.h"
main()
{ int x,y,z;
x=1;y=2;z=3;
if(x>y)if(x>z)printf("%d",x);
else printf("%d",y);
printf("%d\n",z);}
(7)以下程序的输出结果是【7】。
main()
{ int y=9;
for(; y>0; y--)
if (y%3==0)
{printf("%d", --y); continue;} }
(8)有以下程序段,且变量已正确定义和赋值
for(s=1.0,k=1;k<=n;k++)s=s+1.0/(k*(k+1));
printf("s=%f\n\n",s);
请填空,使下面程序段的功能与之完全相同
s=1.0;k=1;
while( 【8】 ){s=s+1.0/(k*(k+1)); 【9】 ;}
printf("s=%f\n\n",s);
(9)设有以下定义和语句,则*(*(p+2)+1)的值为【10】。
int a[3][2]={10, 20, 30, 40, 50, 60}, (*p)[2];
p=a;
(10)以下程序的输出结果是 【11】 。
#include <stdio.h>
main()
{ int i;
for(i=′a′;i<′f′;i++,i++)printf("%c",i-′a′+′A′);
printf("\n");
}
(11)以下程序中函数f的功能是在数组x的n个数(假定n个数互不相同)中找出最大最小数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。请填空。
#include <stdio.h>
void f(int x[],int n)
{ int p0,p1,i,j,t,m;
i=j=x[0]; p0=p1=0;
for(m=0;m<n;m++)
{ if(x[m]>i) {i=x[m];p0=m;}
else if(x[m]<j) {j=x[m];p1=m;}
}
t=x[p0];x[p0]=x[n-1];x[n-1]=t;
t=x[p1];x[p1]= 【12】 ; 【13】 =t;
}
main()
{ int a[10],u;
for(u=0;u<10;u++) scanf("%d",&a[u]);
f(a,10);
for(u=0;u<10;u++) printf("%d",a[u]);
printf("\n");
}
(12)mystrlen函数的功能是计算str所指字符串的长度,并作为函数值返回。请填空。
int mystrlen(char *str)
{ int I;
for(I=0; 【14】 != '\n';I++);
return(I); }
(13)阅读下列程序,则程序的输出结果为【15】。
#include "stdio.h"
struct ty
{ int data;
char c; };
main()
{ struct ty a={30,′x′};
fun(a);
printf("%d%c",a.data,a.c); }
fun(struct ty b)
{ b.data=20;
b.c=′y′; }a(1)【1】可行性研究【解析】软件生命周期一般包括可行性研究与需求分析、设计、实现、测试、交付使用以及维护等,还可以将软件生命周期分为三个阶段:①软件定义阶段:可行性研究和需求分析;②软件开发阶段:设计、实现和测试;③软件运行维护阶段:交付使用和维护。
(2)【2】完善性【解析】软件维护活动包括以下几类:改正性维护、适应性维护、完善性维护和预防性维护。改正性维护是指在软件交付使用后,为了识别和纠正软件错误、改正软件性能上的缺陷、排除实施中的误使用,应当进行的诊断和改正错误的过程;适应性维护是指为了使软件适应变化,而去修改软件的过程;完善性维护是指为了满足用户对软件提出的新功能与性能要求,需要修改或再次开发软件,以扩充软件功能、增强软件性能、改进加工效率、提高软件的可维护性;预防性维护是为了提高软件的可维护性、可靠性等,为以后的进一步改进软件打下良好基础。
(3)【3】非线性结构【解析】数据的逻辑结构有线性结构和非线性结构两大类。
(4)【4】 n+1 【解析】在任意一棵二叉树中,度为O多结点(即叶子结点)总是比度为2多结点多一个。
(5)【5】实体【解析】在E-R图中用矩形表示实体;椭圆形表示属性;菱形表示联系。
(6)【6】 3 【解析】 C语言的语法规定:else子句总是与前面最近的不带else的if相结合。因为x不大于y,所以执行printf("%d\n",z);语句。
(7)【7】 852 【解析】循环前,变量y的值为9,其中,循环语句在y大于0情况下循环,每次循环后y的值都减1。循环体是当y能被3整除时输出表达式--y,输出的是减1后的y值。这样,第一次循环因y为9,能被3整除,输出8,y也变成8。又经两次循环,y的值变为6,又让y减1变成5,并输出5;又经两次循环,y的值变成3,让y减1变成2,输出2;再经两次循环后,y的值变成0,结束循环,所以程序输出852。
(8)【8】 k<=n 【9】 k++ 【解析】本题要求将一个for循环改成while循环。首先要保证循环条件相同,在for循环中,每次执行循环之后,循环控制变量k都会加1,而while循环则没有,故需在循环体中增加改变k数值的语句"k++;"。
9)【10】 60 【解析】本题中,代码定义3行2列的二维数组a,定义指向两个元素的一维数组指针p,并让p指向两维数组a的首行,则代码*(*(p+2)+1)中的p+2指向两维数组a的第三行a[2],*(p+2)指向a[2][0],*(p+2)+1指向a[2][1],*(*(p+2)+1)是引用a[2][1],其值是60
(10)【11】 ACE 【解析】在本题中,for循环体每执行完一次,变量i的值自加两次。i的初值为'a',执行一次循环后变为'c',之后再变成'e',当其变为'g'时,循环条件若不满足,循环终止,故本题共输出3个字符。表达式"i-'a'+'A'"即表示输出i对应的大写字母,结果为ACE。
(11)【12】 x[0] 【13】 x[0] 【解析】函数f( )通过for循环逐个比较数组x中的元素,循环结束后,p0和p1分别表示最大值和最小值在数组中的下标位置,然后按照题意将最大值x[p0]和数组的最后一个元素x[n-1]交换位置,再将最小值x[p1]和第一个元素(x[0]) 进行交换,所以空白处应该填入x[0]。
(12)【14】 *(str+I)或str[I] 【解析】 str是指针变量,它指向字符型数据,在循环过程中,可以用 *(str+I)来访问字符串中的第I个元素,判断是否为结束标志,如果不是,I=I+1,继续取下一个元素进行判断,直到 *(str+I)的值为'\0'为止,也可以用下标的方式引用字符,如*(str+I)相当于str[I]。
(13)【15】 30x 【解析】本题的参数传递属于值传递,所以被调用函数内不能改变调用函数中的数据。