一九九六年度初级程序员级 下午试卷

发表于:2007-05-26来源:作者:点击数: 标签:
请按下表选答试题 试 题 号 一~三 四~六 七~九 十~十二 选择方法 选答1题 选答2题 选答3题 选答4题 请按下述要求正确填写答卷,若不按下述要求解答,将不给分数 在答卷的指定位置填写你所在的
请按下表选答试题

试 题 号
一~三
四~六
七~九
十~十二

选择方法
选答1题
选答2题
选答3题
选答4题


请按下述要求正确填写答卷,若不按下述要求解答,将不给分数

在答卷的指定位置填写你所在的省、自治区、直辖市、计划单列市的名称。
在答卷的指定位置填写准考证编号、出生年月日和姓名。
在试题号栏内用○圈住选答的试题号。
答卷上除填写上述内容外只能写解答。
解答时字迹务必清楚,字迹不清时,将不评分。
仿照下面例题,将解答写在答卷的对应栏内。
例题

一九九六年度举行的计算机软件专业技术资格和水平考试的日期是 (1) 月

(2) 日。

因为正确的答案是10月13日,故在答卷的对应栏内写上‘10’和‘13’(参看下表)。

例 题
解 答 栏

(1)
10

(2)
13


 

试题一

阅读下列BASIC程序,将应填入(n)处的字句,写在答卷的对应栏内。

[程序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) 。

[程序1.2]

Y = 2

X = 20

DO

X = X – Y

LOOP WHILE X>= 16

PRINT “X=”; X

END

程序执行后,输出结果为 (2) 。

[程序1.3]

A$ = “WINDOWS

B$ = “WORD”

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

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

END

程序执行后,输出结果为 (3) 。

[程序1.4]

DECLARE SUB PP (Y)

COMMON SHARED X, T, S

READ X, S

PP X

S = S + T

READ X

RESTORE

PP X

S = S – T

READ X

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

程序执行后,输出结果为 (4) 。

试题 二

阅读以下叙述,将应填入 (n) 处的字句,写在答卷的对应栏内。

已知int a = 5, b = 5;
下达表达式的值是 (1) 。

( + + a = = b )? a : b - -

已知int a [ ] = { 5, 4, 3, 2, 1 },
* p [ ] = { a + 3, a + 2, a + 1, a},

* * q = p ;

下列表达式的值是 (2) 。

* ( p [ 0 ] + 1 ) + * * ( q + 2 )

已知 float x, y, z;
实现下达算式的C代码是 (3) 。

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

下述语句实现将S2所指字符数组中前n个字符复制到S1所指字符数组中,其中空框中的代码是 (4) 。
For ( ; n - - ; ) ;

字符指针数组 pta [ ] 共有5个元素,其定义形式是 (5) 。
试题 三

阅读以下 FoxBASE 程序,将应填入 (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

程序执行后,输出结果为 (1) 。

[程序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

程序执行后,输出结果为 (2) 。

[程序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) 。

[程序3.4]

SET TALK OFF

USE ABC

SKIP 8

DISPLAY

LIST

RETURN

数据库 ABC.DBF 共有30条记录,顺序执行程序中每条语句后,记录指针值依次为

(4) 。

 

试题 四

阅读以下程序说明和 BASIC 程序,将应填入 (n) 处的字句,写在答卷的对应栏内。

[程序说明]

根据哥德巴赫猜想,任何一个偶数 ( > 4 ),都可以表示为两个素数(即只能被1和本身整除的自然数)之和,如6 = 3 + 3, 8 = 3 + 5,…。

本程序将 4 ~ 100 之间的偶数分解为两个素数,并以两个素数之和的形式打印输出。

[程序]

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

试题 五

阅读以下程序说明和 C 程序,将应填入 (n) 处的字句,写在答卷的对应栏内。

[程序说明]

本程序三位正整数中寻找符合下列条件的整数:它既是完全平方数,又有两位数学相同,例如144、676等,程序找出所有满足上述条件的三位数并输出。

[程序]

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 ));

}

试题 六

阅读以下程序说明和 FoxBASE 程序,将应填入 (n) 处的字句,写在答卷的对应栏内。

[程序说明]

某工厂有8个车间,分别设有数据库 CJ1, CJ2, … CJ8,它们具有相同的库结构:GH(C,5);XM(C,8);GZ(N,5);…(分别表示工号、姓名、工资…)。本程序计算(1)全厂工资在500元和550元之间的职工总人数S。

(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

试题 七

阅读以下程序说明和 BASIC 程序,将应填入程序中 (n) 处的字句,写在答卷的对应栏内。

[程序说明]

对于十进制数成立如下一组等式:

9 5 1 + 2 = 11

9 5 12 + 3 = 111

9 5 123 + 4 = 1111

……

9 5 12345678 + 9 = 111111111

本程序用来验证对于任何R进制(3 < R < 10)数,都成立类似于上列的一组等式。程序输入R(R进制的基)和任一正整数M(1 < M < R-2),对于形如1 2 3 4 … ( M – 1)M的R 进制数(记为P),验证成立如下等式:

R1 5 P + M1 = Q1

其中R1为R-1的值,M1为M + 1的值,Q1为由M1个1并列构成的R进制数(111…1)。

为简单起见,输出结果均以十进制数表示。

[程序]

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

试题 八

阅读以下程序说明和 C 程序,将应填入程序中 (n) 处的字句,写在答卷的对应栏内。

[程序说明]

本程序所列函数 replace ( char *s1, char *s2, char *str1, char *str2 )实现将已知字符串 s1 中所有与字符串 str1 相同的字符列时,就把该字符拷贝到字符数组 s2;当从某字符开始能构成一个与字符串 str1 相同的字符列时,就将字符串 str2 的各字符拷贝到字符数组s2,并继续访问字符串 s1 中那个字符列之后的字符,直至字符串 s1 被访问完,字符复制即告结束。

如程序中所列数据,程序运行输出为:

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);

}

试题 九

阅读以下程序说明和 FoxBASE 程序,将应填入 (n) 处的字句,写在答卷的对应栏内。

[程序说明]

现在奥运会奖牌数据库(JPK.DBF)库结构如下:

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

本程序用来计算各国获奖牌总数(ZS),并能按用户要求(通过键盘输入),分别显示按金牌、银牌、铜牌或总数排名的名次表。

[程序]

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

READ

SORT (3) TO MCK

USE MCK

CLEAR

LIST

USE

SET TALK ON

RETURN

&not; 在打开数据库JPK后,欲显示金牌(JP)数在20块以上(含20块)的国家名字,要求只显示国名和金牌数,应使用 (4) 命令。

&shy; 若需要显示前一个国家的金牌数总和,银牌数总和及铜牌数总和,可在打开数据库JPK后,使用 (5) 命令。

 

试题 十

阅读以下程序说明和 BASIC 程序,将应填入程序中 (n) 处的字句,写在答卷的对应栏内。

[程序说明]

本程序对于键盘输入的M,按不同情况输出相应结果:

当 M < 0 时,输出:‘M为负数’

当M为非整数时,输出‘M为非整数’

当M为偶数时,输出‘M为偶数’

当M为奇数时,输出表达式C1m+ C2m+……+Cmm的值。

其中

[程序]

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

试题 十一

阅读以下程序说明和 C 程序,将应填入程序中 (n) 处的字句,写在答卷的对应栏内。

[程序说明]

本程序是寻找长整数A。A的个位数a [ 0 ]为指定的数p(取值分别为2、3、4、……、9)。若将A的个位数字移到其它各位数字之前,则其数值为原数值A的p倍。例如,p为4,则A为102564(各位数字分别存入a [ 5 ], a [ 4 ], ……,a [ 0 ]之中),有102564 5 4 = 410256。

寻找从a [ 0 ] = p出发,用p 乘已确定的位的数值可推出其前1位的数字,逐位进行,直到用p乘a [ n – 1 ]等于a [ 0 ],递推计算结束,A即为:

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) ;

}

试题 十二

阅读以下程序说明和 FoxBASE 程序,将应填入程序中 (n) 处的字句,写在答卷的对应栏内。

[程序说明]

设有一个人员数据库RXK.DBF,其库结构为:

CH(C,6);XM(C,8);SFZH(C,15);XL(C,8);

DW(C,20);CJGZ(D,8);GZ(N,4);

分别代表工号、姓名、身份证号、学历、单位、参加工作、工资。

及另一个考核成绩库CJK.DBF,其库结构为:

CH(C,6);LR(N,5,1);CZ( N,5,1);ZF(N,5,1);

分别代表工号,理论成绩,操作成绩,总分。

本程序完成:

总分计算;
生成一个新数据库NEW,含字段GH,XM,XL,LR,CZ,ZF等。
显示总分(ZF)超过160分的职工的GH,XM,LR,CZ。
[程序]

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

原文转自:http://www.ltesting.net