[toc]
停止语句
PAUSE
- 一般形式是:
PAUSE [暂停值]
,暂停值为字符串常量或5位数以下的整型数,当程序运行至断点处将输出暂停值。 - PAUSE语句(在F90中不推荐使用,在F95中被废除)暂时中止程序的运行,将系统挂起,使程序操作员可以执行其它操作系统命令。
STOP
- STOP语句的一般形式为:
STOP [停止值]
,与PAUSE语句类似,程序停止运行时将输出停止值。 - STOP语句是停止运行,一个程序单位中可以有多个STOP语句,执行到任一个STOP语句处时,程序即完全中止运行。在子程序中如果有STOP语句,也是使整个程序停止运行而不是使控制返回主程序。
隐DO循环控制重复读写的次数
- 一般形式为:
(I/O列表,循环变量名=初值,终值,增值)
。1
2READ *,(VALUE(I),I=1,20) !读入VALUE(1),VALUE(2),…,VALUE(20)的值。
WRITE(*,*)(A,B,N=1,5) !在当前设备用默认格式重复输出A、B的值5次。 - 隐DO循环只能作为输入输出表的一部分出现,不能用于其它场合。
- 隐DO表可以嵌套,如:
1
PRINT *, ((A(I,J),I=1,3),J=1,3)
无循环变量的DO构造
1 |
DO
块中必须有EXIT
语句,使它停止循环,否则循环将无休无止地一直进行下去,形成死循环。EXIT
语句(EXIT [DO构造名]
)的作用是停止循环,使控制退出循环结构,因此又称出口语句。
通常将EXIT
语句与IF
语句结合使用,即在DO
构造内使用:IF(逻辑表达式) EXIT
一个猜数游戏
- 用随机数产生器产生1-10之间的一个整数,你猜它,如果猜得太大或太小都会提示,猜对了结束。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15program main
CALL RANDOM_SEED ! 用来获取或设置新的种子;注意,这个函数在整个程序里,通常只调用一次!
call random_number(R)
Number=int(10*R+1)
do
write(*,'("Your Guess:")'); read *, MyGuess
if(MyGuess.eq.Number) exit
if(MyGuess.gt.Number) then
print *, 'Too high. Try again.'
else
print *, 'Too low. Try again.'
end if
end do
print *,'You are lucky. It is',Number
end program main Fortran90
以后,语法规范引入了两个标准的函数用来产生随机数(0 ~1 之间
):random_seed
和random_number
(如上代码, 通常这两个函数需配合使用 )random_seed
call random_seed( size , get , put )
,一共三个参数(一般一次只能选择一个参数使用,而不能三个一起使用)size
是输出参数,会返回种子的大小。在获取或设置新的种子时,输入输出的种子数组,必须与size的大小一样。get
是输出参数,用来返回当前的种子。必须是integer
类型的数组(数组大小取决于size
),通常很少使用它。put
是输入参数,用来设置新的种子。
只要random_seed
不加入任何参数,则自动用时间设置种子。所以这个操作可以简化为call random_seed()
或call random_seed
random_number
用来产生随机数的,当我们需要产生时,调用它就可以了。整个程序可以不限次数地调用它。
call random_number(R)
这里的R
必须是real
类型,可以是单变量,也可以是数组。调用后,R
的值变为当前的(伪)随机数。
求两个整数的最大公约数
1 | ! !碾转相除法:如27和6,先用27除以6,余数为3。再用6除以3,余数为零,即3为最大公约数。 |
do while
的一般形式为:[构造名] DO WHILE (逻辑表达式)
求正弦函数的近似值
1 | !正弦函数用泰勒级数展开:sinx=x-x^3/3!+x^5/5!-x^7/7!+...。计算有限精度范围内的值。 |
DO 构造的一般形式
1 | [构造名:] DO [标号][循环控制] |
用不带循环控制变量的DO构造求下列式
- $1^2+2^2+3^2+…+m^2$
1 | ! 1^2+2^2+3^2+...+m^2 |