Fortran95课程设计

合集下载

FORTRAN语言程序设计——FORTRAN95

FORTRAN语言程序设计——FORTRAN95

教材目录
(注:目录排版顺序为从左列至右列 )
教学资源
该教材有配套的实验指导书——《FORTRAN95程序设计实验指导与测试》。 该教材还提供电子课件等资源。
教材特色
该教材以程序设计为主线,以编程应用为驱动,通过案例和问题引入知识点,重点讲解程序设计的思想和方 法。书中所有程序实例都是由教师在多年授课过程中挑选所得,并采用Microsoft Develop Studio集成开发环 境。为适应不断更新的计算机操作系统,在实验教材中还给出了Windows 7、Windows 10操作系统下使用Visual Fortran的上机操作过程。
全书共14章,主要内容有: FORTRAN95概述及编译环境的介绍、FORTRAN95程序设计基础、顺序结构程序设 计、选择结构程序设计、循环结构程序设计、数组、函数与子程序、文件、派生类型与结构体、指针、模块、常 用数值算法。
成书过程
修订情况
ห้องสมุดไป่ตู้出版工作
该教材由王丽娟、段志东主编,李玉龙主审。第1、2、12、14章由王红鹰编写,第3、5、6、7章由陈权编写, 第9、11、13章和附录A由段志东编写,第4、8、10章和附录B由王丽娟编写。
该教材在规划和编写过程中得到了兰州交通大学教务处、计算机教学示范中心、电信学院、继续教育学院、 土木工程学院的领导和教师们的支持。
2017年9月1日,该教材清华大学出版社出版。
内容简介
该教材介绍FORTRAN95的语法规则以及利用它进行程序设计的方法。全书共14章,主要内容有: FORTRAN95 概述及编译环境的介绍、FORTRAN95程序设计基础、顺序结构程序设计、选择结构程序设计、循环结构程序设计、 数组、函数与子程序、文件、派生类型与结构体、指针、模块、常用数值算法。另外,还扩充了计算思维和计算 机系统组成的相关知识。

FORTRAN95程序设计实验

FORTRAN95程序设计实验

FORTRAN95程序设计实验FORTRAN95的基本语法包括变量定义、注释、循环和条件判断等。

在FORTRAN95中,变量可以通过关键字"INTEGER"、"REAL"和"CHARACTER"等进行定义。

例如,以下语句定义了一个整型变量A和一个浮点型变量B:INTEGER::AREAL::B注释可以通过用一个感叹号(!)开头进行标识。

例如:!这是一个注释循环可以使用关键字"DO"和"ENDDO"来实现。

例如,以下代码展示了一个简单的循环,计算了1到10的和:INTEGER::I,SUMSUM=0DOI=1,10SUM=SUM+IENDDO条件判断可以使用关键字"IF"、"THEN"、"ELSE"和"ENDIF"来实现。

例如,以下代码展示了一个简单的条件判断,判断一个数是否为正数:INTEGER::NUMREAD(*,*)NUMIF(NUM>0)THENPRINT*,"该数为正数"ELSEPRINT*,"该数为非正数"ENDIF在FORTRAN95中,还有其他的语法和特点,如数组、函数、子程序等。

下面的实例将展示如何使用FORTRAN95编写一个计算圆面积和周长的程序。

PROGRAM CircleREAL :: PI, R, Area, CircumferencePRINT*,"请输入半径:"READ(*,*)RArea = PI * R**2Circumference = 2 * PI * RPRINT *, "圆的面积为:", AreaPRINT *, "圆的周长为:", CircumferenceEND PROGRAM Circle以上程序首先定义了一个实数变量PI、半径R、面积Area和周长Circumference。

fortran 95程序设计

fortran 95程序设计

fortran 95程序设计
Fortran 95程序设计是一门针对科学计算和工程学科的高级编程语言。

这门语言的设计目的是为了提供一种简洁、高效、易于实现和易于维
护的编程环境,以便于开发出更高质量的科学计算和工程解决方案。

Fortran 95的特点之一是其输入输出,因为它可以使用多种方式输入
和输出数据,使程序的编写更加简单而不失灵活性。

另一个特点是其
令人宜人的书写风格,使得代码的可读性和可维护性得到了更好的保障。

此外,Fortran 95还支持模块化编程,由于模块被编写为独立的
实体,因此可以更好地调试和修改源代码。

在Fortran 95代码中,程序员使用各种算法和数学技术来解决问题。

这门语言不仅提供了一些基本的算法和数据结构,还支持数组操作、
字符串操作、位操作等高级操作。

它的函数式编程能力也很强,可以
使程序更加高效、简洁和易于维护。

虽然Fortran 95在以往的几十年中已经被不断地改进和扩展,但是它仍然存在一些问题。

例如,它只支持有限的异常处理机制,无法处理
不同层级的异常。

此外,一些新的编程语言,如Python和R,已经逐渐取代了Fortran在科学计算和工程学科中的地位。

总之,Fortran 95程序设计是一门高级编程语言,具备简洁性、高效性、易实现性和易维护性的特点。

虽然它可能存在一些缺陷和限制,但是对于需要高效可靠的科学计算和工程解决方案的行业和领域,Fortran 95仍然是一个很好的选择。

fortran95课程设计

fortran95课程设计

fortran95课程设计一、课程目标知识目标:1. 理解Fortran 95编程语言的基本概念和语法结构;2. 掌握Fortran 95的数据类型、变量声明和运算符使用;3. 学会使用控制结构(如循环、条件语句)进行程序设计;4. 了解数组、函数和子程序在Fortran 95中的应用。

技能目标:1. 能够编写简单的Fortran 95程序,实现基本的输入输出功能;2. 能够运用控制结构进行逻辑判断和循环操作;3. 能够使用数组进行批量数据处理;4. 能够编写简单的函数和子程序,实现代码的模块化。

情感态度价值观目标:1. 培养学生对编程的兴趣,激发自主学习编程的热情;2. 培养学生严谨、细致的编程习惯,注重代码的可读性和效率;3. 培养团队合作精神,学会在编程过程中与他人交流、协作;4. 提高学生的逻辑思维能力,培养解决实际问题的能力。

课程性质:本课程为计算机编程入门课程,以Fortran 95编程语言为载体,培养学生编程技能和逻辑思维能力。

学生特点:学生处于初中或高中阶段,具备一定的数学基础,对编程感兴趣,但可能缺乏实际编程经验。

教学要求:教师应注重理论与实践相结合,以实例为主线,引导学生掌握编程技能,培养编程兴趣。

同时,关注学生的个体差异,提供针对性的指导和支持。

通过本课程的学习,使学生能够达到上述课程目标,为后续编程学习打下坚实基础。

二、教学内容1. Fortran 95基础语法- 程序结构- 数据类型与变量声明- 运算符与表达式- 基本输入输出操作2. 控制结构- 选择结构(IF语句)- 循环结构(DO循环、WHILE循环)3. 数组与函数- 数组的基本操作与应用- 内置函数与自定义函数- 子程序与模块化编程4. 实践项目与案例分析- 简单的计算器程序- 温度转换程序- 数组排序程序- 函数与子程序的应用实例5. 编程规范与调试技巧- 编码规范与命名规则- 调试方法与技巧- 性能优化建议教学内容安排与进度:第一周:Fortran 95基础语法及程序结构第二周:数据类型与变量声明、运算符与表达式第三周:基本输入输出操作、选择结构(IF语句)第四周:循环结构(DO循环、WHILE循环)第五周:数组的基本操作与应用第六周:内置函数与自定义函数、子程序与模块化编程第七周:实践项目与案例分析(计算器程序、温度转换程序等)第八周:编程规范与调试技巧、性能优化本教学内容根据课程目标制定,涵盖了Fortran 95编程语言的核心知识点,通过理论与实践相结合的方式,使学生能够逐步掌握编程技能,培养解决实际问题的能力。

软件技术基础教学大纲(Fortran95)

软件技术基础教学大纲(Fortran95)

“计算机软件技术基础’’课程教学大纲(非电类各专业)课内学时:64(讲课40,课内上机实习24)课外上机实习: 40学分:3.5一、课程的性质,目的和任务本课程是为理工科(非电类)非计算机专业学生开设的一门必修的计算机基础课,其内容涉及程序设计语言(FORTRAN 95语言)、数据结构、实用软件开发方法。

本课程的教学目的主要是培养学生利用计算机处理问题的思维方式,使学生具有应用FORTRAN 95语言设计简单程序的能力,并初步掌握对不同类型的问题求解选择适当的数据结构和算法,为学生今后结合本专业知识、使用软件开发环境和工具解决实际问题、学习后续相关课程打下必要的基础。

二、教学基本要求1、掌握FORTRAN程序的基本组成要素,包括程序结构、数据类型、程序控制结构、过程和文件等基本概念。

2、理解结构化程序设计的基本思想,掌握“自顶向下,逐步求精”的程序设计技术,可以利用三种基本控制结构解决一些简单的问题。

3、熟练使用FORTRAN语言实现常用算法,初步掌握简单绘图程序设计方法。

4、熟悉程序设计中常用的数据结构及算法,初步掌握对不同类型的问题求解选择适当的数据结构。

5、了解软件开发方法的基本知识。

三、先修课程计算机基础导论四、教学内容及要求1.FORTRAN语言基础(2学时)主要内容:●程序设计概述●FORTRAN 95程序的基本结构、标准输入/输出●FORTRAN 95的基本数据类型,以及常量、变量、数组和字符串●FORTRAN 95的运算符和表达式基本要求:熟悉FORTRAN程序结构、程序书写格式,掌握基本数据类型的常量表示和变量的说明、表达式的构造与求值、常用内部函数的使用。

2.程序控制结构(4学时)主要内容:●算法及其特征●顺序结构语句:赋值、输入和输出语句●选择结构语句:if结构语句和select结构语句●循环结构语句:do和do While结构语句● exit、 cycle和goto语句基本要求:从结构化软件设计方法的观点,理解三种基本的控制结构,并能在简单程序的设计中熟练地运用它们。

fortran952003程序设计

fortran952003程序设计

fortran952003程序设计Fortran 95是Fortran编程语言的一个版本,它在1997年被正式发布。

它继承了Fortran语言的数值计算能力,并引入了许多现代编程特性,使得Fortran 95成为一个功能强大的科学计算语言。

以下是Fortran 95程序设计的一些基础要点:1. 程序结构Fortran 95程序由一个或多个程序单元组成,这些单元可以是子程序、函数或模块。

程序的开始和结束分别由`program`和`end program`语句标记。

2. 变量声明在Fortran 95中,变量必须在使用前声明其类型。

Fortran 95支持多种数据类型,包括整数、实数、复数、逻辑和字符类型。

例如:```fortraninteger :: ireal :: xlogical :: flagcharacter(len=10) :: name```3. 常量和参数Fortran 95允许定义常量和参数,它们在程序中只能被赋值一次。

常量使用`parameter`关键字定义:```fortranparameter (pi = 3.14159)4. 控制语句Fortran 95提供了多种控制语句,包括条件语句(`if`)、循环语句(`do`、`while`)和选择语句(`select case`)。

```fortranif (x > 0) thenprint *, 'x is positive'elseprint *, 'x is non-positive'end ifdo i = 1, 10print *, 'Iteration ', iend doselect case (ch)case ('A', 'B', 'C')print *, 'Grade A, B, or C'case defaultprint *, 'Other grade'end select```5. 数组Fortran 95支持多维数组,并且可以声明数组的维度。

FORTRAN95第01章-概述讲课讲稿

FORTRAN95第01章-概述讲课讲稿
32
2.实型常数 实型常数有多种不同的表示形式。 (1)基本实常数形式 基本实常数形式与日常习惯写法相同,由
一个正(或负)号、整数部分、小数点和小数 部分组成。其中正号可以省略,并且允许没有 整数部分或小数部分,但小数点是必须的。例 如 0.0 .02 314. -27.567 256.0 +0.05 都是正确的表示形式。
16
二、FORTRAN语句 每个程序段和模块由若干条FORTRAN语句
组成,这些语句又分为可执行语句和非执行语 句。可执行语句在程序执行时使计算机产生 某种特定的操作,如赋值、输入输出、控制 转移等。非执行语句只是用于将某些信息
(如变量的类型、数组的维数及大小、数 据的输入输出格式等)通知编译程序,使编 译程序在编译源程序时按这些信息要求进行 处理。程序执行时非执行语句不会使计算机 产生任何操作。
据取值范围不同,处理方式不同,存储形式和书写形 式也不同。FORTRAN语言中有五种基本数据类型。
24
一、整型(INTEGER) 整型表示整数的类型,分长整型和短整型。在PC
机中长整型占4个字节(32bit),可保存的数值范围 在-2147483648~2147483647之间(-231 ~231-1);短整 型占2个字节,保存的数值范围在-32768~32767之间, 即(-215 ~215-1)。
有规定每行的第几个字符有什么作用: 每行最多可写132个字符; 叹号“!”后的内容都是注释; 如果需要写语句标号, 则标号可以紧挨着写在语句第1个字符
前面; 一行字符的最后如果是符号“&”,则表示下一行是该行的继
续。如果一行程序代码开头是符号&,则其上一行的最后非空格 符必须是一个&号, 且&号前不能有空格,表示该行是上一行的继 续。这种形式的续行允许把一个常数、变量名、关键字等分开放 在两行上。

FORTRAN95程序设计实验

FORTRAN95程序设计实验

FORTRAN95程序设计实验FORTRAN95程序设计实验1.实验目的本实验旨在通过使用FORTRAN95语言进行编程,加深学生对程序设计的理解,培养学生解决实际问题的能力。

2.实验环境2.1 操作系统:________Windows 102.2 编程软件:________GNU Fortran或其他支持FORTRAN95的编译器3.实验准备在进行实验前,请进行以下准备工作:________3.1 安装所需的编程软件。

3.2 确保已经掌握了FORTRAN95的基本语法。

3.3 确定实验所涉及的问题和要求。

3.4 准备实验中所需的测试数据。

4.实验内容4.1 实验一:________编写一个程序,计算两个整数的和,并输出结果。

4.1.1 分析问题:________定义两个变量,分别用于存储输入的两个整数,然后进行求和运算。

4.1.2 算法设计:________使用FORTRAN95语言的输入输出语句和加法运算符实现计算两个整数的和的功能。

4.2 实验二:________编写一个程序,判断一个整数是否为素数,并输出结果。

4.2.1 分析问题:________素数是只能被1和自身整除的整数,因此需要判断给定的整数是否能被1到自身-1之间的整数整除。

4.2.2 算法设计:________使用FORTRAN95语言的循环语句和条件判断语句实现判断一个整数是否为素数的功能。

5.实验步骤根据实验内容进行相应的步骤操作。

每个实验的步骤都应包括编写代码、编译程序、运行程序和分析结果等。

6.实验结果6.1 实验一的结果:________输入两个整数,得到它们的和。

6.2 实验二的结果:________输入一个整数,判断它是否为素数。

7.思考题在本实验中,编写的程序是否能处理所有可能的输入?如不能,请说明原因并提出改进方法。

8.附件附件1:________实验一代码示例附件2:________实验二代码示例附件3:________测试数据9.法律名词及注释9.1 FORTRAN95:________一种编程语言,是FORTRAN的增强版本,适用于科学计算和工程应用。

fortran95程序的设计实验

fortran95程序的设计实验

输出处理后 的数组
结束
三 . 程序
! 班级:核工程 11 ! 名字:薛院院 ! 日期: 4.2 program main parameter(n=4) integer::x(n)
.
.
.
print*,' 请输入 ',n,' do i=1,n read*,x(i) enddo print 100,x do i=1,n
人 , 占总人数比例 ',f8.2,'%')
四 . 实验结果
.
.
.
实验六
一 . 实验容
输入 4 个整数放在 4 个数组中,数组向左循环位移 1,2,3,4 个位置, 第一个元素移动到最后一个元素, 结果放在数组中, 输出移除前后的 4 个整数。
二 . 问题分析(流程图)
开始
输入 4 个整数
对数组进行处理
.
.
.
一 . 实验容
实验五
计算学生的平均成绩, 每门课的平均成绩, 三门课的平均成绩以及统
计高于每门课的成绩和三门平均成绩的学生人数和占总人数的比例
二 . 问题分析(流程图)
开始
输入学生人数
输入每个人学生的学 号,三门成绩
计算每个学 生的平均成
计算每门课 平均成绩
计算 3 门课 平均成绩
统计高于每门课平均成绩和三 门课平均成绩的人数及比例
t=x(1) do j=2,n x(j-1)=x(j) enddo x(n)=t print 100,x enddo 100 format(4i2) end
个整数 '
四 . 实验结果
.
.
.
实验七
一 . 实验容

FORTRAN95程序设计实验指导[定稿]

FORTRAN95程序设计实验指导[定稿]

FORTRAN95程序设计实验指导[定稿] FORTRAN95程序设计实验指导第一节 Compaq Visual FORTRAN 6.5快速入门 1.1 安装Compaq Visual FORTRAN 6.51.1.1 系统要求)需要具备以下软硬件条件:安装Compaq Visual FORTRAN 6.5(以下简称为CVF, 80586或以上处理器,运行Windows 98//NT/2000或以上操作系统。

, 具有光盘驱动器。

, 64MB或以上内存。

, 足够的硬盘空间。

安装程序根据安装选项提示所需的硬盘空间。

专业版的典型安装需要约300MB硬盘空间。

, SVGA显示器。

, 鼠标。

1.1.2 安装步骤下面以Windows 2000操作系统为例,对于其他Windows 操作系统,安装过程与此类似。

首先,将含CVF的光盘插入光盘驱动器,在资源管理器中运行Setup程序,屏幕显示Compaq VisualFORTRAN Setup窗口;单击【istall Visual Fortran】按钮;当出现询问是否查看README.TXT文件的对话框时单击【否】按钮;安装程序自动搜索已有组件,单击【Continue】(继续)按钮,并按提示输入用户名、公司名、产品系列号后,安装程序会显示安装选项对话框(图1.1);如果要改变安装CVF的文件夹,单击【Change Folder...】(改变文件夹)按钮,选择或输入所需的文件夹名;如果输入的文件夹不存在,安装程序会自动生成该文件夹,并生成几个下级文件夹以存放相应的各类文件。

图1.1还显示了各安装选项的简短说明和安装时所需的硬盘空间。

选择下列四个安装选项之一继续安装:Typical(典型)Custom(定制)Run from CD-ROM(从光盘运行) Typical(典型)安装选项将安装最常用的部分,约需298MB硬盘空间。

Custom(定制)安装选项将允许用户选择安装自己需要的组件(约需350MB空间)。

Fortran95程序设计课后习题答案(word版方便)

Fortran95程序设计课后习题答案(word版方便)

第四章1.program main implicit none write(*,*) "Have a good time." write(*,*) "That's not bad." write(*,*) '"Mary" isn''t my name.' end program2.program main real, parameter :: PI=3 implicit none.14159 real radius write(*,*) "请输入半径长" read(*,*) radius write(*,"(' 面积='f8. 3)") radius*radius*PI end program3.program main implicit none real grades write(*,*) "请输入成绩" read(*,*) grades write(*,"(' 调整后成绩为'f8.3)") SQRT(grades)*10.0 end program4.integer a,b real ra,rb a=2 b=3 ra=2.0 rb=3.0 write(*,*) b/a ! 输出1, 因为使用整数计算, 小数部分会无条件舍去write(*,*) rb/ra ! 输出1.55.p rogram main implicit none type distance real meter, 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 ( money<1000 ) then tax = 0.03 else if ( money<5000) then tax = 0.1 else tax = 0.15 end if write(*,"(' 税金为'I8)") nint(money*tax) end program2.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 write(*,*) "错误的输入" stop end select write(*,*) tv end program3.program main implicit none integer age, money real tax write(*,*) "请输入年龄" read(*,*) age write(*,*) "请输入月收入" read(*,*) money if ( age<50 ) then if ( money<1000 ) then tax = 0.03 else if ( money<5000 )then tax = 0.10 else tax = 0.15 end if else if ( money<1000 ) then tax = 0.5 else if ( money<5000 )then tax = 0.7 else tax = 0.10 end if end if write(*,"(' 税金为'I8)") nint(money*tax) end program4.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(year,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 program2.program main implicit none integer i,sum sum = 0 do i=1,99,2 sum = sum+i end do write(*,*) sum stop end program3.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 write(*,*) "猜错了" end if stop end program4.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+itemend do write(*,*) ans stop end program5.program main implicit none integer, parameter :: length = 79 character(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(max) = (/ (2*i, i=1,10) /) integer :: t ! sum()是fortran库函数write(*,*) real(sum(a))/real(max) stop end program2.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=493.program main implicit none integer, parameter :: max=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 program4.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 ! a(i)跟a(j)交换t=a(i) a(i)=a(j) a(j)=t end if end do end do write(*,"(10I4)") a stop end5.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 program subroutine CircleArea(radius, area) implicit none real, parameter :: PI=3.14159 real radius, area area = radius*radius*PI return end subroutine2.program main implicit none real radius real, external :: CircleArea write(*,*) "请输入半径长" read(*,*) radius write(*,"(' 面积= 'F8.3)") CircleArea(radius) stop end program real function CircleArea(radius) implicit none real, parameter :: PI=3.14159 real radius CircleArea = radius*radius*PI return end function3.program main implicit none call bar(3) call bar(10) stop end program subroutine bar(length) implicit none integer, intent(in) :: length integer i character(len=79) :: string string=" " do i=1,length string(i:i)='*' end do write(*,"(A79)") string return end subroutine4.p rogram 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 ( n<0 ) then sum=0 return else if ( n<=1 ) then sum=n return end if sum = n + add(n-1) return end function5.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(BIG,SMALL) if ( TEMP==0 ) exit BIG=SMALL SMALL=TEMP end do gcd=SMALL return end function6.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 SetScreen(60,20) call SetCurrentChar('*') x=StartX do px=1,maxx py = (maxy/2)*sin(x)+maxy/2+1 callPutChar(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 :: 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 ! 没有资料就跳出循环write(*,"(A79)") buffer count = count+1 if ( count==24 ) then pause count = 0 end if end do else write(*,*) TRIM(filename)," doesn't exist." end if stop end2.p rogram 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=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))-3 ) end do write(*,"(A70)") buffer end do else write(*,*) TRIM(filename)," doesn't exist." end if stop end3.program main implicit none type student integer chinese, english, math, science, social, total end type type(student) :: s, total integer, parameter :: 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)*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%social 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(students) stop end4.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=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)," doesn't exist." end if stop end5.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 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=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)%English 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 ! 计算并输出平圴分数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 implicit 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 < s(j)%total ) then t = s(i) s(i)=s(j) s(j) = t end if end do end do forall(i=1:n) s(i)%rank = i end forall end subroutine第十章1.integer(kind=4) :: a ! 4 bytes real(kind=4) :: b ! 4 bytes real(kind=8) :: c ! 8 bytes character(len=10) :: str ! 10 bytes integer(kind=4), pointer :: pa ! 4 bytes real(kind=4), pointer :: pb ! 4 bytes real(kind=8), pointer :: pc ! 4 bytes character(len=10), pointer :: pstr ! 4 bytes type student integer Chinese, English, Math end type type(student) :: s ! 12 bytes type(student), pointer :: ps ! 4 bytes2.integer, target :: a = 1 integer, target :: b = 2 integer, target :: c = 3 integer, pointer :: p p=>a write(*,*) p ! 1 p=>b write(*,*) p ! 2 p=>c p=5 write(*,*) c ! 53.module linklist type student integer :: num integer :: Chinese, English, Math, Science, Social end type type datalink type(student) :: item type(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 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, 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(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 ( i<1 .or. i>size ) exit ! 输入不合理的座号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 program4.module typedef implicit none type :: datalink integer :: i type(datalink), pointer :: next end type datalink end module typedef program 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 none interface area module procedure CircleArea module procedure RectArea end interface contains real function CircleArea(r) real, parameter :: PI=3.14159 real r CircleArea = r*r*PI return end function real function RectArea(a,b) real a,b RectArea = a*b return end function end module program main use UTILITY implicit none write(*,*) area(1.0) write(*,*) area(2.0,3.0) stop end program2.module time_utility implicit none type :: time integer :: hour,minute,second end type time interface operator(+) module procedure add_time_time end interface contains function add_time_time( a, b ) implicit none type(time) :: add_time_time type(time), intent(in) :: a,b integer :: seconds,minutes,carry seconds=a%second+b%second carry=seconds/60 minutes=a%minute+b%minute+carry carry=minutes/60 add_time_time%second=mod(seconds,60) add_time_time%minute=mod(minutes,60) add_time_time%hour=a%hour+b%hour+carry return end function add_time_time subroutine input( a ) implicit none type(time), intent(out) :: a write(*,*) " Input hours:" read (*,*) a%hour write(*,*) " Input minutes:" read (*,*) a%minute write(*,*) " Input seconds:" read (*,*) a%second return end subroutine input subroutine output( a ) implicit none type(time), intent(in) :: a write(*, "(I3,' hours',I3,' minutes',I3,' seconds')" ) a%hour,a%minute,a%second return end subroutine output end module time_utility program main use time_utility implicit none type(time) :: a,b,c call input(a) call input(b) c=a+b call output(c) stop end program main3.module rational_utility implicit none private public :: rational, & operator(+), operator(-), operator(*),& operator(/), assignment(=),operator(>),& operator(<), operator(==), operator(/=),& output, input type :: rational integer :: num, denom end type rational interface operator(+) module procedure rat__rat_plus_rat end interface interface operator(-) module procedure rat__rat_minus_rat end interface interface operator(*) module procedure rat__rat_times_rat end interface interface operator(/) module procedurerat__rat_div_rat end interface interface assignment(=) module procedure rat_eq_rat module procedure int_eq_rat module procedure real_eq_rat end interface interface operator(>) module procedure rat_gt_rat end interface interface operator(<) module procedure rat_lt_rat end interface interface operator(==) module procedure rat_compare_rat end interface interface operator(/=) module procedure rat_ne_rat end interface contains function rat_gt_rat(a,b) implicit none logical :: rat_gt_rat type(rational), intent(in) :: a,b real :: fa,fb fa=real(a%num)/real(a%denom) fb=real(b%num)/real(b%denom) if ( fa > fb ) then rat_gt_rat=.true. else rat_gt_rat=.false. end if return end function rat_gt_rat function rat_lt_rat(a,b) implicit none logical :: rat_lt_rat type(rational), intent(in) :: a,b real :: fa,fb fa=real(a%num)/real(a%denom) fb=real(b%num)/real(b%denom) if ( fb > fa ) then rat_lt_rat=.true. else rat_lt_rat=.false. end if return end function rat_lt_rat function rat_compare_rat(a,b) implicit none logical :: rat_compare_rat type(rational), intent(in) :: a,b type(rational) :: c c=a-b if ( c%num == 0 ) then rat_compare_rat=.true. else rat_compare_rat=.false. end if return end function rat_compare_rat function rat_ne_rat(a,b) implicit none logical :: rat_ne_rat type(rational), intent(in) :: a,b type(rational) :: c c=a-b if ( c%num==0 ) then rat_ne_rat=.false. else rat_ne_rat=.true. end if return end function rat_ne_rat subroutine rat_eq_rat( rat1, rat2 ) implicit none type(rational), intent(out):: rat1 type(rational), intent(in) :: rat2 rat1%num = rat2%num rat1%denom = rat2%denom return end subroutine rat_eq_rat subroutine int_eq_rat( int, rat ) implicit none integer, intent(out):: int type(rational), intent(in) :: rat int = rat%num / rat%denom return end subroutine int_eq_rat subroutine real_eq_rat( float, rat ) implicit none real, intent(out) :: float type(rational), intent(in) :: rat float = real(rat%num) / real(rat%denom) return end subroutine real_eq_rat function reduse( a ) implicit none type(rational), intent(in) :: a integer :: b type(rational) :: reduse b=gcv_interface(a%num,a%denom) reduse%num = a%num/b reduse%denom = a%denom/b return end function reduse function gcv_interface(a,b) implicit none integer, intent(in) :: a,b integer :: gcv_interface if ( min(a,b) .eq. 0 ) then gcv_interface=1 return end if if (a==b) then gcv_interface=a return else if ( a>b ) then gcv_interface=gcv(a,b) else if ( a<b ) then gcv_interface=gcv(b,a) end if return end function gcv_interface recursive function gcv(a,b) result(ans) implicit none integer, intent(in) :: a,b integer :: m integer :: ans m=mod(a,b) select case(m) case(0) ans=b return case(1) ans=1 return case default ans=gcv(b,m) end select return end function gcv function rat__rat_plus_rat( rat1, rat2 ) implicit none type(rational) :: rat__rat_plus_rat type(rational), intent(in) :: rat1,rat2 type(rational) :: act act%denom= rat1%denom * rat2%denom act%num = rat1%num*rat2%denom + rat2%num*rat1%denom rat__rat_plus_rat = reduse(act) return end function rat__rat_plus_rat function rat__rat_minus_rat( rat1, rat2 ) implicit none type(rational) :: rat__rat_minus_rat type(rational), intent(in) :: rat1, rat2 type(rational) :: temp temp%denom = rat1%denom*rat2%denom temp%num =rat1%num*rat2%denom -rat2%num*rat1%denom rat__rat_minus_rat = reduse( temp ) return end function rat__rat_minus_rat function rat__rat_times_rat( rat1, rat2 ) implicit none type(rational) :: rat__rat_times_rat type(rational), intent(in) :: rat1, rat2 type(rational) :: temp temp%denom = rat1%denom* rat2%denom temp%num = rat1%num * rat2%num rat__rat_times_rat = reduse(temp) return end function rat__rat_times_rat function rat__rat_div_rat( rat1, rat2 ) implicit none type(rational) :: rat__rat_div_rat type(rational), intent(in) :: rat1, rat2 type(rational) :: temp temp%denom = rat1%denom* rat2%num temp%num = rat1%num * rat2%denom rat__rat_div_rat = reduse(temp) return end function rat__rat_div_rat subroutine input(a) implicit none type(rational), intent(out) :: a write(*,*) "分子:" read(*,*) a%num write(*,*) "分母:" read(*,*) a%denom return end subroutine input subroutine output(a) implicit none type(rational), intent(in) :: a if ( a%denom/=1 ) then write(*, "(' (',I3,'/',I3,')' )" ) a%num,a%denom else write(*, "(I3)" ) a%num end if return end subroutine output end module rational_utility program main use rational_utility implicit none type(rational) :: a,b,c call input(a) call input(b) c=a+b write(*,*) "a+b=" call output(c) c=a-b write(*,*) "a-b=" call output(c) c=a*b write(*,*) "a*b=" call output(c) c=a/b write(*,*) "a/b=" call output(c) if (a>b) write(*,*) "a>b" if (a<b) write(*,*) "a<b" if (a==b) write(*,*) "a==b" if (a/=b) write(*,*) "a/=b" stop end program main4.module vector_utility implicit none type vector real x,y end type interface operator(+) module procedure vector_add_vector end interface interface operator(-) module procedure vector_sub_vector end interface interface operator(*) module procedure real_mul_vector module procedure vector_mul_real module procedure vector_dot_vector end interface interface operator(.dot.) module procedure vector_dot_vector end interface contains type(vector) function vector_add_vector(a,b) type(vector), intent(in) :: a,b vector_add_vector = vector(a%x+b%x, a%y+b%y) end function type(vector) function vector_sub_vector(a,b) type(vector), intent(in) :: a,b vector_sub_vector = vector(a%x-b%x, a%y-b%y) end function type(vector) function real_mul_vector(a,b) real, intent(in) :: a type(vector), intent(in) :: b real_mul_vector = vector( a*b%x, a*b%y ) end functiontype(vector) function vector_mul_real(a,b) type(vector), intent(in) :: a real, intent(in) :: b vector_mul_real = real_mul_vector(b,a) end function real function vector_dot_vector(a,b) type(vector), intent(in) :: a,b vector_dot_vector = a%x*b%x + a%y*b%y end function subroutine output(vec) type(vector) :: vec write(*,"('('F6.2','F6.2')')") vec end subroutine end module program main use vector_utility implicit none type(vector) a,b,c a=vector(1.0, 2.0) b=vector(2.0, 1.0) c=a+b call output(c) c=a-b call output(c) write(*,*) a*b end program main。

FORTRAN95程序设计实验

FORTRAN95程序设计实验

FORTRAN95程序设计实验FORTRAN95程序设计实验本文档涉及附件。

本文所涉及的法律名词及注释。

⒈简介本文档旨在提供一个完整的FORTRAN95程序设计实验的指南。

它包括实验的背景、目的、实验步骤、程序代码和测试结果等内容。

⒉实验背景在本节中,将介绍该实验的背景信息。

这可能包括与程序设计相关的概念、算法、问题陈述等。

⒊实验目的在本节中,将明确说明该实验的目的。

这可以包括学习特定的FORTRAN95编程技术、理解特定算法的实现、解决特定问题等。

⒋实验步骤本节将详细说明完成该实验所需的步骤。

每个步骤都应该清晰明了,并包括必要的代码片段和解释。

⑴实验准备在本段中,将列出完成该实验所需的软件和硬件准备,例如安装FORTRAN95编译器、准备输入文件、设置运行环境等。

⑵实验步骤1:任务1在本段中,将详细介绍实验中的第一个任务。

这可以包括问题描述、算法设计、需要编写的FORTRAN95代码等。

⑶实验步骤2:任务2在本段中,将详细介绍实验中的第二个任务。

同样,包括问题描述、算法设计、FORTRAN95代码等。

⒌程序代码在本节中,将提供实验中使用的完整FORTRAN95程序代码。

代码应该经过清晰的注释,以便读者理解。

⒍测试结果本节将展示每个任务的测试结果。

这可能包括输入和输出示例,以及对结果的说明和分析。

⒎总结在本节中,将对整个实验进行总结。

包括实验过程中遇到的困难、得到的经验教训、对FORTRAN95编程的理解等。

⒏附件该文档包含以下附件:实验说明书、FORTRAN95代码文件、输入文件、输出文件等。

⒐法律名词及注释在本节中,将列出在文档中使用到的法律名词,并提供相应的注释。

这有助于读者更好地理解涉及法律方面的内容。

Fortran95语言程序设计

Fortran95语言程序设计

《Fortran95语言程序设计》课程教学大纲课程英文名称:Fortran95 Programming Design课程编号:0332232002课程计划学时:32学分:2课程简介:FORTRAN语言程序设计是材料物理专业的开设的专业基础课, FORTRAN语言在科学计算领域有着十分广泛的应用。

通过本课程的学习,应使学生掌握FORTRAN95的基本概念,语法规则和利用FORTRAN95进行程序设计的方法。

使学生在后继课的学习中,能够利用FORTRAN95上机编程,解决相应的实际问题,并能在今后的学习和工作中,结合自己的专业知识,开发相应的计算机应用程序。

一、课程教学内容及教学基本要求第一章 Fortran语言程序设计概述本章重点:算法、程序基本结构难点:语言元素本章学时:2学时教学形式:讲授与上机实践相结合教具:计算机,投影仪第一节 Fortran语言程序设计概述本节要求了解:程序设计的过程、基本方法、程序设计语言的分类、Fortran语言的发展、Fortran77、Fortran95程序设计的构成及其兼容性,(考核概率20%)理解:算法的概念,掌握:算法的描述、程序基本结构与书写规则(考核概率100%)1 程序设计的过程算法的描述(重点,难点)2 程序设计的基本方法3 程序设计语言4 Fortran语言的发展5 Fortran95程序基本结构与书写规则(重点)6 Fortran95程序设计的兼容性第二节Fortran95开发环境(第一次上机实验课讲述)本节要求了解:在可视化编程的条件下Fortran 语言所具备的一些新的特点和功能,掌握:可视化编程所需的基础知识和一般步骤(考核概率100%)1 熟悉Fortran95 环境进入系统2 建立项目文件3 建立源程序文件4 输入源程序的内容5 编译、连接、运行作业:认真复习本章内容,预习第二章内容。

第二章数据类型及其运算本章重点:Fortran语言的基本数据类型及其常量表示方法难点:算术表达式的写法本章学时:1学时教学形式:讲授与上机实践相结合教具:计算机,投影仪第一节数据类型及其运算本节要求了解:各种类型常量、变量的定义、算术表达式的写法,(考核概率100%)掌握:Fortran语言的基本数据类型及其常量表示方法(考核概率50%)1 常量2 变量及其定义3符号常量及其定义4 Fortran表达式(重点)作业:认真复习本章内容。

FORTRAN95程序设计与数据结构基础教程课程设计

FORTRAN95程序设计与数据结构基础教程课程设计

FORTRAN95程序设计与数据结构基础教程课程设计一、课程设计概述本课程设计旨在让学生通过实战演练,掌握FORTRAN95程序设计与数据结构基础知识。

本课程设计需要完成以下任务:1.学习FORTRAN95程序设计语言的基础知识2.掌握FORTRAN95数据结构的基础知识3.基于FORTRAN95设计和实现一个程序,实现特定功能二、课程设计内容2.1 FORTRAN95程序设计语言的基础知识1.FORTRAN95的发展历史2.FORTRAN95程序结构3.FORTRAN95数据类型4.FORTRAN95运算符5.FORTRAN95输入输出语句6.FORTRAN95选择结构和循环结构7.FORTRAN95数组8.FORTRAN95子程序2.2 FORTRAN95数据结构的基础知识1.数据结构的概念与分类2.数组、队列、栈3.链表、树、图2.3 基于FORTRAN95设计和实现一个程序,实现特定功能本课程设计要求在掌握FORTRAN95程序设计语言和数据结构基础知识的基础上,设计和实现一个能够实现如下功能的程序:1.读取文件中保存的学生信息,包括学生姓名、学号、性别、年龄、成绩等2.在屏幕上输出学生信息,要求输出的信息包括学生姓名、学号、性别、年龄、成绩、排名等3.根据学生成绩,计算并输出班级平均分、最高分、最低分4.根据学生成绩,计算并输出优秀、及格和不及格的人数和比例5.根据学生成绩,将学生按照成绩排序,并按照成绩排名输出学生信息三、课程设计要求1.学生需使用FORTRAN95程序设计语言,完成指定任务2.程序设计需通过FORTRAN95编译器进行编译,并能正确运行3.代码需具备良好的注释和文档4.学生需提交程序设计报告,报告应包括以下内容:–设计思路–程序的详细设计–实现过程–测试结果分析四、课程设计考核方式学生将按照以下方式进行考核:1.对程序进行代码评分,包括代码的可读性、规范性、有效性和健壮性2.对程序设计报告进行评分,包括报告的逻辑性、清晰性、详细性和语言表达能力五、课程设计参考资料1.《Fortran 95/2003入门经典》2.网络教学资源3.教师提供的其他参考资料六、总结通过本课程设计,学生将能够深入了解FORTRAN95程序设计语言和数据结构基础知识,掌握程序设计能力,并拥有完成实际项目的能力。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Fortran95课程设计目录一,任务书...............................................................................1 二,员工档案(工资和个人所得税)..................................6 三,求解方程.........................................................................11 1,求解一元方程的根494-)(23++=x x x x f .. (11)1-1,二分法求解1-2,弦截法求解1-3,Newton 迭代法求解 (13)2,求方程的积分()dx x e x ba 5431+++⎰.......................................15 2-1,矩形法积分2-2,梯形法积分2-3,辛普生法积分3,Gauss-Jordan 法求联立方程组 (18)⎪⎩⎪⎨⎧=++=++=++8z 2y x 7z y 2x 6z y x四 ,课程总结 (22)2012级FORTRAN 95程序设计语言课程设计任务书一、实践目的通过本课程设计、加深学生对所学程序设计语言的理解,培养其程序设计能力以及综合解决实际问题的能力。

通过自己分析问题、分解问题、查找算法、编写、调试程序的过程,掌握FORTRAN 95程序设计与调试方法,提高应用所学知识借助计算机程序解决具体问题的能力。

二、设计任务1、综合应用所学FORTRAN 95知识点解决具体问题。

某小型公司有员工25人,员工信息包括员工编号,姓名,性别,工龄,工资(为方便,视其为三险一金减除后的金额),现在需要对这25名员工按照其工资进行个人信息的排序,计算每个人的个人所得税并添加到个人信息中。

请按以下要求进行设计⑴利用记事本创建员工基本信息文件。

⑵设计包含以上信息内容的派生类和结构体数组。

⑶以结构体数组为虚参编写排序子程序,可使用简单交换法、选择法和冒泡法中的任何一种。

⑷以普通变量为虚参,编写函数子程序计算个人所得税子程序。

⑸编写主程序完成以上工作,并将包含所得税信息的员工信息输出到另一个文本文件。

2、科学计算问题(三选二)ⅰ一元方程的根分别采用二分法、弦截法和牛顿迭代法求解一元方程的根。

要求如下:⑴用子程序编写求解一元方程的算法⑵一元方程自选,要求人人不同⑶在主程序中要调用三种方法计算同一个一元方程的根ⅱ某函数在某指定区间上的定积分计算分别采用矩形法、梯形法和辛普森法求解某个函数在给定区间上的定积分。

要求如下:⑴用子程序编写求解定积分的算法⑵函数自选,积分区间自定,要求人人不同⑶在主程序中要调用三种方法计算同一个定积分。

ⅲ线性方程组采用GAUSS-JORDAN法求线性方程组的根,要求如下:⑴用子程序编写上、下三角矩阵⑵方程组自选,要求人人不同。

三、设计报告1、任务内容:描述所选题目的内容2、设计思想描述:绘制各个问题算法的流程图3、源程序4、编程中遇到的问题、困难及其解决办法5、总结6、参考文献四、参考文献1、本学期教材2、网上个人所得税资料3、计算方法方面的书籍五、考核方式及评分办法1、程序调试结果占总课程设计成绩的60%2、课程设计报告书占总课程设计成绩的30%3、课程设计活动活跃度(提问)占总课程设计成绩的10%课程设计报告书的有关规定1、报告书需提交电子档和纸质档各一份。

2、报告书封面应写明本课程设计的名称和学院、专业、姓名、学号和指导教师姓名。

3、正文部分标题为宋体二号字,小标题宋体四号加粗。

正文宋体小四号,行距1.5。

源程序可采用分栏排版减少页面。

4、报告书中必须要有任务说明、设计思想阐述、源程序、程序运行结果截图、总结和参考文献部分5、若发现抄袭的,成绩直接判定不及格。

1,员工档案某小型公司有员工25人,员工信息包括员工编号,姓名,性别,工龄,工资(为方便,视其为三险一金减除后的金额),现在需要对这25名员工按照其工资进行个人信息的排序,计算每个人的个人所得税并添加到个人信息中。

思想:首先定义一个派生类型worker_information,其员工信息包括姓名name,性别sex,工龄age,工资salary,个人所得税tax再根据派生类型声明一个结构体数组tax(n)其元素个数为员工人数。

通过一个主程序,调用两个子程序,完成个人所得税的计算及其排序。

编写程序如下:program worker_informationparameter(n=25)type worker_informcharacter*6 namecharacter*2 sexinteger ageinteger salaryreal taxend typetype(worker_inform) work(n)open(1,file='information1.txt')do i=1,nread(1,10) work(i)%name,work(i)%sex,work(i)%age,work(i)%salaryenddo10 format(a6,3x,a2,6x,i2,9x,i8)close(1)do i=1,nwork(i)%tax=tax(work(i)%salary)enddoopen(2,file='information2.txt')do i=1,nwrite(2,20) work(i)enddo20 format(a6,3x,a2,6x,i2,9x,i8,f10.2)open(3,file='information3.txt')call fun(work,n)do i=1,nwrite(3,100) work(i)enddo100 format(a6,3x,a2,6x,i2,9x,i8,f10.2)containsfunction tax(x)real taxinteger xif(x<=1500)thentax=x*0.03elseif(x>1500.and.x<=4500)thentax=1500*0.03+(x-1500)*0.10elseif(x>4500.and.x<=9000)thentax=1500*0.03+3000*0.10+(x-4500)*0.20elseif(x>9000.and.x<=35000)thentax=1500*0.03+3000*0.10+4500*0.20+(x-9000)*0.25elseif(x>35000.and.x<=55000)thentax=1500*0.03+3000*0.10+4500*0.20+26000*0.25+(x-35000)*0.30elseif(x>5500.and.x<=80000)thentax=1500*0.03+3000*0.10+4500*0.20+26000*0.25+20000*0.30+(x-55000)*0.40 elsetax=x*0.40endifendfunctionsubroutine fun(a,n)type(worker_inform) a(n),tdo i=1,n-1do j=i+1,nif(a(i)%salary<a(j)%salary)then t=a(i)a(i)=a(j)a(j)=tendifenddoenddoend subroutineend原表:●●●2,求函数f(x)=49423++-x x x 的解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时,是通过判断)(x f 是否小于一个很小的数ε,如果是就认为f(x)为0(3)如果f(x)不为0,判断如果f(x1)和F(x)异号,则说明解在[]x x ,1区间,就以x1,x 为新的取值来重复步骤(2),这时用x 作为新的x2,舍掉原[]2,x x 区间;如果F(x2)和f(x)异号,则以x,x2为新的取值来步骤重复(2),这是用x 作为新的x1,舍掉原[]x x ,1区间。

这样做实际上是将求解的范围减小了一半,然后用同样的方法再进一步缩小范围,直到)(x f 小于ε为止。

program subject2_1real x1,x2,xreal course1,course2,fundoprint*,"输入x1,x2的值:"read*,x1,x2if(fun(x1)*fun(x2)<0.0)exitprint*,"不正确的输入!"enddox=course1(x1,x2)print*,"二分法求解得:" !二分法print 10,'x=',xx=course2(x1,x2)print*,"弦切法求解得:" !弦切法print 10,'x=',x10 format(a,f10.6)endreal function course1(x1,x2) !二分法求解real x1,x2,f1,f2,fxx=(x1+x2)/2.0fx=fun(x)do while(abs(fx)>1e-6)f1=fun(x1)if(f1*fx<0)thenx2=xelsex1=xendifx=(x1+x2)/2.0fx=fun(x)enddocourse1=xendreal function course2(x1,x2) !弦切法求解real x1,x2,f1,f2,fxx=x2-(x2-x1)/(fun(x2)-fun(x1))*fun(x2)fx=fun(x)do while(abs(fx)>1e-6)f1=fun(x1)if(f1*fx<0)thenx2=xelsex1=xendifx=x2-(x2-x1)/(fun(x2)-fun(x1))*fun(x2)fx=fun(x)enddocourse2=xendfunction fun(x)real xfun=x**3-4*x**2+9*x+4end打印结果如下:Newton 迭代法思想:用牛顿迭代法求解一元方程的根,基本思路为:(1)先任取一个x1。

(2)做通过点(x1,f(x1))做切线,即以f '(x1)为斜率作直线,这条直线与x 轴的交点为x2,用以下公式求出x2由于f '(x1)=21)1(x x x f ;x2=x1-(x1)f')1(x f .判断)2(x f <ε是否成立,如果是就找到了解,计算完成,(3)否则,重复步骤(2)以 f '(x1)为斜率过点(x2,f(x2)),求出与x 轴都的交点x3,……直到)(xn f <ε,认为xn 就是所求得的解。

相关文档
最新文档