
运行fortran程序时出现这个错误,看不懂..谁知道错在哪了吗?
Linking...exam.obj:errorLNK2001:unresolvedexternalsymbol_SUBROUTINE@4Debug/exam.exe:f...
Linking...
exam.obj : error LNK2001: unresolved external symbol _SUBROUTINE@4
Debug/exam.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.
exam.exe - 2 error(s), 0 warning(s)
这是我写的程序:
module stud
type student
integer :: num,hight,weigh
integer :: chinese,math,english,chem,total,average
real :: averh,averw
character(len=8) :: sex
end type
end module
program main
implicit none
integer :: n
call subroutine(n)
end
subroutine sort(n)
use stud
implicit none
integer i,j,k,q,n
type(student) :: s(n)
type(student) :: total,average
type(student) :: swap
type(student) :: sex
character(len=8) :: sexs
real,dimension(2) ::t=0,sumh=0,sumw=0,averh=0,averw=0,variance=0,r
open(1,file='information.txt')
open(2,file='calculate.txt')
open(3,file='rank.txt')
open(8,file='relate.txt')
read(1,*)
write(2,'(9a8)') 'num', 'sex','hight','weigh','chinese','math','english','chem','total','average'
write(3,'(9a8)') 'num', 'chinese','math','english','chem','total','average'
do i=1,20
read(1,*) s(i)%num,s(i)%sex,s(i)%hight,s(i)%weigh,s(i)%chinese,s(i)%math,s(i)%english,s(i)%chem
s(i)%total=s(i)%chinese+s(i)%math+s(i)%english+s(i)%chem
s(i)%average=s(i)%total/4
write(2,'(9i8)') s(i)%average,s(i)%total
end do
write(*,*)'please input the sex of the student you want to check:'
read(*,*) sexs
select case(sexs)
case('female')
do k=1,7
do j=k+1,8
if(s(k)%total<=s(j)%total)then
swap=s(k)
s(k)=s(j)
s(j)=swap
end if
end do
end do
do q=1,8
write(3,'(9i8)') s(q)%num,s(q)%chinese,s(q)%math,s(q)%english,s(q)%chem,s(q)%average,s(q)%total
end do
case('male')
do k=1,11
do j=k+1,12
if(s(k)%total<=s(j)%total)then
swap=s(k)
s(k)=s(j)
s(j)=swap
end if
end do
end do
do q=1,12
write(3,'(9i8)') s(q)%num,s(q)%chinese,s(q)%math,s(q)%english,s(q)%chem,s(q)%average,s(q)%total
end do
end select
do i=1,20
sumh=sumh+s(i)%hight
sumw=sumw+s(i)%weigh
averh=sumh/20
averw=sumw/20
t=t+(averh-s(i)%hight)*(averw-s(i)%weigh)
variance(1)=sqrt(variance(1)+(averh(1)-s(i)%hight)**2)
variance(2)=sqrt(variance(2)+(averw(2)-s(i)%weigh)**2)
end do
r=t/(variance(1)*variance(2))
write(8,"(A9,8f9.2)") "r=",r
end subroutine 展开
exam.obj : error LNK2001: unresolved external symbol _SUBROUTINE@4
Debug/exam.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.
exam.exe - 2 error(s), 0 warning(s)
这是我写的程序:
module stud
type student
integer :: num,hight,weigh
integer :: chinese,math,english,chem,total,average
real :: averh,averw
character(len=8) :: sex
end type
end module
program main
implicit none
integer :: n
call subroutine(n)
end
subroutine sort(n)
use stud
implicit none
integer i,j,k,q,n
type(student) :: s(n)
type(student) :: total,average
type(student) :: swap
type(student) :: sex
character(len=8) :: sexs
real,dimension(2) ::t=0,sumh=0,sumw=0,averh=0,averw=0,variance=0,r
open(1,file='information.txt')
open(2,file='calculate.txt')
open(3,file='rank.txt')
open(8,file='relate.txt')
read(1,*)
write(2,'(9a8)') 'num', 'sex','hight','weigh','chinese','math','english','chem','total','average'
write(3,'(9a8)') 'num', 'chinese','math','english','chem','total','average'
do i=1,20
read(1,*) s(i)%num,s(i)%sex,s(i)%hight,s(i)%weigh,s(i)%chinese,s(i)%math,s(i)%english,s(i)%chem
s(i)%total=s(i)%chinese+s(i)%math+s(i)%english+s(i)%chem
s(i)%average=s(i)%total/4
write(2,'(9i8)') s(i)%average,s(i)%total
end do
write(*,*)'please input the sex of the student you want to check:'
read(*,*) sexs
select case(sexs)
case('female')
do k=1,7
do j=k+1,8
if(s(k)%total<=s(j)%total)then
swap=s(k)
s(k)=s(j)
s(j)=swap
end if
end do
end do
do q=1,8
write(3,'(9i8)') s(q)%num,s(q)%chinese,s(q)%math,s(q)%english,s(q)%chem,s(q)%average,s(q)%total
end do
case('male')
do k=1,11
do j=k+1,12
if(s(k)%total<=s(j)%total)then
swap=s(k)
s(k)=s(j)
s(j)=swap
end if
end do
end do
do q=1,12
write(3,'(9i8)') s(q)%num,s(q)%chinese,s(q)%math,s(q)%english,s(q)%chem,s(q)%average,s(q)%total
end do
end select
do i=1,20
sumh=sumh+s(i)%hight
sumw=sumw+s(i)%weigh
averh=sumh/20
averw=sumw/20
t=t+(averh-s(i)%hight)*(averw-s(i)%weigh)
variance(1)=sqrt(variance(1)+(averh(1)-s(i)%hight)**2)
variance(2)=sqrt(variance(2)+(averw(2)-s(i)%weigh)**2)
end do
r=t/(variance(1)*variance(2))
write(8,"(A9,8f9.2)") "r=",r
end subroutine 展开
1个回答
展开全部
program main
implicit none
integer :: n
!---------这里应该给n赋好值,再调用,如:n=20,或者从键盘读入read(*,*)n
call subroutine(n) ! subroutine调用不是你这样写的,应改成call sort(n)
end
subroutine sort(n)
use stud
implicit none
integer i,j,k,q,n
type(student) :: s(n)
! 以下三行代码说明你对type自定义类型不太懂,彭国伦那本教材上有类似的,要多看看就清楚了
type(student) :: total,average !应改为 real::total,average
type(student) :: swap !应改为 real:: swap
type(student) :: sex !应改为 character(len=20)::sex 后文也未用到该变量可以删去
!其它诸多小错误,不再一一指出,仅举一例:如这一句,所有的变量都被声明为数组,但很明显不是作者本意。
real,dimension(2) ::t=0,sumh=0,sumw=0,averh=0,averw=0,variance=0,r
!建议:基础要及时打牢才能编好这种程序。
implicit none
integer :: n
!---------这里应该给n赋好值,再调用,如:n=20,或者从键盘读入read(*,*)n
call subroutine(n) ! subroutine调用不是你这样写的,应改成call sort(n)
end
subroutine sort(n)
use stud
implicit none
integer i,j,k,q,n
type(student) :: s(n)
! 以下三行代码说明你对type自定义类型不太懂,彭国伦那本教材上有类似的,要多看看就清楚了
type(student) :: total,average !应改为 real::total,average
type(student) :: swap !应改为 real:: swap
type(student) :: sex !应改为 character(len=20)::sex 后文也未用到该变量可以删去
!其它诸多小错误,不再一一指出,仅举一例:如这一句,所有的变量都被声明为数组,但很明显不是作者本意。
real,dimension(2) ::t=0,sumh=0,sumw=0,averh=0,averw=0,variance=0,r
!建议:基础要及时打牢才能编好这种程序。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询