| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付学习型 ASP/PHP/ASP.NET 主机 30元/年
高端软件开发 = 年薪十万不是梦   
共有 298 人关注过本帖
标题:这段程序我不理解
收藏  订阅  推荐  打印
njbn
Rank: 1
等级:新手上路
帖子:30
积分:420
注册:2007-4-2
这段程序我不理解

#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*

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


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



                                           谢谢
2008-6-25 14:16
安静的小羊
Rank: 2
等级:注册会员
帖子:34
积分:512
来自:广东
注册:2008-6-4

程序没错。

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

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

我无所事事所度过的今天,是昨天死去的人们所奢望的明天 ...
2008-6-25 14:45
njbn
Rank: 1
等级:新手上路
帖子:30
积分:420
注册:2007-4-2

有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

[ 本帖最后由 njbn 于 2008-6-25 15:26 编辑 ]

2008-6-25 15:24
安静的小羊
Rank: 2
等级:注册会员
帖子:34
积分:512
来自:广东
注册:2008-6-4

你运行过了没?

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

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

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

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

我无所事事所度过的今天,是昨天死去的人们所奢望的明天 ...
2008-6-25 15:41
njbn
Rank: 1
等级:新手上路
帖子:30
积分:420
注册:2007-4-2

不足的用空格代替是吧

2008-6-25 16:05
onlyonegod
Rank: 1
等级:新手上路
帖子:13
积分:248
注册:2008-6-25

我觉得是这样的,不知对不对

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-6-25 16:15
共有 297 人关注过本帖
发新话题
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.053960 second(s), 9 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved