您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 薪酬管理 > Fortran95课程设计
1Fortran95课程设计2目录一,任务书...............................................................................1二,员工档案(工资和个人所得税)..................................6三,求解方程.........................................................................111,求解一元方程的根494-)(23xxxxf................................111-1,二分法求解1-2,弦截法求解1-3,Newton迭代法求解.....................................................132,求方程的积分dxxexba5431.......................................152-1,矩形法积分2-2,梯形法积分2-3,辛普生法积分3,Gauss-Jordan法求联立方程组....................................188z2yx7zy2x6zyx四,课程总结............................................................................2232012级FORTRAN95程序设计语言课程设计任务书一、实践目的通过本课程设计、加深学生对所学程序设计语言的理解,培养其程序设计能力以及综合解决实际问题的能力。通过自己分析问题、分解问题、查找算法、编写、调试程序的过程,掌握FORTRAN95程序设计与调试方法,提高应用所学知识借助计算机程序解决具体问题的能力。二、设计任务1、综合应用所学FORTRAN95知识点解决具体问题。某小型公司有员工25人,员工信息包括员工编号,姓名,性别,工龄,工资(为方便,视其为三险一金减除后的金额),现在需要对这25名员工按照其工资进行个人信息的排序,计算每个人的个人所得税并添加到个人信息中。请按以下要求进行设计⑴利用记事本创建员工基本信息文件。⑵设计包含以上信息内容的派生类和结构体数组。⑶以结构体数组为虚参编写排序子程序,可使用简单交换法、选择法和冒泡法中的任何一种。⑷以普通变量为虚参,编写函数子程序计算个人所得税子程序。⑸编写主程序完成以上工作,并将包含所得税信息的员工信息输出到另一个文本文件。42、科学计算问题(三选二)ⅰ一元方程的根分别采用二分法、弦截法和牛顿迭代法求解一元方程的根。要求如下:⑴用子程序编写求解一元方程的算法⑵一元方程自选,要求人人不同⑶在主程序中要调用三种方法计算同一个一元方程的根ⅱ某函数在某指定区间上的定积分计算分别采用矩形法、梯形法和辛普森法求解某个函数在给定区间上的定积分。要求如下:⑴用子程序编写求解定积分的算法⑵函数自选,积分区间自定,要求人人不同⑶在主程序中要调用三种方法计算同一个定积分。ⅲ线性方程组采用GAUSS-JORDAN法求线性方程组的根,要求如下:⑴用子程序编写上、下三角矩阵⑵方程组自选,要求人人不同。三、设计报告1、任务内容:描述所选题目的内容2、设计思想描述:绘制各个问题算法的流程图3、源程序54、编程中遇到的问题、困难及其解决办法5、总结6、参考文献四、参考文献1、本学期教材2、网上个人所得税资料3、计算方法方面的书籍五、考核方式及评分办法1、程序调试结果占总课程设计成绩的60%2、课程设计报告书占总课程设计成绩的30%3、课程设计活动活跃度(提问)占总课程设计成绩的10%课程设计报告书的有关规定1、报告书需提交电子档和纸质档各一份。2、报告书封面应写明本课程设计的名称和学院、专业、姓名、学号和指导教师姓名。3、正文部分标题为宋体二号字,小标题宋体四号加粗。正文宋体小四号,行距1.5。源程序可采用分栏排版减少页面。4、报告书中必须要有任务说明、设计思想阐述、源程序、程序运行结果截图、总结和参考文献部分65、若发现抄袭的,成绩直接判定不及格。1,员工档案某小型公司有员工25人,员工信息包括员工编号,姓名,性别,工龄,工资(为方便,视其为三险一金减除后的金额),现在需要对这25名员工按照其工资进行个人信息的排序,计算每个人的个人所得税并添加到个人信息中。思想:首先定义一个派生类型worker_information,其员工信息包括姓名name,性别sex,工龄age,工资salary,个人所得税tax再根据派生类型声明一个结构体数组tax(n)其元素个数为员工人数。通过一个主程序,调用两个子程序,完成个人所得税的计算及其排序。编写程序如下:programworker_informationparameter(n=25)typeworker_informcharacter*6namecharacter*2sexintegerageintegersalaryrealtaxendtypetype(worker_inform)work(n)open(1,file='information1.txt')7doi=1,nread(1,10)work(i)%name,work(i)%sex,work(i)%age,work(i)%salaryenddo10format(a6,3x,a2,6x,i2,9x,i8)close(1)doi=1,nwork(i)%tax=tax(work(i)%salary)enddoopen(2,file='information2.txt')doi=1,nwrite(2,20)work(i)enddo20format(a6,3x,a2,6x,i2,9x,i8,f10.2)open(3,file='information3.txt')callfun(work,n)doi=1,nwrite(3,100)work(i)enddo100format(a6,3x,a2,6x,i2,9x,i8,f10.2)containsfunctiontax(x)realtaxintegerxif(x=1500)thentax=x*0.03elseif(x1500.and.x=4500)thentax=1500*0.03+(x-1500)*0.10elseif(x4500.and.x=9000)thentax=1500*0.03+3000*0.10+(x-4500)*0.20elseif(x9000.and.x=35000)thentax=1500*0.03+3000*0.10+4500*0.20+(x-9000)*0.25elseif(x35000.and.x=55000)thentax=1500*0.03+3000*0.10+4500*0.20+26000*0.25+(x-35000)*0.30elseif(x5500.and.x=80000)thentax=1500*0.03+3000*0.10+4500*0.20+26000*0.25+20000*0.30+(x-55000)*0.40elsetax=x*0.40endifendfunction8subroutinefun(a,n)type(worker_inform)a(n),tdoi=1,n-1doj=i+1,nif(a(i)%salarya(j)%salary)thent=a(i)a(i)=a(j)a(j)=tendifenddoenddoendsubroutineend原表:910112,求函数f(x)=49423xxx的解2-1二分法与弦切法:思想:(1)先任取两个值x1,x2,使得f(x1)*f(x2)0,也就是f(x1)和f(x2)必须异号。(2)令x=(x1+x2)/2,如果f(x)=0,就找到了这个解,计算完成。由于f(x)是一个实型数据,所以在判断f(x)是否等于0时,是通过判断)(xf是否小于一个很小的数ε,如果是就认为f(x)为0(3)如果f(x)不为0,判断如果f(x1)和F(x)异号,则说明解在xx,1区间,就以x1,x为新的取值来重复步骤(2),这时用x作为新的x2,舍掉原2,xx区间;如果F(x2)和f(x)异号,则以x,x2为新的取值来步骤重复(2),这是用x作为新的x1,舍掉原xx,1区间。这样做实际上是将求解的范围减小了一半,然后用同样的方法再进一步缩小范围,直到)(xf小于ε为止。programsubject2_1realx1,x2,xrealcourse1,course2,fundoprint*,输入x1,x2的值:read*,x1,x2if(fun(x1)*fun(x2)0.0)exitprint*,不正确的输入!enddox=course1(x1,x2)print*,二分法求解得:!二分法print10,'x=',xx=course2(x1,x2)print*,弦切法求解得:!弦切法print10,'x=',x10format(a,f10.6)endrealfunctioncourse1(x1,x2)!二分法求解realx1,x2,f1,f2,fx12x=(x1+x2)/2.0fx=fun(x)dowhile(abs(fx)1e-6)f1=fun(x1)if(f1*fx0)thenx2=xelsex1=xendifx=(x1+x2)/2.0fx=fun(x)enddocourse1=xendrealfunctioncourse2(x1,x2)!弦切法求解realx1,x2,f1,f2,fxx=x2-(x2-x1)/(fun(x2)-fun(x1))*fun(x2)fx=fun(x)dowhile(abs(fx)1e-6)f1=fun(x1)if(f1*fx0)thenx2=xelsex1=xendifx=x2-(x2-x1)/(fun(x2)-fun(x1))*fun(x2)fx=fun(x)enddocourse2=xendfunctionfun(x)realxfun=x**3-4*x**2+9*x+4end打印结果如下:13Newton迭代法思想:用牛顿迭代法求解一元方程的根,基本思路为:(1)先任取一个x1。(2)做通过点(x1,f(x1))做切线,即以f'(x1)为斜率作直线,这条直线与x轴的交点为x2,用以下公式求出x2由于f'(x1)=21)1(xxxf;x2=x1-(x1)f')1(xf.判断)2(xfε是否成立,如果是就找到了解,计算完成,(3)否则,重复步骤(2)以f'(x1)为斜率过点(x2,f(x2)),求出与x轴都的交点x3,……直到)(xnfε,认为xn就是所求得的解。14programsubject2_3realxintegermprint*,'输入初值以及循环次数'read*,x,mcallnewton(x,m)endsubroutinenewton(x,m)implicitnonerealx,x1realfun,dfunintegeri,mi=1x1=x-fun(x)/dfun(x)dowhile(abs(x-x1)1e-6.and.i=m)print10,i,x1x=x1i=i+1x1=x-fun(x)/dfun(x)enddoif(i=m)thenprint20,'x=',x1elseprint30,'经过',m,'次迭代后仍未收敛'endif10format('i=',i4,6x,'x=',f15.7)20format(a,f15.7)30format(a,i4,a)endrealfunctionfun(x)realxfun=x**3-4*x**2+9*x+4end打印结果:152-2,求函数函数积分dxxexba5431矩形法:s=s+fun(x)*h梯形法:s=s+(fun(x+(i-1)*h
本文标题:Fortran95课程设计
链接地址:https://www.777doc.com/doc-6889348 .html