软件水平考试一九九六年度程序员级 下午试卷
请按下述要求正确填写答卷,若不按下述要求解答,将不给分数
1.在答卷的指定位置填写你所在的省、自治区、直辖市、计划单列市的名称。
2.在答卷的指定位置填写准考证编号、出生年月日和姓名。
3.在试题号栏内用○圈住选答的试题号。
4.答卷上除填写上述内容外只能写解答。
5.解答时字迹务必清楚,字迹不清时,将不评分。
6.仿照下面例题,将解答写在答卷的对应栏内。
例题
一九九六年度举行的计算机软件专业技术资格和水平考试的日期是 (1) 月
(2) 日。
因为正确的答案是10月13日,故在答卷的对应栏内写上‘10’和‘13’(参看下表)。

试题一
阅读以下程序说明和c程序,将应填入程序中 (n) 处的字句,写在答卷的对应栏内。
[程序说明]
本程序为六个整型变量a、b、c、d、e、f输入整数,并按从大到小的顺序输出它们的名和值。如某次a、b、c、d、e、f的输入值为3、2、5、7、4、6,则程序将输出:
d(7)f(6)c(5)e(4)a(3)b(2)
[程序]
#define n sizeof tb1/sizeof tb1[0]
int a,b,c,d,e,f;
struct ele{
char vn;
int *vp;
}tb1[]={{‘a’,&a},{‘b’,&b},{‘c’,&c},
{‘d’,&d},{‘e’,&e},{‘f’,&f}},
t;
main()
{
int k,j,m;
for(k=0;k
{
printf(“enter data for%\n”,tb1[k].vn);
scanf(“%d”,__(1)__);
}
m=n-1;/*采用冒泡法排序*/
white (m>0)
{
for(k=j=0;j
if(__(2)__)
{
t =tb1[j];
tb1[j] =tb1[j+1];
tb1[j+1]=t;
__(3)__;
}
m=__(4)__;/*本框填m-1不给分*/
}
for(k=0;k
printf(”%c(%d)”,____(5)____ ,____ (6)____)l
printf(“\n”);
}
试题二
阅读以下程序说明和fortran程序,将应填入程序中 (n) 处的字句,写在答卷的对应栏内。
[程序说明]
本程序用辛卜生公式计算下式的值
为了使近似值达到指定精度eps,程度中采取了逐步扩大n 的方法。
[程序]
parameter (pi=3.14159265)
external f
____(1)____
real eps, s, x, x1
write (*.*) 'please enter eps:'
read (*,*)eps
x=0.0
n=2
n=2*n
x1=x
call ____(2)____
x=s/pi
call ____(3)____
x=x+s
if(____(4)____)goto 10
write (*,20)x
format (1x, 'x= ',f10.7)
end
function f(x)
____(5)____=1.0/(3.0+2.0*x)
end
subroutine simpso(a,b,n,g,s)
h=(b-a)/2/n
s=g(a)-g(b)
do 10 j=____(6)____
s=s+4.0*g(a+j*h)+2.0*g(a+(j+1)*h)
continue
s=s*h/3.0
end
试题三
阅读以下程序说明和c程序,将应填入程序中 (n) 处的字句,写在答卷的对应栏内。
[程序说明]
本程序将自然数1,2,……,n2按蛇形方式逐个顺序存入n阶矩阵。
例如,当n = 3和4时分别如图3.1和图3.2。
7 13 14 16
6 7 9 6 8 12 15
2 5 8 2 5 9 11
1 3 4 1 3 4 10
图3.1 图3.2
从an0开始到a0n为止(n = n-1)顺序填入自然数,交替地对每一斜列从左上元素向右下元素或从右下元素向左上元素存数。
[程序]
#include
#define sixe 10
int a[size] [size], k;
main()
{ int i, j, n, n;
for (n=3;n<=size; n++)
{ k = 1;
makearray (n=n+1);
printf ("\nn=%d;\n",n+1);
for (i=0;i<=n; i++)
{ for (j=0; j<=n; j++)printf("%4d",a[i][j]);
printf ("\a");
}
}
}
makeline (int row_start, int col_start, int row_end)
{ /*完成矩阵一条斜线的整数填写*/
int i, j, sign = ____(1)____;
for (i=row_start, j=col_start;____(2)____ >=0; i +=sign,j +=sign)
a[i][j] = k++;
}
makearray (int n)
{ /* 完成矩阵每条斜线的整数填写*/
int d;
for (d = 1; d <= ___(3)___; d++)
if (d%2) makeline (____(4)____); else makeline(____(5)____);
else
if (d%2) makeline (____(6)____); else makeline(____(7)____);
}
试题四
阅读以下程序说明和fortran程序,将应填入程序中 (n) 处的字句,写在答卷的对应栏内。
[程序说明]
子程序order根据n(n<100)位选手的成绩
a ( i ) ( i = 1, 2, …, n )
将每人的名次存入数组b的对应元素b (i) 中。成绩高的选手名次在前,成绩相同的选手名次相同。若有k位选手名次相同,则下一外名次增加k。例如,若8位选手的成绩依次为
35,36,35,40,38,37,38,34
则其名次依次为
6, 5, 6, 1, 2, 4, 2, 8
其中有两位并列第2,其下一个名次为4,没有第3名。
程序首先找出与成绩最高的一位或几位选手对应的下标,并将b数组的对应元素置为第1名。然后,检查是否还有名次未定的选手,如有,找出这些选手中成绩最高的一位或几位,将其名次存入b数组的对应元素,继续同样步骤,直到排定全部选手的名次。
[程序]
subroutint order (a,b,n)