Fortran作业期末复习西南交大.docx
《Fortran作业期末复习西南交大.docx》由会员分享,可在线阅读,更多相关《Fortran作业期末复习西南交大.docx(14页珍藏版)》请在冰豆网上搜索。
Fortran作业期末复习西南交大
编写两个子程序,分别求两个整数的最大公约数和最小公倍数,并编写主程序调用这两个子程序,输出结果
programx
integerm,n,s
write(*,*)"请输入两个数:
"
read(*,*)m,n
s=m*n
callacb(n,m)
callasd(n,m,s)
end
subroutineacb(n,m)
integertemp
if(mtemp=m;m=n;n=temp
endif
dowhile(mod(m,n)/=0)
temp=n;n=mod(m,n);m=temp
enddo
write(*,"('最大公约数为:
'i4)")n
return
end
subroutineasd(n,m,s)
if(mtemp=m;m=n;n=temp
endif
dowhile(mod(m,n)/=0)
temp=n;n=mod(m,n);m=temp
enddo
write(*,"('最小公倍数为:
'i4)")s/n
return
end
编写一个递归子程序,求Fibonacci数列某项的值。
并编写主程序调用该递归子程序,输出结果。
programx
integern,temp
write(*,*)"输入Fibonacci数列某项数,n大于三"
read(*,*)n
callabc(n)
end
subroutineabc(n)
integeri,j,temp,a(n)
a
(1)=1
a
(2)=1
doi=3,n
a(i)=a(i-1)+a(i-2)
enddo
temp=a(n)
write(*,"('Fibonacci数列n项的值为:
',i8)")temp
return
end
1:
输入10名学生的学号和一门课程的考试成绩,分别存入顺序文件和直接文件中。
每名学生的数据占一个记录。
分别对顺序文件和直接文件进行以下各项操作:
(1)从数据文件中读入数据,然后按学生的成绩优劣放在文件中,每个记录包含一名学生的数据。
(2)把文件中超过平均分的学生学号和记录输出出来。
programx
integera(10),b(10),i,j,tempA,tempB,sum
write(*,*)"请输入10个同学的学号和分数"
read(*,*)(a(i),b(i),i=1,10)
sum=0
doi=1,9
doj=i+1,10
if(b(i)
tempA=a(i)
tempB=b(i)
b(i)=b(j)
a(i)=a(j)
b(j)=tempB
a(j)=tempA
endif
enddo
enddo
doi=1,10
sum=a(i)+sum
enddo
open(unit=2,file='C:
\Users\Administrator\Desktop\f2.txt',status='new',access='sequential',form='formatted')
write(2,*)"按学生的成绩优劣排名"
write(2,"(2i5)")(a(i),b(i),i=1,10)
close
(2)
write(*,*)"超出平均分的有"
doi=1,10
if(b(i)>(sum/10))then
write(*,*)a(i),b(i)
endif
enddo
end
编程建立一个链表,每个节点的值为2,4,6,......,20,在第i个节点后插入一个节点,该节点的值为i+1。
然后删除第j个节点。
Programx
IntegerI,j,n,m,p,a(11)
Doi=1,10
A(i)=i*2
Enddo
m=10
Write(*,*)"请输入需要删除的节点位置i"
Read(*,*)n
DoI=1,m-1
If(n==i)then
m=m+1
doj=m-1,n,-1
A(j+1)=a(j)
enddo
A(i)=i+1
a(m)=a(m-1)+2
endif
Enddo
write(*,*)"插入节点后的数列为"
write(*,*)(a(i),i=1,m)
write(*,*)"请输入删除的节点位置j"
Read(*,*)p
DoI=1,m
If(p==i)then
doj=i,m-1
A(j)=a(j+1)
enddo
m=m-1
endif
Enddo
write(*,*)"删除后的数列为"
write(*,*)(a(i),i=1,m)
end
游泳池栏杆造价,和走廊地板造价
moduleABC
publicD,T,m,x
publicS1,A1
contains
subroutineS1(d,t,x)
integerL1,L2,L
L1=3.14*d*x
L2=3.14*t*x
l=L1+L2
write(*,*)"围栏总造价为",L
return
endsubroutine
subroutineA1(d,t,m)
integerA
A=((3.14)/4)*((d**2)-(t**2))*m
write(*,*)"地板总造价为",A
return
endsubroutine
subroutinesum(d,t,m,x)
integerss,L1,L2,A
L1=3.14*d*x
L2=3.14*t*x
l=L1+L2
A=((3.14)/4)*((d**2)-(t**2))*m
ss=A+L
write(*,*)"总费用为",ss
endsubroutine
endmodule
programx1
useABC
write(*,*)"请输入水池外围栏直径D"
read(*,*)d
write(*,*)"请输入水池内围栏直径T"
read(*,*)t
write(*,*)"请输入围栏造价X/m"
read(*,*)x
write(*,*)"请输入地板造价Y/m"
read(*,*)m
callS1(d,t,x)
callA1(d,t,m)
callsum(d,t,m,x)
stop
end
从a、b数列中,把那些在a中出现又在b中出现的数统统删去。
programmain
integerm1,m2,n1,n2
integera(100),b(100),c(100)
write(*,*)"请输入数组a元素的个数"
read(*,*)m1
write(*,*)"请输入数组b元素的个数"
read(*,*)m2
write(*,*)"请输入a数组"
do10i=1,m1
read(*,*)a(i)
10continue
write(*,*)"请输入b数组"
do20i=1,m2
read(*,*)b(i)
20continue
callquchong(a,m1)
callquchong(b,m2)
n1=m1
n2=m2
calldel(a,b,n1,n2)
pause
end
!
删除每个数组中重复的元素
subroutinequchong(a,n)
integera(n)
integern,j,x,p
p=1
do50while(p<=n)
j=p+1
do60while(j<=n)
if(a(p)==a(j))then
dox=j,n-1
a(x)=a(x+1)
enddo
n=n-1
j=j-1
endif
j=j+1
60continue
p=p+1
50continue
end
subroutinedel(a,b,m,n)
integera(m),b(n)
integerm,n,p
p=1
do50while(p<=m)
do60j=1,n
if(a(p)==b(j))then
dox=j,n-1
b(x)=b(x+1)
enddo
n=n-1
doy=p,m-1
a(y)=a(y+1)
enddo
m=m-1
p=p-1
endif
60continue
p=p+1
50continue
write(*,*)"删除后a数组元素有"
write(*,*)(a(i),i=1,m)
write(*,*)"删除后b数组元素有"
write(*,*)(b(i),i=1,n)
end
编程输出以下的方阵。
1161514131121110
217242312213169
318252211314158
4192021104567
56789
programmain
integerN
integerb(100,100)
write(*,*)"输入螺旋矩阵阶数N"
read(*,*)N
callABC(b,N)
end
subroutineABC(b,n)
integerb(100,100)
integerJ,K,N,I
p=n/2
b(1,1)=1
doK=1,p+1
if(K==1)then
doJ=K,N-K
b(J+1,K)=b(J,K)+1
enddo
else
doJ=K,N+1-K
b(J,K)=b(J-1,K)+1
enddo
endif
doI=K,N-K
b(N+1-K,I+1)=b(N+1-K,I)+1
enddo
doJ=N-K,K,-1
b(J,N+1-K)=b(J+1,N+1-K)+1
enddo
doI=N-K,K+1,-1
b(K,I)=b(K,I+1)+1
enddo
enddo
doi=1,N
write(*,"(i5)")(b(i,j),j=1,N)
enddo
endsubroutine
各个进制数转换为十进制
programx
integern
integerm
write(*,*)"请选择输入16/十六,8/八,2/二进制数"
read(*,*)n
selectcase(n)
case(16)
write(*,*)"请选择输入数据"
read(*,"(z10)")m
write(*,*)"转换为十进制后",m
case(8)
write(*,*)"请选择输入数据"
read(*,"(o10)")m
write(*,*)"转换为十进制后",m
case
(2)
write(*,*)"请选择输入数据"
read(*,"(b10)")m
write(*,*)"转换为十进制后",m
endselect
end