fortran程序案例题汇编(14道)

更新时间:2024-04-05 07:11:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

1.Fibonacci数列定义如下: F1=1 F2=1

Fn=Fn-1+Fn-2 (n>2)

求Fibonacci数列的前30项。 integer f(30),i f(1)=1 f(2)=2 do i=3,30

f(i)=f(i-1)+f(i-2) enddo print*,f end

2.输入10个学生的总分,求每个学生的名次 integer s(10),a(10),i,j do i=1,10 read*,s(i) enddo do i=1,10 a(i)=1 do j=1,10

if(s(i)

1

3.给定一组数,按照从小到大的顺序输出。 integer a(10) integer p do i=1,10 read *,a(i) enddo do j=1,9 p=j

do i=j+1,10

if (a(i)

if (p/=j) then

t=a(p);a(p)=a(j);a(j)=t endif enddo

print *,(a(i),i=1,10) end

2

4.输入若干名学生的学号和三门课程(语数英)的成绩,要求从键盘输入一个学生的学号,能打印出该学生的三门功课成绩和总分。 character*6,dimension(:),allocatable::xue integer,dimension(:,:),allocatable::g integer,dimension(:),allocatable::zong integer i,j,n character*6,xh

print *,\请输入学生的个数\read *,n

allocate(xue(n)) allocate(g(n,3)) allocate(zong(n))

do i=1,n

read *,xue(i),(g(i,j),j=1,3) enddo

do i=1,n zong(i)=0 do j=1,3

zong(i)=zong(i)+g(i,j) enddo enddo

print *,\请输入你要打印的学生的学号\read *,xh

do i=1,n

if(xue(i)==xh)then

print *,(g(i,j),j=1,3),zong(i) exit endif enddo end

3

5.编写一个函数子程序计算所输入两个整数m、n的最大公约数。 integer function gcd(m,n) integer r r=mod(m,n) do while (r/=0) m=n n=r

r=mod(m,n) enddo gcd=n end

integer x,y,gcd read*,x,y

print*,gcd(x,y) end

6.用函数子程序的方法设计一个判断某个数是否是素数的程序,统计100~1000内的素数的个数。

logical function prime(n) logical t t=.true. do i=2,n-1

if(mod(n,i)==0)then t=.false. exit endif enddo prime=t end

integer s logical prime s=0

do i=100,1000 if(prime(i))then s=s+1 endif enddo print*,s end

4

7.设计一个子程序,对于自然数m,n,该函数求m,n的最小公倍数。 integer function gcd(m,n) integer r,t t=m*n

r=mod(m,n) do while (r/=0) m=n n=r

r=mod(m,n) enddo gcd=t/n end

integer x,y,gcd print*,\请输入两个数\read*,x,y

print*,gcd(x,y) end

8.对任意自然数n,设计一个求n的各位数字的立方和的子程序,并调用该子程序求100~999之间的所有水仙花数。 subroutine shu(n,t) integer n,i,a,b,c logical t a=n/100

b=mod(n/10,10) c=mod(n,10)

if(a**3+b**3+c**3==n)then t=.true. else t=.false. endif end

logical t

do i=100,999 call shu(i,t) if(t)then print*,i endif enddo end

5

9.设计一个子例行程序SORT(A,N,K),其中A是一个一维数组,N是A的元素个数,SORT的功能是: 当K=1时,将数组A按升序排列;当K=0时,将数组A按降序排列;当K为其它数值时,数组A保持原序。调用该子程序根据不同输入得出数组不同的输出方式。 subroutine sort(a,n,k) integer a(n) integer k,i select case(k) case (0) do i=1,n-1 do j=1,n-I

if(a(j)>a(j+1)) then t=a(j)

a(j)=a(j+1) a(j+1)=t endif enddo enddo case(1) do i=1,n-1 do j=1,n-I

if(a(j)

a(j)=a(j+1) a(j+1)=t endif enddo enddo end select end

real,dimension(:),allocatable::b integer k,n

print*,\请输入要排序的数据数目\read*,n

allocate(b(n))

print *,\请输入这n个数据\read *,(b(i),i=1,n)

print*,\请输入k的值\read *,k

call sort(b,n,k) print *,(b(i),i=1,n) end

6

10.编写一个判断闰年的程序。调用该过程输出2011~2050之间所有的闰年。 function s(n) integer n logical s

if(mod(n,4)==0.and.mod(n,100)/=0.or.mod(n,400)==0)then s=.true. else s=.false. endif end

logical s

do i=2011,2050 if(s(i))then print*,i endif enddo end

7

11.利用子程序机制实现:输入若干名学生的学号和三门课程的成绩;计算每个学生的总分;输出每个学生的学号、三门课程的成绩和总分。 integer,dimension(:,:),allocatable::grade integer,dimension(:),allocatable::zong integer,dimension(:),allocatable::mingci integer m,n read *,m,n

allocate (grade(m,n)) allocate(zong(m)) allocate(mingci(m)) call input(grade,m,n)

call sum1(grade,m,n,zong) call qiuming(zong,m,mingci)

call output(grade,m,n,zong,mingci) end

subroutine input(grade,m,n) integer grade(m,n) print *,\请输入成绩\do i=1,m

read *,(grade(i,j),j=1,n) enddo end

subroutine sum1(grade,m,n,zong) integer grade(m,n) integer zong(m) zong=0 do i=1,m do j=1,n

zong(i)=zong(i)+grade(i,j) enddo enddo end

subroutine qiuming(zong,m,mingci) integer zong(m) integer mingci(m) mingci=1 do i=1,m do j=1,m

if(zong(i)

8

endif enddo enddo end

subroutine output(grade,m,n,zong,mingci) integer grade(m,n) integer zong(m) integer mingci(m) do i=1,m

print *,(grade(i,j),j=1,n) ,zong(i),mingci(i) enddo end

12.利用递归函数方法实现:求n!;然后调用该函数求

x2x4x6 cos(x)?1?

2!?4!?6!?... 直到最后一项?10?6.integer recursive function fac(n) result(f) if(n==1) then

f=1 else

f=n*fac(n-1) endif end

parameter(pi=3.1416926) real x,s integer n,f s=1

print*,\请输入角度值\read*,x x=x*pi/180 f=-1 n=2

do while(abs(f*x**n/fac(n)>1e-6) s=s+f*x**n/fac(n) n=n+2 f=-f enddo print*,s end

9

13.输入10名学生的学号、姓名、性别和一门课程的成绩,要求打印出不及格学生的所有信息。 type s

character*11 num character*8 name logical sex real grade end type type(s) g(10) integer i,j

print*,\请输入学生的基本信息\do i=1,10

read*,g(i).num,g(i).name,g(i).sex,g(i).grade enddo do i=1,10

if(g(i).grade<60)then j=i endif enddo

print*,g(j).num,g(j).name,g(j).sex,g(j).grade end

10

14.已知职工工资表记录包括:职工号,姓名,年龄、职称、工资,建立一个10个职工组成的记录表,打印输出职工中工资最高者和最低者所有信息,以及工资总额和平均工资。 type emp

character*6 num character*8 name integer age

character*16 zhichen real wage endtype

type(emp) s(10) integer i

real max,min,sum,avg

print*,\请输入职工的基本信息\do i=1,10

read *,s(i).num,s(i).name,s(i).age,s(i).zhichen,s(i).wage enddo

max=s(1).wage;j=1 do i=2,10

if(max

max=s(1).wage;k=1 do i=2,10

if(min>s(i).wage)then min=s(i).wage k=i endif enddo sum=0 do i=1,10

sum=sum+s(i).wage enddo

avg=sum/10

print *,\输出最高工资的职工信息\

print *,s(j).num,s(j).name,s(j).age,s(j).zhichen,s(j).wage print *,\输出最低工资的职工信息\

print *,s(k).num,s(k).name,s(k).age,s(k).zhichen,s(k).wage print *,\输出工资总额和平均值\print *,sum,avg end

11

14.已知职工工资表记录包括:职工号,姓名,年龄、职称、工资,建立一个10个职工组成的记录表,打印输出职工中工资最高者和最低者所有信息,以及工资总额和平均工资。 type emp

character*6 num character*8 name integer age

character*16 zhichen real wage endtype

type(emp) s(10) integer i

real max,min,sum,avg

print*,\请输入职工的基本信息\do i=1,10

read *,s(i).num,s(i).name,s(i).age,s(i).zhichen,s(i).wage enddo

max=s(1).wage;j=1 do i=2,10

if(max

max=s(1).wage;k=1 do i=2,10

if(min>s(i).wage)then min=s(i).wage k=i endif enddo sum=0 do i=1,10

sum=sum+s(i).wage enddo

avg=sum/10

print *,\输出最高工资的职工信息\

print *,s(j).num,s(j).name,s(j).age,s(j).zhichen,s(j).wage print *,\输出最低工资的职工信息\

print *,s(k).num,s(k).name,s(k).age,s(k).zhichen,s(k).wage print *,\输出工资总额和平均值\print *,sum,avg end

11

本文来源:https://www.bwwdw.com/article/x9xr.html

Top