工程分析程序设计上机作业(六)
上机目的:练习派生类型的定义、构造、初始化,成员的调用和操作,操作符的重载,指针。
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...