You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言分数加法计算器如何同时输出分数与小数结果?

解决方案

核心问题与修改要点

  1. 数据类型不合理:原代码用double存储分子分母,分数运算本质是整数运算,改用int可避免精度丢失问题。
  2. 输入逻辑bug:scanf("%s", &op)会读取多余空白字符,改为scanf(" %c", &op)(前置空格跳过换行符等空白)才能正确获取运算符。
  3. 分数计算逻辑缺失:原代码直接输出小数,未按分数加法规则计算通分后的分子分母,也没有约分得到最简分数。
  4. 格式串不匹配:原printf的格式符%.lf/%.lf对应两个参数,但只传入了一个小数结果,导致输出混乱。

修改后的完整代码

#include <stdio.h>
#include <stdlib.h>
#include <stdlib.h> // 用于abs函数

// 辗转相除法求最大公约数,用于分数约分
int gcd(int a, int b) {
    while (b != 0) {
        int temp = b;
        b = a % b;
        a = temp;
    }
    return a;
}

int main(void)
{
    system("chcp 1252 > nul");
    // 改用int类型存储分子分母
    int z1, n1, z2, n2;
    char op;

    printf("Eingabe der ersten rationalen Zahl\n");
    printf("Zähler 1:");
    scanf("%d", &z1);
    printf("Nenner 1:");
    scanf("%d", &n1);

    printf("Eingabe des Operators +, -, *, /:\n");
    // 修正运算符输入逻辑
    scanf(" %c", &op);

    printf("Eingabe der zweiten rationalen Zahl\n");
    printf("Zähler 2:");
    scanf("%d", &z2);
    printf("Nenner 2:");
    scanf("%d", &n2);

    if (op == '+')
    {
        printf("Summe aus Bruch 1 und Bruch 2:\n");
        // 按分数加法规则计算通分后的分子分母
        int result_num = z1 * n2 + z2 * n1;
        int result_den = n1 * n2;
        
        // 约分得到最简分数
        int common_divisor = gcd(abs(result_num), abs(result_den));
        int simplified_num = result_num / common_divisor;
        int simplified_den = result_den / common_divisor;

        // 同时输出最简分数和小数形式
        printf("%d/%d + %d/%d = %d/%d (%.2f)\n", 
               z1, n1, z2, n2, 
               simplified_num, simplified_den, 
               (double)simplified_num / simplified_den);
    }
    return 0;
}

关键修改说明

  • 约分逻辑:通过辗转相除法计算最大公约数,将通分后的分子分母化简为最简形式,避免输出如3/2变成6/4这类冗余分数。
  • 分数运算规则:严格遵循a/b + c/d = (a*d + c*b)/(b*d)的分数加法公式计算结果。
  • 双格式输出:先输出约分后的最简分数,再通过强制类型转换将整数分子分母转为浮点型,得到精确的小数结果并保留两位小数。

内容的提问来源于stack exchange,提问作者Edi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 01:18:27