山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省
格式字符
在输出时,对不同类型的数据要指定不同的格式声明,而格式声明中最重要的内容是格式字符。常用的有以下几种格式字符。
( 1 ) d格式符。用来输出一个有符号的十进制整数。
在前面的例子中已经看到了:在输出时,按十进制整型数据的实际长度输出,正数的符号不输出。
可以在格式声明中指定输出数据的域宽(所占的列数),如用“% 5d”,指定输出数据占5列,输出的数据显示在此5列区域的右侧。如:
printf ( " % 5d \ n% 5d \ n " , 12 ,-345 ) ;
输出结果为
12 ( 12前面有3个空格)
-345 (- 345前面有1个空格)
若输出long(长整型)数据,在格式符d前加字母1(代表long),即“% ld”。若输出long long(双长整型)数据,在格式符d前加两个字母I(代表long long),即“% lld”。
( 2 ) c格式符。用来输出一个字符。
例如:
char ch='a';
printf (“% c”,ch );
运行时输出
a
也可以指定域宽,如
printf (”% 5c”,ch );
运行时输出
a
( a前面有4个空格)
一个整数,如果在0 ~ 127范围中,也可以用“% c”使之按字符形式输出,在输出前,系统会将该整数作为ASCII码转换成相应的字符;
如果整数比较大,则把它的最后一个字节的信息以字符形式输出。如:
int a = 377;
printf (”% c”,a );
也输出字符y,因为用%c格式输出时,只考虑一个字节,存放a的存储单元中最后一个字节中的信息是01111001,即十进制的121,它是' y '的ASCII代码。
( 3 ) s格式符。用来输出一个字符串。
如:printf ( " % s”," CHINA”);执行此函数时在显示屏上输出字符串”CHINA”(不包括双引号)。
( 4 ) f格式符。用来输出实数(包括单、双精度、长双精度),以小数形式输出。
有几种用法:
①基本型,用%f。
不指定输出数据的长度,由系统根据数据的实际情况决定数据所占的列数。系统处理的方法一般是:实数中的整数部分全部输出,小数部分输出6位。
例:用%f输出实数,只能得到6位小数。
运行结果:
虽然a是双精度型,a / 3的结果也是双精度型,但是用%f格式声明只能输出6位小数。
②指定数据宽度和小数位数,用%m. nf。
“% 7.2”格式指定了输出的数据占7列,其中包括2位小数。对其后一位采取四舍五入方法处理,即向上或向下取近似值。如果把小数部分指定为0,则不仅不输出小数,而且小数点也不输出。
如果在上面的例题中的printf函数中指定“% 7.0f”格式声明,由于其整数部分为0,因此输出结果为0。所以不要轻易指定小数的位数为0。
如果想在上面的例题中输出双精度变量a的15位小数,可以用“% 20.15 f”格式声明,即把上面程序的第4行改为
printf ( " % 20.15 f\n " , a / 3 );
运行结果:
0.333333333333333
注意在0的前面有3个空格
这时输出了15位小数。但是应该注意:一个双精度数只能保证15位有效数字的精确度,即使指定小数位数为50(如用%55.50f),也不能保证输出的50位都是有效的数字。
注意:在用%f输出时要注意数据本身能提供的有效数字,如float型数据的存储单元只能保证6位有效数字。double型数据能保证15位有效数字。不要以为计算机输出的所有数字都是绝对精确的。
例:float型数据的有效位数。
运行结果:
本来计算的理论值应为3333.333333333…,但由于float型数据只能保证6 ~7位有效数字,因此虽然程序输出了6位小数,但从左面开始的第7位数字(即第3位小数)以后的数字并不保证是绝对正确的。
( 3 )输出的数据向左对齐,用%-m. nf。
在m.n的前面加一个负号,其作用与%m. nf形式作用基本相同,但当数据长度不超过m时,数据向左靠,右端补空格。