# 历届试题 - 一九九六年度初级程序员级 下午试卷

（考试时间 14：00～16：00 共120分钟）

(2) 日。

（1）

10

（2）

13

[程序1.1]

G = -2

DEF FNA （X） = X * X – 4

DEF FNB （X） = 5

D = FNA （G） + FNB （G） * SGN （G）

DEF FNC （X） = FNA （X） - FNC （D）

PRINT FNA （D）

PRINT FNB （D） + 3 * FNC （D）

END

[程序1.2]

Y = 2

X = 20

DO

X = X – Y

LOOP WHILE X>= 16

PRINT “X=”; X

END

[程序1.3]

A\$ = “WINDOWS”

B\$ = “WORD”

C\$ = LEFT\$(A\$, 3) + UCASE\$(B\$)

PFINT “LENGTH OF STRING –“ + C\$ +”:”, LEN(C\$)

END

[程序1.4]

DECLARE SUB PP (Y)

COMMON SHARED X, T, S

PP X

S = S + T

RESTORE

PP X

S = S – T

PRINT “S=”; S

PRINT “X=”; X

END

DATA 5, 4, 3, 2, 1

SUB PP (Y)

T = 1

FOR I = 1 TO X

T = T * I + 1

NEXT I

EDN SUB

（ + + a = = b ）? a : b - -

* p [ ] = { a + 3, a + 2, a + 1, a},

* * q = p ;

* （ p [ 0 ] + 1 ） + * * （ q + 2 ）

Z = sin(36°)/√x2 + y2 ( 设x ≠ 0, y ≠ 0 )

For ( ; n - - ; ) ;

[程序3.1]

SET TALK OFF

STORE .T. TO X

STORE O TO Y

DO WHILE X

STORE Y + 1 TO Y

IF INT(Y/7) = Y/7

?? Y

ELSE

LOOP

ENDIF

IF Y > 15

STORE .F. TO X

ENDIF

ENDDO

SET TALK ON

[程序3.2]

SET TALK OFF * PM.PRG

Q = 1

DO PM WITH Q PARAMETERS X

? “Q=”, Q X = X + 2

SET TALK ON IF X < 10

RETURN ?? X

RETRY

ELSE

RETURN

[程序3.3]

SET TALK OFF

STORE 1 TO P, M

X1 = 20

Y2 = 31.3

Z3 = 41.4

N = ASC(“X”)

DO WHILE P <= 3

STORE CHR(N+P-1) + STR (P, 1) TO Q

? “Q=”, Q

M = M * &Q

P = P+2

ENDDO

? “M=”, M

ET TALK ON

RETURN

[程序3.4]

SET TALK OFF

USE ABC

SKIP 8

DISPLAY

LIST

RETURN

（4） 。

[程序说明]

[程序]

EDCLARE SUB PRIME (Y)

COMMON SHARED T

FOR N = 4 TO 100 STEP 2

FOR X = 2 TO N – 1

P = X

PRIME P

IF T = 1 THEN

(1)

PRIME P

IF T = 1 THEN

PRINT N; “=”; (2)

(3)

END IF

END IF

NEXT X

NEXT N

END

SUB PRIME (Y)

FOR I = 2 TO SQR(Y)

T = 0

IF Y / I = (4) THEN EXIT FOR

NEXT I

IF (5) THEN T = 1

END SUB

[程序说明]

[程序]

main ( )

{

int n, k, a, b, c;

for ( k = 1; ; k + + )

{

(1) ;

if ( n < 100) (2) ;

if ( n > 999) (3) ;

a = n / 100;

b = (4) ;

c = n % 10;

if (flag(a, b, c))

printf(“N = %d = %d*%d\n”, n, k, k);

}

}

flag( (5) )

{

return ! (( x – y ) * ( x – z ) * ( y – z ));

}

[程序说明]

（2）全厂所有车间中工资大于本车间平均工资的职工数总和W。

[程序]

SET TALK OFF

CLEAR

I = 1

（1）

DO WHILE I <= 8

DB = “CJ”+ （2）

USE （3）

COUNT FOR GZ >= 500 .AND. GZ <= 550 TO P

（4）

CONUT FOR GZ >AVGZ TO Q

S = S+P

W = W+Q

（5）

USE

ENDDO

?“全厂工资在500元和550元之间的职工人数为：”，S

?“全厂大于车间平均工资的职工人数总和为：”，W

SET TALK ON

RETURN

[程序说明]

9 5 1 + 2 = 11

9 5 12 + 3 = 111

9 5 123 + 4 = 1111

……

9 5 12345678 + 9 = 111111111

R1 5 P + M1 = Q1

[程序]

DEFLNG P-Q DO WHILE （3）

INPUT “R=”， R K = K + 1

IF R < 3 OR R > 10 THEN Q = （4）

PRINT “R-错误！” IF Q < R THEN

END IF Q = 1 AND （5） THEN

END IF PRINT R1, P, M1, Q1

INPUT “M=”, M PRINT “正确！”

IF M < 1 OR M > R –2 THEN ELSE

PRINT “M-错误！” PRINT “错误！”

END END IF

END IF END

R1 = R – 1 ELSE

M1 = M + 1 C = Q MOD R

P = 0 END IF

FOR L = 1 TO M LOOP

P = （1） PRINT “错误！”

NEXT L END

Q = R1 * P + M1

Q1 = （2）

K = 0

C = Q MOD R

[程序说明]

ABCXYZdefg abABCXYZd abab

[程序]

replace (char *s1, char *s2, char *str1, char *str2)

{

char *t0, *t1, *t2

while ( (1) )

{

for (t0=s1, t1=str1;*t1 != ’\0’ && (2) ; t0++, t1++);

if (*t1 != ’\0’) *s2++ = (3) ;

else

{

for(t1=str2;*t1 != ’\0’ ;) *S2++ = (4) ;

(5) ;

}

}

*S2 = ’\0’;

}

main( )

{

char s1[ ] = “abcdefg ababcd abab .”;

char s2[80];

replace(s1, s2, “abc”, “ABCXYZ”);

printf(“%s\n”, s2);

}

[程序说明]

GJ （C，10） 表示国家名称

JP （N，2） 金牌数

YP （N，2） 银牌数

TP （N，2） 铜牌数

ZS （N，3） 总数

Record # GJ JP YP TP ZS

1 中国 16 21 12

2 美国 36 31 19

3 俄国 23 20 10

4 德国 14 15 23

5 法国 15 6 14

[程序]

SET TALK OFF

CLEAR

USE JPK

A1 = “ ”

REPL （1）

@3,20 SAY“按何种奖牌排名”

@5,18 SAY“金牌—JP 银牌—YP”

@7,18 SAY“铜牌—TP 总数—ZS”

@9,18 SAY“请输入奖牌代号：” （2） A1

SORT (3) TO MCK

USE MCK

CLEAR

LIST

USE

SET TALK ON

RETURN

¬ 在打开数据库JPK后，欲显示金牌（JP）数在20块以上（含20块）的国家名字，要求只显示国名和金牌数，应使用 （4） 命令。

­ 若需要显示前一个国家的金牌数总和，银牌数总和及铜牌数总和，可在打开数据库JPK后，使用 （5） 命令。

[程序说明]

[程序]

DECLARE SUB P （X） （5）

COMMON SHARED N， G G = 1

INPUT “M=”， M FOR I = 1 TO N

（1） G = G * I

CASE IF < 0 NEXT I

PRINT “ M 为负数 ” END SUB

CASE IS <> INT(M)

PRINT“ M为偶数”

CASE ELSE

N = M

P N

T1 = G

W = 0

K = 1

DO UNTIL （3）

N = K

P N

T = T1 / G

N = M – K

P N

T = T / G

W = W + T

K = K + 2

（4）

PRINT “W=”， W

END SELECT

END

[程序说明]

a [ n – 1 ] a [n – 2 ] …… a [ 0 ]

[程序]

#define N 60

int a [ N ];

main()

{

int p, i, n;

for ( p=2; p<=9; p++ )

{

n = search(p);

printf(“p = %d: a = “,p);

for(I = n - 1; (1) ; i - -)

printf(“%d”, a [ i ] );

printf(“\n”);

}

}

int search (int p)

{

int i, t, c;

c = 0

(2) ;

for (i = 1; ; i + + )

{

t = a[I-1]*p+c;

if (t==p) break;

a{I} = (3) ;

c = (4) ;

}

(5) ;

}

[程序说明]

CH（C，6）；XM（C，8）；SFZH（C，15）；XL（C，8）；

DW（C，20）；CJGZ（D，8）；GZ（N，4）；

CH（C，6）；LR（N，5，1）；CZ（ N，5，1）；ZF（N，5，1）；

[程序]

SET TALK OFF

SELECT D

USE CJK

REPL ALL ZF WITH LR+CZ

(1) TO CHKGH && CHKGH 为索引文件

SELECT F

USE RXK

SET (2)

COPY TO NEW (3)

(4)

LIST FIELDS (5)

USE

SET TALK ON

RETURN

文章评论

E-mail:konswell@sina.com

 发表你的评论如果你想针对此文发表评论, 请填写下列表单: 姓名: * 必填 (Twitter 用户可输入以 @ 开头的用户名, Steemit 用户可输入 @@ 开头的用户名) E-mail: 可选 (不会被公开。如果我回复了你的评论，你将会收到邮件通知) 网站 / Blog: 可选 反垃圾广告: 为了防止广告机器人自动发贴, 请计算下列表达式的值: 4 x 4 + 5 = * 必填 评论内容: * 必填 你可以使用下列标签修饰文字: [b] 文字 [/b]: 加粗文字 [quote] 文字 [/quote]: 引用文字