手动求平方根程序
qbasic吧
全部回复
仅看楼主
level 7
JI疾风 楼主
求n的平方根:Sqr(n)
手动求平方根:穷举法
用两种方法(1.Slow是手动穷举,2.Quick是用函数)
没有在子程序前加End,也有三个子程序没有RETURN,不过程序能正常运行。
CLS
LOCATE 12
PRINT TAB(37); "1.Slow"
PRINT TAB(37); "2.Quick"
PRINT TAB(30); "Please Input 1 or 2:";
INPUT "", s
CLS
IF s = 2 THEN GOSUB Choose2
GOSUB Inputn1
GOSUB Sqrtn
GOSUB PrintSqrtn
Inputn1:
   LOCATE 12
   PRINT TAB(22); "Victor edition square root calculator"
   PRINT "Note: If the input digital not completely square that counts time may be longer,"
   PRINT TAB(31); "please be patient."
   d$ = INPUT$(1)
Inputn2:  
   CLS
   LOCATE 12, 34
   INPUT "Input n:", n
   CLS
   a$ = "Sqrt(" + STRING$(ABS(n < 1), "0") + LTRIM$(STR$(n)) + ")="
   LOCATE 12, 33: PRINT "Please wait..."
RETURN
Sqrtn:                                   '此段为手动穷举阶段
   x = 1: a = 1
   DO
     a = a - x * 10    '为了优化程序,使a不每次为0,从上次失败的部分更精确地查起
     IF x = 1 THEN a = a + x * 9 '第一次只要减去x,而一开始减去了10*x,所以要补上9*x    
     DO
       a = a + x
       IF a * a >= n THEN EXIT DO
     LOOP
     f = a * a
     IF f = n THEN a$ = a$ + STRING$(ABS(a < 1), "0") + LTRIM$(STR$(a)): RETURN
     x = x * .1
   LOOP
RETURN
PrintSqrtn:
   CLS
   LOCATE 12, 40 - LEN(a$) \ 2
   PRINT a$
   END
Choose2:
   GOSUB Inputn2
   x = SQR(n)
   a$ = "Sqrt(" + STRING$(ABS(n < 1), "0") + LTRIM$(STR$(n)) + ")="
   a$ = a$ + STRING$(ABS(x < 1), "0") + LTRIM$(STR$(x))
   LOCATE 12, 40 - LEN(a$) \ 2
   PRINT a$
   END
因为在输入输出部分动了大工夫,所以程序显得很长很长,以下给出手动求平方根的不考虑输入输出格式的程序:
CLS
INPUT n
x = 1: a = 1
DO
   a = a - x * 10
   IF x = 1 THEN a = a + x * 9
   DO
     a = a + x
   LOOP UNTIL a * a >= n
   f = a * a
   IF f = n THEN PRINT a: END
   x = x / 10
LOOP
2010年12月29日 08点12分 1
1