主题:QB多重循环的典型题目
多重循环例题
先让学生选择难度:A,B
难度A:程序一共产生10道题(由计算机随机产生),在屏幕上依次显示各题,要求学生输入答案,每道题有两次回答机会。只要答对一次即给10分,两次都未答对不给分。
难度B:程序一共产生10道题(由计算机随机产生),在屏幕上依次显示各题,要求学生输入答案,每道题只给一次回答机会。答对给10分,未答对不给分。
每当所有题都答完时,在屏幕上显示练习成绩,并询问是否再来一次;选择“Y”,则重新选择难度,再来一次;选择“N”,退出练习程序。
CLS
30 INPUT X$
IF X$ = "A" OR X$ = "a" THEN
GOTO 10
ELSEIF X$ = "B" OR X$ = "b" THEN
GOTO 20
10 CLS
M = 0
FOR I = 1 TO 10
R1 = INT(RND * 10): R2 = INT(RND * 10)
S = R1 + R2
PRINT "NO."; I, R1; "+"; R2; "="
FOR G = 1 TO 2
INPUT X
IF X = S THEN M = M + 10
IF X = S THEN EXIT FOR
NEXT G, I
IF M > 80 THEN PRINT "EXCELLENT"
IF M > 60 AND M < 80 THEN PRINT "GOOD"
IF M < 60 THEN PRINT "YOU NEED MORE PRACTISE"
PRINT M
END IF
INPUT "DO YOU WANT AGAIN"; Y$
IF Y$ = "Y" OR Y$ = "y" THEN
GOTO 30
ELSEIF Y$ = "N" OR Y$ = "n" THEN END
END IF
END
20 CLS
M = 0
FOR I = 1 TO 10
R1 = INT(RND * 10): R2 = INT(RND * 10)
S = R1 + R2
PRINT "No."; I, R1; "+"; R2; "="
INPUT X
IF X = S THEN M = M + 10
NEXT I
IF M > 80 THEN PRINT "EXCELLENT"
IF M > 60 AND M < 80 THEN PRINT "GOOD"
IF M < 60 THEN PRINT "YOU NEED MORE PRACTISE"
PRINT M
INPUT "DO YOU WANT AGAIN"; Y$
IF Y$ = "Y" OR Y$ = "y" THEN
GOTO 30
IF Y$ = "N" OR Y$ = "n" THEN END
END IF
END
题目分析:这个例题使用多种结构设计的,包括:顺序结构(PRINT、LET、INPUT等);分支结构(IF、GOTO等);循环结构(FOR-NEXT、DO、多重循环等)。因此本题对了解运用多重循环而言是一个典型的例题。
题目中X后加$符号是因为赋值给X的是字符串而不是一个常量,所以后面加$符号。IF语句执行难度A、B的选择。大小写的A、B是便于输入的字母不必区分,因此也可去掉其中的一对。GOTO后面跟的数字为行号,GOTO语句与IF-THEN语句要换行使用,否则QBASIC将无法识别导致程序不能执行。R1、R2都是随机产生的数字,INT是求不大于RND*10的整数,RND*10是产生10以内的随机数字。S是R1与R2的和。PRINT是显示R1与R2的式子。FOR-G的循环执行在出错的情况之下重新输入答案。M是所得的总分第一个IF X = S THEN执行的是当X等于S的时候M就加10分答对几题就加几次;第二个IF X = S THEN执行的是当X等于S时退出循环执行下一道题。这里的两个IF语句不能交换位置因为交换后M的累加功能就取消了,无法计算最终的得分,因此最后打印的M为0。接下来的三个IF语句可有可无,这三个IF是用来根据M的值然后显示一些鼓励的话。下面的PRINT是显示M的终值。接着的INPUT执行是否再来一次的命令,输入“Y”则再来一次,“N”则退出。下面的程序与行号10的相同。
先让学生选择难度:A,B
难度A:程序一共产生10道题(由计算机随机产生),在屏幕上依次显示各题,要求学生输入答案,每道题有两次回答机会。只要答对一次即给10分,两次都未答对不给分。
难度B:程序一共产生10道题(由计算机随机产生),在屏幕上依次显示各题,要求学生输入答案,每道题只给一次回答机会。答对给10分,未答对不给分。
每当所有题都答完时,在屏幕上显示练习成绩,并询问是否再来一次;选择“Y”,则重新选择难度,再来一次;选择“N”,退出练习程序。
CLS
30 INPUT X$
IF X$ = "A" OR X$ = "a" THEN
GOTO 10
ELSEIF X$ = "B" OR X$ = "b" THEN
GOTO 20
10 CLS
M = 0
FOR I = 1 TO 10
R1 = INT(RND * 10): R2 = INT(RND * 10)
S = R1 + R2
PRINT "NO."; I, R1; "+"; R2; "="
FOR G = 1 TO 2
INPUT X
IF X = S THEN M = M + 10
IF X = S THEN EXIT FOR
NEXT G, I
IF M > 80 THEN PRINT "EXCELLENT"
IF M > 60 AND M < 80 THEN PRINT "GOOD"
IF M < 60 THEN PRINT "YOU NEED MORE PRACTISE"
PRINT M
END IF
INPUT "DO YOU WANT AGAIN"; Y$
IF Y$ = "Y" OR Y$ = "y" THEN
GOTO 30
ELSEIF Y$ = "N" OR Y$ = "n" THEN END
END IF
END
20 CLS
M = 0
FOR I = 1 TO 10
R1 = INT(RND * 10): R2 = INT(RND * 10)
S = R1 + R2
PRINT "No."; I, R1; "+"; R2; "="
INPUT X
IF X = S THEN M = M + 10
NEXT I
IF M > 80 THEN PRINT "EXCELLENT"
IF M > 60 AND M < 80 THEN PRINT "GOOD"
IF M < 60 THEN PRINT "YOU NEED MORE PRACTISE"
PRINT M
INPUT "DO YOU WANT AGAIN"; Y$
IF Y$ = "Y" OR Y$ = "y" THEN
GOTO 30
IF Y$ = "N" OR Y$ = "n" THEN END
END IF
END
题目分析:这个例题使用多种结构设计的,包括:顺序结构(PRINT、LET、INPUT等);分支结构(IF、GOTO等);循环结构(FOR-NEXT、DO、多重循环等)。因此本题对了解运用多重循环而言是一个典型的例题。
题目中X后加$符号是因为赋值给X的是字符串而不是一个常量,所以后面加$符号。IF语句执行难度A、B的选择。大小写的A、B是便于输入的字母不必区分,因此也可去掉其中的一对。GOTO后面跟的数字为行号,GOTO语句与IF-THEN语句要换行使用,否则QBASIC将无法识别导致程序不能执行。R1、R2都是随机产生的数字,INT是求不大于RND*10的整数,RND*10是产生10以内的随机数字。S是R1与R2的和。PRINT是显示R1与R2的式子。FOR-G的循环执行在出错的情况之下重新输入答案。M是所得的总分第一个IF X = S THEN执行的是当X等于S的时候M就加10分答对几题就加几次;第二个IF X = S THEN执行的是当X等于S时退出循环执行下一道题。这里的两个IF语句不能交换位置因为交换后M的累加功能就取消了,无法计算最终的得分,因此最后打印的M为0。接下来的三个IF语句可有可无,这三个IF是用来根据M的值然后显示一些鼓励的话。下面的PRINT是显示M的终值。接着的INPUT执行是否再来一次的命令,输入“Y”则再来一次,“N”则退出。下面的程序与行号10的相同。