FORTRAN语言题解及分析

上传人:gg****m 文档编号:205239193 上传时间:2021-10-28 格式:DOC 页数:10 大小:86KB
返回 下载 相关 举报
FORTRAN语言题解及分析_第1页
第1页 / 共10页
FORTRAN语言题解及分析_第2页
第2页 / 共10页
FORTRAN语言题解及分析_第3页
第3页 / 共10页
FORTRAN语言题解及分析_第4页
第4页 / 共10页
FORTRAN语言题解及分析_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《FORTRAN语言题解及分析》由会员分享,可在线阅读,更多相关《FORTRAN语言题解及分析(10页珍藏版)》请在金锄头文库上搜索。

1、FORTRAN语言题解及分析FORTRAN语言题解及分析苏民生教授1994-07-08阅读下列程序说明和FORTRAN程序,把应填入其中空白处 的字句,写在答卷的对应栏内。程序说明本程序按泰勒展开式计算Sin X的近似值。Sin X的泰勒展 开式为SinX=x / 1! - x3 / 3! + x5 / 5! - x7 / 7! + 二计算精度为10-6o程序中T用来存放泰勒展开式中的一项。程序EPS=lE-6READ(*, 5)X5 FORMAT(F5. 2)SINX=O. 0T=XN=110 IF( (1) THENSTNX= (2)N=N+1T=(3)(4)(5)WRITE (*. 20

2、)X, STNX20 FORMAT (IX, STN(, F5. 2,)二,F14. 6)STOPEND答案(1) ABS (T).GE. EPS 或 ABS(T). GE. IE-6(2) SINX+T(3) -T*X *X /(2.0*N-2.0)/(2.0*N-L0)(4) GOTO 10(5) ENDIF分析本题是级数求和问题,应当由一个循环完成求和动作,而在 循环之前为预置动值,在循环之后输出结果。由程序可知,该循环应 由块IF结构和有关语句构成,(5)应为块IF结构终结语句ENDIF, 而(4)应当是GOTO 10,以构成while-do循环结构。(1)是需要继续循环的条件。由程序

3、说明,计算时要求累加项T有T二10-6, 而舍去T10-6的项T。由此,(1)应为ABS(T).GEEPS,也可以是 ABS(T).GE. E-6o如果不用函数ABS,可以是 (T. GE. EPS). OR. (T. LE. -EPS)。(2) 是累加和SINX+To(3) 是新项表达式,由展开式前后项关系,应有T二-T*X*X /(2.0*N-2.0)/(2.0*N-1.0)注意由(4)、(5)构成的 while-do 结构, 也可以将写为ENDIF,而将写成IF(ABS(T).GE. EPS)GOTO 10, 但这种写法使块IF的判断与逻辑IF的判断重复,并不好。试题二(程序员级下午试题

4、十)阅读程序程序说明(略)程序SUBROUTINE EXEC (A, M, N, OP, OPE1, 0PE2, OPE3, L)REAL A(M, N,B(1000)INTEGER OPE1(L), 0PE2(L), OPE3(L)CHARACTER OP(L), CHDO 10 1=1, LK二OPE3(1)IF (CH. EQ/f) THENWRITE (*. *)A( ,MOD(KT,M)+1, (KT)/M+1,)二READ (*. *) (2)ELSEIF (CH.EQ+)THENB(K)二ELSEIF (CH.EQ)THENB(K)二END IFCONTINUEK= 1DO 20

5、 J=(5)DO 20 1=(6)(7)=B(K)K = K+lRETURNEND答案(1) CH=OP(I)(2) B(K)或 B(0PE3(I)(3) B(OPE1(I)+B(OPE2(I)(4) B(OPE1(I)-B (0PE2(I)(5) 1,N 或 1,N, 1(6) 1,M 或 1,M, 1(7) A (I, J)分析程序说明非常详细。子程序EXEC的功能是依据输入数据0P、 0PE1、0PE2和0PE3,最终求出数组A,从而完成通用表格计算任务。 0P、0PE1、0PE2(I)和OPE3(I)是程序说明中最后一个表中的 一行数据,代表了条计算指令。数组B是中间工作数组,B(l)

6、 ,B(2), B(3),分别对应于A(l, 1), A(2, 1), A(3, 1),(A元素按 先列后行顺序编号),子程序中先求出B,再求A。 观察程序结构, EXEC的执行部分可分为上、下两块。下块由相嵌两层D0循环构成,应是由B元素值求出A元素值,(7)是传送目的地,应为A(L J), 由“先列后行编号”,应为1, N(可为1, N, 1),应为1, M(可 为1, M, Do EXEC前面一块由外层DO循环和内层块IF结构组成, 应是产生B元素值的处理过程。在块IF中的判断条件用到变量CH, 其值应是指令操作符,应在使用前对CH赋值,因此,(1)应为 CH=0P(I)o(2)是操作符

7、为I时读入数据应存入的目的地,它应是相应的B元素之值,应填入B(K)或B(OPE3(I)o(3)、(4)是加法或减法指令中产生和或差的表达式,应当是两个操作数之和或差。 由程序说明,OPEl(I)、OPE2(D等用于指明表元位置,它们不是操作 数,表元值才是操作数。OPE1、0PE2等则相当于操作数的“地 址”,(因此,程序说明中将OPE1等称为“操作数”,是不确切的。) 操作数则应是相应表元值B(OPE1),B(OPE2(I)等。由此,(3)应 为 B (OPE1 )+B (OPE2 (I), (4)应为 B(OPE1 (I) -B (0PE2 (I)试题三(程序员级下午试题十五)阅读下列程

8、序说明和FORTRAN程序,把应填入其中空白处的 字句,写在答卷的对应栏内。程序说明欧乔马特里克(I J MATRIX)博士在十进制数中发现 了一组有趣的公式序列:9X1+2=119X12+3=1119X123+4二1111 9 12345678+9=111 111 111我们称10进制数的基为10。同样,对B(B=2, 3,)进 制数来说,其基为B。本程序对任一基B(3WBW10)是否存在上述性 质的公式加以验证。例如4进制中的公式序列为:3X1+2=113X12+3=111值得注意的是,这些公式都必须用B进制运算规则计算。若把公式记为XXY+Z二肌 则程序中X和Z存放在整型变量中,Y和W

9、分别存放在数组N和M中,每个数组元素存放Y或W的一位数字,其 中N(l)和M(l)分别存放Y和W的低位数字。子程序MUL用来实现数组N中的数与整数J相乘,其乘积存 贮在数组M中。其中NUM表示N中数的位数,IB为数制的基。子程 序ADD用来实现数组M中的数与整数J相加,其和存贮在数组M中, 其中NUM和IB的含义同上。程序INTEGER B,N(100),M(100)(1)READ (*, *) BFLAG=.TRUE.DO 20 1=1, (2)DO 30 J= 1,I 30 N(JE+1-JCALL MUL(N,M,BT, I, B)CALL ADD ( (3)DO 60 K=1,1+1I

10、F(M(K).NE. 1) (4)60 CONTINUE20 CONTINUEIF (FLAG) THENWRITE (*, *)0K.ELSEWRITE (*, *)ERROREND IFSTOPENDSUBROUTINE MUL (N, M, J, NUM, IB)DIMENSION N(NUM), M(NUM+1)DO 5 I = 1,NUM+15 M = 0IC=ODO 10 1=1, NUMNN 二 N(I)*J+IC(5)10 M=(6)(7)RETURNENDSUBROUTINE ADD (M, J, NUM, IB) DIMENSION M(NUM)(8)DO 10 1=1,

11、NUMIF (M(I).GE. IB) THENM =M(I)-IBM(I+1)二 M(I+1)+1END IF10 CONTINUERETURNEND答案(1) LOGICAL FLAG(2) B-2(3) M, Hl, 1+1, B(4) FLAG二.FALSE.(5) IC=NN/IB或 IC=(N(I)*J+IC)/IB(6) MOD (NN, IB)或 NN-NN/IB*IB 或 NNTC*IB(7) M(I)=IC或 M(NUM+1)=IC(8) M州+J试题三分析本题程序由3个程序单位组成。主程序验证给定公式左式 X*Y+Z之值是不是“全1”,并给出验证结果,输出0K或ERROR

12、o计 算X*Y时调用子程序MUL,该乘积与之相加时调用另一个子程序ADDo 主程序中使用变量FLAG标志验证结果,它取值为.TRUE.或.FALSE., 是逻辑变量,应在使用之前说明,因此,(1)应当是类型语句LOGICAL FLAGo而(4)是当存放左式计算结果某一位数值不等于1时的处理, 此情况表明验证结果是否定的,与后两块IF的的输出参照,此处应 为FLAG=. FALSE. o (2)作为I的上界值,决定于数制基数B。在说 明中,当B=10时右式数字1的数目依次为2, 3, 4,,9,此时I 值应依次为1, 2,,8,因此应为B-2。 调用MUL计算X*Y之 后,调用ADD计算乘积与Z

13、之和。由说明,Z值为2, 3,,即应为 1+1。X*Y已存放在数组M各元素中,与Z相同后得到的各位数字仍 放在M各元素中。(3)是调用ADD时的实参表,与形参表相对应。形 参J应是相加的整数,对应实参为1+1。NUM是数组M原来实有的元 素数目,即X*Y乘积的位数,对应实参也应是HE IB是数制基数, 对应实参应为B。因此,(3)应为M, 1+1, 1+1, B。 子程序ADD中,(8) 之后是对于MQ)的进位处理,表示与J相加的操作应在(8)进行, J应加到表元最低位M(l)中,应填写为M町+L至于是否M(l) 需要进位,以后如果低位有进位高位是否随之需要进位,则由后面 D0循环完成。现在还

14、有三处填空都在子程序MUL中。这个程序是 将数组N表示的IB进制数乘以整数J,乘积的各位数字放在数组M 元素中。子程序中变量IC应是进位值,J每和NQ)相乘之后都要考 虑到是否进位,(5)应为求进位值的赋值语句IC=NN/IB(整除),(6) 则应是从NN中去掉进位值的表达式M0D(NN, IB),或写或NN- (7)在DO循环之后,此时下标最大的M元素应存入进位值,(7)应为 M(I)=IC,也可以是 M(NUM+1)二IC,但不应是 M(1+1)二IC试题四(高级程序员级下午试题九)填空程序说明本程序是一个财务科目汇总的子程序。科目编号用三位无符号整数表示,例如现金科目的编号为 100,则

15、100. 1, 100. 2就是它的二个子目录。而100. 1. 1是子科目 100.1的子科目。本程序中假定一个科目最多有三层子科目。子程序中,数组SUBJ(4, L)用来存放科目编号,L是系统中科目和子科 目的总数(假定L 1000) o规定在数组SUBJ中父科目编号必须位于它的子目录编号之前。子程序中,逻辑数组LD(L)存放相应的科 目或子科目的借、贷方类型,.TRUE.表示贷方,.FALSE.表示借方。 数组A(L)存放相应科目金额。数组SUBJ、LD和A的值由调用程序提 供。其中位于叶结点上的子科目金额已存放在数组A中的相 应位置 上,A中其他位置上的值已置为0.0。子程序中,数组FATHER用记录相应子科目的父科目在SUBJ中的位置(列下标),供汇总时使用。 规定对 应于科目的FATHEER元素的值为0。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号