请问一下大家这个问题应该怎么做

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;
}