fortran95程序设计课后习题答案版方便学习资料.docx

上传人:蓝**** 文档编号:95236882 上传时间:2023-08-20 格式:DOCX 页数:7 大小:18.45KB
返回 下载 相关 举报
fortran95程序设计课后习题答案版方便学习资料.docx_第1页
第1页 / 共7页
fortran95程序设计课后习题答案版方便学习资料.docx_第2页
第2页 / 共7页
点击查看更多>>
资源描述

《fortran95程序设计课后习题答案版方便学习资料.docx》由会员分享,可在线阅读,更多相关《fortran95程序设计课后习题答案版方便学习资料.docx(7页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、fortran95程序设计课后习题答案第四章1.program main implicit none write(*,*) Have a good time. write(*,*) Thats not bad. write(*,*) Mary isnt my name. end program 2.program main real, parameter : PI=3 implicit none.14159 real radius write(*,*) 请输入半径长 read(*,*) radius write(*,( 面积=f8. 3) radius*radius*PI end progra

2、m 3.program main implicit none real grades write(*,*) 请输入成绩 read(*,*) grades write(*,( 调整后成绩为 f8.3) SQRT(grades)*10.0 end program 4.integer a,b real ra,rb a=2 b=3 ra=2.0 rb=3.0 write(*,*) b/a ! 输出1, 因为使用整数计算, 小数部分会无条件舍去 write(*,*) rb/ra ! 输出1.5 5.program main implicit none type distance real meter,

3、inch, cm end type type(distance) : d write(*,*) 请输入长度: read(*,*) d%meter d%cm = d%meter*100 d%inch = d%cm/2.54 write(*,(f8.3米 =f8.3厘米 =f8.3英寸) d%meter, d%cm, d%inch end program 第五章1.program main implicit none integer money real tax write(*,*) 请输入月收入 read(*,*) money if ( money1000 ) then tax = 0.03 e

4、lse if ( money5000) then tax = 0.1 else tax = 0.15 end if write(*,( 税金为 I8) nint(money*tax) end program 2.program main implicit none integer day character(len=20) : tv write(*,*) 请输入星期几 read(*,*) day select case(day) case(1,4) tv = 新闻 case(2,5) tv = 电视剧 case(3,6) tv = 卡通 case(7) tv = 电影 case default

5、 write(*,*) 错误的输入 stop end select write(*,*) tv end program 3.program main implicit none integer age, money real tax write(*,*) 请输入年龄 read(*,*) age write(*,*) 请输入月收入 read(*,*) money if ( age50 ) then if ( money1000 ) then tax = 0.03 else if ( money5000 )then tax = 0.10 else tax = 0.15 end if else if

6、 ( money1000 ) then tax = 0.5 else if ( money5000 )then tax = 0.7 else tax = 0.10 end if end if write(*,( 税金为 I8) nint(money*tax) end program 4.program main implicit none integer year, days logical mod_4, mod_100, mod_400 write(*,*) 请输入年份 read(*,*) year mod_4 = ( MOD(year,4) = 0 ) mod_100 = ( MOD(ye

7、ar,100) = 0 ) mod_400 = ( MOD(year,400) = 0 ) if ( (mod_4 .NEQV. mod_100) .or. mod_400 ) then days = 366 else days = 365 end if write(*,(这一年有I3天) days stop end program 第六章1.program main implicit none integer i do i=1,5 write(*,*) Fortran end do stop end program 2.program main implicit none integer i

8、,sum sum = 0 do i=1,99,2 sum = sum+i end do write(*,*) sum stop end program 3.program main implicit none integer, parameter : answer = 45 integer, parameter : max = 5 integer weight, i do i=1,max write(*,*) 请输入体重 read(*,*) weight if ( weight=answer ) exit end do if ( i=max ) then write(*,*) 猜对了 else

9、 write(*,*) 猜错了 end if stop end program 4.program main implicit none integer, parameter : max=10 integer i real item real ans ans = 1.0 item = 1.0 do i=2,max item = item/real(i) ans = ans+item end do write(*,*) ans stop end program 5.program main implicit none integer, parameter : length = 79 charac

10、ter(len=length) : input, output integer i,j write(*,*) 请输入一个字串 read(*,(A79) input j=1 do i=1, len_trim(input) if ( input(i:i) /= ) then output(j:j)=input(i:i) j=j+1 end if end do write(*,(A79) output stop end program 第七章1.program main implicit none integer, parameter : max = 10 integer i integer : a

11、(max) = (/ (2*i, i=1,10) /) integer : t ! sum()是fortran库函数 write(*,*) real(sum(a)/real(max) stop end program 2.integer a(5,5) ! 5*5=25 integer b(2,3,4) ! 2*3*4=24 integer c(3,4,5,6) ! 3*4*5*6=360 integer d(-5:5) ! 11 integer e(-3:3, -3:3) ! 7*7=49 3.program main implicit none integer, parameter : ma

12、x=10 integer f(max) integer i f(1)=0 f(2)=1 do i=3,max f(i)=f(i-1)+f(i-2) end do write(*,(10I4) f stop end program 4.program main implicit none integer, parameter : size=10 integer : a(size) = (/ 5,3,6,4,8,7,1,9,2,10 /) integer : i,j integer : t do i=1, size-1 do j=i+1, size if ( a(i) a(j) ) then !

13、a(i)跟a(j)交换 t=a(i) a(i)=a(j) a(j)=t end if end do end do write(*,(10I4) a stop end 5.a(2,2) ! 1+(2-1)+(2-1)*(5) = 7 a(3,3) ! 1+(3-1)+(3-1)*(5) = 13 第八章1.program main implicit none real radius, area write(*,*) 请输入半径长 read(*,*) radius call CircleArea(radius, area) write(*,( 面积 = F8.3) area stop end pr

14、ogram subroutine CircleArea(radius, area) implicit none real, parameter : PI=3.14159 real radius, area area = radius*radius*PI return end subroutine 2.program main implicit none real radius real, external : CircleArea write(*,*) 请输入半径长 read(*,*) radius write(*,( 面积 = F8.3) CircleArea(radius) stop en

15、d program real function CircleArea(radius) implicit none real, parameter : PI=3.14159 real radius CircleArea = radius*radius*PI return end function 3.program main implicit none call bar(3) call bar(10) stop end program subroutine bar(length) implicit none integer, intent(in) : length integer i chara

16、cter(len=79) : string string= do i=1,length string(i:i)=* end do write(*,(A79) string return end subroutine 4.program main implicit none integer, external : add write(*,*) add(100) end program recursive integer function add(n) result(sum) implicit none integer, intent(in) : n if ( n0 ) then sum=0 re

17、turn else if ( n=1 ) then sum=n return end if sum = n + add(n-1) return end function 5.program main implicit none integer, external : gcd write(*,*) gcd(18,12) end program integer function gcd(A,B) implicit none integer A,B,BIG,SMALL,TEMP BIG=max(A,B) SMALL=min(A,B) do while( SMALL /= 1 ) TEMP=mod(B

18、IG,SMALL) if ( TEMP=0 ) exit BIG=SMALL SMALL=TEMP end do gcd=SMALL return end function 6.program main use TextGraphLib implicit none integer, parameter : maxx=60, maxy=20 real, parameter : StartX=0.0, EndX=3.14159*2.0 real, parameter : xinc = (EndX-StartX)/(maxx-1) real x integer i,px,py call SetScr

19、een(60,20) call SetCurrentChar(*) x=StartX do px=1,maxx py = (maxy/2)*sin(x)+maxy/2+1 call PutChar(px,py) x=x+xinc end docall UpdateScreen() stop end program 第九章1.program main implicit none character(len=79) : filename character(len=79) : buffer integer, parameter : fileid = 10 integer count integer

20、 : status = 0 logical alive write(*,*) Filename: read (*,(A79) filename inquire( file=filename, exist=alive) if ( alive ) then open(unit=fileid, file=filename, & access=sequential, status=old) count = 0 do while(.true.) read(unit=fileid, fmt=(A79), iostat=status ) buffer if ( status/=0 ) exit ! 没有资料

21、就跳出循环 write(*,(A79) buffer count = count+1 if ( count=24 ) then pause count = 0 end if end do else write(*,*) TRIM(filename), doesnt exist. end if stop end 2.program main implicit none character(len=79) : filename character(len=79) : buffer integer, parameter : fileid = 10 integer i integer : status

22、 = 0 logical alive write(*,*) Filename: read (*,(A79) filename inquire( file=filename, exist=alive) if ( alive ) then open(unit=fileid, file=filename, & access=sequential, status=old) do while(.true.) read(unit=fileid, fmt=(A79), iostat=status ) buffer if ( status/=0 ) exit ! 没有资料就跳出循环 do i=1, len_t

23、rim(buffer) buffer(i:i) = char( ichar(buffer(i:i)-3 ) end do write(*,(A70) buffer end do else write(*,*) TRIM(filename), doesnt exist. end if stop end 3.program main implicit none type student integer chinese, english, math, science, social, total end type type(student) : s, total integer, parameter

24、 : students=20, subjects=5 integer i open(10,file=grades.bin,access=direct,recl=1) write(*,(7A10) 座号,中文,英文,数学,自然,社会,总分 total = student(0,0,0,0,0,0) do i=1, students read(10,rec=(i-1)*subjects+1) s%chinese read(10,rec=(i-1)*subjects+2) s%english read(10,rec=(i-1)*subjects+3) s%math read(10,rec=(i-1)*

25、subjects+4) s%science read(10,rec=(i-1)*subjects+5) s%social s%total = s%chinese+s%english+s%math+s%science+s%social total%chinese = total%chinese+s%chinese total%english = total%english+s%english total%math = total%math+s%math total%science = total%science+s%science total%social = total%social+s%so

26、cial total%total = total%total+s%total write(*,(7I10) i, s end do write(*,(A10,6F10.3) 平均, & real(total%chinese)/real(students),& real(total%english)/real(students),& real(total%math)/real(students),& real(total%science)/real(students),& real(total%social)/real(students),& real(total%total)/real(stu

27、dents) stop end 4.program main implicit none character(len=79) : filename character(len=79) : buffer integer, parameter : fileid = 10 integer i integer : status = 0 logical alive write(*,*) Filename: read (*,(A79) filename inquire( file=filename, exist=alive) if ( alive ) then open(unit=fileid, file

28、=filename, & access=sequential, status=old) do while(.true.) read(unit=fileid, fmt=(A79), iostat=status ) buffer if ( status/=0 ) exit ! 没有数据就跳出循环 do i=1, len_trim(buffer) buffer(i:i) = char( ichar(buffer(i:i)-(mod(i-1,3)+1) ) end do write(*,(A70) buffer end do else write(*,*) TRIM(filename), doesnt

29、 exist. end if stop end 5.module typedef type student integer : num integer : Chinese, English, Math, Natural, Social integer : total integer : rank end type end module program main use typedef implicit none integer, parameter : fileid=10 integer, parameter : students=20 character(len=80) : tempstr

30、type(student) : s(students) ! 储存学生成绩 type(student) : total ! 计算平均分数用 integer i, num, error open(fileid, file=grades.txt,status=old, iostat=error) if ( error/=0 ) then write(*,*) Open grades.txt fail. stop end if read(fileid, (A80) tempstr ! 读入第一行文字 total=student(0,0,0,0,0,0,0,0) ! 用循环读入每位学生的成绩 do i=

31、1,students read(fileid,*) s(i)%num, s(i)%Chinese, s(i)%English, & s(i)%Math, s(i)%Natural, s(i)%Social ! 计算总分 s(i)%Total = s(i)%Chinese + s(i)%English + & s(i)%Math + s(i)%Natural + s(i)%Social ! 累加上各科的分数, 计算各科平均时使用 total%Chinese = total%Chinese + s(i)%Chinese total%English = total%English + s(i)%En

32、glish total%Math = total%Math + s(i)%Math total%Natural = total%Natural + s(i)%Natural total%Social = total%Social + s(i)%Social total%Total = total%Total + s(i)%Total end do call sort(s,students) ! 重新输出每位学生成绩 write(*,(8A7) 座号,中文,英文,数学,自然,社会,总分,名次 do i=1,students write(*,(8I7) s(i) end do ! 计算并输出平圴分

33、数 write(*,(A7,6F7.1) 平均, & real(total%Chinese)/real(students),& real(total%English)/real(students),& real(total%Math) /real(students),& real(total%Natural)/real(students),& real(total%Social) /real(students),& real(total%Total) /real(students) stop end program subroutine sort(s,n) use typedef implic

34、it none integer n type(student) : s(n), t integer i,j do i=1,n-1 do j=i+1,n if ( s(i)%total a write(*,*) p ! 1 p=b write(*,*) p ! 2 p=c p=5 write(*,*) c ! 5 3.module linklist type student integer : num integer : Chinese, English, Math, Science, Social end type type datalink type(student) : item type

35、(datalink), pointer : next end type contains function SearchList(num, head) implicit none integer : num type(datalink), pointer : head, p type(datalink), pointer : SearchList p=head nullify(SearchList) do while( associated(p) ) if ( p%item%num=num ) then SearchList = p return end if p=p%next end do

36、return end function end module linklist program ex1016 use linklist implicit none character(len=20) : filename character(len=80) : tempstr type(datalink), pointer : head type(datalink), pointer : p type(student), allocatable : s(:) integer i,error,size write(*,*) filename: read(*,*) filename open(10

37、, file=filename, status=old, iostat=error) if ( error/=0 ) then write(*,*) Open file fail! stop end if allocate(head) nullify(head%next) p=head size=0 read(10, (A80) tempstr ! 读入第一行字符串, 不需要处理它 ! 读入每一位学生的成绩 do while(.true.) read(10,fmt=*, iostat=error) p%item if ( error/=0 ) exit size=size+1 allocate

38、(p%next, stat=error) ! 新增下一个数据 if ( error/=0 ) then write(*,*) Out of memory! stop end if p=p%next ! 移动到链表的下一个数据 nullify(p%next) end do write(*,(总共有,I3,位学生) size allocate( s(size) ) p=head do i=1,size s(i)=p%item p=p%next end do do while(.true.) write(*,*) 要查询几号同学的成绩? read (*,*) i if ( isize ) exit

39、! 输入不合理的座号 write(*,(5(A6,I3) 中文,s(i)%Chinese,& 英文,s(i)%English,& 数学,s(i)%Math,& 自然,s(i)%Science,& 社会,s(i)%Social end do write(*,(座号,I3,不存在, 程序结束.) i stop end program 4.module typedef implicit none type : datalink integer : i type(datalink), pointer : next end type datalink end module typedef program

40、 ex1012 use typedef implicit none type(datalink) , pointer : p, head, next integer : i,n,err write(*,*) Input N: read(*,*) n allocate( head ) head%i=1 nullify(head%next) p=head do i=2,n allocate( p%next, stat=err ) if ( err /= 0 ) then write(*,*) Out of memory! stop end if p=p%next p%i=i end do nullify(p%next) p=head do while(associated(p) write(*, (i5) ) p%i p=p%next end do ! 释放链表的存储空间 p=head do while(associated(p) next = p%next deallocate(p) p=next end do stop end program 第十一章1.module utility implicit no

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 初中资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com