FORTRAN课程设计2014级(共14页).doc
精选优质文档-倾情为你奉上程序设计基础Fortran95课程设计任务书一、 课程设计教学目的及基本要求1 了解并掌握程序设计基础的设计方法,具备初步的独立分析和设计能力;2 初步掌握程序设计过程的问题分析、算法设计、程序编码、调试等基本方法和技能;3 提高综合运用所学的理论知识和方法独立分析和解决问题的能力;4 训练用系统的观点和程序设计一般规范进行程序设计开发,培养所应具备的科学的工作方法和作风;5 独立完成或分组完成;6 仅限用Fortran语言编写程序;7 7月11日前完成;8 允许分小组完成,每组最多5人组成,每组提交一份的课程设计报告;9 每个小组需要完成程序设计题目中的两个,其中题1、2、3、4中必选1个;10 每个同学的课程设计报告命名为“学号姓名.doc”,7月11日前“按班级”打成一个压缩包发送任课教师信箱并将纸质课程报告交到办公室。(由班长负责汇总收集提交)二、 课程设计步骤 1 问题分析和任务定义:根据设计题目的要求,充分地分析和理解问题,明确问题要求做什么?(而不是怎么做?)限制条件是什么?2 逻辑设计:对问题描述中涉及的操作对象定义相应的数据类型,并按照以数据结构为中心的原则划分模块,定义主程序模块和各抽象数据类型。逻辑设计的结果应写出每个抽象数据类型的定义(包括数据结构的描述和每个基本操作的功能说明),各个主要模块的算法,并画出模块之间的调用关系图;3 详细设计:定义相应的存储结构并写出各子程序的算法。在这个过程中,要综合考虑程序设计功能,使得程序结构清晰、合理、简单和易于调试,抽象数据类型的实现尽可能做到数据封装,基本操作的规格说明尽可能明确具体。详细设计的结果是对数据结构和基本操作作出进一步的求精,写出数据存储结构的类型定义,写出子程序形式的算法框架;4 程序编码:把详细设计的结果进一步求精为程序设计语言程序。同时加入一些注解,使程序中逻辑概念清楚;5 程序调试与测试:采用自底向上,分模块进行,能够熟练掌握调试工具的功能。调试正确后,认真整理源程序及其注释,形成格式和风格良好的源程序清单和结果;6 结果分析:程序运行结果包括正确的输入及其输出结果和含有错误的输入及其输出结果。算法的时间、空间复杂性分析;可去掉?7 编写课程设计报告,提交一份完整的电子文档和打印文档,文档应包含以下主要内容: 课程设计报告书封面,应给出标题、专业、班级、姓名、学号(包括本组所有同学的姓名及学号)、指导教师和完成日期等信息,封面排版可自行设计; 自动生成目录(要求包括两级目录)参考样式:要求:目录题头用三号黑体字居中书写,隔行书写目录内容。目录中各级题序及题标用小四号黑体字 说明问题及解题的思路说明文本 用FORTRAN语言编写的源程序(必要的变量说明和注释语句); 符合作业要求的输入、输出数据。 尽量使用文件实现输入和输出,并将记事本文件抓图后插入课程设计文本。三、 参考题目1.【设计题目】求一元方程的根问题描述和基本要求:设计选择菜单完成求解一元方程的根。l 要求采用函数子程序定义一元方程,且每位同学选择的一元方程不能相同;l 程序选择以下三种方法(菜单选择)求该方程的根;METHOD = 1 牛顿迭代法METHOD = 2 二分法METHOD = 3 弦截法l 对于不同的近似算法分别编写子程序,精度要求10-6。2.【设计题目】求某函数在某指定区域内的求定积分 问题描述和基本要求:设计选择菜单完成定积分计算l 采用函数子程序定义函数f(X),且每位同学选择的f(x)不能相同;l 程序选择以下三种方法求定积分:METHOD = 1 矩形法METHOD = 2 梯形法METHOD = 3 辛普生法l 对于不同的算法分别编写子程序,选择调用,比较不同方法求解的精度。 根据以上功能要求,设计程序完成,每种方法的输出数据结果都要求显示。3. 【设计题目】求解线性方程组问题描述和基本要求:用高斯消元法求解线性方程组AX=B的解l 其中A为n*n系数矩阵,x为解向量,B为方程组右端等值矩阵。要求程序可以输入求解任意多个未知数的方程组,并附算例及求解结果;l 每位同学的线性方程组不能相同;4.【设计题目】矩阵的操作问题描述和基本要求:设有两个矩阵A=(aij)m×n,B=(bij)p×q1)编写矩阵输入子程序input_mat,通过该子程序完成矩阵的输入并返回保存矩阵的数组和对应矩阵的行数、列数。2)编写矩阵输出子程序output_mat,通过该子程序完成矩阵的输出。3)求矩阵的转置,矩阵的转置A=(aji)n×m,转置前输出原矩阵,转置后输出转置矩阵。4)求矩阵A、B的和。矩阵A和B能够相加的条件是:m=p,n=q;矩阵A和B如果不能相加,请给出提示信息;若能够相加,则求和矩阵C并输出C。C=A+B=(cij)m×n,其中cij=aij+bij5)求矩阵A、B的差。矩阵A和B能够相减的条件是:m=p,n=q;矩阵A和B如果不能相减,请给出提示信息;若能够相减,则求差矩阵C并输出C。C=A-B=(cij)m×n,其中cij=aij-bij6)求矩阵A、B的积。矩阵A和B能够相乘的条件是:p=n;矩阵A和B如果不能相乘,请给出提示信息;若能够相乘,则求积矩阵D并输出D。D=A×B=(dij)m×q,其中dij=aik×bkj,k=1,2,n7)设计一个菜单,具有求矩阵的转置、求矩阵的和、差,求矩阵的积、退出等基本的功能。在求矩阵的和或求矩阵的积时要求能够先提示输入两个矩阵,然后再进行相应的操作。5.【设计题目】纸牌游戏问题描述和基本要求:编号为1-52张牌,正面向上,从第2张开始,以2为基数,是2的倍数的牌翻一次,直到最后一张牌;然后,从第3张开始,以3为基数,是3的倍数的牌翻一次,直到最后一张牌;然后从第4张开始,以4为基数,是4的倍数的牌翻一次, 直到最后一张牌;.再依次5的倍数的牌翻一次,6的,7的 直到 以52为基数的翻过,输出:这时正面向上的牌有哪些?6.【设计题目】排序综合问题描述和基本要求:利用随机函数产生N个随机整数(2000以上),对这些数进行多种方法进行排序。1)至少采用两种方法实现上述问题求解(提示,可采用的方法有插入排序、冒泡排序、选择排序、交换排序等)。并把排序后的结果保存在不同的文件中。2)统计每一种排序方法的性能(以上机运行程序所花费的时间为准进行对比),找出其中两种较快的方法。3)如果采用4种或4种以上的方法者,可适当加分。7.【设计题目】班级成绩考评程序问题描述和基本要求:编写班级学生成绩管理程序1)采用数据文件输入某班级30名同学的学号及各五门课程的成绩;2)求出每名同学的总分、统计各门课程的平均分;3)统计各门课程中高于和低于平均分的人数;4)按总分高低排序,在输出文件中输出名次、学号及总分(按学号顺序输出)。5)分数查询,输入某一同学的学号,输出该生的名次、各门课程的成绩及总分。 6)要求使用结构体,链表或数组等实现上述要求7)采用多种方法且算法正确者,可适当加分8. 【设计题目】数据库简单应用问题描述:某旅游公司有职工15人,现在需要通过计算机管理该公司的人员信息,所开发的程序应当包括:1建立人员基本信息(姓名、性别、出生年月、工龄、基本工资,奖金,总收入等)档案;2能够按照当地个人所得税缴纳办法计算职工应缴纳的个人所得税并记录到员工信息中;3 能够判断某人是否是该公司的员工;4能够按照员工的最终实际收入对员工进行排序,以便对前三名进行表彰。要求采用子程序编程方式编写各个功能模块9. 【设计题目】 计算任意多边形的面积 问题描述和基本要求:假定有一N多边形,N通过输入数据指定(N)=3),以多边形各个顶点的坐标值为输入数据,编写程序实现该多边形面积的计算。1 假定该多边形位于XOY平面2 多边形顶点坐标采用复型数据处理,提示:两个复数的差是两点间的距离;3 利用计算三角形的面积的子程序10. 【设计题目】 打印图形问题描述和基本要求:打印由*组成的各种图案,至少打印5种以上。1 直角三角形形状2 等腰三角形形状3 菱形4 平行四边形5 其他各种形状 11、打印如下形式的N x N 的螺旋方阵 1 16 15 14 13 2 17 24 23 12 3 18 25 22 11 4 19 20 21 10 5 6 7 8 912.设计一程序完成水准测量中的数据处理和平差计算。要求如下: 1.可以处理任意个测量点,可以处理根据菜单选择测量方法(闭合水准路线、附合水准路线、支水准路线) 2.测量数据以文件形式输入,输入数据格式自己设计; 3.根据输入的测量数据,按照工程测量基本原理,计算高差闭合差、分配高差闭合差及最终高程计算结果 4.将计算结果以文件形式输出四、 课程设计考核方法及成绩评定课程设计结束时,要求学生写出课程设计报告(附可运行的源程序),由指导教师根据现场考查(考查任务完成情况)、批阅课程设计报告按百分制给定最终成绩(必要时可进行答辩,以检查学生的实际完成情况)。按照百分制评定成绩:平时表现(20%)、课程设计报告和程序质量可行性(60%),相对应运行结果数据及文件(20%)。第二题 利用梯形法计算f(x)=1/(1+x)的定积分即面积real a,b,h,x,s,s1,f0,f1integer n,iread*,a,b,nh=(b-a)/nx=as=0f0=1.0/(1+x)do i=1,n x=x+h f1=1.0/(1+x) s1=(f0+f1)*h/2 s=s+s1 f0=f1enddoprint*,"定积分为:",send第三题 利用蒙特拉法求(圆周率),主要是随机分配integer(4) ISEEDread*,nm=0do i=1,n x=RAN(ISEED) y=ran(ISEED) IF(X*X+Y*Y<=1) m=m+1enddoprint*,"圆周率为",1.0*m一.排序1.简单交换排序法Parameter(n=10)Integer a(n),tPrint*,输入需要排序的n个数据Read*,ado i=1,n-1 do j=i+1,n if(a(i)>a(j) thent=a(i)a(i)=a(j)a(j)=tendifenddoenddoprint*,原始数据从小到大的顺序排列如下:print 10,a10 format(10i5)end2.选择交换排序法Parameter(n=10)Integer a(n),tPrint*,输入需要排序的n个数据Read*,ado i=1,n-1 p=i do j=i+1,n if(a(j)<a(p) p=jenddot=a(i)a(i)=a(p)a(p)=tenddoprint*,原始数据从小到大的顺序排列如下:print 10,a10 format(10i5)end3.冒泡排序法Parameter(n=10)Integer a(n),tPrint*,输入需要排序的n个数据Read*,ado i=1,n-1 do j=1,n-i if(a(j)>a(j+1) thent=a(j)a(j)=a(j+1)a(j+1)=tendifenddoenddoprint*,原始数据从小到大的顺序排列如下:print 10,a10 format(10i5)end二.派生类型 typeParameter(n=10)Type student_record Integer num,s Real a(3),aveend typeType(student_racord) class(n)Print 100,请输入n个学生的学号和成绩:do i=1,n Read*,class(i)%num,class(i)%a Class(i)%ave=(class(i)%a(1)+ class(i)%a(2)+ class(i)%a(3)/3.0end dodo i=1,nk=0do j=1,n If(class(j)%ave>class(i)%ave) k=k+1 enddo class(i)%s=k+1enddoprint*, print*,按照平均分排名如下:print*,-print*,名次 学号 语文 数学 英语 平均分数do i=1,n do j=1,n if(class(j)%s=i) print 200,class(j)%s,class(j)%num, class(j)%a, class(j)%ave enddoenddo100 format(a,i3,a)200 format(i5,i10,4f8.1)end三、一元方程的解(以f(x)=x ³-2x ²+7x+4=0为例)1.二分法Program exam12-1Real,x1,x2,xReal bisect,funcDo Print*,输入x1,x2的值: Read*,x1,x2 If(func(x1)*func(x2)<0.0) exitEnddox=bisect(x1,x2)print 10,x=,x10 format(a,f15.7)EndReal function bisect(x1,x2)Real x1,x2,x,f1,f2,fxx=(x1+x2)/2.0fx=func(x)do while(abs(fx)>1e-6)f1=func(x1)if(f1*fx<0) then x2=xelse x1=xendifx=(x1+x2)/2.0fx=func(x)enddobisect=xendfunction func(x)real xfunc=x*3-2*x*2+7*x+4end2.弦截法求一元方程的根Program exam12-2Real x1,x2,xReal secant,funcDoPrint*,输入x1,x2的值:Read*,x1,x2 If(func(x1)*func(x2)<0.0) exitEnddox=secant(x1,x2)print 10,x=,x10 format(a,f15.7)EndReal function secant(x1,x2)Real x1,x2,x,f1,f2,fxReal funcx=x2-(x1+x2)/(func(x2)-func(x1)*func(x2)fx=func(x)do while(abs(fx)>1e-6)f1=func(x1)if(f1*fx<0) then x2=xelse x1=xendifx=x2-(x1+x2)/(func(x2)-func(x1)*func(x2)fx=func(x)enddosecant=xendreal function func(x)real xfunc=x*3-2*x*2+7*x+4end3.牛顿迭代法Program exam12-3Real xInteger mPrint*,输入初值Read*,xCall newton(x)Subroutine newton(x) Implicit none Real x,x1 Real func,dfunc Integer i,m i=1x1=x-func(x)/dfunc(x)do while(abs(x-x1)>1e-6) print 10,i ,x1x=x1i=i+1x1=x-func(x)/dfunc(x)enddoprint 20,x=x110 format(i=,i4,6x,x=,f15.720 format(a,f15.7)Endreal function func(x)real xfunc=x*3-2*x*2+7*x+4endreal function dfunc(x) real xdfunc=3*x*2-4*x+7end四.数值积分(以f(x)=e*x+1为例)1.矩形法Program exam12-5Real a,s,bInteger nReal rectanglePrint*,输入a,b和n的值Read*,a,b,nS=rectangle(a,b,n)Print 10,a,b,nPrint 20,s10 format(a=,f5.2,3x, b=,f5.2,3x, n=,i4)20 format(s=,f15.8)EndReal function rectangle(a,b,n)Implicit noneReal x,a,b,h,sInteger i,nReal funcx=ah=(b-a)/ns=0do i=1,n s=s+func(x)*h x=x+henddorectangle=sendreal function func(x)real xfunc=1+exp(x)end2.梯形法Program exam12-6Real a,s,bInteger nReal trapeziaPrint*,输入a,b和n的值Read*,a,b,nS= trapezia(a,b,n)Print 10,a,b,nPrint 20,s10 format(a=,f5.2,3x, b=,f5.2,3x, n=,i4)20 format(s=,f15.8)EndReal function trapezia(a,b,n)Implicit noneReal x,a,b,h,sInteger i,nReal funcx=ah=(b-a)/ns=0do i=1,n s=s+(func(x+(i-1)*h)+func(x+i*h)*h/2.0enddotrapezia=sendreal function func(x)real xfunc=1+exp(x)end3.辛普生法Program exam12-7Real a,s,bInteger nReal sinpsonPrint*,输入a,b和n的值Read*,a,b,nS= sinpson(a,b,n)Print 10,a,b,nPrint 20,s10 format(a=,f5.2,3x, b=,f5.2,3x, n=,i4)20 format(s=,f15.8)EndReal function rectangle(a,b,n)Implicit noneReal a,b,h,f2,f4,xInteger i,nReal funch=(b-a)/nf2=0f4=func(x)do i=1,n-1x=x+hf2=f2+func(x)x=x+h f4=f4+func(x)*henddorectangle=(func(a)+func(b)+4.0*f4+2.0*f2)*h/3.0endreal function func(x)real xfunc=1+exp(x)end模板Program meauInteger methodPrint*,请输入要采取的方法Read*,methodSelect case(method)case(1) case(2) case(3) End defaultEnd selectend专心-专注-专业