三、程序改错
注意:不可以增加或删除程序行,也不可以更改程序的结构。
1.题目:计算1!+2!+3!+ (10)
SET TALK OFF
S=0
N=1
**********FOUND**********DO ★WHILE★ N<=10 或DO ★WHILE★ 10>=N DO WHILE N>=10
STOR 1 TO I,P
DO WHILE I<=N
**********FOUND**********P=I*P 或P=P*★I
P=P*N
I=I+1
ENDDO
S=S+P
N=N+1
ENDDO
?S
SET TALK ON
RETURN
2.题目:计算并在屏幕上显示出"九九乘法表",显示格式如下:
1×1=1
1×2=2 2×2=4
1×3=3 2×3=6 3×3=9
… …
1×9=9 …8×9=72 9×9=81
SET TALK OFF
CLEAR
X=1
DO WHILE X<=9
Y=1
**********FOUND**********DO ★WHILE★ Y<=X 或 DO ★WHILE★ X>=Y DO WHILE Y<=9
??STR(X)+"×"+STR(Y)+"="+STR(X*Y)
**********FOUND**********Y=Y+1 或 Y=1+Y
Y=Y*1
ENDDO
?
X=X+1
ENDDO
SET TALK ON
RETURN
3.题目:根据输入的数据,计算不大于该数的奇数累加和。
SET TALK OFF
CLEAR
YN="Y"
DO WHILE UPPER(YN)="Y"
INPUT "请输入2位以内的整数" TO N
STORE 0 TO X,Y
Z=" "
DO WHILE X X=X+1 IF INT(X/2)=X/2 **********FOUND**********LOOP EXIT ELSE Z=Z+"+"+STR(X,2) **********FOUND**********Y=X+Y 或Y=★Y+X Y=Y+Z ENDIF ENDDO ?Z+"="+STR(Y,4) WAIT "继续计算?(Y/N)" TO YN ENDDO ?"再见:" SET TALK ON RETURN 4.题目:通过临时数据LSH.DBF向学生数据库RS.DBF中追加数据记录。 SET TALK OFF USE RS COPY TO LSH USE LSH ZAP I=0 ANS="Y" **********FOUND**********DO ★WHILE ★UPPER(ANS)★= "Y" 或 DO ★WHILE ★LOWER(ANS)★='y' 或DO ★WHILE★ ANS="Y DO WHILE ANS="N" OR "n" CLEAR I=I+1 @10,1 SAY"请输入第"+STR(I,1)+"添加记录的数据" APPE BLANK @11,1 SAY "编号:" GET BH @12,1 SAY "姓名:" GET XM @13,1 SAY "性别:" GET XB @14,1 SAY "出生年月:" GET CS @15,1 SAY "婚否:" GET HF @16,1 SAY "职称:" GET ZC @17,1 SAY "工资:" GET GZ READ WAIT"是否正确?(Y/N)" TO ANS IF UPPER(ANS)<>"Y" I=I-1 ANS="Y" LOOP ENDIF WAIT "是否继续添加?(Y/N)" TO ANS ENDDO USE RS **********FOUND**********APPEND ★FROM APPE LSH CLEAR USE SET TALK ON RETURN 5.题目:根据输入的编号查找RS数据库中的工资。 SET TALK OFF USE RS YN="Y" DO WHILE UPPER(YN)="Y" CLEAR **********FOUND**********ACCEPT "请输入4位编号" TO NUM WAIT "请输入4位编号" TO NUM IF NUM=" " ?"无效输入,请重新输入" LOOP ENDIF **********FOUND**********★LOCATE★ FOR NUM=BH FIND FOR NUM=BH IF FOUND() @10,10SAY XM @10,40 SAY GZ ELSE ?NUM,"没找到" ENDIF WAIT "是否继续(Y/N)" TO YN ENDDO USE RETURN 6.题目:该程实现由键盘输入三个数,按从小到大的顺序排序。SET TALK OFF INPUT"请第一个数的值:" TO A INPUT"请第二个数的值:" TO B INPUT"请第三个数的值:" TO C IF A>B T=A A=B **********FOUND**********B=T T=B ENDIF IF A>C T=A A=C C=T ENDIF IF B>C T=B B=C C=T ENDIF **********FOUND**********?A,B,C ? C,B,A SET TALK ON RETURN 7.题目:对RS.DBF数据库按职称建立职称库,分别产生以职称为教授的数据库JS.DBF,职称为副教授的数据库FJS.DBF,职称为讲师的数据库JSHI.DBF,职称为助教的数据库 ZJ.DBF,并用菜单形式显示,输入1时,显示数据库JS.DBF,输入2时,显示数据库FJS.DBF…。SET TALK OFF USE RS COPY TO JS FOR ZC="教授" COPY TO FJS FOR ZC="副教授" COPY TO JSHI FOR ZC="讲师" COPY TO ZJ FOR ZC="助教" @ 10,40 SAY "1:显示教授库信息" @ 11,40 SAY "2:显示副教授库信息" @ 12,40 SAY "3:显示讲师库信息" @ 13,40 SAY "4:显示助教库信息" **********FOUND**********@ 14,40 ★SAY★ "5:退出" @ 14,40 READ "5:退出" ACCEPT "请输入要显示的职称库" TO ANS CLEAR DO CASE **********FOUND**********CASE ANS=★"1" CASE ANS=1 USE JS LIST CASE ANS="2" USE FJS LIST CASE ANS="3" USE JSHI LIST CASE ANS="4" USE ZJ LIST CASE ANS="5" EXIT ENDCASE RETURN 8.题目:按照工资计算数据库RS中的最低工资、最高工资及平均工资,并存放到内存变量文件TJGZ.MEM中。 SET TALK OFF USE RS AVER GZ TO MIDGZ GO TOP MAXGZ=GZ MINGZ=GZ DO WHILE NOT EOF() IF MAXGZ MAXGZ=GZ ENDIF IF MINGZ>GZ **********FOUND**********MINGZ★=GZ GZ=MINGZ ENDIF SKIP ENDDO **********FOUND**********SAVE TO TJGZ.MEM ALL ★LIKE★ M* SAVE TO TJGZ.MEM ALL EXCEPT M* USE RETURN 9.题目:求X =1+2+3+… +100,并同时求出 1~ 100 之间的奇数之和,而且要显示输出这两个和。 SET TALK OFF CLEAR STORE 0 TO I , X , Y **********FOUND**********DO ★WHILE★ I<100 或DO ★WHILE★ 100>I DO WHILE I < =100 I = I + 1 X =X + I IF I / 2 = INT ( I / 2) **********FOUND**********LOOP EXIT ENDIF Y = Y +I ENDDO ? X,Y SET TALK ON RETURN 10.题目:在rs.dbf 中,查找职工王洋的工资,如果工资小于200元,则增加100元;如果工资大于等于200元且小于500元时,则增加50元;否则增加20元。最后显示王洋的姓名和工资。 SET TALK OFF CLEAR USE RS.DBF **********FOUND**********LO CATE★ FOR XM =★"王洋" LOCATE FOR XM =王洋 DO CASE CASE GZ < 200 REPLACE GZ WITH GZ + 100 CASE GZ < 500 REPLACE GZ WITH GZ + 50 OTHERWISE REPLACE GZ WITH GZ + 20 ENDCASE **********FOUND**********DISPLAY★ XM,GZ LIST XM , GZ USE SET TALK ON RETURN 11.题目:根据姓名查询rs.dbf 中的职工情况,如果有则显示该职工的内容,否则显示"查无此人,按任意键继续……",然后根据需要确定是否继续查询,若不继续查询则退出程序。 SET TALK OFF CLEAR USE RS.DBF DO WHILE .T. ACCEPT "请输入要查询的职工姓名:" TO NAME LOCATE FOR XM = NAME **********FOUND**********IF EOF ( ) IF BOF ( ) WAIT "查无此人,按任意键继续……" ELSE DISPLAY ENDIF WAIT "继续查询吗?(Y / N)" TO CX IF UPPER (CX) <.> 'Y' **********FOUND**********EXIT LOOP ENDIF ENDDO USE SET TALK ON RETURN 12.题目:查找rs.dbf 中女职工的工资最大值,并显示其姓名和工资。SET TALK OFF CLEAR USE RS.DBF MGZ = 0 MXM = SPACE (8) **********FOUND**********SCAN ★FOR★ XB = "女" SCAN XB = "女" IF MGZ< GZ MGZ = GZ MXM = XM ENDIF ENDSCAN **********FOUND**********? MXM , MGZ ? XM , GZ USE SET TALK ON RETURN 13.题目:统计rs.dbf 中职称是教授、副教授、讲师和助教的人数。SET TALK OFF CLEAR USE RS.DBF **********FOUND**********STORE ★ 0 TO A , B , C , D STORE 1 TO A , B , C , D DO WHILE .NOT.EOF ( ) DO CASE CASE ZC = "教授" A = A + 1 CASE ZC = "副教授" B = B + 1 CASE ZC = "讲师" C = C + 1 CASE ZC = "助教" D = D + 1 **********FOUND**********ENDCASE ENDDO SKIP ENDDO USE ? A,B,C,D SET TALK ON RETURN 14.题目:将0到100之间的所有能被2整除的数显示出来,并计算和显示不被2整除数之和的程序。 set talk off clear **********FOUND**********s=0 s=1 i=0 do while i<=100 **********FOUND**********if int(i/2)=(i/2) if round(i/2)=(i/2) ??i else s=s+i endif i=i+1 enddo ?"s=",s set talk on return 15.题目:计算S=1!+2!+3!+4!+5!+6!+7!+8!+9!+10! 的程序 set talk off clear store 0 to s store 1 to i,t do while i<=10 **********FOUND**********store ★1★ to j,t store 0 to j,t do while j<=i t=t*j j=j+1 enddo **********FOUND**********s=t+s 或s=s+★t s=s+j i=i+1 enddo ?"s=",s set talk on return 16.题目:先从键盘输入10个同学的英语成绩(分数从0至100),然后找出最高和最低英语成绩的程序。 set talk off clear input "请输入英语成绩(1--100):" to n i=1 store n to min,max do while i<10 input "请输入英语成绩(1--100):" to m do case case m<0 .or. m>100 ?"输入成绩有错,重新输入!" **********FOUND**********loop skip case max max=m case min>m **********FOUND**********min★=m min=n endcase i=i+1 enddo ?"最高英语成绩:",max ?"最低英语成绩:",min set talk on return 17.题目:判断一个自然数是否为质数,质数为仅能被1和自身整除的整数。 SET TALK OFF CLEAR **********FOUND**********INPUT "请输入一个大于1的自然数:" TO N ACCEPT "请输入一个大于1的自然数:" TO N K=1 &&K的值为1表示所输入的自然数是质数,为0表示不是质数 J=2 DO WHILE J **********FOUND**********IF MOD(N,J)★<>★0 IF MOD(N,J)=0 J=J+1 LOOP ELSE K=0 EXIT ENDIF CLEAR IF K=1 ?STR(N,5)+" 是质数" ELSE ?STR(N,5)+"不是质数" ENDIF SET TALK ON RETURN 18.题目:从键盘输入一段字符(包含英文字母和数字),计算所含英文字母的个数。 SET TALK OFF CLEAR AA=SPACE(40) **********FOUND**********M=0 M=1 @10,10 SAY "请输入一段字符:" GET AA READ Y=LEN(TRIM(AA)) FOR X=1 TO Y **********FOUND**********P=SUBSTR(AA,★X,1) P=SUBS(AA,1,X) IF P>'A'.AND.P<'Z'.OR.P>'a'.AND.P<'z' M=M+1 ENDIF ENDFOR CLEAR ?"包含英文字母的个数是:"+STR(M) SET TALK ON 19.题目:计算STUDENT.DBF库文件中每名考生的总分,并填入各记录的总分成绩中,再按班级对总分进行分类汇总存入SH.DBF文件中,并显示汇总后的结果。 SET TALK OFF CLEAR USE STUDENT **********FOUND**********★REPLACE★ ALL ZF WITH YY+SX+JSJ 或★REPLACE★ ALL ZF WITHYY+JSJ+SX 或★REPLACE★ ALL ZF WITH SX+YY+JSJ 或★REPLACE★ ALL ZF WITH SX+JSJ+YY 或★REPLACE★ ALL ZF WITH JSJ+SX+YY 或★REPLACE★ ALL ZF WITH JSJ+YY+SX REPL ZF WITH YY+SX+JSJ INDEX ON BJ TO BJ **********FOUND**********★TOTAL★ ON BJ TO SH ★FIELDS★ ZF SORT ON BJ TO SH FIELDS ZF USE SH USE SET TALK ON 20.题目:计算STUDENT.DBF数据库中各条记录总分,并从尾部向头部方向依次显示总分大于等于240分的记录。 SET TALK OFF CLEAR USE STUDENT REPL ALL ZF WITH YY+SX+JSJ GO BOTTOM **********FOUND**********DO ★WHILE★.NOT.★BOF★() DO WHILE .NOT. EOF() IF ZF>=240 ?XM,ZF WAIT"按任意键继续查询……" ENDIF **********FOUND**********SKIP ★ -1 SKIP ENDDO CLOSE ALL SET TALK ON 21.题目:打开数据库XSDB.DBF, 统计学生总人数, 计算机平均成绩,英语平均成绩,奖学金总额等,然后在该数据库后追加一个空记录,将系别字段添入"统计结果",将姓名字段填入统计的总人数、英语和计算机字段添入其平均成绩、奖学金字段填入统计的总金额。SET TALK OFF CLEAR USE XSDB COUN TO RS **********FOUND**********AVERAGE★ 计算机,★英语 TO JSJ,YY AVERAGE 计算机 TO JSJ,英语 TO YY SUM 奖学金 TO JXJ APPEND BLAN REPLACE 系别 WITH "统计结果" REPLACE 计算机 WITH JSJ,英语 WITH YY,奖学金 WITH JXJ **********FOUND**********REPLACE★ 姓名 WITH ★STR(RS,3) REPLACE 姓名 WITH RS USE RETURN 22.题目:通过选择菜单中的操作, 根据输入的记录号对库文件XSDB.DBF中指定记录进行相应的操作。 USE XSDB DO WHILE .T. ?" 1-插入记录 2-修改记录 3-显示记录" ?" 4-逻辑删除 5-恢复记录 0-结束程序" INPUT "请选择(1,2,3,4,5,0):" TO ANS **********FOUND**********IF ★ANS>0★.AND.★ANS<=5★ 或IF ★ANS>0★.AND.★5>=ANS★ 或IF ★0 或IF ★0 IF ANS>0.OR.ANS<=5 INPUT "请输入记录号:" TO JLH GO JLH ENDIF DO CASE CASE ANS=1 INSE CASE ANS=2 EDIT CASE ANS=3 DISP CASE ANS=4 DELE CASE ANS=5 **********FOUND**********RECALL PACK OTHERWISE EXIT ENDCASE ENDDO USE RETURN 23.题目:修改XSDB.DBF中的数据,先接收用户输入的记录号, 然后定位到该记录,修改计算机、英语、奖学金三个字段的值,通过用户确认继续修改或退出。 USE XSDB DO WHILE .NOT. EOF() CLEAR INPUT "请输入要修改的记录号:" TO JLH **********FOUND**********GOTO ★JLH 或 GO JLH GO &JLH @4,1 SAY "计算机成绩:" GET 计算机 @6,1 SAY "英语成绩:" GET 英语 @8,1 SAY "奖学金:" GET 奖学金 **********FOUND**********READ ACCEPT ANS="Y" @10,10 SAY "继续修改吗(Y/N)?" GET ANS PICT "Y" READ IF ANS<>"Y" ENDIF ENDDO USE RETURN 24.题目:接收用户输入的姓名,在XSDB.DBF中查找学生记录, 如果找到则修改该记录, 否则显示:"查无此人!"。根据用户的确认继续查找或退出。 USE XSDB DO WHILE .T. ACCEPT "请输入学生姓名:" TO NAME LOCATE FOR 姓名=NAME IF .NOT. FOUND() ?"查无此人!" ELSE **********FOUND**********EDIT 或 BROWSE DISP ENDIF WAIT "继续查找吗(Y/N)?" TO GOON **********FOUND**********IF UPPER(GOON)="Y" 或 LOWER(GOON)="y" IF GOON="Y" CLEAR LOOP ELSE EXIT ENDIF ENDDO USE RETURN 25.题目:将200到300之间的所有能被3整除或被5整除的数求和并统计个数。 SET TALK OFF CLEAR STORE 0 TO S,C I=200 DO WHILE I<=300 **********FOUND**********IF INT(I/3)=I/3★.OR.★INT(I/5)=I/5 或IF MOD(I,3)=0★.OR.★MOD(I,5)=0 或IF X%3=0 ★AND★ X%5=0 或IF INT(I/5)=I/5★.OR.★INT(I/3)=I/3 或 IF MOD(I,5)=0★.OR.★MOD(I,3)=0 或IF X%5=0 ★AND★ X%3=0 IF INT(I/3)=INT(I/5) S=S+I C=C+1 ENDIF ENDDO **********FOUND**********?"200到300之间的所有能被3整除或被5整除的数之和="+★STR(S) ?"200到300之间的所有能被3整除或被5整除的数之和="+S ?"200到300之间的所有能被3整除或被5整除的数的个数="+STR(C) SET TALK ON RETURN 26.题目:接收键盘输入的任意5个整数(不超过3位数), 找出其中的最大数和最小数并显示。 INPUT "请输入第一个数:" TO X STORE X TO MA, MI N=5 **********FOUND**********DO ★WHILE★ N>1 或DO ★WHILE★ 1 DO WHILE N>=5 INPUT "请输入下一个数:" TO X IF MA MA=X ENDIF IF MI>X MI=X ENDIF N=N-1 ENDDO **********FOUND**********?"最大数:"+★STR(MA,3),"最小数:"+★STR(MI,3) ?"最大数:"+SUBS(MA,3),"最小数:"+SUBS(MI,3) RETURN 27.题目:依次判别XSDB.DBF中学号为偶数的记录, 将其加上逻辑删除标记, 并将它们拷贝新的数据库NEW.DBF中, 再把原数据库中逻辑删除标记恢复。然后统计NEW.DBF中记录的个数并显示。 SET TALK OFF USE XSDB DO WHILE .NOT.EOF() XH=VAL(学号) **********FOUND**********IF INT★(XH/2)★=XH/2 或IF MOD(XH,2)=★0 或 IF ★XH%2★=★0 IF MOD(XH,2)=XH/2 DELE ENDIF SKIP ENDDO COPY TO NEW FOR DELE() **********FOUND**********RECALL★ ALL REPLACE COUN TO NUM ?NUM USE SET TALK ON RETURN 28.题目:从键盘输入十个非零整数,统计能被3整除的数的个数。 SET TALK OFF CLEAR **********FOUND**********I=0 I=1 A=0 DO WHILE I<10 INPUT "请输入一个整数:" TO N **********FOUND**********IF INT(N/3)=★N/3 IF (N/3)=0 A=A+1 ENDIF I=I+1 ENDDO ?A SET TALK ON 29.题目:显示XSDB.DBF中每个学生的姓名、计算机成绩和等级;等级划分如下:计算机成绩大于等于90显示"优秀";60(含60)~89之间显示"及格";低于60分,显示"补考"。如显示:张丽娜 90 优秀。 SET TALK OFF USE XSDB DO WHIL .NOT. EOF() **********FOUND**********? 姓名,计算机 LIST 姓名,计算机 DO CASE CASE 计算机>=90 ??'优秀' CASE 计算机>=60 ??'及格' OTHERWISE ??'补考' ENDCASE **********FOUND**********SKIP GO NEXT ENDDO USE RETURN 30.题目:分别统计XSDB中英语和计算机平均成绩大于80分的男、女生人数,并将79年 以后出生的女生记录拷贝到GIRL.DBF新库中,按出生日期的升序显示新库的姓名字段。SET TALK OFF CLEAR USE XSDB TJ="(英语+计算机)/2>80" **********FOUND**********COUNT★ TO B FOR 性别="男".AND.&TJ COUNT TO B 性别="男".AND.TJ COUNT TO G for 性别="女".AND.&TJ ?B,G COPY TO GIRL FOR 性别="女".AND.YEAR(生年月日)>1979 USE GIRL **********FOUND**********INDEX★ ON 生年月日 TO SR INDEX TO 生年月日 INTO SR LIST 姓名 OFF USE SET TALK ON 31.题目:找出XSDB数据库中计算机和英语的总分最高的学生姓名、所在院系和总分。SET TALK OFF CLEAR USE XSDB STORE 0 TO ZF DO WHILE .NOT.EOF() **********FOUND**********IF 英语+计算机>ZF 或 IF 计算机+英语>ZF 或IF ZF★<英语+计算机或IF ZF★<计算机+英语 IF ZF>"英语+计算机" ZF=英语+计算机 XM=姓名 XB=系别 ENDIF **********FOUND**********SKIP LOOP ENDDO ?XM,XB,ZF USE SET TALK ON RETURN 32.题目:对XSDB.DBF库文件中任意学生更改其所在的系别。 CLEAR USE XSDB NAME=SPACE(6) ACCEPT "请输入要更改学生的姓名:" TO NAME LOCAT FOR 姓名=NAME **********FOUND**********IF EOF() 或IF .NOT.★FOUND★() IF .NOT.EOF() @12,10 SAY "无此学生!" WAIT "按任意键结束!" ELSE **********FOUND**********@15,10 SAY ★NAME★ GET★ 系别 @15,10 SAY &NAME TO 系别 READ ENDIF USE RETURN 33.题目:计算3!+5!+7!之和。 SET TALK OFF CLEAR S=0 I=1 J=3 DO WHILE I<=3 STORE 1 TO K,P **********FOUND**********DO ★WHILE★ K DO WHILE P<=J P=P*K K=K+1 ENDDO S=S+P **********FOUND**********J=2+J 或J=J+★2 J=J+1 I=I+1 ENDDO ? "3!+5!+7!=",S SET TALK ON 34.题目:有选择的删除XSDB.DBF中记录程序,循环显示和逻辑删除记录,直到在"是否继续删除(Y/N)?"提示下,键入非"Y"的其它键时才跳出循环,所有逻辑删除的记录在程序运行结束前真正删除。 CLEAR USE XSDB INDEX ON 学号 TO XH YN="Y" DO WHILE UPPER(YN)="Y" ACCEPT "输入删除学生的学号:" TO XH **********FOUND**********FIND &XH 或 SEEK ★XH LOCATE &XH IF .NOT.EOF() DISP WAIT "是否要删除该记录(Y/N)?" TO YN IF UPPER(YN)="Y" DELETE ENDIF ELSE ?"无此学生!" ENDIF WAIT "是否继续删除(Y/N)?" TO YN ENDDO **********FOUND**********PACK ZAP USE 35.题目:输入一个字符,判别它是否大写字母,如果是,则显示该字符,否则将它转换成大写字母再显示。(A的ASCII码值为65,a的ASCII码值为97) CLEAR SET TALK OFF ACCEPT "请输入一个字符:" TO CH K=ASC(CH) **********FOUND**********IF ★K>=65★.AND.★K<=90 或 I F ★K>=65★.AND.★90>=k 或IF ★65<=K★.AND.★K<=90 或 IF ★65<=k★.AND.★90>=k IF K>=65.OR.K<=90 ?CH+"是大写字母!" ELSE ?CH+"是小写字母!" **********FOUND**********L=K-32 或 L=-32+k L=K+32 ?CH+"为大写字母是:"+CHR(L) ENDIF SET TALK ON 36.题目:查询XSDB.DBF数据库中奖学金超过给定数值的奖学金金额程序。 SET TALK OFF CLEAR USE XSDB ***************FOUND*****************JXJ=★0 JXJ =" " @10,30 SAY"请输入奖学金:" GET JXJ READ DO WHILE .NOT.EOF() IF 奖学金>JXJ DISP 奖学金 ENDIF ***************FOUND*****************SKIP CONTINUE ENDDO USE SET TALK ON 37.题目:以下程序的功能如下:用两重循环计算12+22+32+42+……+N2的值并显示输出结果。SET TALK OFF S=0 I=1 INPUT "N=" TO N **********FOUND**********DO ★WHILE★ I<=N 或 DO ★WHILE★ N>=I DO WHILE I>N K=1 J=1 DO WHILE J<=I K=K*I J=J+1 ENDDO **********FOUND**********S=K+S 或S=S+★K S=S+J I=I+1 ENDDO ?S SET TALK ON 38.题目:将1到100之间能被3或5整除的所有数及其个数显示出来。 SET TALK OFF N=0 I=1 YN=.T. DO WHILE YN **********FOUND**********IF ★INT(I/3)=I/3★.OR.★INT(I/5)=I/5 或IF ★MOD(I,3)=0★.OR.★MOD(I,5)=0 或IF ★I%3=0 ★OR★ I%5=0 IF INT(I/3)=INT(I/5)=0 N=N+1 ??I ENDIF I=I+1 **********FOUND**********IF I>100 或 IF 100 IF I<=100 EXIT ENDIF ENDDO ?N SET TALK ON 39.题目:查找XSDB.DBF中计算机和英语总分最高的学生的姓名和系别并显示。 SET TALK OFF YN="Y" M=0 **********FOUND**********DO ★WHILE★ .NOT.EOF() DO WHILE FOUND() Z=计算机+英语 **********FOUND**********IF M IF M>=Z M=Z N=姓名 X=系别 ENDIF SKIP ENDDO ?N,X USE SET TALK ON 40.题目:修改XSDB.DBF中的数据,先接收用户输入的学号, 然后定位到该记录,修改计算机、英语、奖学金三个字段的值,通过用户确认继续修改或退出。 USE XSDB DO WHILE .NOT.EOF() CLEAR ACCEPT "请输入要修改的学号:" TO XH **********FOUND**********★LOCATE★ FOR学号=XH GO XH @4,1 SAY "计算机成绩:" GET 计算机 @6,1 SAY "英语成绩:" GET 英语 @8,1 SAY "奖学金:" GET 奖学金 READ ANS="Y" @10,10 SAY "继续修改吗(Y/N)?" GET ANS READ **********FOUND**********IF UPPER(ANS)= "N" IF ANS="N" EXIT ENDIF ENDDO USE RETURN 41.题目:按屏幕定义格式向数据库XSDB.DBF数据库添加记录。 USE XSDB ANS="y" DO WHILE ANS='y' CLEA **********FOUND**********APPEND★ BLANK 11 *程序名:TEST.prg *检索选修课程门数等于3门或3门以上,每门课程成绩大于或等于70分的每个学生的 *学号,姓名,性别,平均成绩,最低分和选课门数,并将结果存储到表NEW_TEST中. *以下程序有三处错误,请改正 OPEN DA TABASE SDB SELECT STUDENT.学号,姓名,性别,A VG(成绩) 平均成绩,MIN(成绩) 最低分,COUNT(*) 选课门数; FROM STUDENT,SC; WHere STUDENT.学号= SC.学号AND 成绩>= 70 ; &&**********Error********** GROUP BY STUDENT.学号HA VING count(课程号) >= 3; &&**********Error********** inTO table NEW_TEST &&**********Error********** CLOSE ALL 9 *程序名:dbtest3.prg *定义一个视图VS1, *检索选课门数是3门以上的每个学生的学号、姓名、平均成绩、最低分、选课门数和院系编号, *并按平均成绩降序排序. *以下程序有三处错误,请改正 SET TALK OFF SET SAFETY OFF open DATABASE SDB &&****Error***修改本行的语法错误,不许注释掉本行或删除本行 CREATE VIEW VS1 SELECT STUDENT2.学号, 姓名, A VG(成绩) 平均成绩, MIN(成绩) 最低分, COUNT(*) 选课门数, 院系编号; FROM STUDENT2, sc; &&*************Error************* WHERE STUDENT2.学号= SC.学号; GROUP BY SC.学号HA VING COUNT(课程号) > 3; ORDER BY 平均成绩desc &&*************Error************* CLOSE DATABASE RETURN i=2 create table four(结果I) do while i<=1000 if i%3=0 insert into four values(i) &&错误语句请修改 endif 1 / 4 程序改错题(共15题) 1、在考生文件夹下,给定程序MODI.C 的功能是: 求一维数组a 中所有元素的平均值,结果保留两位小数。 例如,当一维数组a 中的元素为:10,4,2,7,3,12,5,34,5,9 程序的输出应为:The aver is: 9.10 。 #include 程序改错 一、下面每个程序的划线处有语法或逻辑错误,请找出并改正,使其得到符合题意的执行结果。 1.求1?2?3?4? ?n main() { long int sum; int n,i=1; scanf("%d",n); printf(“\n”); while(i main() { float a,b; int c; scanf("%f,%f",&a,&b); c=sum(a,b); printf("\nSum is %f",sum); } 5.用指针作函数参数,对输入的两个整数按大小顺序输出。 swap(int *p1,*p2) { int *p; *p=*p1;*p1=*p2;*p2=*p; } main() { int a,b; int *q1,*q2; scanf("%d,%d",&a,&b); &q1=a,&q2=b; if(a 第1题(10.0分)题号:421 /*-------------------------------- 【程序改错】 -------------------------------- 功能:给一个不多于5位的正整数,要求: 一、求它是几位数, 二、逆序打印出各位数字。 --------------------------------*/ #include"stdio.h" main( ) { /**********FOUND**********/ long a,b,c,d,e,x, scanf("%ld",&x); a=x/10000; /**********FOUND**********/ b=x/10000/1000; c=x%1000/100; d=x%100/10; e=x%10; /**********FOUND**********/ if (a==0) printf("there are 5, %ld %ld %ld %ld %ld\n",e,d,c,b,a); else if (b!=0) printf("there are 4, %ld %ld %ld %ld\n",e,d,c,b); else if (c!=0) printf(" there are 3,%ld %ld %ld\n",e,d,c); else if (d!=0) printf("there are 2, %ld %ld\n",e,d); else if (e!=0) printf(" there are 1,%ld\n",e); getch(); } 答案: 1). long a,b,c,d,e,x; 2). b=x%10000/1000; 3). if (a!=0) 或 if (!a) 第2题(10.0分)题号:417 /*-------------------------------- 【程序改错】 -------------------------------- 功能:下题是一段有关结构体变量传递的程序. --------------------------------*/ #include "stdio.h" struct student { int x; char c; } a; main() { a.x=3; /**********FOUND**********/ a.c='a' f(a); /**********FOUND**********/ printf("%d,%c",a.x,b.c); getch(); } f(struct student b) { b.x=20; /**********FOUND**********/ b.c=y; } 答案: 1). a.c='a'; 2). printf("%d,%c",a.x,a.c); 3). b.c='y'; 第1题(10.0分)题号:440 /*-------------------------------- 【程序改错】 -------------------------------- 1.给定程序MODI1.C中函数fun的功能是:根据以下公式求π值,并作为函数值返回。例如,给指定精度的变量eps输入0.0005时,应当输出Pi=30140578.。(1)“t=0;”改为“t=1;”。(2)改成“return(2*s);” 2.给定程序MODI1.C中函数fun的功能是:将长整型中每一位上为偶数的数依次取出,构成一个新数放在t中。高位仍在高位,低位仍在低位。例如:当s中的数为:7654321时,t中的数为:7531。(1)“void fun (long s, long *t)”(2)“sl = sl*10;” 3.给定程序MODI1.C中函数fun的功能是:用下面的公式求π的近似值,知道最后一项的近似值小于指定数(参数num)为止:例如程序0.0001,则程序输出 3.1414。(1) “while(t>=num)”改为 “while(fabs(t)>=num) ”。(2)“t=s%n;”改为 “t=s/n;”。 4.给定程序MODI1.C中函 数fun的功能是:把主函 数中输入的三个数,最大 的放在a中,最小的放在 c中,中间的放在b中。 例如a=55.0 b=34.0 c=12.0。(1)“float k;”。 (2)“if(*a<*c)”。 5. 给定程序MODI1.C中 函数fun的功能是:为一 个偶数寻找两个素数,这 两个素数之和等于该偶 数,并将这两个素数通过 形参指针传回主函数。(1) “y=1;”。(2)“d=a-i;”。 6. 给定程序MODI1.C中 函数fun的功能是:由形 参给定n个实数,输出平 均值以上(含平均值)的 实数个数。所的平均值为: 195.838745,在平均值以 上的实数个数应为:5。(1) “int j, c=0; double xa=0.0;”。(2)“if (x[j]>=xa)”。 7.例如:当s中的数为: 7654321时,t中的数为: 7531。(1)“*t=0;”(2) “if(d%2!=0)” 8.函数功能是:求出 以下分数序列的前n项 和。 2/1,3/2,5/3,8/5/13/ 8,21/13,…...。和值 通过函数值返回到 main函数。例如,n=5, 则应输出:8.391667。 (1)“fun(int n)”改为 “double fun(int n)”。 (2)“b+=c;”改为“b=c;”。 9.函数fun的功能是: 判断一个整数是否是 素数,若是返回1,否 则返回0。(1)“k++” 改为“k++;”(2) “if(m=k)”改为 “if(m==k)” 10.给定程序MODI1.C 中函数fun的功能是: 从整数1到55之间,选 出能被3整除、且有一 位上的数是5的那些 事,并且把这些数放 在b所指的数组中,这 些数作为函数值返回。 规定,函数中a1放个 位数,a2放十位数。 (1)“a2=k/10;”。(2) “return i;”。 11.给定程序MODI1.C 中函数fun的功能是: 计算小于形参k的最大 的10个能被13或17整 除的自然数之和。K的 值由主函数传入,若K 的值为500.则主函数 为4622。(1) “if((k%13==0)||(k%17 ==0))”。(2)“______” 填“}”。 12.已知一个数列从第 0项开始的前三项分别 是0、0、1以后的各项 都是它相邻的前三项 之和。给定程序 MODI1.C中函数fun的 功能是:计算并输出该 数列前n项的平方根之 和。n的值通过形参传 入。(1)“double fun(int n)”。(2)“return sum;”。 13.函数fun的功能是: 根据整形形参m的值: 计算如下公式的 值……例如:若m中的 值为5,则应输出: 0.536389。(1) “for(i=2; i<=m; i++)”(2) “y-=1.0/(i*i);”。 14.函数的功能是:将 字符串中的字符按逆 序输出,但不改变字符 串中的内容。例如字符 串abcd,则应输出dcba。 (1)“void fun(char *a)”。(2)“printf("%c", *a);”。 15.函数fun的功能是:求 三个数的最小公倍数。 X1=15 x2=11 x3=2(1) 改成“int fun(int x, int y, int z )”。(2)return j 16.函数fun的功能是:根 据整型形参m计算如下 公式的值。若主函数中输 入5,则应输出-0.283333。 (1)“t=t-1.0/i;”。 (2)填空“return t;” 17. 例如,若输入:edcba, 则应输出:abcde。(1) “for( i=strlen( t )-1; i; i- - )” (2)“if(t[j]>t[j+1])” 18.函数fun的功能是: 根据形参m的值 (2<=m<=9),在m行m 列的二维数组中存放 如下所示规律的数据, 由main函数输出。(1) “void fun(int a[][M], int m)”。(2) “a[j][k]=(k+1)*(j+1);”。 19.函数fun的功能是: 先从键盘上输入一个3 行3列矩阵的各个元素 第1题【程序改错】 欧阳学文 功能:先将在字符串s中的字符按逆序存放到t串中,然后把s中的 字符按正序连接到t串的后面。 例如:当s中的字符串为:“ABCDE”时,则t中的字符串应为: “EDCBAABCDE”。 */ #include /**********FOUND**********/ t[i] = s[sli]; for (i=0; i 第2题【程序改错】 功能:求出以下分数序列的前n项之和。和值通过函数值返回main 函数。 2/1+3/2+5/3+8/5+13/8+21/13 …… 例如:若n = 5,则应输出:8.391667。 */ #include 12592 '题目 : 编程求一个十进制整数n 的各位数字之和,设n 为小于或等于 5 位的数。'------------------------------------------------ Option Explicit Private Sub Form_Click() Dim N As Integer, Sum As Integer, S1 As String, S2 As String Dim i As Integer, Ch As String Sum = 0 N = InputBox(" 输入整数n") S1 = Str(N) S1 = Trim(S1) For i = 1 To Len(S1) '**********ERROR********** Ch = Mid(N, i, 1) '**********ERROR********** Sum = Val(Ch) Next i Print " 该整数的各位数之和是: "; Sum End Sub 答案: Ch=Mid(S1 , i , 1) Sum = Sum + Val(Ch) 12610'题目:程序功能根据输入的学习成绩, 分别显示优秀 (90 分以上 ), 良好 (75 分以上 ), 及格 (60 分以上 )不及格四个等级 . '------------------------------------------------ Option Explicit Private Sub Form_Click() Cls Dim i As Integer i = InputBox(" 请输入学习成绩") Select Case i '**********ERROR********** Case 0 < i < 100 MsgBox " 成绩应该在0--100 之间 """ '**********ERROR********** Case 90 Print " 优秀 " Case 75 To 89 Print " 良好 " Case 60 To 74 Print " 及格 " '**********ERROR********** Case MsgBox " 不及格 ", vbCritical End Select End Sub 答案: Case 100 < x or x < 0 Case 90 to 100 Case Else 12616.题目:求 s=1!+3!+5!+7! ,阶乘的计算用Function 过程 fact 实现 . '------------------------------------------------ Option Explicit Private Sub Form_Click() Dim i As Integer, s As Integer '**********ERROR********** For i = 1 To 7 s = s + fact(i) Next i Print s End Sub '**********ERROR********** Public Function fact() Dim t As Integer, i As Integer t = 1 For i = 1 To n t = t * i Next i '**********ERROR********** fact = i End Function 答案: For i = 1 To 7 Step 2 Public Function fact%(n%) fact = t 12620 题目 :编程实现从左到右的滚动字幕,滚动的速度由滚动条控件来控制。 '------------------------------------------------ Option Explicit Private Sub HScroll1_Scroll() '**********ERROR********** Timer1.Interval = HScroll1.Min - HScroll1.Value End Sub Private Sub Timer1_Timer() '**********ERROR********** If Label1.Left <= Form1.Width Then '**********ERROR********** C语言程序改错基本 题库 北京石油化工学院 12级复习题 程序改错 一、下面每个程序的划线处有语法或逻辑错误,请找出并改正,使其得到符合题意的执行结果。 1.求1234n main() { long int sum; int n,i=1; scanf("%d",n); printf(“\n”); while(i main() { int a,c; c=a+b; printf(“c=%d”); } 4.用一个函数求两个数之和。 sum(x,y) { float z; z=x+y; return; } main() { float a,b; int c; scanf("%f,%f",&a,&b); c=sum(a,b); printf("\nSum is %f",sum); } 5.用指针作函数参数,对输入的两个整数按大小顺序输出。 swap(int *p1,*p2) { int *p; *p=*p1;*p1=*p2;*p2=*p; } main() { int a,b; int *q1,*q2; scanf("%d,%d",&a,&b); &q1=a,&q2=b; if(a c语言程序设计第五版习 题答案 Prepared on 24 November 2020 习题解析与答案 第1章C语言概述 一.简答题 1.概述C语言的主要特点。 【解答】 (1)语言简洁、紧凑,使用方便、灵活。 (2)数据类型丰富,表达能力强。 (3)运算符多样。C语言中的运算符包含的范围非常广泛。 (4)具有结构化的控制语句。如if…else语句、while语句、dowhile语句、switch语句、for语句。 (5)允许直接访问物理地址。C语言中含有的位和指针运算,能够直接对内存地址进行访问操作。 (6)所生成的目标代码质量高,可移植性好。 2.构成C语言程序的基本单位是什么它由哪几部分组成 【解答】函数是构成C语言程序的基本单位。一个完整的C程序一般由文件包含、宏定义、函数说明、变量和一个或若干个函数组成。 3.C语言程序的运行一般要经过哪几个步骤 【解答】(1)编辑;(2)编译;(3)连接,生成EXE文件;(4)执行。 二.运行程序写结果 1.输入下面程序并运行。 main() { inta1,a2,x; a1=100; a2=50; x=a1-a2; printf(″x=%d\n″,x); } 【解答】运行结果为:x=50 2.输入下面程序并运行。 main() { inta1,a2,x; a1=10; a2=20; x=a1*a2; printf(″a1=%d,a2=%d\n″,a1,a2); printf(″x=%d\n″,x); } 【解答】运行结果为:a1=10,a2=20 x=200 三.编程题 1.参照本章例题,编写一个C程序,用于显示如下信息: ************************* IloveCprograms! ************************* 【分析与提示】 ①要有文件包含语句#include<>。C语言中没有数据的输入、输出等功 能,数据的输入、输出都是通过调用系统提供的库函数scanf和printf 等来实现的。这些函数的说明都包括在文件中。 ②main是主函数的名称。用{}括起来的内容是函数体,函数体由若干 条语句组成,这是计算机要执行的部分,每条语句以分号“;”结束。 ③注意显示的信息有三行,所以要用到换行符“\n”。 参考代码: #include<> main() { printf("************************\n"); printf("IloveCprograms!\n"); printf("************************\n"); } 第2章数据类型及其运算一.简答题 1.C语言中的数据类型主要有哪几类 【解答】短整型(shortint) 整型整型(int) 长整型(longint) 基本类型字符型(char)(float) 实型(浮点型) 双精度(double) 枚举类型(enum) 数组类型 (一)功能:用选择法对数组中的n个元素按从小到大的顺序进行排序。#include "stdio.h" #define N 20 void fun(int a[], int n) { int i, j, t, k; for (j = 0 ;j < n-1 ;j++) { /**********ERROR**********/ k = j for (i = j+1;i < n; i++) /**********ERROR**********/ if(a[i] >a[k]) /**********ERROR**********/ k=j; t = a[k] ; a[k] = a[j] ; a[j] = t; } } main() { int a[N]={9,6,8,3,-1},i, m = 5; printf("排序前的数据:") ; for(i = 0;i < m;i++) printf("%d ",a[i]); printf("\n"); fun(a,m); printf("排序后的数据:") ; for(i = 0;i < m;i++) printf("%d ",a[i]); printf("\n"); } 【参考答案】 k = j; 【参考答案】 if(a[i] < a[k]) if(a[k] > a[i]) 【参考答案】 k = i; (二)功能:求广义菲玻那契级数的第n项。广义菲玻那契级数的前n 项为: 1,1,1,3,5,9,17,31,…… 项值通过函数值返回 main ( )函数。 例如:若 n = 15,则应输出:The value is: 2209。 #include "conio.h" #include "stdio.h" long fun ( int n ) { long a=1, b=1, c=1, d=1, k; /**********ERROR**********/ for (k=4; k ? 第1题(分)题号:400 难度:中第2章/*------------------------------------------------------ 【程序改错】 -------------------------------------------------------- 功能:编写函数fun求20以内所有5的倍数之积。 ------------------------------------------------------*/ 《 #define N 20 #include <> int fun(int m) { /**********FOUND**********/ int s=0,i; ; for(i=1;i s*=i; ) 第2题(分)题号:584 难度:中第1章/*-------------------------------------------------------【程序改错】 --------------------------------------------------------- 下列给定程序中函数fun()的功能是计算1/n!的值。 & 例如:给n输入5,则输出。 请改正程序中的错误,使它能得到正确结果。 注意:不要改动main函数,不得增行或删行, 也不得更改程序的结构。 , 试题程序: -------------------------------------------------------*/ #include <> #include <> /***********FOUND***********/ ~ int fun(int n) { double result =; if(n==0) return ; while(n>1 && n <170) /***********FOUND***********/ result *=n++ ; … result=1/result; return result; } void main() { 第12次上机程序改错第1题 【程序改错】 -------------------------------------------------------- 功能:求二分之一的圆面积,函数通过形参得到圆的半径,函数返回二分之一的圆面积。 例如:输入圆的半径值:19.527 输出为:s = 598.950017。 ------------------------------------------------------*/ #include printf ( "Enter x: "); scanf ( "%f", &x ); printf (" s = %f\n ", fun ( x ) ); } 第2题【程序改错】 功能:先将在字符串s中的字符按逆序存放到t串中,然后把s中的字符按正序连接到t串的后面。 例如:当s中的字符串为:“ABCDE”时,则t中的字符串应为:“EDCBAABCDE”。 ------------------------------------------------------*/ #include 目录 功能:在一个已按升序排列的数组中插入一个数,插入后,数组元素仍按升序排列。 (1) 功能:求如下表达式: (2) 功能:判断m是否为素数,若是返回1,否则返回0。 (4) 功能:用下面的和式求圆周率的近似值。直到最后一项的绝对值小于等于0.0001。 (5) 功能:求1到20的阶乘的和。 (6) 功能:输出Fabonacci数列的前20项,要求变量类型定义成浮点型,输出时只输出 整数部分,输出项数不得多于或少于20。 (7) 功能:先从键盘上输入一个3行3列矩阵的各个元素的值,然后输出主对角线上的 元素之和sum。 (8) 功能:找出大于m的最小素数,并将其作为函数值返回。 (9) 功能:有一数组内放10个整数,要求找出最小数和它的下标,然后把它和数组中最前 面的元素即第一个数对换位置. (10) 功能:一个已排好序的一维数组,输入一个数number,要求按原来排序的规律将 它插入数组中. (11) 第1题/*------------------------------------------------------ 【程序改错】 -------------------------------------------------------- 功能:在一个已按升序排列的数组中插入一个数,插入后,数组元素仍按升序排列。 ------------------------------------------------------*/ #include 计算机程序改错题,及答案
最新二级C语言考试题库及答案程序改错专项练习 精华版
程序改错基本题
程序改错1
2012计算机国二C语言等级考试题库(内部资料)程序改错
C语言程序改错题
程序改错包括答案版本.docx
C语言程序改错基本题库电子版本
c语言程序设计第五版习题答案
程序改错完整版---C语言
计算机基础C++程序改错复习题
C语言程序改错题
有目录-程序改错部分试题及答案(2015-2016-1)
齐齐哈尔大学C语言题库 程序改错(部分)