当前位置: 代码迷 >> C语言 >> 这段程序我不理解
  详细解决方案

这段程序我不理解

热度:409   发布时间:2008-06-25 14:16:18.0
这段程序我不理解
#include <stdio.h>
int main (void)
{
const double RENT = 3852.99;
printf ("*%f*\n",RENT);
printf ("*%e*\n",RENT);
printf ("*%4.2f*\n",RENT);
printf ("*%3.1f*\n",RENT);
printf ("*%10.3f*\n",RENT);
printf ("*%10.3e*\n",RENT);
printf ("*%+4.2f*\n",RENT);
printf ("*%010.2f*\n",RENT);
return 0;
}



书上说程序使用关键字const创建了一个符号常量.输出为:

*3852.990000*
*3.852990e+03*
*3852.99*
*3853.0*--------问题
*这个不知道该怎么空格*---------问题
*这个不知道该怎么空格*---------问题
*+3852.99*
*0003852.99*

红色区域不是很明白 , 能解释下吗?[详细点]   


顺便在帮我看看程序里有无错误.



                                           谢谢
搜索更多相关的解决方案: 空格  常量  const  符号  

----------------解决方案--------------------------------------------------------
程序没错。

第一行以默认的%f打印,默认的小数位是6;
第二行以默认的%e打印,小数位也是6位;
第三、四、五行分别规定了(刚才这里是有点问题)字段位为4、3、10,不足的话自动扩展,多余的以空格显示;又分别规定了右边的小数点位数,少的补0,多的四舍五入;
第六行也是一样,只是这次是规定%e格式显示的字段位;
第七行是把+也显示出来;第八行第一个0表示前导作为填充用,10还是代表字段位。

[[it] 本帖最后由 安静的小羊 于 2008-6-25 16:03 编辑 [/it]]
----------------解决方案--------------------------------------------------------
有2个不太明白

1.不足的话自动扩展,多余的以空格显示-----我该怎么理解这句话,只要我输入了*3852.99*这个 编译器会自动进行安排吗?比如它会自动空10格吗?

printf ("*%10.3e*\n",RENT);       *3.863e+03*   还是
*          3.863e+03*






2.第6个不明白.
   printf ("*%10.3e*\n",RENT);       *3.863e+03*
我可以理解为*          3.852e+03
因为RENT为3852.99  并不是3.863

[[it] 本帖最后由 njbn 于 2008-6-25 15:26 编辑 [/it]]
----------------解决方案--------------------------------------------------------
你运行过了没?

是* 3.853e+03*,总字段宽度是10。

字段宽度是容纳数字所用的空间,这里是**中间有10位。

[[it] 本帖最后由 安静的小羊 于 2008-6-25 15:46 编辑 [/it]]

[[it] 本帖最后由 安静的小羊 于 2008-6-25 16:01 编辑 [/it]]
----------------解决方案--------------------------------------------------------
不足的用空格代替是吧
----------------解决方案--------------------------------------------------------
我觉得是这样的,不知对不对

const double RENT = 3852.99;
printf ("*%f*\n",RENT);
printf ("*%e*\n",RENT);
printf ("*%4.2f*\n",RENT);
printf ("*%3.1f*\n",RENT);
printf ("*%10.3f*\n",RENT);//其中的10我觉得应该表示的是RENT数值输出的宽度,其中包括4位整数,一个小数点,3位小数,所以还应该有2为空格在最前边
printf ("*%10.3e*\n",RENT);//这个跟上边的很像,10位宽度,整数1位,小数点占一位,3位小数(但是e也占一位小数位),指数部分就得看编译器了,
                           //Turbo C指数为+03占3位,VC++指数为+0003占5位
                           //所以如果用TurboC在最前边就有2个空格,用VC++,最前边就没有空格了。
printf ("*%+4.2f*\n",RENT);//+号表示如果是正数就在前边加上加号,如果RENT是负数当然就不用写负号了
printf ("*%010.2f*\n",RENT);//10前边的0应该表示用0代替空格补足10位
----------------解决方案--------------------------------------------------------
  相关解决方案