求下面c语言问题的完整代码

【问题描述】
从标准输入中输入一个小数,编写程序将其转换成相应的分数显示,即转换为几又几分之几。
要求:
1、输入的小数包括整数部分、小数点和小数部分;整数部分和小数部分分别最多有7位数字;整数部分可以为0,若整数部分为非零整数时,则其最高位不为0;小数部分的末尾数字不为零。
2、输出的分数应为最简分数,由三部分数字组成:第一部分数字代表整数部分(若分数小于1,则为0,否则输出相应分数的整数部分,且最高位不为0),第二部分数字代表分子,第三部分数字代表分母,分子比分母小且不能再约分。
3、自定义约分函数
【输入形式】
从标准输入中输入一个小数后打回车。
【输出形式】
将转换后相应分数的三个部分数值输出到标准输出,并且分别以一个空格分隔,最后一个数值后没有空格,有回车换行。
【样例1输入】
0.35
【样例1输出】
0 7 20
【样例2输入】
1050.0144
【样例2输出】
1050 9 625
【样例说明】
样例1中输入的小数为0.35,相应分数整数部分为0,小数部分转换为分数为35/100,约分成最简分数为7/20。
样例2中输入的小数为1050.0144,相应分数整数部分为1050,小数部分转换为分数为144/10000,约分成最简分数为9/625。

#include <stdlib.h>
#include <stdio.h>
 
// 判断两个整数的最大公约数是否为1
int is_prime(int a, int b)
{
    while (a != b)
    {
        a>b?(a-=b):(b-=a);
    }
    return b;
}
 
int main(void)
{
    char ch[20];
    int a=0, b=1;
    int i = 0, flag=0,temp, it = 0;
    gets(ch);
    // 读取尾数长度
    while (ch[i])
    {      
        if (flag == 1)
        {
            a += (ch[i]-'0');
            a *= 10;
            b *= 10;
        }  
        else if(flag == 0 && ch[i] != '.')
            it = it * 10 + (ch[i] - '0');
        if (flag==0 && ch[i]=='.')
            flag = 1;
        i++;
     }
    a /= 10;
 
    temp = is_prime(a,b);
     
    while (1 != temp)
    {
        a /= temp;
        b /= temp;
        temp = is_prime(a,b);
    }
    printf("%d %d %d\n",it,a,b);
    return 0;
 }

该回答引用ChatGPT

参考下面代码

#include <stdio.h>

// 自定义函数,用于求分子分母的最大公约数并进行约分
void simplify_fraction(int *numerator, int *denominator) {
    int a = *numerator, b = *denominator;
    int remainder;

    // 使用辗转相除法求最大公约数
    while (b != 0) {
        remainder = a % b;
        a = b;
        b = remainder;
    }

    // 约分
    *numerator /= a;
    *denominator /= a;
}

int main() {
    double input;
    int integer, numerator, denominator;

    // 从标准输入中读取小数
    scanf("%lf", &input);

    // 将小数分解为整数和小数部分
    integer = (int) input;
    numerator = (int) ((input - integer) * 10000000);
    denominator = 10000000;

    // 将整数和小数部分合并为一个分数
    numerator += integer * denominator;

    // 对分数进行约分
    simplify_fraction(&numerator, &denominator);

    // 输出结果
    if (numerator >= denominator) {
        printf("%d %d %d\n", numerator / denominator, numerator % denominator, denominator);
    } else {
        printf("0 %d %d\n", numerator, denominator);
    }

    return 0;
}


您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632