Fortran是在打卡时代编写的,因此它的语法非常有限。但是您仍然可以用它编写有用且有趣的程序。Fortran77是我学习的第一种编译型编程语言。我首先自学如何在AppleII上用BASIC编程,后来我学会了在DOS上用QBasic编程。但是上大学学物理的时候,又学了Fortran。Fortran曾经在科学计算中很常见。曾几何时,每个计算机系统都有一个Fortran编译器。Fortran曾经像今天的Python一样无处不在。因此,如果你是像我这样在1990年代工作的物理系学生,你肯定学过Fortran。我一直认为Fortran与BASIC有点相似,所以每当我需要编写一个简短的程序来分析实验室数据或执行一些其他数值分析时,我很快就会想到Fortran。我在业余时间用Fortran写了一个“猜数字”游戏,计算机会在1到100之间选择一个数字让我猜。该程序一直循环,直到我做对为止。《猜数字》程序练习了编程语言中的几个概念:如何给变量赋值,如何写语句,如何进行条件判断和循环。这是学习新编程语言时的一个很好的练习示例。Fortran编程基础虽然Fortran多年来一直在更新,但我最熟悉的是Fortran77,这是我多年前学习的实现。Fortran是在程序员还在穿孔卡上编程的时候创建的,因此“经典”Fortran仅限于处理适合穿孔卡的数据。这意味着你只能编写满足以下限制的经典Fortran程序(LCTT译注:Fortran95等后来的版本对这些限制做了很大的改进,如果你有兴趣,建议直接学习新版本):一源代码行。仅识别1-72列(最后八列,73-80,为卡片分类器保留)。行号(“标签”)在第1-5列中。程序语句在第7-72列中。要指示换行符,请在第6列中输入一个连续的字符(通常是+)。要创建注释行,请在第1列中输入C或*。只能使用字符A到Z(大写字母)、0到9(数字)和特殊字符=+-*/(),.$':可以使用空格。尽管存在这些限制,您仍然可以编写非常有用和有趣的程序。GuessingtheNumberinFortranExploreFortranbywritinga"guessthenumber"game.这是我的实现代码:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCPROGRAMTOGUESSANUMBER1-100CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCPROGRAMGUESSNUMINTEGERSEED,NUMBER,GUESSPRINT*,'ENTERARANDOMNUMBERSEED'READ*,SEEDCALLSRAND(SEED)NUMBER=INT(RAND(0)*100+1)PRINT*,'GUESSANUMBERBETWEEN1AND100'10READ*,GUESSIF(GUESS.LT.NUMBER)THENPRINT*,'TOOLOW'ELSEIF(GUESS.GT.NUMBER)THENPRINT*,'TOOHIGH'ENDIFIF(GUESS.NE.NUMBER)GOTO10PRINT*,'THATSRIGHT!'END如果您熟悉其他编程语言,您大概可以通过阅读源代码弄清楚这个程序在做什么。前三行是注释块,表示程序的功能。第四行的PROGRAMGUESSNUM将其标识为一个程序,并由最后一行的END语句关闭。定义变量后,程序会提示用户输入随机数种子。Fortran程序无法从操作系统初始化随机数生成器,因此您必须始终使用“种子”值和SRAND子例程子例程启动随机数生成器。Fortran使用RAND(0)函数生成0到0.999...之间的随机数。参数0告诉RAND函数生成一个随机数。将此随机数乘以100以生成0到99.999之间的数字...,然后加1以获得1到100.999之间的值......INT函数将结果截断为整数;因此,变量NUMBER是1到100之间的一个随机数。程序会给出提示,然后进入循环。Fortran不支持更现代的编程语言中可用的while或do-while循环,相反,您必须使用标签(行号)和GOTO语句构建自己的循环。这就是READ语句具有行号的原因:您可以在循环结束时使用GOTO跳转到该标签。穿孔卡片没有<(小于)和>(大于)符号,因此Fortran使用不同的语法进行值比较。要测试一个值是否小于另一个值,请使用.LT.(小于)。要测试一个值是否大于另一个值,请使用.GT.(大于)。等于和不等于是.EQ。和.NE.,分别。在每个循环中,程序都会验证用户的猜测。如果用户的猜测小于随机数,程序打印TOOLOW,如果猜测大于随机数,程序打印TOOHIGH。循环继续,直到用户的猜测等于目标随机数。当循环退出时,程序打印THATSRIGHT!并立即结束运行。$gfortran-Wall-oguessguess.f$./guessENTERARANDOMNUMBERSEED93759GUESSANUMBERBETWEEN1AND10050TOOLOW80TOOHIGH60TOOLOW70TOOLOW75TOOHIGH73TOOLOW74THATSRIGHT!程序每次运行时,用户都需要输入不同的随机数种子。如果你总是输入相同的种子,程序给出的随机数将保持不变。在其他语言中尝试当学习一门新的编程语言时,这个“猜数字”游戏是一个很好的入门程序,因为它以非常简单的方式练习了几个常见的编程概念。通过用不同的编程语言实现这个简单的游戏,您可以弄清楚一些核心概念并比较每种语言的细节。你有最喜欢的编程语言吗?如何用您喜欢的语言编写“猜数字”游戏?跟随本系列文章,查看您可能感兴趣的其他编程语言的示例。
