1998年度初级程序员级下午试卷
从下列的 3 道试题(试题一至试题三)中任选1道解答。如果解答的试题数超过
1 道,
则题号小的解答有效。
试题一
阅读以下 BASIC 程序,将应填入__n__处的字句,写在答卷的对应栏内。
[程序1.1]
S = 0
N = 0
LI: INPUT Y
IF Y >= 0 THEN
GOTO L2
S = S + Y
N = N + 1
L2: IF N < 50 THEN GOTO L1
PRINT
"S="; S
END
程序所完成的功能为__1__ 。
[程序1.2]
A = 10: B = -3: C =
2
U = A > B AND C
<= A OR A <= B AND C > A
V = A <= B AND C
<= A OR A > B AND C > A
PRINT "U + V
="; U + V
AS = "A4
" : B$ = "ADE" : C$ = "AD"
P =
NOT B$ > C$ OR AS = C$ AND A$ < B$
PRINT
"P="; P
END
设真为-1,假为 0 。程序执行后,输出结果为__2__
。
[程序1.3]
DIM A (5, 5)
FOR I = 1 TO 5
FOR J = 1 TO 5
READ A(I,J)
NEXT J
RESTORE
NEXT I
DATA 0, 1, 2,
3, 4
FOR I- 1 TO 4
FOR J = I + 1 TO 5
A(J,I) = A(I,J)
NEXT J
NEXT I
FOR I = 1 TO 5
FOR J = 1 TO 5
PRINT A(I,J);
NEXT J
PRINT
NEXT I
END
[程序1.4]
DECLARE SUB
FLP (P)
DECLARE FUNCTION
FMP (P)
COMMON SHARED S, Q
S = 0
Q = 200
FOR I = 1 TO 6
CALL
FLP (I)
NEXT I
PRINT
"S=" ; S, "Q="; Q
DATA
63,15,-1,48,8,99,16,8,41
END
SUB FLP (P)
IF P <= 3 THEN
READ X, Y
S = S + (FMP (FMP (X)) + FMP (Y))/ 2
ELSE
IF P <> 4 THEN
READ Z
Q = Q - Z
ELSE
RESTORE
END IF
END IF
END SUB
FUNCTION FMP (X)
FMP =
SQR (X + 1)
END FUNCTION
程序执行后,输出结果为__(4)__ 。
试题二
阅读以下 C 语言程序,将应填入__(n)__处的字句,写在答卷的对应栏内。
[程序2.1]
void u(int i,char *cp)
{ for ( ; i; i--)
printf("%c",cp++);
}
main()
{ char a[][3] = { "eof", "ABC", "DE" };
char *p;
L1: p = a[0]; u(1,p++); u(1,p++); u(1,p); printf("\n");
L2: p = a[1]; u(3,p++); u(2,p++); u(1,p); printf("\n");
L1: printf("%s\n, a[1]");
}
[程序2.1] 的 L1,L2,L3行分别输出__(1)__、__(2)__和
__(3)__。
[程序2.2]
double x , u , v;
double f( ), g( ), t( );
main()
{ x = 4.0;;
u = t(x,f );
v = t(x,g);
printf("u = %10.6f v = %10.6f\n", u , v);
}
double t( double a, double (*f) ( ))
{ return (*f) (a + a);
}
double f( double x)
{ return 3.0*x;
}
double g( double x)
{ return 3.0+x;
}
[程序2.2]
的输出为 u =__(4)__ , v =__(5)__.
试题三 略(FoxBASE)
从下列的 3 道试题(试题四至试题六)中任选 1
道解答。如果解答的试题数超过 1
道,则题号小的解答有效。
试题四
阅读以下程序说明和 BASIC 程序,将应填人__(n)__处的字句,写在答卷的对应栏
内。
[程序说明]
本程序将字符串 A$ 中的所有字符子串 B$
替换为字符串 R$。
[程序]
INPUT " A$= "; A$
INPUT " B$= "; B$
INPUT " R$= "; R$
D$ = A$
A$ = ""
LB = LEN (B$)
LD = LEN (D$)
DO WHILE LD >= LB
K = __(1)__
PRINT " K=
"; K, " LD=" ; LD
IF K = 0 THEN GOTO
L
C$ = LEFT$(
__(2)__) + R$
D$ =
RIGHT$(D$,LD - __(3)__)
A$ = AS + C$
LD = ;
__(4)__. (D$)
LOOP
L: A$ = A$ + __(5)__
PRINT" NEW STRING A$="; A$
END
试题五
阅读以下程序说明和 C 语言,将应填入__(n)__处的字句,写在答卷的对应栏内。
[程序说明]
本程序利用牛顿切线公式计算数 a (不为 0)的立方根。根据牛顿公式,其第
n+1
次近似根与第 n 次近似根满足:
xn+1
= (2xn3+a)/(3xn2)
要求相邻两次近似根的差的绝对值小于等于
0.00001 时停止迭代。初次近似根 x0 取
值为 1。
[程序]
#include <math.h>
#define Epsilon ____(1)____
main ()
{ double x , y = 1 , a ;
printf(" 请输入要开方的数,a");
scanf("if",___(2)___);
do { ___(3)___;
/*保存前次近似根*/
y = ___(4)___ + a/(3*x*x); /*计算本次近似根*/
} while (___(5)___ Epsilon);
printf("The cubic root of %f is %10.5f\n",a,y);
}
试题六 略(FoxBASE)
从下列的 3 道试题(试题七至试题九)中任选 1
道解答。如果解答的试题数超过 1
道,则题号小的解答有效。
试题七
阅读以下程序说明和 BASIC 程序,将应填人__(n)__处的字句,写在答卷的对应栏
内。
[程序说明]
本程序利用随机函数产生 200 个 10-500 之间(可包括
10 和 500 )的整数,并输
出其中的质数个数、最大质数和最小质数。
[程序]
DIM A (199)
FOR I = 0 TO 199
A(I) = __(1)__ + 10
NEXT I
J=0
FOR I - 0 TO 199
FOR X = 2 TO INT(SQR(A(I) + 1))
IF __(2)__ THEN GOTO L
NEXT X
__(3)__
J = J + l
L: NEXT I
PRINT" 质数个数 ="; J
IF J > 0 THEN
MAXP = 10
MINP- 500
FOR I = 0 TO J - 1
IF __(4)__ THEN MAXP = A (I)
IF __(5)__ THEN MINP = A (I)
NEXT I
PRINT " 最大质数是
" MAXP
PRINT " 最小质数是
" MINP
END IF
END
试题八
阅读以下程序说明和 C 语言,将应填入__(n)__处的字句,写在答卷的对应栏内。
[程序说明]
本程序是一函数 check(s),它检查给定字符串 s
是否满足下列两个条件:
1.从字符串首字符起,在顺序检查 s
中字符的过程中,遇到右括号 ')' 的个数在
任何使均不超过所遇到的左括号 '(' 的个数。
2. 字符串 s 中左括号 '(' 的个数与右括号 ')'
的个数相同。
若字符串 s 同时满足上述条件 1 和 2
,函数返回非 0 值,否则返回 0 值。
[程序]
int check(s)
__(1)__;
{ int lp, rp;
while ( ___(2)___);
{ if (*s == ')' ) lp++;
else if ( *s == '( ' )
{ rp++;
if (
___(3)___ ) return 0;
}
___(4)___;
}
return ___(5)___;
}
试题九 略(FoxBASE)
从下列的 3 道试题(试题十至试题十二)中任选 1
道解答。如果解答的试题数超过 1
道,则题号小的解答有效。
试题十
阅读以下程序说明和 BASIC 程序,将应填人__(n)__处的字句,写在答卷的对应栏
内。
[程序说明]
本程序每次输入一个用户编码(编码为正整数)及其存款金额,然后累计同一用户的
存款金额并按用户编码由小到大的顺序排列已输入的所有存款。最后输出排序后的所有用户
的存款总额。
[程序]
DIM CODE%(1000),MONEY(1000)
N = 0
PRINT " 输入整数编码(-1为退出):"
INPUT WCODE%
DO WHILE WCODE% > 0 AND N < 1000
PRINT "
输入存款额:"
INPUT WMONEY
I = 0
DO WHILE I < N AND
__(1)___
I
= I + 1
LOOP
IF __(2)__ THEN
MONEY (I) = MONEY(I) + WMONEY
ELSE
FOR __(3)__
CODE% (J) = CODE% (J - 1)
MONEY (J) = MONEY (J - 1)
NEXT J
CODE%(J) = WCODE%
MONEY(J) = WMONEY
N
= N + 1
END IF
PRINT "
输入下一个整数编码(-1为退出):"
INPUT WCODE%
__(4)__
FOR I = 0 TO __(5)__
PRINT CODE%(I), MONEY(I)
NEXT I
END
试题十一
阅读以下程序说明和 C 语言,将应填入__(n)__处的字句,写在答卷的对应栏内。
[程序说明]
本程序实现二分法快速检索。待检索的不同整数无序存放于文件D
ATA 中。程序先
读入所有数据至数组 a 中,然后调用函数 binary(m,a),在数组中检索整数 m 。为了
能用二分法检索,必须先将数组 a 的各元素按升序(或降序)排序。如果 a 中有右元素
m ,binary 返回该数在数组 a 中的位置;否则返回 -1。本程序采用插入排序法,
依次将数组 a
的各元素插入至其前面已排红序(升序)的各数中的合适位置上。
[程序]
#include <stdio.h>
#define MAXN100
int n;
int readin (int a[],int k )
{ FILE *fp ;int i,term;
if ((fp = fopen ( "DATA", "r"))==NULL)
{ printf ( " 不能打开文件 DATA.\n");
exit (0);
}
while ( i < k && fscanf(fp,
"%d",&term) != EOF);
a[i++] = term;
fclose(fp);
retutn i;
}
int binary ( int m, int a[])
{ int low , high ,mid;
low = 0; high = n-1;
while (low <= high)
{ mid = (low + high)/2;
if ( m > a[mid] ) low = ____(1)____;
else if ( m < a[mid] ) high = ____(2)____;
else return mid;
}
return -1;
}
vaid sort(int a[])
{ int i ,j ,t ;
for (i = 1 ; i < n; i++)
{ t = a[i]; j = i-1;
while (____(3)____)
{ a[j+1] = a[j]; j--;
}
a[j+1] = ____(4)_____;
}
}
main ()
{ int m, p, a[MAXN];
n = readin( a, MAXN );
printf ( "请输入欲从数组 a 中检索的整数。
\n');
scanf ("%d", &m);
sort(a);
if ((p = ____(5)____ ) != -1)
printf ( "%d 是数组 a 的第
%d 个元素。 \n",m,p+1);
else printf ("数组 a 中不存在整数 %d 。 \n",m);
}
试题十二 略(FoxBASE)