F90实验报告.docx
《F90实验报告.docx》由会员分享,可在线阅读,更多相关《F90实验报告.docx(19页珍藏版)》请在冰豆网上搜索。
F90实验报告
实验1FORTRAN90的编程环境与简单程序设计
一、实验目的
1.熟悉FORTRAN90的编程环境——FortranPowerStation4.0,并能够在此环境下编写FORTRAN90的程序。
2.掌握FORTRAN90程序中所用到的类型说明语句、赋值语句、读、写语句等语句的语句格式,理解并掌握这些语句的功能。
3.掌握简单程序设计方法,能够用简单的语句编写一些简单的应用程序。
4.掌握FORTRAN90源程序的结构特点与书写规范。
二、实验要求
1.根据题目,设计各题算法并画出流程图,按照流程图编写程序。
2.对每个程序认真进行语法检查与逻辑检查。
3.上机调试程序。
按各个程序输入计算机,并且编译和连接,如果在编译、连接中有错误信息,则要根据这些信息找到程序中的错误所在,然后修改程序,直至正确。
4.运行程序,记录数据输入和数据输出的情况。
5.写出实验报告。
三、实验内容
1.开机;进入FortranPowerStation4.0集成工作环境,了解工作环境及其菜单的使用,输入如下FORTRAN90源程序,并以A1.F90存盘。
PROGRAMEX1
IMPLICITNONE
PRINT*,'2+3=',2+3
PRINT*,'Thisisaprogram!
'
ENDPROGRAMEX1
编译、链接、运行后,结果是:
2.输入并调试以下程序,查看运行结果。
PROGRAMEX2
IMPLICITNONE
INTEGER:
:
A,B,C
READ*,A,B
C=A+B
PRINT*,'A+B=',C
ENDPROGRAMEX2
运行时,输入2,3↙,则结果是:
3.程序设计
⑴已知一个球的半径,求它的表面积(4
)、体积(
)及经过球心的横切面的直径(2R)、周长(2
r)和面积(
)。
⑵某单位在发放工资时,为每个职工准备一个工资袋。
假定币值为100元、50元、10元、5元、2元、1元、5角、2角和1角9种,设某职工的工资为X,试计算他的工资袋里各币值的张数。
⑶求方程X2+3X-1=0的根。
实验2选择结构程序设计
一、实验目的
1.掌握关系表达式、逻辑表达式的正确书写形式,能够画出分支结构的结构化流程图。
2.掌握逻辑IF语句、块IF结构、多重条件IF结构、CASE结构等语句的语句格式、基本功能及执行过程。
3.掌握选择结构程序设计的一般方法,能够用多种方法编写同一程序。
4.熟练掌握分段函数、求一元二次方程根的程序设计方法等问题的程序设计方法。
二、实验要求
1.按照题目要求,对编程各题画出结构化流程图。
2.根据流程图,编写出各题的程序,并认真进行静态检查。
3.对于题目⑴,要求用X=-2,X=0,X=3三个值分别检验程序,并输入X的值为-1、1,观察程序运行情况。
4.对于题目⑵,要求分别输入各分数段的成绩,观察程序运行情况。
5.对于题目⑶,要求分别用下面三组输入来验证程序:
1,6,9
2,5,3
3,6,5
6.详细记录输入数据的情况和输出结果的数据,写出实验报告。
三、实验内容
1.运行下面程序:
PROGRAMEXAM1
IMPLICITNONE
INTEGER:
:
A,B,C
A=5;B=3;C=A.AND.B
PRINT*,C
ENDPROGRAMEXAM1
结果为:
2.运行下面程序:
PROGRAMEXAM2
LOGICAL:
:
L1,L2,L3
L1=.TRUE.
L2=2>3;L3=.NOT.L2.AND.L1
PRINT*,L1,L2,L3
ENDPROGRAMEXAM2
结果为:
3.编写程序:
⑴编写计算分段函数:
⑵由键盘输入学生成绩,要求输出该成绩的等级A,B,C,D,E。
其中60分以下为E;60~70分为D;70~80分为C;80~90分为B;90~100分为A。
要求分别用块IF和块SELECTCASE语句编写。
⑶求一元二次方程
的根。
实验3循环结构程序设计
一、实验目的
1.掌握几种循环语句的语句格式、语句功能及执行过程,能够画出循环结构的结构化流程图。
2.掌握循环嵌套的基本格式及执行过程,理解循环嵌套与并列循环的不同之处。
3.掌握循环结构程序设计的一般方法,能够灵活运用几种循环语句和循环嵌套编写简单的程序。
4.熟练掌握求各种级数、阶乘和判断素数等问题的程序设计方法。
二、实验要求
1.按照编程题目的要求设计各题的算法,画出相应的结构化流程图。
2.按照流程图编写出各题的程序,并仔细进行逻辑结构和语法的检查。
3.掌握循环程序调试的特点,在必要的时候可采用设置断点的方法,查看循环过程中变量的变化情况。
4.详细记录数据的输入、输出及其它程序调试情况,写出实验报告。
三、实验内容
1.下面程序功能是求正整数M,N的最小公倍数。
在标注行有错,请改正。
PROGRAMEXAMPLE
IMPLICITNONE
INTEGER:
:
M,N,K,T,I
READ*,M,N
I=1
IF(M<==ERROR1
T=M;M=N;N=T
ENDIF
K=M
DOWHILE(MOD(K,N)=0)!
<==ERROR2
I=I+1
K=K*I!
<==ERROR3
ENDDO
PRINT*,K
END
ERROR1处正确的语句是:
ERROR2处正确的语句是:
ERROR3处正确的语句是:
2.下面程序功能是判断一个三位正整数N是否是素数,若是则输出“YES”,否则输出“NO”。
在标注行有错,请改正。
程序如下:
PROGRAMEXAM
IMPLICITNONE
INTEGER:
:
N,I
LOGICAL:
:
L
L=.TRUE.
READ(*,'(F3)')N!
<==ERROR1
DOI=2,N/2
IF(MOD(N,I)=0)!
<==ERROR2
PRINT*,'NO'
L=.FALSE.
EXIT
ENDIF
ENDDO
IF(L=.TRUE.)PRINT*,'YES'!
<==ERROR3
END
ERROR1处正确的语句是:
ERROR2处正确的语句是:
ERROR3处正确的语句是:
3.编写程序:
⑴输入两个正数M、N,求最大公约数和最小公倍数。
⑵求阶乘的值T=N!
。
⑶求S=1-1/(1*2)+1/(2*3)+……+
/(N*(N+1))的值,直到某项绝对值小于
为止。
⑷编程,打印以下图形:
*
***
*****
*******
*********
*******
*****
***
*
⑸输出100~500内的所有个位数字为1的素数,并统计其个数。
⑹打印出1000以内的所有水仙花数(所谓水仙花数是指一个三位正整数,其各位数字的立方和等于该数本身,例如:
407=4*4*4+0*0*0+7*7*7,则407是一个水仙花数)。
实验4子程序设计
一、实验目的
1.理解子程序的概念,理解FORTRAN90的内部过程和外部过程的概念,能够对于编程题分别采用这两种过程编程实现,以比较他们的异同点。
2.理解虚实结合的基本概念,掌握函数子程序、子例行子程序的一般设计方法,能够用过程的方法编写一些简单的程序。
3.验证FORTRAN90所提供的格式符,并在程序中应用。
4.熟练掌握求阶乘、求累加和、用牛顿迭代法求方程根等一些常用算法的通用程序设计方法。
二、实验要求
1.子程序是为完成特定的功能而设计的,应使其具有良好的通用性,为此,通常的数据输入、输出尽可能安排在主程序中进行。
2.按照题目的要求设计算法,并写出相应的程序。
3.上机调试各程序。
因为每个程序都是由多个程序单位组成,因此每个程序的调试都要在各个程序单位上进行。
在调试过程中要充分注意各个程序单位编译时计算机给出的信息,并利用这些信息对程序进行修改和调试。
4.掌握函数子程序、子例行子程序调试的特点,在必要的时候可采用设置断点的方法,查看函数子程序、子例行子程序的执行情况。
5.详细记录数据的输入、输出及其它程序调试情况,按要求写出实验报告。
三、实验内容
1.子例行子程序ZZ的功能是将N行M列的整型矩阵A转置。
调用该子程序,求一个3行4列的整型矩阵X的转置矩阵Y并打印。
请在画线处填空,以完成题目的要求。
PROGRAMEXAM
IMPLICITNONE
INTEGER,DIMENSION(3,4):
:
X,Y(4,3)
INTEGER:
:
I,J
DOI=1,3;READ(*,'(4I4)')(X(I,J),J=1,4);ENDDO
PRINT'(1X,4I4)',((X(I,J),J=1,4),I=1,3)
________
PRINT*,'输出转置矩阵:
'
WRITE(*,'(1X,3I4)')((Y(I,J),J=1,3),I=1,4)
ENDPROGRAMEXAM
SUBROUTINEZZ(A,N,M,B)
IMPLICITNONE
INTEGER:
:
N,M,I,J
INTEGER,DIMENSION(:
:
):
:
A(N,M),B(M,N)
DOI=1,N
DO___________
___________
ENDDO
ENDDO
RETURN
ENDSUBROUTINE
2.编写程序:
⑴编写一个子例行子程序IAC用来求N!
(值为实型)。
子程序中应对自变量进行检查,对不合理的变量给出错误信息。
然后求下式(R和K的值由键盘输入)的值。
⑵用牛顿迭代法编写一个通用函数求方程的一个根。
并求以下两个方程的根:
⑶求s=
=1!
+2!
+......+10!
实验5数组及应用
一、实验目的
1.理解数组的概念,掌握数组的定义、数组元素的使用;理解和掌握动态数组的概念与使用、数组在过程中的应用。
2.学会用数组的方法编写一些简单程序,理解数组在程序设计中的重要作用。
3.熟练掌握数组在矩阵运算、排序查找、数据统计及求杨辉三角等方面的程序设计方法。
二、实验要求
1.按照题目的要求设计各题的算法,并写出程序。
2.FORTRAN90中多维数组元素的排列顺序是以列序为主序的,因此在对多维数组进行输入输出时,要注意观察元素的输入输出顺序。
3.上机调试各程序。
调试程序时,要充分注意和利用编译、连接和运行时计算机给出的信息,要求能够根据这些信息,较熟练地判断出程序的语法错误和一般的逻辑错误。
4.选择一些有代表性的数据作为输入数据,运行程序。
详细记录数据的输入、输出信息,按要求写出实验报告。
三、实验内容
1.下面程序是用折半查找法在给定的一维有序(假设是从小到大)整型数组中查找给定的元素K。
若找到,则返回该元素在数组中的下标,若数组中没有该元素,则返回0。
请在画线处填空,以完成题目的要求。
PROGRAMEXAM
IMPLICITNONE
INTEGER,DIMENSION(10):
:
X
INTEGER:
:
K,LOW,HIGH,MID
READ*,X;PRINT*,'请输入要查找的K:
';READ*,K
LOW=1;HIGH=10
DOWHILE(LOW<=HIGH)
MID=(LOW+HIGH)/2
IF(________)EXIT
IF(X(MID)>K)THEN
HIGH=MID-1
ELSE
________
ENDIF
ENDDO
IF(________)THEN!
<==BLANK3
PRINT*,0
ELSE
PRINT*,MID
ENDIF
END
2.编写程序:
⑴将某班N(N为符号常量)个同学的成绩(整型)放入数组S中,编程求该班的平均成绩(实型),并统计各分数段上的学生人数。
分数段为:
100分,90~99分,80~89分,70~79分,60~69分,60分以下。
⑵设数组A(3,4),编程实现下列操作:
①找出最大元素及其所在的行与列;
②找出第K行的的最小元素及其所在的列,并求出第K行元素之和;
③交换第I列与第J列的元素。
⑶输入10个整型数据,然后任选一种方法进行排序。
⑷编写一个程序,打印杨辉三角形的前10行。
1
11
121
1331
14641
……
⑸已知A(5,5)是一个整型数组,编程求两条对角线上的最大元素及所在的位置。
实验6字符型数据的处理与派生类型的应用
一、实验目的
1.理解字符串和字符子串的概念,掌握字符型数据的处理的一般方法和程序设计的一般方法,熟练掌握字符子串在图形处理程序设计方面的应用。
2.理解派生类型概念,掌握派生类型的定义和使用方法,能够用正确的方法给派生类型变量赋值、输出。
3.理解成员的概念,能够用派生类型进行学生档案、职工档案等信息处理。
二、实验要求
1.根据题目要求,进行各种程序测试与验证,并记录结果。
2.按照编程题目的要求编写出程序,注意总结各题的编程思路。
3.上机调试程序。
将各程序输入计算机,并进行编译和连接,如果在编译、连接中有错误信息,则要根据这些信息找到程序中的错误所在,然后修改程序,直至正确。
4.详细记录数据的输入、输出信息,按要求写出实验报告。
三、实验内容
1.下面程序的功能是从键盘输入一个长度不超过20的字符串STR,统计其中大写字母A的个数N。
在标注行有错,请改正。
PROGRAMEXAM
IMPLICITNONE
CHARACTER(LEN=20):
:
STR
INTEGER:
:
I,N
READ'(I20)',STR!
<==ERROR1
N=1!
<==ERROR2
DOI=1,20
IF(STR(I,I)='A')N=N+1!
<==ERROR3
ENDDO
PRINT'(1X,I6.2)',N
ENDPROGRAMEXAM
ERROR1处正确的语句是:
ERROR2处正确的语句是:
ERROR3处正确的语句是:
2.下面程序从第2列开始打印下面图形:
A
A
A
A
A
A
A
请在画线处填空,以完成题目的要求。
PROGRAMEXAM
INTEGER:
:
I
CHARACTER(LEN=5):
:
LINE
LINE=''
DOI=1,4
LINE(_______)='A'
PRINT*,LINE
LINE=''
ENDDO
DOI=1,3
LINE(_______)='A'
PRINT*,LINE
_______
ENDDO
ENDPROGRAMEXAM
3.编写程序:
⑴假设一个班级有10名学生,试建立一个学生成绩表,记录每个学生的学号、姓名、和五门课程的成绩,编程求出每个学生的总分,并按照总分从高分到低分输出该班级学生成绩表和各门课程的平均分。
输出格式为:
名次
姓名
成绩1
成绩2
成绩3
成绩4
成绩5
总分
平均分
1
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
10
…
…
…
…
…
…
…
…
⑵从键盘任意输入10个长度不超过10的字符串,编程,按字典的次序输出这些字符串。
⑶编程输出下面图形:
1
121
12321
1234321
123454321
实验7模块的定义和使用
一、实验目的
1.掌握模块的定义和使用方法。
2.熟练掌握模块在提供公用数据、公用派生类型、子程序接口方面的应用。
3.通过有限整数集合抽象数据类型的定义,了解模块在超载和抽象数据类型定义中的作用。
二、实验要求
1.按照题目的要求设计各题的算法,并写出程序。
2.上机调试各程序。
调试程序时,要充分注意和利用编译、连接和运行时计算机给出的信息,要求能够根据这些信息,较熟练地判断出程序的语法错误和一般的逻辑错误。
3.选择一些有代表性的数据作为输入,测试模块中的每一个过程。
4.详细记录数据的输入、输出信息,按要求写出实验报告。
三、实验内容
1.下面程序的功能是用超载赋值号的方法,编写一个程序,使得一个逻辑型的值能够直接赋给一个整型变量。
如执行语句:
I=L时(其中I是整型,L是逻辑型),若L值为.FALSE.则I的值为0,若L值为.TRUE.则I的值为1。
请在画线处填空,以完成题目的要求。
程序如下:
MODULEI_L
INTERFACE____________
MODULEPROCEDUREFZ
ENDINTERFACE
CONTAINS
SUBROUTINEFZ(I,L)
INTEGER,INTENT(OUT):
:
I
LOGICAL,INTENT(IN):
:
L
IF_________
I=1
ELSE
I=0
ENDIF
ENDSUBROUTINEFZ
ENDMODULEI_L
PROGRAMMAIN
USE________
IMPLICITNONE
INTEGER:
:
I,J
I=.TRUE.
J=.FALSE.
PRINT*,I,J
ENDPROGRAMMAIN
2.编写一个交换任意两个变量值的类属过程,其变量类型可以整型或字符型。
3.自定义运算符.PRIM.,其功能是判断任意输入的整数是否为素数的运算。
然后编写一段引用此模块的程序来测试该程序:
当输入的数值是素数时,输出1,否则输出0。
实验8指针、递归与文件
一、实验目的
1.掌握指针变量的定义和使用、动态变量的概念、指针数组的使用等。
2.理解递归的概念,知道递归方法除了有它的优点(使复杂问题变得简单,程序简单、清晰)外,也有它的缺点(运行时间长、占用存储空间多)。
此外也不是每个问题都合适用递归方法求解。
3.熟练掌握利用递归方法求阶乘、Fibonacci数列、勒让德多项式等问题的程序设计方法。
4.掌握递归程序设计的一般方法。
二、实验要求
1.按照编程题的要求写出相应的程序。
2.上机调试各程序。
调试程序时,要充分注意和利用编译、连接和运行时计算机给出的信息,要求能够根据这些信息,熟练地判断出程序的错误。
2.选择不同的输入数据测试程序。
3.详细记录数据的输入、输出信息,按要求写出实验报告。
三、实验内容
1.下面程序是用指针的方法实现将整型变量A、B的内容互换。
在标注行有错,请改正。
程序如下:
PROGRAMEXAM1
IMPLICITNONE
INTEGER:
:
A,B,C!
<==ERROR1
REAL,POINTER:
:
P1,P2,P3!
<==ERROR2
READ*,A,B
C=B
P1=>A
P2=>B
P3=B!
<==ERROR3
PRINT*,A,B
P2=P1
P1=P3
PRINT*,A,B
ENDPROGRAMEXAM1
ERROR1处正确的语句是:
ERROR2处正确的语句是:
ERROR3处正确的语句是:
2.运行下面程序:
PROGRAMEXAM2
IMPLICITNONE
INTEGER,TARGET:
:
A=1,B=3
INTEGER,POINTER:
:
PA,PB,T
PA=>A;PB=>B
T=>PA;PA=>PB;PB=>T
PRINT100,PA,PB
PRINT100,A,B
100FORMAT(1X,2I4)
ENDPROGRAMTEST5
结果为:
3.编写程序:
⑴用递归方法求FIBONACCI序列。
⑵用递归方法求
的值(n为大于0的整数)。
⑶用递归方法求N阶勒让德多项式的值。
递归公式为: