1991年度初级程序员级下午试卷
流程图试题 略
BASIC试题
试题1
阅读下列BASIC程序,将运行结果按输出格式写在答卷的对应栏内。
①[程序]
10 READ X,Y,Z
20 U=X+Y+Z
30 RESTORE
40 READ X,Y
50 READ X,Y,Z
60 V=X+Y+Z
70 PRINT U,V
80 DATA 10,20,30,40,50,60
90 END
②[程序]
10 Y=14
20 DEFFNA(X)=A↑2+2*X
30 Y=Y+FNA(FNA(3))
40 PRINT“Yl=”;Y,
50 Y=(Y-FNA(2))/2
70 END
③[程序]
10 A$=“9AABCDDCAB”
20 FOR I=6 TO 2 STEP-2
30 X$=MID$(A$,I,1)
40 Y$=LEFT$(A$,1)
50 Z$=RIGHT$(A$,1)
60 Z$=X$+Y$+Z$
70 NEXT I
80 PRINT Z$
90 END
④[程序][假设真为-1,假为O]
10 FOR X=0 TO l
20 FOR Y=1 TO 2
30 FOR Z=2 TO 3
40 PRINT (X=0 OR Y=1)+(Z=2 AND X=Y)+NOT(Z=3);
50 NEXT Z,Y,X
60 END
试题2
(1)阅读下列程序说明和BASIC程序,把应填入其中__(n)__ 处的字句,写在答卷的对应栏内。
[程序说明]
某级数前两项 A1=1,A2=1,以后各项具有如下关系 An=An-2+2An-1。
本程序依次对于整数 M=100,1000 和 10000 求出对应的 n 值,使其满足:
Sn<M 且Sn+1≥M 这里 Sn=Al+A2+…+An
例:对于 M=100 有 S6=70,S7=169,因此输出
n=6。
[程序]
10 A1=1:A2=1
20 S= __①__
30 N= __②__
40 M= __③__
50 FOR I=1 TO 3
60 M=Mx 10
70 T=A1+2*A2
80 S=S+T
90 N=N+1
100 __④__
110 __⑤__
120 IF ⑥ THEN 70
130 PRINT “M=”;M,“N=”;N
140 NEXT I
150 END
(2)阅读下列程序说明和BASIC程序,将应该填入其中 __(n)__ 处的字句,写在答卷的对应栏内。
[程序说明]
本程序是将一正整数序列 { k1,k2 ,…,kn } 重新排列成一个新的序列。新序列中,比 k1 小的数都在 kl 的前面( 左面 ),比 kl 大的数都在 k1 的后面( 右面 )。
例:当 n=9 时,序列 ;
{ 6, 8, 9, l, 2, 5, 4, 7,
3 }
经重排后成为
{ 3, 4, 5, 2, 1, 6, 8, 9,
7 }
[程序]
10 INPUT “N=”;N
20 IF N<2 THEN 10
30 __⑦__
40 FOR I=1 TO N
50 INPUT A(I):IF __⑧__ THEN 50
60 NEXT I
70 FOR I=1 TO N:PRINT A(1),:NEXT I:PRINT
80 T=1
90 FOR I=2 TO N
100 IF __⑨__ THEN 170
110 X=A(1)
120 FOR J=1 TO 2 STEP一1
130 __⑩__
140 NEXT J
150 A(1)=X
160 __⑾__
170 NEXT 1
180 PRINT
190 FOR I=1 TO N:PRINT A(1),:NEXT I
200 END
C语言试题
试题1
阅读下列C语言程序,将程序的运行结果依次填入答卷的①~⑨栏内。
[程序]
#include <stdio.h>
#define LEN 8
main()
{ int j,c;
static char num[2][LEN+1]={ "17208980","28219198"};
c=0;
for ( j=LEN-1;j>=0;j-- )
{
c+=hum[0][j]+num[1][j]-2*'0';
printf( "%d\n",c );
num[0][j]=c%10+'0';
c=c/10;
}
printf( "%s\n",&num[0][0] );
}
试题2
阅读以下程序说明和 C 程序,将应填入__(n)__处的字句,写在答卷的对应栏内。
[程序说明]
函数 days(y,m1,d1,m2,d2)
计算 y 年 m1 月 d1 日与同年的 m2
月 d2 日之间的天数 (m2≥m1),并把计算结果作为函数的返回值。若
m1=m2 且 dl=d2,则算 1 天。在闰年时,2
月份共有 29 天。闰年的年号由如下方式确定:该年号能被 4 整除但不能被
100 整除,或者该年号能被 400 整除。
[程序]
int days( y,mi,d1,m2,d2 )
int y,mi,d1,m2,d2;
{
int i,d;
y=( y%4 == 0 __①__ y%100 != 0 __②__ y%400 == 0 )? 1:0 ;
d=0-d1;
for ( i=mi;i<m2;i++ )
switch(i){
case 1:case 3:case 5:case 7:
case 8:case 10:case 12:
d+=31;
__③__ ;
case 2:d=d+28+y;
break;
case 4:case 6:case 9:case 11:
__④__ ;
return(d+d2+1);
}
试题3
阅读下列程序说明和X程序,把应填入其中__(n)__处的字句,写在答卷的对应栏内。
[程序说明]
本程序的功能是根据输入的 N 个抽样数据( 实数 ),求出其中的最大值 max,最小值 min 和平均值 ave,并且计算出抽样数据的最大误差值 max_err。如果该抽样最大误差值超过了允许的最大误差值 std_err 时,报告该批产品不合格。
其中,最大误差值 max_err 是以下两个数中绝对值最大者:
max-std_val;
min-std_ val;( std_ val 是标准抽样值 )。
程序中规定抽样数据不超过 100 个,即 l≤N≤100。
函数 inputdata 用于输入 N 个抽样数据。
函数 abs(x) 用于返回实数 x 的绝对值。
[程序]
#include <stdio.h>
#define MAXIMUM(x,y)(x>y) ? x:y;
main()
{ float data[100],max,min,ave
float max_err,std_err,std_val,total,abs();
int n,loop;
do { printf( "Input N=? (1<=N<=100):" );
scanf( "%d",sm );
} while ( 1> __①__ >100 );
inputdata(data,n);
printf( "Input STD_ERR and STD_VAL:" );
scanf( "%f%f",&std_err,&std_val );
max=min=data[0];
total= __②__ ;
for ( loop=0;loop<n;loop++ )
{ if ( __③__ ) max=data[loop] ;
if ( __④__ ) min=data[loop] ;
total += data[loop] ;
}
ave=total/(float)n ;
max_err=MAXIMUM( abs(max-std_val),abs(min-std_val) )
printf( "MAX=%f,MIN=%f,AVE=%f,MAX_ERR=%f,",max,min,ave,max_err );
if ( max_err>std_err ) printf( "Wasteproducts!\n" );
elseprintf( "OK!\n" );
}
inputdata(a,n)
float *a;
int n;
{ int i;
for ( i=0;i<n;i++) scanf( "%f", __⑤__ );
}
float abs(x) ’
float x;
{return( __⑥__ );}