为什么以前编写程序时,语句前面要写行号?-IDEPY
问答 问答 关注:0 内容:1082

为什么以前编写程序时,语句前面要写行号?

  • 查看作者
  • 打赏作者
  • 本人以前看过一些80到90年代的编程入门教材以及其他资料,发现里面的程序中语句的前面都有行号,而且行号往往都是10的整数倍(与现代的代码编辑器中的行号不一样。编辑器中代码左侧的行号是自动生成的,而且是连续的)。例如以下是本人用那个时候的资料中的风格编写的求100以内质数的程序:10 DO 90 I = 2, 100 20 J = 2 30 K = I – J * (I / J) 40 J = J + 1 50 IF (K .EQ. 0 .OR. J .EQ. I) GOTO 70 60 GOTO 30 70 IF (J .LT. I) GOTO 90 80 PRINT *, I 90 CONTINUE 100 END 这个程序用现在的入门编程语言——C语言是这样编写的:#include int main (void) { for (int i = 2; i <= 100; i++) { int j = 2, k; do { k = i % (j++); } while (k && (j < i)); if (j == i) { printf ("%dn", i); } } return 0; } C语言程序不需要在语句前面写行号,预处理器会在预处理时添加行号,这是为了在编译时定位错误。然而对于以前程序中的这种人为添加的行号,有的人认为是为了确定语句的执行顺序。然而实际上行号顺序与语句执行顺序是无关的。例如,以下程序20 PRINT *, "Hello" 10 PRINT *, "World" 30 END 在运行时输出的是:Hello World 也就是说行号大小并不影响语句的执行顺序。如果没有改变程序流程的语句,程序是从上到下执行的,而不是按行号从小到大执行的(因为编译器不会在编译之前将程序中的各行按行号从小到大排序)。在以前的这种程序中,行号的主要作用是确定跳转的位置。如循环语句DO需要通过行号确定循环体范围,以及GOTO语句需要通过行号确定跳转的语句位置。例如以下语句:100 GOTO (150, 200, 300, 400, 450) X 的含义为:当变量X的值的整数部分[X]在1~5之间,就跳转到第[X]个行号所指的语句,否则执行下一条语句。求分段函数10 READ *, X 20 GOTO (50, 70, 90) INT (X / 3) + 1 30 PRINT *, "*****" 40 GOTO 100 50 PRINT *, 2 * X + 5 60 GOTO 100 70 PRINT *, SQRT (2 + X) 80 GOTO 100 90 PRINT *, EXP (X) 100 END 也就是说,除了需要标记跳转的位置以外,行号其实是可有可无的。上面的求100以内质数的程序写成这样也是可以通过编译的:DO 30 I = 2, 100 J = 2 10 K = I - J * (I / J) J = J + 1 IF (K .EQ. 0 .OR. J .EQ. I) GOTO 20 GOTO 10 20 IF (J .LT. I) GOTO 30 PRINT *, I 30 CONTINUE END 问题就是:既然不是跳转位置的语句可以不写行号,为什么以前却要在程序的所有语句的开头都写上行号?

    请登录之后再进行评论

    登录
    悬赏问答
    构建和谐问答,你我共参与。
    提问数 1082
    已解决 1
    待解决 5
    发起悬赏提问
    • 回帖总排行
    • 采纳总排行
  • admin
    admin
    21次回帖
  • maplesunrise
    maplesunrise
    9次回帖
  • mikqingyun
    mikqingyun
    4次回帖
  • chowsom
    chowsom
    1次回帖
  • admin
    admin
    5次被采纳
  • 帖子间隔 侧栏位置: