二級(jí)五種語(yǔ)言上機(jī)環(huán)境
軟件環(huán)境
操作系統(tǒng):MS-DOS5.0以上
漢字系統(tǒng):希望漢字系統(tǒng)(UCDOS)3.1 或5.0
全屏幕編輯系統(tǒng):EDIT、PE2、QEDIT
BASIC語(yǔ)言:QBASIC或Turbo-Basic或Quick-BASIC
FORTRAN語(yǔ)言:Fortran77
PASCAL語(yǔ)言 :Turbo-Pascal5.0以上
C 語(yǔ)言: Turbo-C2.0以上
FoxBASE語(yǔ)言:FoxBase2.1(中文版)
考試內(nèi)容
二級(jí)考試的上機(jī)內(nèi)容由DOS命令操作、程序修改及程序設(shè)計(jì)三部分組成。
二級(jí)考試上機(jī)考試的時(shí)間為60分鐘,其內(nèi)容如下:
1、操作系統(tǒng)部分30分,6條DOS操作命令題目。
2、程序修改部分30分,修改指定程序MODI.PRG中的三個(gè)或三類(lèi)錯(cuò)誤。
3、程序設(shè)計(jì)部分40分,根據(jù)題目要求編制PROGI.PRG程序。
上述三部分中,操作系統(tǒng)部分與一級(jí)考試相同,比較容易,考生一般不會(huì)在這部分出現(xiàn)差錯(cuò),其他兩部分內(nèi)容相對(duì)較難,考生應(yīng)仔細(xì)閱讀題目要求。
二級(jí)上機(jī)試題分析
1、DOS 命令操作題
(1)將考生目錄下的TCYCX\TSR目錄中的MOVE子目錄刪除。
(2)將考生目錄下APPLE\CUABC子目錄中的文件README.DOC更名為README.TXT。
(3)將考生目錄下L\M子目錄中的文件A1.BAT刪除。
(4)在考生目錄下UNIX\GROUP子目錄中建立一個(gè)新的子目錄L。
(5)取消考生目錄下P\P子目錄中文件PERSON.PAS的隱含屬性。
(6)將考生目錄下SAVE子目錄中的文件HEAD.TXT和考生目錄下CHECK子目錄中的文件SEARCH.DAT順序合并拷貝到考生目錄下的PCS子目錄中, 文件名為BASE.OUT。
參考答案:
1、deltree tcycx\tsr\move
2、ren apple\cuabc\readme.doc readme.txt
3、del l\m\a1.bat
4、md unix\group\l
5、attrib–h p\p\person.pas
6、copy save\head.txt+check\search.dat pcs\base.out
分析:使用DOS命令一方面要清楚命令的名字,另一方面要清楚路徑,操作時(shí)盡量使用相對(duì)路徑,可節(jié)省時(shí)間。
2、程序修改題 要求修改給定程序中的錯(cuò)誤,錯(cuò)誤均出現(xiàn)在星號(hào)行的下一行。每題后均附有正確答案。
C語(yǔ)言部分:
試題說(shuō)明:給定程序MODI1.C中函數(shù) fun 的功能是:將s所指字符串的正序和反序進(jìn)行連接,形成一個(gè)新串放在t所指的數(shù)組中。
例如,當(dāng)s串為“ABCD”時(shí),則t串中的內(nèi)容應(yīng)為“ABCDDCBA”。請(qǐng)改正函數(shù)fun中的錯(cuò)誤,使它能得出正確的結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
程序:
#include
#include
#include
/*******found1********/
void fun (char s, char t)
{ int i, d;
d = strlen(s);
for (i = 0; i for (i = 0; i /*********found2*********/
t[2*d-1] = '\0'; }
main()
{ char s[100], t[100];
clrscr();
printf(″\nPlease enter string S:″); scanf(″%s″, s);
fun(s, t);
printf(″\nThe result is: %s\n″, t); }
答案:
第一處改為:void fun (char *s, char *t)或fun (char *s, char *t)或void fun(char s[],char t[])或void fun(char *s, char t[])或void fun(char s[], char *t)或fun(char s[], char t[])或fun(char *s, char t[])或fun(char s[], char *t)
第二處改為:t[2*d] = '\0'或t[2*d] = 0 或t[d*2] = '\0'或t[d*2] = 0或 t[d*2] = '\0'或t[d*2] = 0或t[d+d] = '\0'或t[d+d] = 0。
分析:指針和數(shù)組有密不可分的關(guān)系,數(shù)組作為實(shí)參時(shí),形參即可以是數(shù)組也可以是指針,所以第一處的答案有多種選擇。'\0'或'\000'是代表ASCII碼為0的控制字符,所以t[2*d] = '\0'和t[2*d] = 0有同樣的效果。
FoxBASE語(yǔ)言部分:
試題說(shuō)明:給定程序MODII.PRG的功能是:實(shí)現(xiàn)四則運(yùn)算。程序中共有三個(gè)錯(cuò)誤,請(qǐng)調(diào)試修改正確,但不得增加或刪減。
Set talk off
Store 0 to c
Do while .t.
Clear
@5,20
input“輸入第一個(gè)數(shù):”to A
input “輸入第一個(gè)數(shù):” to B
accept “請(qǐng)輸入運(yùn)算符:”to OP
do case
case OP= “+”
store A+B to C
case OP= “-”
store A-B to C
case OP= “*”
store A*B to C
case OP= “/”
store A/B to C
otherwise
@7,20 say “運(yùn)算符錯(cuò),重新輸入”
*********found1*********
exit
endcase
*********found2*********
store “A&OPB=” to exp
? exp+str(c)
@20,30 say “是否繼續(xù)?(y/n)”
wait “” to go_on
if upper(go_on)= “Y”
clear
else
**********found3*********
loop
endif
enddo
clear
@10,30 say“再見(jiàn)!”
set talk on
答案:第一處改為:loop;第二處改為:store “A&OP.B=” to exp;第三處改為:exit
分析:本程序只能做兩個(gè)數(shù)的加減乘除運(yùn)算,第一個(gè)數(shù)存入變量A,第二個(gè)數(shù)存入變量B,運(yùn)算符存入變量C,然后通過(guò)多分支結(jié)構(gòu)DO CASE 語(yǔ)句判斷作何種運(yùn)算,運(yùn)算結(jié)果存入C中,最后輸出運(yùn)算結(jié)果,讓用戶(hù)選擇是否進(jìn)行下一次運(yùn)算。Loop和exit可在DO WHILE 和ENDDO之間的任何位置,loop表示進(jìn)行下一次循環(huán),直接跳到DO WHILE進(jìn)行條件判斷,loop后的命令不被執(zhí)行,exit表示直接從循環(huán)體跳出,去執(zhí)行ENDDO后面的命令。&是宏代換函數(shù),它的作用范圍是從符號(hào)&起直到遇見(jiàn)一個(gè)空格或圓點(diǎn)為止,若這樣使用“A&OPB=”,它會(huì)把OPB=當(dāng)成一個(gè)變量名進(jìn)行宏代換,所以會(huì)產(chǎn)生錯(cuò)誤。
程序編制題
C語(yǔ)言部分:
說(shuō)明:C 程序設(shè)計(jì)為二級(jí) C 上機(jī)操作第三題,分值為 40 分,要求將給定的程序編制完全。
試題說(shuō)明:函數(shù)fun的功能是將s所指字符串中下標(biāo)為奇數(shù)的字符刪除,s中剩余的字符形成一個(gè)新串放在t所指的數(shù)組中。
例如,當(dāng)s所指字符串為“ABCDEFGHIJK”時(shí),t所指的數(shù)組的內(nèi)容應(yīng)是“ACEGIK”。注意: 部分源程序存在文件PROG1.C中。請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入你編寫(xiě)的若干語(yǔ)句。
程序 :
#include 〈conio.h〉
#include 〈stdio.h〉
#include 〈string.h〉
void fun(char *s, char t[])
{
}
main()
{
char s[100], t[100];
clrscr();
printf("\nPlease enter string S:"); scanf("%s", s);
fun(s, t);
printf("\nThe result is: %s\n", t);
NONO();
}
NONO( )
{/* 本函數(shù)用于打開(kāi)文件,輸入數(shù)據(jù),調(diào)用函數(shù),輸出數(shù)據(jù),關(guān)閉文件。 */
char s[100], t[100] ;
FILE *rf, *wf ;
int i ;
rf = fopen("bc01.dat", "r") ;
wf = fopen("bc01.out", "w") ;
for(i = 0 ; i 〈 10 ; i++) {
fscanf(rf, "%s", s) ;
fun(s, t) ;
fprintf(wf, "%s\n", t) ;
}
fclose(rf) ;
fclose(wf) ;
}
參考答案:
void fun(char *s, char t[])
{ int i =0,j=0;
while(*(s+j)!=’\0’)
{ if (j %2= =0)
t[i]=*s;i++;
j++;
}
t[i]= ’\0’;
}
分析:實(shí)參s和t都是數(shù)組,形參s是指針變量,t是數(shù)組,調(diào)用fun函數(shù)后,形參s指向?qū)崊數(shù)組的起始位置,通過(guò)條件j %2= =0判斷數(shù)組的下標(biāo)是奇數(shù)還是偶數(shù),若為偶數(shù),將指針s所指的字符賦給數(shù)組t,以達(dá)到將字符串中下標(biāo)為奇數(shù)的字符刪除的目的。
FoxBASE語(yǔ)言部分:
試題說(shuō)明:已給定職工數(shù)據(jù)庫(kù)文件ZG.DBF(含有編號(hào),姓名,基本工資等字段),考試成績(jī)數(shù)據(jù)庫(kù)文件KS.DBF(含有編號(hào),姓名,考試成績(jī)等字段)。請(qǐng)編寫(xiě)程序PROG%.PRG,完成以下數(shù)據(jù)操作:
1、通過(guò)ZG.DBF復(fù)制生成工資數(shù)據(jù)庫(kù)文件GZ.DBF,使其具有編號(hào)、姓名和基本工資三個(gè)字段數(shù)據(jù)。
2、按考試成績(jī)對(duì)GZ.DBF中的工資字段數(shù)據(jù)進(jìn)行修改:凡考試成績(jī)80分以上者基本工資增加50元,70分到80分者增加30元,60分到69分者增加10元。
參考答案:
USE ZG
COPY TO GZ FIELDS 編號(hào),姓名,基本工資
SELECT 2
USE KS
INDEX ON 編號(hào) TO KSIDX
USE KS INDEX KSIDX
SELECT 1
USE GZ
SET RELATION TO 編號(hào) INTO B
DO WHILE .NOT. EOF()
DO CASE
CASE B-〉考試成績(jī)〉80
REPLACE 基本工資 WITH 基本工資+50
CASE B-〉考試成績(jī)〉70 .AND. B-〉考試成績(jī)〈=80
REPLACE 基本工資 WITH 基本工資+30
CASE B-〉考試成績(jī)〉=60 .AND. B-〉考試成績(jī)〈=69
REPLACE 基本工資 WITH 基本工資+10
ENDCASE
SKIP
ENDDO
LIST
SET RELATION TO
CLOSE DATABASE
分析:第一題用COPY命令進(jìn)行復(fù)制即可。第二題中涉及到基本工資和考試成績(jī)這兩個(gè)字段,但這兩個(gè)字段分別屬于GZ和KS這兩個(gè)數(shù)據(jù)庫(kù),因此要想同時(shí)對(duì)這兩個(gè)字段操作,必須要使GZ和KS這兩個(gè)數(shù)據(jù)庫(kù)進(jìn)行關(guān)聯(lián),GZ和KS中有一個(gè)共同的字段編號(hào),可以作為這兩個(gè)數(shù)據(jù)庫(kù)的關(guān)聯(lián)字段。由于是對(duì)考試成績(jī)分段進(jìn)行增加工資,所以用條件分支結(jié)構(gòu)DO CASE能較好的實(shí)現(xiàn)。
Qbasic語(yǔ)言部分:
說(shuō)明:QBASIC 程序編制題是二級(jí) QBASIC 上機(jī)操作第三題,分值為 40 分,要求是按題目要求在出現(xiàn)方括號(hào)的地方填上適當(dāng)?shù)恼Z(yǔ)句,使之正確。
試題說(shuō)明: 編制程序PROG1.BAS其功能是: 求 2*4*6*8*…*30 的值。請(qǐng)?jiān)凇?】、【2】及【3】三處將程序補(bǔ)充完整。
程序
t = 【1】
FOR j = 2 TO 30 【2】
t = t * 【3】
NEXT j
PRINT t
END
答案:第一處填:t=1 第二處填:STEP 2 第三處填:t=t*j
分析:改程序要求連乘積的值,所以可用一個(gè)循環(huán)來(lái)實(shí)現(xiàn),變量t用于存放連乘積的值,它的初值應(yīng)為1,變量j用于提供從2到30之間的偶數(shù),跳出循環(huán)后,輸出變量t的值,即2*4*6*8*…*30 的值。(全文完)

