| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1071 人关注过本帖
标题:化简分数的程序出错
只看楼主 加入收藏
mscool
Rank: 1
等 级:新手上路
帖 子:53
专家分:0
注 册:2013-5-9
结帖率:92.31%
收藏
已结贴  问题点数:18 回复次数:12 
化简分数的程序出错
输入分数 如7/9  判断是否可约 然后输出最贱形式 我的程序如下 但是 当输入的是一个最简形式时 如 4/5 总是多输出一行 0/0  百思不得其解 求高手解答!!
#include<stdio.h>
int max(int a,int b)
{
    int c;
    if(a>b)
        c=a;
    else
        c=b;
}
int min(int a,int b)
{
    int c;
    if(a>b)
        c=b;
    else
        c=a;
}
int judge(int z,int m)
{
    int a,b,c;
    a=max(z,m);
    b=min(z,m);
    c=a%b;
        while(c>1)      
            c=judge(b,c);  
    return c;
}
int gcd(int z,int m)
{
    int a,b,c,d;
    a=max(z,m);
    b=min(z,m);
    c=a%b;
    if(c==0)
        d=b;
    else
        d=gcd(b,c);
    return d;
}
int main()
{
    int z,m,c,d;
    scanf("%d/%d",&z,&m);
    c=judge(z,m);
        printf("%d\n",c);
        if(c==1)
        printf("%d/%d\n",z,m);
        else
        d=gcd(z,m);
                printf("%d/%d\n",z/d,m/d);
         
   
}
搜索更多相关主题的帖子: include 
2013-06-20 13:00
我叫沃恩
Rank: 12Rank: 12Rank: 12
来 自:Asia
等 级:贵宾
威 望:10
帖 子:1234
专家分:3865
注 册:2013-3-29
收藏
得分:9 
我的代码如下:
程序代码:
#include <stdio.h>
int f(int x, int y);//求最大公约数!
int main(void)
{
    int a, b, m;
    printf("请输入分数(a/b):");
    scanf("%d/%d",&a, &b);
    m=f(a,b);
    printf("最简分数:%d/%d\n",a/m,b/m);
} 
int f(int x, int y)
{
    int t;
    while(t!=0)
    {
        t=x%y;
        x=y;
        y=t;
    }
    return x;
}

因为我是菜鸟,所以应该被骂! 细节+坚持=成功!
2013-06-20 13:20
我叫沃恩
Rank: 12Rank: 12Rank: 12
来 自:Asia
等 级:贵宾
威 望:10
帖 子:1234
专家分:3865
注 册:2013-3-29
收藏
得分:0 
你写的代码太罗嗦了!好好优化下!我的代码没加判断的,你自己改下!!!!!!

因为我是菜鸟,所以应该被骂! 细节+坚持=成功!
2013-06-20 13:22
mscool
Rank: 1
等 级:新手上路
帖 子:53
专家分:0
注 册:2013-5-9
收藏
得分:0 
回复 3楼 我叫沃恩
输入分数可以是任意形式的 比如9/7  这是个假分数  所以必须写一段代码判断分子与分母的大小  然后才能进行求模运算 不然  5%7 是个错误结果
判断一个代码是否可约分的judge函数应该已经是最简了
还有一个函数gcd用来求最大公约数
罗嗦的最主要的原因在于我对函数的循环结构不够熟悉  我会慢慢改进的 谢谢
2013-06-20 19:53
mscool
Rank: 1
等 级:新手上路
帖 子:53
专家分:0
注 册:2013-5-9
收藏
得分:0 
回复 2楼 我叫沃恩
y和x的大小时必须要判断的 因为输入9/7也是可以的 但这时程序会出错 因为7%9 是错的
2013-06-20 19:54
笑傲
Rank: 8Rank: 8
来 自:迪拜
等 级:蝙蝠侠
威 望:5
帖 子:223
专家分:856
注 册:2013-3-9
收藏
得分:9 
表示粗看了一下楼主的程序:max ,min函数都没有返回任何数据;
算了,好无聊啊,不想写了,我也懒得去找程序,直接改:
程序代码:
#include<stdio.h>

int gcd(int z,int m)
{
    if(m == 0)
        return z;
    else
       return gcd(m , z % m);
}

int judge(int z,int m)
{
   return gcd(z > m ? z : m , z > m ? m : z);
}

int main()
{
    int z , m , c;
    scanf("%d/%d",&z,&m);
    if(m == 0) printf("error\n");
    else 
    {
        c=judge(z,m);
        printf("%d\n",c);
        if(c==1 || z == 0)
            printf("%d/%d\n",z,m); 
        else 
            printf("%d/%d\n",z/gcd(z,m),m/gcd(z,m));
    }
    return 0;
}

有错欢迎指正,目测应该没问题的!

练就一身本领,只为笑傲江湖!
2013-06-20 21:24
我叫沃恩
Rank: 12Rank: 12Rank: 12
来 自:Asia
等 级:贵宾
威 望:10
帖 子:1234
专家分:3865
注 册:2013-3-29
收藏
得分:0 
以下是引用mscool在2013-6-20 19:54:07的发言:

y和x的大小时必须要判断的 因为输入9/7也是可以的 但这时程序会出错 因为7%9 是错的

你确定你把我的代码上机运行了?然后输入9/7会出错????会的话你发消息给我!!

因为我是菜鸟,所以应该被骂! 细节+坚持=成功!
2013-06-20 22:06
mscool
Rank: 1
等 级:新手上路
帖 子:53
专家分:0
注 册:2013-5-9
收藏
得分:0 
回复 7楼 我叫沃恩
之前写过一段实验代码 专门为了搞清楚小数%大数是否出错 结果证明是错的 所以没有运行你的代码就判断应该会出错
现在专门把你的代码运行了一次 输入9/7 结果1/0 错了……
2013-06-21 06:21
mscool
Rank: 1
等 级:新手上路
帖 子:53
专家分:0
注 册:2013-5-9
收藏
得分:0 
回复 6楼 笑傲
呃 惭愧 一个条件表达式就代替了我的max和min……看来这个表达式相当给力啊
2013-06-21 06:54
我叫沃恩
Rank: 12Rank: 12Rank: 12
来 自:Asia
等 级:贵宾
威 望:10
帖 子:1234
专家分:3865
注 册:2013-3-29
收藏
得分:0 
以下是引用mscool在2013-6-21 06:21:36的发言:

之前写过一段实验代码 专门为了搞清楚小数%大数是否出错 结果证明是错的 所以没有运行你的代码就判断应该会出错
现在专门把你的代码运行了一次 输入9/7 结果1/0 错了……

楼主用什么编译器???
图片附件: 游客没有浏览图片的权限,请 登录注册

因为我是菜鸟,所以应该被骂! 细节+坚持=成功!
2013-06-21 08:21
快速回复:化简分数的程序出错
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.013905 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved