| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 585 人关注过本帖
标题:帮忙找下问题 , 感激不尽!!!
只看楼主 加入收藏
cyb364244332
Rank: 1
等 级:新手上路
帖 子:2
专家分:2
注 册:2009-11-24
结帖率:0
收藏
已结贴  问题点数:20 回复次数:6 
帮忙找下问题 , 感激不尽!!!
# include <stdio.h>
# include <math.h>
void main ()
{int zd(int x,int y);
int zx(int s,int q);
int a,b,c,d;
printf("请输入要执行的两个数:");
scanf("%d%d",&a,&b);
c=zd(a,b);
d=zx(a,b);
printf("最大公约数=%d,最小公倍数=%d",c,d);
}
int zd(int x,int y)
{int i,m;
if(x>y)
{for(i=1;i<=y;y++)
{if(x%i==0&&y%i==0)}
m=i;
return(m);
}
else
{for(i=1;i<=x;i++)
{if(x%i==0&&y%i==0)}
m=i;
return(m);
}
}
int zx(int s,int q)
{int u,n;
if(s>q)
{for(u=s;u<=s*q;u++)
{if(u%s==0&&u%q==0)
break;}
n=u;}
else
{for(u=q;u<=s*q;u++)
{if(u%s==0&&u%q==0)
break;}
n=u;
}
return(n);}
搜索更多相关主题的帖子: 感激不尽 
2009-11-24 20:28
我菜119
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:938
专家分:1756
注 册:2009-10-17
收藏
得分:5 
{int i,m;
if(x>y)
{for(i=1;i<=y;y++)
{if(x%i==0&&y%i==0)}
m=i;
return(m);
}
else
{for(i=1;i<=x;i++)
{if(x%i==0&&y%i==0)}
m=i;
return(m);
}
}
在你的程序这里,这种求公约数的方法不对,假如我输入2,4
返回的应该是1,这样不就不对了吗!!!
所以好好想想算法吧!
这道题不难,好好想想!

愿用余生致力编程
2009-11-24 20:58
caojulians
Rank: 2
等 级:论坛游民
帖 子:39
专家分:67
注 册:2009-11-15
收藏
得分:5 
int zd(int x,int y)
{int i,m;
   if(x>y)
   {
          for(i=1;i<=y;y++)
          {
              if(x%i==0&&y%i==0)   <--没有“}”
                 m=i;
          }                        <--这里有“}”
          return(m);
   }
   else
   {
          for(i=1;i<=x;i++)
          {
              if(x%i==0&&y%i==0)
                 m=i;
          }
          return(m);
   }
}
你的版式太乱了,学学我的版式,{和}对齐在同一列,就可以清楚地看明白它的包含内容了。
另外,设计思路不清晰--先不说最大公约数有辗转相除法,最小公倍数*最大公约数等于两个数之积,只说可以合并相同的处理过程:
  int min,i;
  min=x>y? y : x;  /*取x和y中小者*/
  for(i=min; i>=1;i--)         /*找最大公约数,应该从大向小找*/
      if(x%i==0 && y%i==0)
           return i;   

2009-11-24 21:06
陈大师
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:231
专家分:1038
注 册:2009-11-4
收藏
得分:5 
#include <stdio.h>
#include <math.h>
void main ()
{int zd(int x,int y);
int zx(int s,int q);
int a,b,c,d;
printf("请输入要执行的两个数:");
scanf("%d%d",&a,&b);
c=zd(a,b);
d=zx(a,b);
printf("最大公约数=%d,最小公倍数=%d",c,d);
}
int zd(int x,int y)
{int i,m;
if(x>y)
{
    for(i=1;i<=y;y++)
       if(x%i==0&&y%i==0)
    m=i;
return(m);
}
else
{for(i=1;i<=x;i++)
if(x%i==0&&y%i==0)
m=i;

return(m);
}
}
int zx(int s,int q)
{int u,n;
if(s>q)
{for(u=s;u<=s*q;u++)
{if(u%s==0&&u%q==0)
break;}
n=u;}
else
{for(u=q;u<=s*q;u++)
{if(u%s==0&&u%q==0)
break;}
n=u;
}
return(n);}
2009-11-30 23:25
陈大师
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:231
专家分:1038
注 册:2009-11-4
收藏
得分:0 
楼主你这个代码有问题 但输入的数a大于b时就不行····
2009-11-30 23:27
陈大师
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:231
专家分:1038
注 册:2009-11-4
收藏
得分:0 
这是在你的基础上改正的····看看先
#include <stdio.h>
#include <math.h>
void main ()
{
    int zx(int s,int q);
    int a,b,c,d;
    printf("请输入要执行的两个数:");
    scanf("%d%d",&a,&b);
    d=zx(a,b);//先求最小公倍数
    c=a*b/d;//最大公约数等于两个数之积除以最小公倍数
    printf("最大公约数=%d,最小公倍数=%d",c,d);
}
int zx(int s,int q)
{    int u,n,temp;
    if(s<q)
    {
        temp=s;
        s=q;
        q=temp;
    }
    for(u=s;u<=s*q;u++)
     if(u%s==0&&u%q==0)
     {
        n=u;
        break;
     }
return(n);
}
其实求最大公约数一般都是用辗转相除法实现的····
2009-12-01 12:45
andytony1234
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:74
专家分:102
注 册:2009-11-9
收藏
得分:5 
上面有的朋友也把问题说明白了,楼主,你的算法有问题,你看我的吧,我也是做的谭浩强书上的.6.1对吧...
#include<stdio.h>
void main()
{int m,n,i,t,s;
printf("这是一个求最大公约数和最小公倍数的程序,请输入m和n\n");
scanf("%d%d",&m,&n);
if(m<n)
t=m,m=n,n=t;
for(i=m/2;i>=1;i--)                                       从大的那个数的中间 开始 依次往下找.就是他们的最大公约数了..
if(m%i==0&&n%i==0)
break;
printf("最大公约数为:%d\n",i);
printf("最小公倍数为:%d\n",m*n/i);
}


你要改成函数也容易,是不....                                                                     
2009-12-01 13:08
快速回复:帮忙找下问题 , 感激不尽!!!
数据加载中...
 
   



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

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