Fortran语言基本句及程序改错语言基本句及程序改错语

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

Fortran语言基本句及程序改错语言基本句及程序改错语
实验2 Fortran语言基本语句及程序改错
实验目的:1,学习把已有程序导入新的project中。

2,学习整形、实行和双精度变量的差异。

3,熟悉常见的语法错误,学习程序纠错。

实验内容:1,建立一个project, 输入ch2_1
10 PROGRAM ch2_1
20 USE dflib
30 IMPLICIT none
40 INTEGER:: i,n,p
50 REAL x,y
60 PARAMETER (n=10)
70 OPEN(3,file="rec.dat")
80 READ(*,*) x
90 y=1.0
100 DO i=1, 100
105 IF(i.LE.n) THEN
110 CALL pn(i,p)
120 y=y+x**i/(p*1.0)
121 ELSE
125 END IF
130 ENDDO
140 WRITE(*,*) x, y, exp(x)
150 WRITE(3,160) x, y, exp(x)
160 FORMAT(3F12.6)
165 CLOSE(3)
170 END PROGRAM ch2_1
180 SUBROUTINE pn(i,p)
190 IMPLICIT none
200 INTEGER i,j,p
210 p=1
220 DO j=1,i
230 p=p*j
240 ENDDO
250 END SUBROUTINE pn
2,编译运行。

取n为不同数值,观察计算结果与真值的关系。

查找大的n值出现误差的原因(写在实验报告上)。

弄清整形、实行和双精度变量的差异。

3,分别去掉10、30、70、100、130、160、170等语句,看编译出错信息(写在实验报告上)。

熟悉常见的语法错误导致的编译问题。

4,完成上述操作的同学可以把自己编写的求一元二次方程复根的程序输入,调试、计算。

实验报告:1,写出把现有程序导入一个新建的project的步骤。

2,说明大n出错的原因及纠错方法。

3,记下各种出错信息。

实验步骤:
1、(1),运行Developer Studio图标,得到工作窗口,查看各个下拉菜单的内容,File(包含New, Open, Open workspace, Save等项)、Edit(包含Copy,Paste,Delete,Find等项)、Build(包含Compile,Build,Execute等项)、Help(Search)等的内容。

(2),选择File菜单中的New选项,建立工作空间。

在对话框中选Project标签,Project的格式选用Win32 Console Application,将工程命名为shiyan2。

(3),工作位置选在D:\MYPROJECTS\ shiyan2.project的名字叫shiyan2。

点击File菜单下的New选项,选定File标签下的Fortran Free Format Source File, 并在窗口右边File下键入程序名shiyan2。

(4),将源程序粘贴复制到工作空间,至此完成导入源程序。

2、运行程序我们发现当x 较小时,我们计算的结果与库函数的结
果一致;当x 较大时,会产生较大的误差。

从数学上说,计算精度与展开的项数n 有关,n 越大,结果越精确。

实际上就是大的n 依然不能减小误差,这个误差的来自p 的数据类型,因为p 是整型数,所以其最大值受限,当展开的项数多时,计算的数值不准。

要想得到正确的结果,需把p 在主程序和子程序中均改为双精度实型数。

具体修改如下:
40 INTEGER:: i,n !声明i,n为整型变量
50 REAL(8) x,y,p !声明x,y,p为实型变量
200 INTEGER i,j !声明i,j为整型变量
real(8) p
3、分别去掉10、30、70、100、130、160、170等语句后,编译出错的信息如下:
1.省去10语句:编译出错
D:\Program Files\DevStudio\MyProjects\4562\8989.f90(23) : Error: This name does not match the unit name. [CH2_1] 170 END PROGRAM ch2_1
2.省去30语句:编译没有出错
3.省去70语句:编译没有出错
4.省去100语句:编译出错
Error: An ENDDO statement occurred without a corresponding DO, DO WHILE, or DO TIMES statement. 130 ENDDO
5.省去130语句:编译出错
Error: An unterminated block exists. 100 DO i=1, 100 ^ Error executing df.exe.
6.省去160语句:编译出错
Error: This label has not been defined as a FORMAT label. [160] 150WRITE(3,160) x, y,exp(x) -^
D:\Program Files\DevStudio\MyProjects\4562\8989.f90(22) : Error: This label is undefined. [160] 150 WRITE(3,160) x, y, exp(x)
-^
Error executing df.exe.
7.省去170语句:编译出错
Error: This is an invalid statement; an END [PROGRAM] statement is required. 250 END SUBROUTINE pn ^ D:\ProgramFiles\DevStudio\MyProjects \4562\8989.f90(34) :Error: This name does not match the unit name. [PN] 250 END SUBROUTINE pn --^ Error executing df.exe.
4、求一元二次方程复根的程序输入,调试、计算。

源程序如下:
Programshiyan2
implicit none
real a,b,c,deta
real x1,x2
complex x3,x4
write(*,*) "zhaoyuanyuan"
write(*,*) "a"
read(*,*)a
write(*,*) "b"
read(*,*)b
write(*,*) "c"
read(*,*)c
deta=b**2-4*a*c
if(deta>=0) then
write(*,*) "方程有两个实根"
x1=-b/(2*a)+sqrt(deta)/(2*a)
x2=-b/(2*a)-sqrt(deta)/(2*a)
write(*,*)"x1=",x1
write(*,*)"x2=",x2
else
write(*,*) "方程有两个复根"
x3=cmplx(-b/(2*a),sqrt(-deta)/(2*a))
x4=cmplx(-b/(2*a),-sqrt(-deta)/(2*a)) write(*,*)"x1=",x3 write(*,*)"x2=",x4
end if
end。

相关文档
最新文档