回 帖 发 新 帖 刷新版面

主题:(急)帮儿子问的一道题,请问这个错在哪里了?另外请问有QB的讨论群吗?

一个小学生的数学自测题程序,题目共有10个,数字和运算符均随机产生,数字范围限于个位数,运算符限于+、-、*、/。

DIM AS SINGLE I,J,A,B,C,D,E,N,F
FOR I=1 TO 10
    A=INT(RND*9)+1
    B=INT(RND*9)+1
    D=INT(RND*3)+1
    IF D=1 THEN F=1:? A;"+";B;"=";   
    INPUT N
    C=A+B
    IF C=N  THEN E=E+10:? "对的!" ELSE ? "错的!" 
    IF D=2 THEN F=1: ? A;"-";B;"="; 
    INPUT N
    C=A-B
    IF F=1 THEN END IF
    IF C=N THEN E=E+10:? "对的!" ELSE ? "错的!"
    IF D=3 THEN F=1: ? A;"*";B;"=";   
    INPUT N
    C=A*B
    IF F=1 THEN END IF
    IF C=N THEN E=E+10:? "对的!" ELSE ? "错的!" 
    IF A<B THEN SWAP A,B
    IF D=4 THEN ? A;"/";B;"=";   
    INPUT N
    C=A/B
    IF F=1 THEN END IF
    IF C=N THEN E=E+10:? "对的!" ELSE ? "错的!" 
    NEXT I
? "得分:";E
SLEEP
END 

回复列表 (共1个回复)

沙发

你这个是FB程序吧?
第一,没有在开头加RANDOMIZE TIMER,不是完全随机化的程序;
第二,这个程序在FOR循环里分为四部分:D=1,D=2,D=3,D=4,分别对应着+、-、*、/。原本应该分为四大部分的程序忘记变成IF块语句,所以就变成了一个整体,这是最主要的错误;
第三,F=1的时候结束这道题目的循环,在改过第二个错误时已经是不需要的了,所以把"IF F=1 THEN END IF"和"F=1"去掉;
第四,刚开始的设定,J和F都是多余的,所以可以去掉。
建议用SELECT CASE来做会更方便。
正确程序:
RANDOMIZE TIMER
DIM AS SINGLE I,A,B,C,D,E,N
FOR I = 1 TO 10
    A = INT(RND * 9) + 1
    B = INT(RND * 9) + 1
    D = INT(RND * 3) + 1
    IF D = 1 THEN
        PRINT A; "+"; B; "=";
        INPUT N
        C = A + B
        IF C = N THEN E = E + 10: PRINT "对的" ELSE PRINT "错的"
    END IF
    IF D = 2 THEN
        PRINT A; "-"; B; "=";
        INPUT N
        C = A - B
        IF C = N THEN E = E + 10: PRINT "对的" ELSE PRINT "错的"
    END IF
    IF D = 3 THEN
        PRINT A; "*"; B; "=";
        INPUT N
        C = A * B
        IF C = N THEN E = E + 10: PRINT "对的" ELSE PRINT "错的"
    END IF
    IF D = 4 THEN
        IF A < B THEN SWAP A, B
        PRINT A; "/"; B; "=";
        INPUT N
        C = A / B
        IF C = N THEN E = E + 10: PRINT "对的" ELSE PRINT "错的"
    END IF
NEXT I
PRINT "得分:"; E
SLEEP
END

我来回复

您尚未登录,请登录后再回复。点此登录或注册