fortran程序案例题汇编14道汇编.docx

上传人:b****9 文档编号:26032948 上传时间:2023-06-17 格式:DOCX 页数:15 大小:21.78KB
下载 相关 举报
fortran程序案例题汇编14道汇编.docx_第1页
第1页 / 共15页
fortran程序案例题汇编14道汇编.docx_第2页
第2页 / 共15页
fortran程序案例题汇编14道汇编.docx_第3页
第3页 / 共15页
fortran程序案例题汇编14道汇编.docx_第4页
第4页 / 共15页
fortran程序案例题汇编14道汇编.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

fortran程序案例题汇编14道汇编.docx

《fortran程序案例题汇编14道汇编.docx》由会员分享,可在线阅读,更多相关《fortran程序案例题汇编14道汇编.docx(15页珍藏版)》请在冰豆网上搜索。

fortran程序案例题汇编14道汇编.docx

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

1.Fibonacci数列定义如下:

 

F1=1 

F2=1 

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

求Fibonacci数列的前30项。

integerf(30),i

f

(1)=1

f

(2)=2

doi=3,30

f(i)=f(i-1)+f(i-2)

enddo

print*,f

end

2.输入10个学生的总分,求每个学生的名次 

integers(10),a(10),i,j

doi=1,10

read*,s(i)

enddo

doi=1,10

a(i)=1

doj=1,10

if(s(i)

enddo

enddo

doi=1,10

print*,s(i),a(i)

enddo

end

3.给定一组数,按照从小到大的顺序输出。

integera(10)

integerp

doi=1,10

read*,a(i)

enddo

doj=1,9

p=j

doi=j+1,10

if(a(i)

enddo

if(p/=j)then

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

endif

enddo

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

end

4.输入若干名学生的学号和三门课程(语数英)的成绩,要求从键盘输入一个学生的学号,能打印出该学生的三门功课成绩和总分。

character*6,dimension(:

),allocatable:

:

xue

integer,dimension(:

:

),allocatable:

:

g

integer,dimension(:

),allocatable:

:

zong

integeri,j,n

character*6,xh

print*,"请输入学生的个数"

read*,n

allocate(xue(n))

allocate(g(n,3))

allocate(zong(n))

doi=1,n

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

enddo

doi=1,n

zong(i)=0

doj=1,3

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

enddo

enddo

print*,"请输入你要打印的学生的学号"

read*,xh

doi=1,n

if(xue(i)==xh)then

print*,(g(i,j),j=1,3),zong(i)

exit

endif

enddo

end

5.编写一个函数子程序计算所输入两个整数m、n的最大公约数。

integerfunctiongcd(m,n)

integerr

r=mod(m,n)

dowhile(r/=0)

m=n

n=r

r=mod(m,n)

enddo

gcd=n

end

integerx,y,gcd

read*,x,y

print*,gcd(x,y)

end

 

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

logicalfunctionprime(n)

logicalt

t=.true.

doi=2,n-1

if(mod(n,i)==0)then

t=.false.

exit

endif

enddo

prime=t

end

integers

logicalprime

s=0

doi=100,1000

if(prime(i))then

s=s+1

endif

enddo

print*,s

end

 

7.设计一个子程序,对于自然数m,n,该函数求m,n的最小公倍数。

integerfunctiongcd(m,n)

integerr,t

t=m*n

r=mod(m,n)

dowhile(r/=0)

m=n

n=r

r=mod(m,n)

enddo

gcd=t/n

end

integerx,y,gcd

print*,"请输入两个数"

read*,x,y

print*,gcd(x,y)

end

 

8.对任意自然数n,设计一个求n的各位数字的立方和的子程序,并调用该子程序求100~999之间的所有水仙花数。

subroutineshu(n,t)

integern,i,a,b,c

logicalt

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

logicalt

doi=100,999

callshu(i,t)

if(t)then

print*,i

endif

enddo

end

9.设计一个子例行程序SORT(A,N,K),其中A是一个一维数组,N是A的元素个数,SORT的功能是:

当K=1时,将数组A按升序排列;当K=0时,将数组A按降序排列;当K为其它数值时,数组A保持原序。

调用该子程序根据不同输入得出数组不同的输出方式。

subroutinesort(a,n,k)

integera(n)

integerk,i

selectcase(k)

case(0)

doi=1,n-1

doj=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)

doi=1,n-1

doj=1,n-I

if(a(j)

t=a(j)

a(j)=a(j+1)

a(j+1)=t

endif

enddo

enddo

endselect

end

real,dimension(:

),allocatable:

:

b

integerk,n

print*,"请输入要排序的数据数目"

read*,n

allocate(b(n))

print*,"请输入这n个数据"

read*,(b(i),i=1,n)

print*,"请输入k的值"

read*,k

callsort(b,n,k)

print*,(b(i),i=1,n)

end

 

10.编写一个判断闰年的程序。

调用该过程输出2011~2050之间所有的闰年。

functions(n)

integern

logicals

if(mod(n,4)==0.and.mod(n,100)/=0.or.mod(n,400)==0)then

s=.true.

else

s=.false.

endif

end

logicals

doi=2011,2050

if(s(i))then

print*,i

endif

enddo

end

 

11.利用子程序机制实现:

输入若干名学生的学号和三门课程的成绩;计算每个学生的总分;输出每个学生的学号、三门课程的成绩和总分。

integer,dimension(:

:

),allocatable:

:

grade

integer,dimension(:

),allocatable:

:

zong

integer,dimension(:

),allocatable:

:

mingci

integerm,n

read*,m,n

allocate(grade(m,n))

allocate(zong(m))

allocate(mingci(m))

callinput(grade,m,n)

callsum1(grade,m,n,zong)

callqiuming(zong,m,mingci)

calloutput(grade,m,n,zong,mingci)

end

subroutineinput(grade,m,n)

integergrade(m,n)

print*,"请输入成绩"

doi=1,m

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

enddo

end

subroutinesum1(grade,m,n,zong)

integergrade(m,n)

integerzong(m)

zong=0

doi=1,m

doj=1,n

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

enddo

enddo

end

 

subroutineqiuming(zong,m,mingci)

integerzong(m)

integermingci(m)

mingci=1

doi=1,m

doj=1,m

if(zong(i)

mingci(i)=mingci(i)+1

endif

enddo

enddo

end

subroutineoutput(grade,m,n,zong,mingci)

integergrade(m,n)

integerzong(m)

integermingci(m)

doi=1,m

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

enddo

end

 

12.利用递归函数方法实现:

求n!

;然后调用该函数求

 

integerrecursivefunctionfac(n)result(f)

if(n==1)then

f=1

else

f=n*fac(n-1)

endif

end

parameter(pi=3.1416926)

realx,s

integern,f

s=1

print*,"请输入角度值"

read*,x

x=x*pi/180

f=-1

n=2

dowhile(abs(f*x**n/fac(n)>1e-6)

s=s+f*x**n/fac(n)

n=n+2

f=-f

enddo

print*,s

end

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

types

character*11num

character*8name

logicalsex

realgrade

endtype

type(s)g(10)

integeri,j

print*,"请输入学生的基本信息"

doi=1,10

read*,g(i).num,g(i).name,g(i).sex,g(i).grade

enddo

doi=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

 

14.已知职工工资表记录包括:

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

typeemp

character*6num

character*8name

integerage

character*16zhichen

realwage

endtype

type(emp)s(10)

integeri

realmax,min,sum,avg

print*,"请输入职工的基本信息"

doi=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

doi=2,10

if(max

max=s(i).wage

j=i

endif

enddo

max=s

(1).wage;k=1

doi=2,10

if(min>s(i).wage)then

min=s(i).wage

hangon不挂断;稍等;紧紧握住k=i

endif

enddo

boredadj.厌烦的sum=0

△droopvi.低垂;凋萎;萎靡doi=1,10

victimn.受害者sum=sum+s(i).wage

△surveyn.调查;测验enddo

avg=sum/10

presidentn.总统;会长;校长;行长print*,"输出最高工资的职工信息"

hopefuladj.怀有希望的;有希望的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*,"输出工资总额和平均值"

challengen.挑战print*,sum,avg

△PetertheGreat彼得大帝(俄国皇帝)end

(意大利文艺复兴雕刻家、画家、建筑师和诗人)

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1