题目描述
编写程序,根据要求格式输出用户输入的实数(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]
源代码
#include<stdio.h>
int main()
{
double dt;
scanf("%lf",&dt);
printf("[%.3lf]\n",dt);
printf("[%-12.3lf]\n",dt);
int tmp = (int)dt;
int cnt = 0;
if(tmp <= 0)
{
cnt = 1;
tmp = -tmp;
}
if(dt < 0 && dt > -1) cnt = 2;
while(tmp > 0)
{
cnt++;
tmp /= 10;
}
int len = cnt += 4;
cnt = (12 - len)/2;
printf("[%*s",cnt,"");
printf("%.3lf",dt);
printf("%*s]\n",12-cnt-len,"");
printf("[%12.3lf]\n",dt);
return 0;
}