Eastsheng's Wiki

Fortran-02

2022-07-17 18:11:28

[toc]

IF ELSE THEN 语句

1
2
3
4
5
6
7
8
9
10
PROGRAM MAIN
REAL :: x; READ *, x
IF(x>0.0 .and. x<1.0) THEN
PRINT *, " 在区间(0, 1)中"
ELSE IF(x<0 .and. x>-1) THEN
PRINT *, "在区间(-1,0)"
ELSE
PRINT *, "不在区间(0, 1)中"
END IF
END PROGRAM MAIN

tiny函数

  • tiny(x)表示查询x的最小正值,x所能表示的最小的数,近似于0

CASE语句:统计学生考试成绩

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
program main
implicit none !`implicit none`即设计任何和隐含说明语句无效,所有变量都要显式地人工声明,不能未声明就直接使用,有效地避免了可能的大量错误。
integer :: score,n0=0,n1=0,n2=0,n3=0,n4=0
do
read *, score
if(score<0 .or. score>100) then
print *,'满分=',n0,' 优=',n1,' 良=',n2,' 及格=',n3,' 不及格=',n4
exit
else
select case(score) !入口语句, select case(表达式)
case(100) !CASE语句是一条单独的语句
print *, '满分'; n0=n0+1
case(85:99) !case值必须与表达式的类型相同
print *, '优 '; n1=n1+1
case(70:84) !给定CASE构造中的case值范围不能有重叠
print *, '良 '; n2=n2+1 !CASE块可以是空的,也可以包含其它块,其嵌套形式与块IF相同
case(60:69)
print *, '及格'; n3=n3+1
case default !可选,最多只能有一句;当case表达式的值在case值范围以外时,执行CASE DEFAULT语句后面的块
print *, '不及格'; n4=n4+1
end select !出口语句
end if
end do
end program main
  • 分为整型、字符型、逻辑型三种

读入a,b,若a>b,则置X=1.23,否则置X=32.1,打印X值;

1
2
3
4
5
6
7
8
9
10
11
program main
real :: a,b,X
read(*,*) a,b
if(a>b) then
X = 1.23
write(*,*) X
else
X = 32.1
print *,X
end if
end program main

读入a,b,c,d,若a+b>c+d,则X=1.1,若a+b=c,则X=0.0,若a+b<c+d,则X=-1.1,输出X值;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
!读入a,b,c,d,若a+b>c+d,则X=1.1,若a+b=c,则X=0.0,若a+b<c+d,则X=-1.1,输出X值;

program main
real :: a,b,c,d,X
read *, a,b,c,d
if(a+b>c+d) then
X = 1.1
write(*,*) X
else if((a+b).eq.c) then
X = 0.0
write(*,*) X
else if((a+b).lt.(c+d)) then
X = -1.1
print *, X
else
print *,"输入错误!!!"
end if
end program main

读入S与S1,如|S-S1|≤10-7,则置S为S1。

1
2
3
4
5
6
7
8
9
10
11
12
! 读入S与S1,如|S-S1|≤10-7,则置S为S1。

program main
real :: S,S1
READ(*,*) S,S1
IF(ABS(S-S1).LE.(10-7)) THEN
S = S1
PRINT *,"S,S1 = ",S,S1
ELSE
PRINT *,"ERROR!!!"
END IF
end program main

用IF构造嵌套方法编程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
! 用IF构造嵌套方法编程:读入X,分三种情况求得Z值,当X<0时,Z=-100;
! 当X=0时,又分三种情况(y<0,则Z=sinX;y=0,则Z=0;y>0,则Z=cosX);
! 当X>0时,Z=100,打印Z值。

PROGRAM MAIN

REAL :: X,Y,Z
READ(*,*) X,Y
IF(X<0) THEN
Z = -100
PRINT *,Z
PRINT *,Z
ELSE IF(X.EQ.0) THEN
IF(Y.LT.0) THEN
Z = SIN(X)
PRINT *,Z
ELSE IF(Y.EQ.0) THEN
Z = 0
PRINT *,Z
ELSE IF(Y.GT.0) THEN
Z = COS(X)
PRINT *,Z
END IF
ELSE IF(X.GT.0) THEN
Z = 100
PRINT *,Z
END IF
END PROGRAM MAIN

读入一个整型变量N的值,用CASE构造编程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
! 读入一个整型变量N的值,用CASE构造编程,
! 若N=1、2、3、5,则Y=X;N=4、8,则Y=X^2;N=6、7,则Y=X^3,
! 其它情况则Y=0,打印Y值

PROGRAM MAIN
INTEGER :: N,X,Y
READ(*,*) N
SELECT CASE(N)
CASE(1,2,3,5)
Y = X
PRINT *, Y
CASE(4,8)
Y = X**2
PRINT *, Y
CASE(6:7)
Y = X**3
PRINT *, Y
CASE DEFAULT
Y = 0
PRINT *, Y
END SELECT

END PROGRAM MAIN

设变量color_light是字符型变量,表示灯光色彩

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
! 设变量color_light是字符型变量,表示灯光色彩,
! 编一CASE构造,当该变量值是红色(RED)则打印STOP字样。
! 当变量值是黄色(YELLOW),打印WAIT字样,当值是绿色(GREEN)打印CROSS字样。

PROGRAM MAIN
IMPLICIT none
CHARACTER*1 color_light

PRINT *,"请输入:RED、YELLOW、GREEN任意一个:"

READ(*,*) color_light

KEY_INPUT: SELECT CASE(color_light)
CASE('RED')
PRINT *,"STOP"
CASE('YELLOW')
PRINT *, "WAIT"
CASE('GREEN')
PRINT *, "CROSS"
CASE DEFAULT
PRINT *, "ERROR!!!!"
END SELECT KEY_INPUT

END PROGRAM MAIN
  • 这个代码并不能实现该结果,待解决

循环读入学生的学号和成绩30次并打印

1
2
3
4
5
6
7
8
9
10
program main
integer :: N, Num
real :: Grade
print *, "请输入学号、成绩:"
do 10 N = 1, 30, 1
read(*,*) Num, Grade
print*, Num,Grade
10 CONTINUE

end program main
  • DO构造一般形式:DO [[标号][,]] 循环变量=初值式,终值式[,增量式]

    中括号里可省略;
    DO语句的一般形式中,当循环变量的增量(步长值)为1时增量式可不写;
    循环变量初值、终值和步长可以分别是常数、变量或表达式;
    循环变量的初值、终值和步长可以为正或负。初值、终值可以为零。但步长不应为0,否则循环变量的值永远不会超过终值,从而陷入死循环;
    应尽量使循环变量类型与初值、终值和步长的类型一致, 若不一致,则按赋值的规则处理,即需先将初值、终值和步长的类型转化成循环变量的类型,然后进行处理;
    由于实型数在运算和存储时有一些误差,因而循环次数的理论值与实际值之间会有一些差别。这种情况在程序设计中常有发生,而且比较隐蔽不易发现。所以应该避免使用实型的循环变量,用整型循环变量计算出的循环次数是绝对准确的。
    特殊的循环终端语句是:END DO(常用于无语句标号时)和CONTINUE(常用于有语句标号时)