fortran作业

发布 2023-05-19 15:58:28 阅读 3072

工程分析程序设计上机作业(六)

上机目的:练习派生类型的定义、构造、初始化,成员的调用和操作,操作符的重载,指针。

1、 构造一个由年、月、日组成的派生类型,并编写程序,实现从键盘上输入年、月、日,由程序计算出是当年度的第几天。例如:

输入:2011, 4, 8

输出:4月8日是2023年的第98天。

注意:需考虑闰年的情形。

program main

type date

integer year,month,day

end type

integer ::a(12)=(31,28,31,30,31,30,31,31,30,31,30,31/)

type(date)::d1

integer ans

print*,'请输入年:'

read(*,

print*,'请输入月:'

read(*,

print*,'请输入日:'

read(*,

ans=0do i=1,ans = ans + a(i)

end do

ans = ans +

if ( 2 .and. =29) then

ans = ans

elseif ( mod( =0 ) then

if ( mod( =0 ) then

if ( mod( =0 ) then

ans = ans + 1

elseans = ans

end if

elseans = ans + 1

end if

elseans = ans

end if

end if

print*,'月','日是','年的第',ans,'天'

end program

2、 设计一个“-”操作符的重载,把集合a中那些同时又出现在集合b中的元素去掉。

module minus

type::set

character(50) element

end type

interface operator(-)

module procedure minus1

end interface

contains

function minus1(s1,s2)

type(set),intent(in)::s1,s2

type(set) minus1

k=1do i=1,50

loop1: do j=1,50

if ( s1%element(i:i) =s2%element(j:j) )exit loop1

if (j== s2%element(j:j)) then

minus1%element(k:k) =s1%element(i:i)

k = k+1

end if

end do loop1

end do

do l=k,50

minus1%element(l:l)="0"

end do

end function minus1

end module

program main

use minus

integer m,n

type(set)::s1,s2,s3

print*,'please input the number of s1:'

read*,m

do i=1,m

print*,'please input the',i,'element of s1:'

read*,s1%element(i:i)

end do

print*,'please input the number of s2:'

read*,n

do j=1,n

print*,'please input the',j,'element of s2:'

read*,s2%element(j:j)

end do

s3=s1-s2

do k=1,m

if (s3%element(k:k)==0') exit

end do

print*,s3%element(1:k-1)

end program

3、 编写一程序用四阶龙格-库塔法求解微分方程,当x=0时,y=1.0。试求出x=0.

1, 0.2, 0.3, 0.

4….,1.0,…,100时的y值。

算法如下:求解,定解条件:x=x0,y=y0。

已知。要求:1)把结果按 x1, y1

x2, y2

的排列顺序输出到一个无格式文档中,一个有格式文档注意比较两个文档占用存储空间的大小。

program main

implicit none

real(8) x(1001),y(1001)

real(8) k(4)

real(8) h

integer i,n

open(2,file=''form='unformatted')

open(1,file=''form='formatted')

x(1)=0

y(1)=1

h=0.1n=1001

do i=2,n

x(i)=(i-1)*0.1

k(1)=h*f(x(i-1),y(i-1))

k(2)=h*f(x(i-1)+h/2,y(i-1)+k(1)/2)

k(3)=h*f(x(i-1)+h/2,y(i-1)+k(2)/2)

k(4)=h*f(x(i-1)+h/2,y(i-1)+h*k(3))

y(i)=y(i-1)+1.0/6.0*(k(1)+2*k(2)+2*k(3)+k(4))

write(1,*)x(i),y(i)

write(2)x(i),y(i)

end do

close(1)

close(2)

contains

function f(a,b)

real(8) a,b,f

f= b-2.0*a/b

end function

end program main

2)编写另一个程序,从上述文档中提取出数据,然后找出这个函数的最大值ymax,和最大值所在的xmax,以及函数的最小值ymin,和最小值所在的xmin,从屏幕上输出。寻找最大值和最小值的算法要求用指针完成:设定一个最大值指针ymax和xmax,开始指向第一个y值和x值。

然后提取下一个y值与指针指向的数值进行比较,如果更大,则令指针指向新的y值和对应的x值,如此扫描所有数据,指针指向的最后的数值,就是所求的数值。

program main

integer i

real(8),pointer::pmaxy,pmaxx,pminx,pminy

real(8),target ::x(1002),y(1002)

open(1,file=''form='formatted')

i=2read(1,*)x(1),y(1)

pmaxx=>x(1)

pmaxy=>y(1)

pminx=>x(1)

pminy=>y(1)

do while(io==0)

read(1,*,iostat=io)x(i),y(i)

if (io/=0)exit

if (y(i)>pmaxy) then

pmaxy=>y(i)

pmaxx=>x(i)

end if

if (y(i)pminy=>y(i)

pminx=>x(i)

end if

i=i+1end do

write(*,pmaxx,pmaxy

write(*,pminx,pminy

close(1)

end program main

选作:4、 有n个人围成一圈,从第一个人开始报数(1-3报数),凡报到3退出圈子,问最后留下的是原来第几号位的,要求用单链表完成。

西安交大Fortran上机作业

工程分析程序设计上机作业 七 上机目的 练习c语言的书写 循环和判断结构。1.编写程序实现摄氏度和华氏度的相互转换 include main float c,f printf 请输入摄氏度 scanf f c f c 9 5.0 32 printf 华氏度为 f f 2.打印出6行杨辉三角形如下图 ...

西安交大Fortran上机作业

工程分析程序设计上机作业 三 结构化编程 循环。上机目的 练习使用选择结构编制程序。1 编写一个程序,判断一个整数是否素数。program main implicit none integer x,y,n,k k 0print 请输入一个整数x read x do n 1,x y mod x,n i...

fortran95作业答案

fortran90程序设计。麒麟火小组 作业 一 求一元方程的根。1.采用语句函数或函数子程序定义一元方程 2.程序采用以下多种方法求方程的根 牛顿迭代法,二分法,迭代法。程序利用控制变量 如nmethod 来选择计算方法。program frist一个可以选择子程序的主程序。integer xuh...