当前位置: 代码迷 >> 其他开发语言 >> Pascal中关于writeln()语句的一些疑点
  详细解决方案

Pascal中关于writeln()语句的一些疑点

热度:252   发布时间:2016-05-02 04:03:17.0
Pascal中关于writeln()语句的一些疑问?
下面的程序:

PROGRAM ch36;
CONST
    s='let us begin';
    r=3;
    pi=3.14;
BEGIN
    writeln(s);
    writeln('radium is:',r);
    writeln('Area of circle is:',pi*r*r);
    writeln('Area of circle is:',pi*r*r:10);
    writeln('Area of circle is:',pi*r*r:10:3);
END.

在Free Pascal IDE  Version 0.9.2运行结果如下:


■ Free Pascal IDE  Version 0.9.2
Running "c:\ch36.exe "
let us begin
radium is:3
Area of circle is: 2.8260000000000000E+0001
Area of circle is: 2.8E+0001
Area of circle is:    28.260



*****************************************************
按照单域宽输出格式的说明writeln(x:n)在n(n为整数)个字符宽的输出域上按右对齐方式输出x的值,若n大于x的实际位数,则在x值前面补(n-x的实际位数)个空格,若x的实际位数大于n,则自动突破限制。
而最后三行的结果,冒号和2之间为什么都有一个空格?仔细观察发现,倒数第二行的结果为什么略去了8后面的26不一样?而且除了刚才提到的空格,倒数第二行的输出结果实际上只占了9位,而不是程序中的十位?若是认为倒数第二行的结果x和倒数第三行那样的结果,它的位数已经突破了10位,应该是自动突破限制,显示的和倒数第三行一样的结果。为什么又不一样呢?

------解决方案--------------------
倒数第二行的输出结果实际上只占了9位,而不是程序中的十位?

10应该是指整数部分吧
------解决方案--------------------
上面理解有误,delphi编译结果为:

let us begin
radium is:3
Area of circle is: 2.82600000000000E+0001
Area of circle is: 2.8E+0001
Area of circle is:    28.260

至于Free Pascal不清楚了。
------解决方案--------------------
我用Delphi XE的命令行编译器22.0和FreePascal 2.4.0的编译器测试了一下,输出结果是:
let us begin
radium is:3
Area of circle is: 2.82600000000000E+0001
Area of circle is: 2.8E+0001
Area of circle is:    28.260


------解决方案--------------------
这个论坛哪~~~ 连续的空格被合并成一个了。
输出结果是:
let us begin
radium is:3
Area of circle is:_2.82600000000000E+0001
Area of circle is:_2.8E+0001
Area of circle is:____28.260

每个下划线代表一个空格


------解决方案--------------------
第三个输出是肯定没有问题的,但是第二个为什么不是2.82E+0001或者2.83E+0001,存疑。第一个输出为什么有一个前导空格也存疑,因为浮点运算不指明类型,默认是双精度的,有15位小数的精度,这个输出有前导空格,却没有给出足够的小数位。



------解决方案--------------------
pascal, so special! ~~~
  相关解决方案