这段程序我不理解
#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*
红色区域不是很明白 , 能解释下吗?[详细点]
顺便在帮我看看程序里有无错误.
谢谢
----------------解决方案--------------------------------------------------------
程序没错。
第一行以默认的%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位
----------------解决方案--------------------------------------------------------