实数的对齐输出
实数的对齐输出
编写程序,根据要求格式输出用户输入的实数(double)。 具体要求是分别在四行中按:1)在一对[]中保留三位小数直接输出; 2)在一对[]中居左显示,[]中内容占宽12,保留三位小数; 3)在一对[]中居中显示,[]中内容占宽12,保留三位小数; 4)在一对[]中居右显示,[]中内容占宽12,保留三位小数。关于居中的说明是,数据前边填充一半的空格,剩余的另"一半"的空格在数据的后边,你可以假定数据的实际占宽小于10。
输入格式:
输入一个实数。
输出格式:
1)在一对[]中保留三位小数直接输出; 2)在一对[]中居左显示,[]中内容占宽12,保留三位小数; 3)在一对[]中居中显示,[]中内容占宽12,保留三位小数; 4)在一对[]中居右显示,[]中内容占宽12,保留三位小数。
输入样例:
123.45678
输出样例:
[123.457]
[123.457 ]
[ 123.457 ]
[ 123.457]
解题思路:
左对齐,右对齐都可以直接用printf的功能实现,麻烦在于居中对齐,C语言并没有直接提供居中对齐的方法,不过我们在写代码的时候可以靠控制空格的宽度来实现,即先求出该数占用的宽度,然后方框内剩余的宽度的一半就是左边的空格宽度,最后再添加右边空格对齐。
#include
int main(){int c=0,w,p;double f,v;scanf("%lf",&f);v=f;p=(int)f; do{c++;p/=10;}while(p); //求该数位数if(v<0)c++;w=(12-c-4)/2; //计算需要多少空格控制居中printf("[%.3f]\n",v); printf("[%-12.3f]\n",v); //左对齐printf("[");for(int i=1;i<=w;i++)printf(" "); //左边空格输出printf("%.3f",v); //居中对齐输出for(int i=1;i<=12-c-4-w;i++)printf(" "); //右边空格输出printf("]\n");printf("[%12.3f]",v); //右对齐
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
