因此对这类题首先要 注意审题,注意题目要求的细节,然后阅读程序,把对应的程序段理解清楚, 例1(2级 VFP 考试程序改错题) *检索选课门数大于或等于 3 门以上的每个学生的、、平均成绩、最低分、选课门 *数和院系,并按平均成绩降序排序,将结果存储到表 TEST1 中. *以下程序有三处错误,请改正
5/12
1 SET TALK OFF 2 SET SAFETY OFF 3 SELECT STUDENT., , AVG(成绩) 平均成绩, MIN(成绩) 最低分, ; 4 COUNT(*) 选课门数,院系 院系; 5 FROM STUDENT, SCORE; 6 WHERE STUDENT. = SCORE.; 7 GROUP BY STUDENT. ; 8 HAVING SUM(课程编号) >= 3 ; 9 ORDER BY 平均成绩 ; 10 INTO TEST1 SDF [分析]这题是典型的语法错误题型,语句中存在关键字使用错误,函数错误。 1)首先是第8句函数使用错误:题目要求是统计选课“门数”3门及以上的学生,应该是计 数统计,而不是求和统计,因此应该改为 Having Count(
课程编号)>=3 或 选课门数>=3 2)其次是第9句与要求不符,题目要求是按平均成绩降序,而第9句默认是升序,缺少了降 序选项的子句,因此应该改为 Order by 平均成绩 Descending 3)最后是第 10 句语法错误, 结果到表应使用 Into Table 或 Into DBF 子句, 因此应改为 Into Table Test1 或 Into DBF Test1 例2. (2级 Foxbase 试题)有数据表 b05.dbf,其字段为: (字符,C,1)(次数,N,4) 、 , 请设计程序: 对输入的任何一个西文字符组成的字符串进行处理, 如果某个字符已在表中存 在,则将次数加 1,否则添加一条新记录,将该字符填入到添加的记录中,将次数填为 1。 以下程序中3处错误,请改错。 1 SET TALK OFF 2 CLEAR 3 USE G05 4 ACCEPT "请输入只包含西文字符的字符串:" TO S 5 FOR I=1 TO LEN(S) 6 C=SUBS(S,I) 7 LOC
ATE FOR 字母=C 8 IF NOT EOF() 9 APPEND BLANK 10 REPLACE 字母 WITH C,次数 WITH 1 11 ELSE 12 次数=次数+1 13 ENDIF 14 ENDFOR 15 USE [分析]这道题是2级考试的典型试题, 这是字符串按字符逐个处理的典型用例,又包含了表的 操作,是一道知识面覆盖较广的难度也较大的改错题。本题通过通读可以注意到本题的关键 逻辑点:取当前字符,找不到该字符则增加该字符,否则增加引用次数。事实上这几处关键 点恰好都有错误: 1) 第 6 句函数使用错误,缺少了第 3 个参数,缺少第 3 个参数表示取第 I 字符后的所有字符, 因此应该修改为”