一些Fortran程序例子

1、解二次方程 spa

C
C   quadraticroot.f
C
      PROGRAM QUADRATIC
   50 READ(*,10)A,B,C 
   10 FORMAT (3F3.1)
      IF (A.EQ.0.0) THEN       
       WRITE(*,*) '二次项系数不能为0!'
       STOP
      ENDIF
      D=B*B-4.0*A*C
      IF (D.LT.0.0) THEN       
       WRITE(*,*) '该二次方程没有实根!'
       STOP
      ENDIF
      X1=( B+SQRT(D))/(2.0*A)
      X2=(-B+SQRT(D))/(2.0*A)
      WRITE(*,20) X1,X2
   20 FORMAT(1X, F6.2,10X,F6.2)
      GO TO 50
      END PROGRAM QUADRATIC

   50 READ(*,10)A,B,Ccode

它指出从代号为*的输入设备按照标号10的格式语句所提供的数据格式读入三个数,分别送到A,B,C三个单元orm

 *:是通道代码,这里*表明是标准输入设备(即键盘)htm

在Fortran中有4个预约义的外部文件(设备):get

 

设备号0,5,6能够经过OPEN语句链接到其余文件上(重定向),当在程序中关闭设备号是O,5,6的外部文件后,若是下次还要使用这些设备号进行输入输出操做,这些设备号将自动链接到它们各自的缺省的设备上去。因此该句也能够改成:it

50 READ(5,10)A,B,C io

10:格式语句的行号,即function

   10 FORMAT (3F3.1)这一行form

 

 

2、文件操做

C
C   helloworld.f
C   gfortran helloworld.f -o helloworld
      PROGRAM HELLOWORLD
      WRITE(*,10)
   10 FORMAT('hello, world')
      OPEN(unit=16, file='results.txt')
      WRITE(16,10)
      END PROGRAM HELLOWORLD

该代码同时向屏幕和文件results.txt写hello,worldList

open(unit=16, file='results.txt')将定义设备号16为文件results.txt。(文件的设备号最好使用10以上)

小于10可能被用做标准设备

3、Examples

Example 1: Formatted read, trap I/O errors, EOF, and I/O status:

       READ( 1, 2, ERR=8, END=9, IOSTAT=N ) X, Y 
       ... 
8     WRITE( *, * ) 'I/O error # ', N, ', on 1' 
       STOP 
9     WRITE( *, * ) 'EoF on 1' 
       RETURN 
       END

 

Example 2: Direct, unformatted read, trap I/O errors, and I/O status:

       READ( 1, REC=3, IOSTAT=N, ERR=8 ) V 
       ... 
4     CONTINUE 
       RETURN 
8     WRITE( *, * ) 'I/O error # ', N, ', on 1' 
       END

 

Example 3: List-directed read from keyboard:

       
READ(*,*) A, V
or
       READ*, A, V

 

Example 4: Formatted read from an internal file:

       CHARACTER CA*16 / 'abcdefghijklmnop' /, L*8, R*8
        READ( CA, 1 ) L, R
1     FORMAT( 2 A8 )

 

Example 5: Read an entire array:

       DIMENSION V(5) 
       READ( 3, '(5F4.1)') V

 

Example 6: Namelist-directed read:

CHARACTER SAMPLE*16 
       LOGICAL NEW*4 
       REAL DELTA*4 
       NAMELIST /G/SAMPLE,NEW,DELTA 
       ... 
       READ(1, G) 
            or 
       READ(UNIT=1, NML=G) 
            or 
       READ(1, NML=G)  

 

[例1.6] 分别求半径R=1,3,12.5时的圆周长。此源程序由二部分组成:主程序和子程序。[e_121_06.f90]

! f95 e_121_06.f90 -o e_121_06
PROGRAM e_121_06
    real :: r(3)
    data r /1, 3, 12.5/
    do i=1,3
        print *, '半径=', r(i), '圆周长=', C(r(i))
    end do
END PROGRAM e_121_06

function C(radius)
    pi=acos(-1.0)
    C=2*pi*radius
    return
    end

求出全部100-999之间每一位上的数字的立方和等于自身的三位数。

!本程序可以求出全部100-999之间每一位上的数字的立方和等于自身的三位数。
      PROGRAM SUM_OF_CUBES
      INTEGER A,B,C
      DO A = 1,9
         DO B = 0,9
             DO C = 0,9
                 IF (100*A + 10*B + C == A**3 + B**3 + C**3) &
                     PRINT "(3I1)", A,B,C
             END DO
          END DO
       END DO
      END PROGRAM SUM_OF_CUBES
相关文章
相关标签/搜索