cnCalc计算器论坛

 找回密码
 注册
搜索
查看: 3982|回复: 9

[Nspire] 请教:goto命令可以在t-basic中编程中少用或不用么?

[复制链接]
发表于 2014-7-15 19:04:59 | 显示全部楼层 |阅读模式
        编程语言中会用到goto语句,但我看很多编程高手在帖子中经常强调要少用或不用goto,因为编程提倡三种结构——顺序结构,循环结构和选择结构。这三种结构具有很强的逻辑性,goto不属于其中任何一种结构,用它可以在程序里随意指定程序的运行位置,看似方便但容易造成程序混乱,程序执行效率低,可读性不强。在现代很多编程语言中据说已经取消了goto语句。我用t-basic编写了一个随机产生两个20以内数字然后进行加法或减法,并且判断输入答案是否正确。我在其中用了很多goto语句,然后也想不出怎么不用这些语句来表达。所以敬请各位高手不吝赐教一,二!谢谢!
Define aa()=
Prgm
Lbl st
a:=int(rand()*2)+1                      --随机输出1或2
If a=1 then                                   
    Goto jia
Else
    Goto jian
EndIf
Lbl jia                                          --加法标签
b:=int(rand()*20)+1                  --以下两行随机输出20以内两个数字
c:=int(rand()*20)+1
Lab ag1
Disp b,"+",c
Request "jiafa",d                           --输入答案
If d=b+c Then                             --判断输入的答案是否正确
   Goto st
Else
   Goto ag1
EndIf
Lbl jian                                          --减法标签
b:=int(rand()*20)+1
c:=int(rand()*20)+1
If b>c Then                                 --判断语句确保被减数大于减数
   Goto ag2
Else
   Goto jian
EndIf
Lab ag2
Disp b,"-",c
Request "jianfa",d
If d=b-c Then
   Goto st
Else
   Goto ag2
EndIf


发表于 2014-7-15 20:20:47 | 显示全部楼层
真的要少用!
勉强看懂了程序,我觉得完全可以用if嵌套完成。
goto跳来跳去的头很大的
发表于 2014-7-15 20:43:55 | 显示全部楼层
真的少用+1,虽然会比较方便就是了...
现在看以前的程序完全看不懂/w\
发表于 2014-7-15 22:15:03 | 显示全部楼层
以前用Casio经常用。但最好少用。因为以后要再看懂这个程序会比较难。不便于后期维护更新以及给别人借鉴
发表于 2014-7-15 22:15:09 | 显示全部楼层
以前用Casio经常用。但最好少用。因为以后要再看懂这个程序会比较难。不便于后期维护更新以及给别人借鉴
发表于 2014-7-16 01:17:53 | 显示全部楼层
理论上建议少用goto ,但实际上goto 语句的使用可以很大的增加灵活性。用的好还可以简化思路,增强程序的易读性。
偶以前用51单片机汇编搞开发时,goto的用法是必须的。
 楼主| 发表于 2014-7-17 06:29:35 | 显示全部楼层
谢谢各位高手!我还想请教各位高手,如果不用goto语句或尽量少用的话,上面这个程序该如何修改?用什么样的语句可以代替?请指点!谢谢!
发表于 2014-7-18 13:12:14 | 显示全部楼层
只需要很简单的if就可以控制了,Goto只会把你的思维搞乱
  1. Define test()=
  2. Prgm
  3.   Local a,b,type,operator,expression,res
  4.   a:=randInt(0,20)
  5.   b:=randInt(0,20)
  6.   type:=randInt(0,1)
  7.   If type=1 Then
  8.     operator:="+"
  9.   Else
  10.     operator:="-"
  11.   EndIf
  12.   expression:=string(a)&operator&string(b)
  13.   Request expression&"=?",res
  14.   If res=expr(expression) Then
  15.     Text "Right!"
  16.   Else
  17.     Text "Wrong!"
  18.   EndIf
  19. EndPrgm
复制代码
发表于 2014-7-18 18:49:13 | 显示全部楼层
我这里有本92年的NOIP的参考书,其中的代码用当时的BASIC和PASCAL各写了一遍
当时的BASIC还是不支持写成函数格式的,因此我就看见书里面说如何用BASIC手写函数调用栈。。。
不过那不是重点,一个DFS搜索或回溯法搜索BASIC写了好几页,无数的GOTO真的影响阅读
 楼主| 发表于 2014-7-19 06:52:39 | 显示全部楼层
wtof1996 发表于 2014-7-18 13:12
只需要很简单的if就可以控制了,Goto只会把你的思维搞乱

万分感谢!很专业的代码,清晰、简洁,我要好好研究研究!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|cnCalc计算器论坛

GMT+8, 2024-12-23 11:46 , Processed in 0.057221 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表