C语言中,对于给定double类型数据x,将该数精确到小数位数第n位后保存到y中,再输出y的值。其中n由键盘输入。
(1)写出思路
(2)程序代码
(3)设计测试用例(等价类测试,含每个测试的输入样例,输出样例
提示:
(1)负实数 小数部分有16位
(2)负实数 小数部分有0位
(3)负实数 小数部分有k位,0<k<16
(4)正实数 小数部分有16位
(5)正实数 小数部分有0位
(6)正实数 小数部分有k位,0<k<16
(7) 0
比如保存小数点后1位,就将x乘以10,将结果+0.5然后取整,然后再除以y就可以了。以此类推。
代码如下:
#include <stdio.h>
int main()
{
int i,n;
double x,y;
double t=1;
long long s;
printf("请输入x和n的值:");
scanf("%lf %d",&x,&n);
for(i=0;i<n;i++)
t*=10;
y = x*t;
if(y>0)
y+=0.5;
else
y-=0.5;
s = (long long)y;
y = s/t;
printf("%lld.",(long long)y);//输出整数部分
y = y - (long long)y;
for(i=0;i<n;i++)//输出n位小数
{
y*=10;
printf("%d",(int)y);
y = y - (int)y;
}
return 0;
}