请注意,这很大程度上取决于环境 - 一些COBOL编译器的行为不同,平台之间也有差异。 (从HP3000 COBOL到Linux NetCOBOL的移植代码我有很多乐趣。)但是一般来说......
1)本书可能会说答案是“未知”,因为编译器可能会初始化不同的东西。 INITIALIZE PAY-TABLE
可以PAY-VALUE的每个实例设置为零,或者它可以设置PAY-TABLE为空格(即由25 PAY-VALUE S的125字节的字符字段)。但是,它应该是(如前一种情况)为零。
2)这是不正确的。再一次,可能存在差异(由于#1中提到的原因),但它应该是零。因为付费价值尚未发生(在SUB = 9的PERFORM之前),它仍然是它初始化的值。
3)在#2中,同样的注意事项,答案应该是零。由于LOAD-TABLE
段落只执行到SUB变得大于10,PAY-VALUE(25)永远不会改变其初始值。
还要注意程序写得不好 - 没有一个STOP RUN.
在MAINLINE-ROUTINE
结束时,程序会继续并执行DISPLAY-ROUTINE
和LOAD-TABLE
段落最后一面。
还有,一些错别字,的PAY-VALUES最显着的定义(与小号)和PAY-VALUE的使用(无小号)。
下面是一个样品运行(我加了显示器前后MOVE
声明LOAD-TABLE
和PERFORM LOAD-TABLE
语句完成后,注意额外的显示器。)
Before move -- Sub: 01 PV: 00000
After move -- PV: 00100
Before move -- Sub: 02 PV: 00000
After move -- PV: 00200
Before move -- Sub: 03 PV: 00000
After move -- PV: 00300
Before move -- Sub: 04 PV: 00000
After move -- PV: 00400
Before move -- Sub: 05 PV: 00000
After move -- PV: 00500
Before move -- Sub: 06 PV: 00000
After move -- PV: 00600
Before move -- Sub: 07 PV: 00000
After move -- PV: 00700
Before move -- Sub: 08 PV: 00000
After move -- PV: 00800
Before move -- Sub: 09 PV: 00000
After move -- PV: 00900
Before move -- Sub: 10 PV: 00000
After move -- PV: 01000
Completed Perform of LOAD-TABLE.
PAY-VALUE(25): 00000
00000
Before move -- Sub: 11 PV: 00000
After move -- PV: 01100
记住,在现付VALUE值显示为数百(例如,00100而不是1),因为该字段被定义为9(03)V99,这意味着在其右侧有一个隐含的小数位和两位数字。
希望这会有所帮助!
必须缺少代码 - 样本不应该编译,因为1)缺少标题和2个缺失的时间段。 离开这个我仍然会说,*所有*给出的答案是错误的。 –
@SimonSobisch,谢谢你的回答!这些答案给我,这部分代码给我... – Abc
@SimonSobisch,第一个问题也有变种:5; 0; 10; 4.第二次:12; 0; 7;没有。第三名:25; 0; 10;没有。你认为其中有些是正确的吗? – Abc