标题:这段程序我不理解
只看楼主
njbn
Rank: 1
等 级:新手上路
帖 子:30
专家分:0
注 册:2007-4-2
 问题点数:0 回复次数:5 
这段程序我不理解
#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 符号 
2008-06-25 14:16
安静的小羊
Rank: 1
来 自:广东
等 级:新手上路
帖 子:34
专家分:0
注 册:2008-6-4
得分:0 
程序没错。

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

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

我无所事事所度过的今天,是昨天死去的人们所奢望的明天 ...
2008-06-25 14:45
njbn
Rank: 1
等 级:新手上路
帖 子:30
专家分:0
注 册:2007-4-2
得分:0 
有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]]

2008-06-25 15:24
安静的小羊
Rank: 1
来 自:广东
等 级:新手上路
帖 子:34
专家分:0
注 册:2008-6-4
得分:0 
你运行过了没?

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

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

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

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

我无所事事所度过的今天,是昨天死去的人们所奢望的明天 ...
2008-06-25 15:41
njbn
Rank: 1
等 级:新手上路
帖 子:30
专家分:0
注 册:2007-4-2
得分:0 
不足的用空格代替是吧

2008-06-25 16:05
onlyonegod
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2008-6-25
得分:0 
我觉得是这样的,不知对不对

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位
2008-06-25 16:15



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-221163-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018037 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved