Fortran Coder

标题: Fortran语言 循环语句求助! [打印本页]

作者: crrcrr    时间: 2014-5-24 16:15
标题: Fortran语言 循环语句求助!
题目是输入100名学生的学号和五门课的成绩,要求统计并打印出总分成绩最高学生的学号、各门课成绩、总成绩及平均成绩。我先编了一个5名学生和五门课成绩的。程序如下:
[Fortran] 纯文本查看 复制代码
open(10,file='data')
open(20,file='out')
read(10,*)
write(20,100)
100 format(1x,"学号 数学 物理 化学 生物 英语 总成绩 平均成绩")
do i=1,5,1
read(10,*)x,m,p,c,b,e
enddo
max=0
do i=1,5,1
   t=m+p+c+b+e
   if(t>max)then
   max=t
   endif
enddo
a=max/5
write(20,200)x,m,p,c,b,e,max,a
200 format(i4,5f6.1,2f8.1)
end

然后准备的data文件是这样的:
1  80.0  68.0  98.0  69.0  65.0
2  96.0  78.0  96.0  77.0  82.0
3  78.0  80.0  80.0  89.0  75.0
4  68.0  96.0  78.0  91.0  88.0
5  98.0  98.0  68.0  94.0  100.0
编译没问题,但是运行的时候显示run-time error F6101(data)-invaild integer
不知道哪错了本人是Fortran菜鸟一枚,被这个程序弄得焦头烂额,求大神赐教!

作者: 楚香饭    时间: 2014-5-24 17:44
本帖最后由 chuxf 于 2014-5-24 17:47 编辑

给你一些建议:
1.在程序里使用 Implicit None,并且要声明所有变量的名字。(这就是导致你 invaild integer 问题的原因,因为不声明的话,m 会是整数,而数据却是 80.0 )
2.五门课程,请用数组。
3.要写 Program main。
4.你需要比对最大值,你必须使用数组,记录下每一个学生的分数。(这是你犯的最大的错
5.求最大值,最小值。Fortran 有现成的 MinLoc ,MaxLoc ,MinVal,MaxVal 函数。
6.你有一句空读的 read(10,*),这句不需要。(除非输入数据有表头)

[Fortran] 纯文本查看 复制代码
Program www_fcode_cn
  Implicit None
  Integer , parameter :: N = 5 !// 5 个学生
  Integer , parameter :: M = 5 !// 5 门课程
  Integer :: i , x , stuid(1)
  Real :: ct( M , N ) , ctotal( N ) , cavg( N ) !// 分数,总分,平均分
  open(10,file='data')
  open(20,file='x.txt')
  !read(10,*) 这句不要
  write(20,*) "学号 数学 物理 化学 生物 英语 总成绩 平均成绩"
  do i=1,N
    read(10,*) x , ct( : , i ) !// 第 i 个学生的成绩
    ctotal(i) = sum(ct(:,i)) !//总分
    cavg(i) = ctotal(i)/M !//平均分
  enddo
  stuid = MaxLoc(ctotal) !// 获得总分最高的学生编号
  x = stuid(1)
  write(20,200) x , ct( : , x ) , ctotal( x ) , cavg( x )
  200 format(i4,5f6.1,2f8.1)
End Program www_fcode_cn

作者: crrcrr    时间: 2014-5-25 09:53
chuxf 发表于 2014-5-24 17:44
给你一些建议:
1.在程序里使用 Implicit None,并且要声明所有变量的名字。(这就是导致你 invaild intege ...

谢谢大神!!




欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2