C语言中关于printf语句的基本知识~

我是个C语言的初学者,对于printf语句有部分不懂的地方,求高手指点。运行结果如下图,请高手帮忙解释一下这行的运行结果。
#include <stdio.h>
void main()
{
int a=5,b=7;
float x=67.8564,y=-789.124;
char c='A' ;
long n=1234567 ;
unsigned u=65535;
printf("%d%d\n",a,b);1
printf("%3d%3d\n",a,b);2
printf("%f,%f\n",x,y);3
printf("%-10f,%-10f\n",x,y);4
printf("%8.2f,%8.2f,%4f,%4f,%3f,%3f\n",x,y,x,y,x,y);5
printf("%e,%10.2e\n",x,y);6
printf("%c,%d,%o,%x\n",c,c,c,c);7
printf("%ld,%lo,%x\n",n,n,n);8
printf("%u,%o,%x,%d\n",u,u,u,u);9
printf("%s,%5.3s\n","COMPUTER","COMPUTER");10
}
a 第3行 那个"f"到底可以精确几位?“.”算一位不?这个和列宽有什么关系啊?如果不足8位后面是不是补0,但为什么y只有3个小数部分,但变成了789.124023?
b 第6行结果为6.78564e+01,不是要有13列么?这个怎么没有?还有在什么情况下是+001或是+01呢?第二个结果麻烦解释一下,7.9是哪里来的啊?
c 第7行的十进制数65转八进制和十六进制数是怎么算的啊?
d 第8行%lo,%lx对应的那些结果是怎么来的啊?
e 第9行unsigned是什么意思啊?能不能把每个值都解释一下。
万分感谢~

a 第3行 那个"f"不管是整数还是小数都只能精确七位超过了的就会出错,显示出来的有些事随机的有些是固定的,但是.“.”不算一位。如果只是“%f”不足7位后面是补0,如果是“%.2f”就只有两位小数,“%.3f”就只有三位小数........,变成了789.124023就是后面的超过七位的全部出错显示。
b “%3e”是+001“%2e”是+01,7.9是“%10.2e”中的“.2”使-789.124进行科学计数法后保留两位有效数字“-7.9e+02”,“%10.2e”中的“10”是占10位,不足前面补空格。
c 十进制数转几进制数就除几取余,直到除完,然后把余数到过来看。
d 第8行%lo,%lx对应的那些结果是进制转换来的。分别是十进制,八进制,十六进制
e unsigned表示无符号。即使n赋值为负数都只保存为整数!
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-04-10
printf("%8.2f,%8.2f,%4f,%4f,%3f,%3f\n",x,y,x,y,x,y);这一句举例,因为x=67.8564,y=-789.124;
%8.2f表示输出实型数据,宽度为八,精确到小数点两位。因为小数点也要占用内存,即在非配储存空间时也要有它的份,所以X=口口口67.86(口表示一个列宽)。同样第六行,%10.2e即以指数形式输出。因为计算机不能输出10的几次房这样的形式,所以时6.78564e+01小数点,还有e都要分配存储空间。对于7.9,因为要保留两位有效数字。
如果是用笔算我想你应该会,如果不会就在网上搜一下,会有好多。如果是在计算机上,想把一个十进制数转换为一个其它进制的数只需在输出是规定一下输出的进制字符就行了,就像想十进制转换为八进制只需按八进制输出就行了,计算机会自动转换。

第八行以十进制,八进制,十六进制

第九行的意思是无符号,就是无论原值是正或负都以正输出。
第2个回答  2011-04-10
第3行 那个"f"到底可以精确8位,但是需要精确到小于8的时候是可以用.n来限制的;
第3个回答  2011-04-10
a 第3行 那个"f"到底可以精确6位.“.”不算一位。如果只是“%f”不足6位后面是补0,如果是“%.2f”就只有两位小数,“%.3f”就只有三位小数........,但为什么y只有3个小数部分,但变成了789.124023可能是出现偏差吧,这个不太清楚。
b “%3e”是+001“%2e”是+01,7.9是“%10.2e”中的“.2”使-789.124进行科学计数法后保留两位有效数字“-7.9e+02”,“%10.2e”中的“10”是占10位,不足前面补空格。
c 十进制数转几进制数就除几取余,直到除完,然后把余数到过来看。
d 第8行%lo,%lx对应的那些结果是进制转换来的。
e unsigned是无符号。
相似回答