Skip to content

Commit 8d33c75

Browse files
authored
Update ch04-00-if.md
1 parent 778d5a4 commit 8d33c75

File tree

1 file changed

+60
-23
lines changed

1 file changed

+60
-23
lines changed

src/ch04-00-if.md

Lines changed: 60 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@ Fortran中使用条件语句`if(<condition>)then`来表示某条语句在满足
99
``` fortran
1010
program main
1111
implicit none
12-
integer::angle=10
12+
integer::angle
13+
angle=10
1314
if (angle < 90) then
1415
write(*,*)"锐角"
1516
end if
@@ -29,17 +30,27 @@ $ fpm run
2930
当有两个分支时,需要增加`else`语句或`else if`语句
3031

3132
``` fortran
32-
if (angle < 90) then
33-
write(*,*)"锐角"
34-
else
35-
write(*,*)"不是锐角"
36-
end if
37-
!
38-
if (angle < 90) then
39-
write(*,*)"锐角"
40-
else if(angle == 90) then
41-
write(*,*)"直角"
42-
end if
33+
program main
34+
implicit none
35+
integer::angle
36+
angle=90
37+
if (angle < 90) then
38+
write(*,*)"锐角"
39+
else
40+
write(*,*)"不是锐角"
41+
end if
42+
!
43+
if (angle < 90) then
44+
write(*,*)"锐角"
45+
else if(angle == 90) then
46+
write(*,*)"直角"
47+
end if
48+
end program main
49+
```
50+
``` sh
51+
$ fpm run
52+
不是锐角
53+
直角
4354
```
4455
- **注意**`else if`后面还有一个`then`
4556

@@ -48,14 +59,40 @@ end if
4859
可以使用多个`else if`一直连接下去
4960

5061
``` fortran
51-
if (angle < 90) then
52-
write(*,*)"锐角"
53-
else if(angle == 90) then
54-
write(*,*)"直角"
55-
else if(angle < 180) then
56-
write(*,*)"钝角"
57-
else if(angle == 180) then
58-
write(*,*)"平角"
59-
end if
60-
```
61-
- Fortran中的if语句并没有短路机制,所以例如`if( n < 11 .and. a(n) > 1) `这样的语法并不能保证a(n)的下标不会越界
62+
program main
63+
implicit none
64+
integer::angle
65+
angle=120
66+
if (angle < 90) then
67+
write(*,*)"锐角"
68+
else if(angle == 90) then
69+
write(*,*)"直角"
70+
else if(angle < 180) then
71+
write(*,*)"钝角"
72+
else if(angle == 180) then
73+
write(*,*)"平角"
74+
end if
75+
end program main
76+
```
77+
``` sh
78+
$ fpm run
79+
钝角
80+
```
81+
- Fortran中的if语句**并没有短路机制**,所以例如`if( n <= 10 .and. a(n) > 1) `,数组a的大小为10,这样的语法并不能保证在运行时不出错。
82+
``` fortran
83+
program main
84+
implicit none
85+
integer::a(10)
86+
integer::i
87+
i=11
88+
a=2
89+
if (i<=10 .and.a(i)>1)then
90+
write(*,*)"hello"
91+
end if
92+
end program main
93+
```
94+
``` sh
95+
$ fpm run
96+
At line 7 of file app/main.f90
97+
Fortran runtime error: Index '11' of dimension 1 of array 'a' above upper bound of 10
98+
```

0 commit comments

Comments
 (0)