急 Fortran 問題 計算總平均成績.名次 (15點)

要輸入班級人數、學號、姓名、國文、英文、數學、程式設計等學期成績,列印時加印總平均成績及名次等欄位

請問要怎麼修改下列的程式??

use typedef

implicit none

integer :: students

type(student), allocatable :: s(:)

character(len=80) :: filename = "data.txt"

integer, parameter :: fileid = 10

integer :: i

write(*,*) "班上有多少學生?"

read (*,*) students

allocate( s(students), stat=i )

if ( i/=0 ) then

write(*,*) "Allocate buffer fail."

stop

end if

open(fileid, file=filename)

do i=1,students

write(*,"(' 請輸入'I2'號同學的國文、英文及數學成績')") i

read(*,*) s(i)%Chinese, s(i)%English, s(i)%Math

write(fileid,"('座號:'I2/'國文:'I3' 英文:'I3' 數學:'I3)") i,s(i)

end do

close(fileid)

stop

end

2 Answers

Rating
  • Jack
    Lv 5
    1 decade ago
    Favorite Answer

    程式如下:

    module typedef

    type student

    character*8 Id

    character*20 Name

    integer Chinese

    integer English

    integer Math

    integer Programming

    real Average

    integer Rank

    end type

    end module

    use typedef

    implicit none

    integer :: students

    type(student), allocatable :: s(:)

    character(len=80) :: filename = "data.txt"

    integer, parameter :: fileid = 10

    integer :: i, j, m0

    integer, allocatable :: m(:)

    write(*,*) "班上有多少學生?"

    read (*,*) students

    allocate( s(students), m(students), stat=i )

    if ( i/=0 ) then

    write(*,*) "Allocate buffer fail."

    stop

    end if

    do i = 1, students

    write(*,"(' 請輸入', I2, '號同學的學號、姓名、國文、英文、數學、及程式設計成績:')") i

    read(*,*) s(i)%Id, s(i)%Name, s(i)%Chinese, s(i)%English, s(i)%Math, s(i)%Programming

    s(i)%Average = (s(i)%Chinese + s(i)%English + s(i)%Math + s(i)%Programming) / 4.

    m(i) = i

    end do

    do i = 1, students-1

    do j = i+1, students

    if (s(m(i))%Average >= s(m(j))%Average) cycle

    m0 = m(i)

    m(i) = m(j)

    m(j) = m0

    end do

    end do

    do i = 1, students

    s(m(i))%Rank = i

    end do

    open (fileid, file=filename)

    do i = 1, students

    write(fileid, "(/'座號:', I2, ' 學號: ', a8, ' 姓名: ', a20/&

    &'國文:', I3, ' 英文:', I3, ' 數學:', I3, ' 程式設計:', I3, ' 總平均成績:', F5.1, ' 名次:', I3)") i, s(i)

    end do

    close (fileid)

    stop

    end

    執行過程:

    班上有多少學生?

    6

    請輸入 1號同學的學號、姓名、國文、英文、數學、及程式設計成績:

    B3001 張三 65 40 15 10

    請輸入 2號同學的學號、姓名、國文、英文、數學、及程式設計成績:

    B2015 李四 11 22 33 44

    請輸入 3號同學的學號、姓名、國文、英文、數學、及程式設計成績:

    C1230 Tony_Young 80 75 90 88

    請輸入 4號同學的學號、姓名、國文、英文、數學、及程式設計成績:

    A007 大刀王五 70 60 50 40

    請輸入 5號同學的學號、姓名、國文、英文、數學、及程式設計成績:

    D0468 櫻櫻美代子 0 0 0 0

    請輸入 6號同學的學號、姓名、國文、英文、數學、及程式設計成績:

    A9802 Jane_Doe 65 80 88 40

    執行後產生一個資料檔 data.txt,內容如下:

    座號: 1 學號: B3001 姓名: 張三

    國文: 65 英文: 40 數學: 15 程式設計: 10 總平均成績: 32.5 名次: 4

    座號: 2 學號: B2015 姓名: 李四

    國文: 11 英文: 22 數學: 33 程式設計: 44 總平均成績: 27.5 名次: 5

    座號: 3 學號: C1230 姓名: Tony_Young

    國文: 80 英文: 75 數學: 90 程式設計: 88 總平均成績: 83.2 名次: 1

    座號: 4 學號: A007 姓名: 大刀王五

    國文: 70 英文: 60 數學: 50 程式設計: 40 總平均成績: 55.0 名次: 3

    座號: 5 學號: D0468 姓名: 櫻櫻美代子

    國文: 0 英文: 0 數學: 0 程式設計: 0 總平均成績: 0.0 名次: 6

    座號: 6 學號: A9802 姓名: Jane_Doe

    國文: 65 英文: 80 數學: 88 程式設計: 40 總平均成績: 68.2 名次: 2

  • Anonymous
    7 years ago

    台灣首家合法娛樂城開幕囉!

    體育博彩、真人對戰、現場遊戲、彩球

    投注高賠率,歡迎您來體驗!

    官方網站 aa777.net

Still have questions? Get your answers by asking now.