| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 450 人关注过本帖
标题:最大公约数的函数调用 错误程序。
只看楼主 加入收藏
liting561199
Rank: 2
等 级:论坛游民
帖 子:17
专家分:22
注 册:2015-3-24
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:6 
最大公约数的函数调用 错误程序。
用函数调用求最大公约数,公倍数。
程序代码:
#include <stdio.h>
int main()
{
    int common(int x,int y);
    int multiple(int x, int y);        //声明函数
    int x , y , c , m;
    printf("input two number:");
    scanf("%d%d",x, y);
    printf("output its:\n");
    printf("%d,%d",c , m);
    return 0;
}
int multiple(int , int )           
{
    int common(int  , int );
    int x , y , m ,c;
    m = x*y / c;                //最小公倍数;用两数相乘除以最大公约数得;
    return (m);
}

int common(int , int )                    //求最大公约数;辗转相除法
{
    int x , y , c , r, t;

    if(x > y)  {t = x; x = y ; y = t;}  //把x,y从从小到大进行排序;
    while(x != 0)
    {
        r = x % y;
        y = x;
        x = r;
       
    }
    c = x;
    return (c);
}


搜索更多相关主题的帖子: 公约数 公倍数 color 
2015-05-18 10:58
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
收藏
得分:7 
首先scanf格式错误,其次你并没有调用函数

一片落叶掉进了回忆的流年。
2015-05-18 11:04
取名字
Rank: 8Rank: 8
等 级:贵宾
威 望:21
帖 子:236
专家分:924
注 册:2015-4-27
收藏
得分:7 
while(x != 0) {
r = x % y;
y = x;
 x = r;
}
 c = x;
 return (c);
以上程序改为:
while(x!=0){
r=x%y;
x=y;
y=r;
}
return(x);
2015-05-18 12:15
liting561199
Rank: 2
等 级:论坛游民
帖 子:17
专家分:22
注 册:2015-3-24
收藏
得分:0 
回复 2楼 诸葛欧阳
能告诉我,哪里没有调用成功吗?刚学函数调用
2015-05-18 12:35
liting561199
Rank: 2
等 级:论坛游民
帖 子:17
专家分:22
注 册:2015-3-24
收藏
得分:0 
回复 3楼 取名字
我那里用c = x;是要在求公倍数里面有用到,避免与multiple函数中的x,y重复
2015-05-18 12:40
纳兰伽香
Rank: 10Rank: 10Rank: 10
来 自:北京
等 级:贵宾
威 望:10
帖 子:426
专家分:1650
注 册:2015-4-5
收藏
得分:7 
程序代码:
#include <stdio.h>
int main()
{

 int a,b,c,d,m;

 scanf("%d%d",&a,&b);

 m = a*b;

 while(b != 0)

 {
  c = a%b;
  a = b;
  b = c;

 }

 printf("max = %d ,min = %d\n",a,m/a);

 return 0;
}

风回小院庭芜绿,柳眼春相续
2015-05-18 12:59
取名字
Rank: 8Rank: 8
等 级:贵宾
威 望:21
帖 子:236
专家分:924
注 册:2015-4-27
收藏
得分:0 
以下是引用liting561199在2015-5-18 12:40:58的发言:

我那里用c = x;是要在求公倍数里面有用到,避免与multiple函数中的x,y重复
但是你这里的“c”只是求最大公约数函数里的一个局部变量,该函数一结束,c就不存在了,到了求最小公倍数函数里再使用c就会出错。
楼主的程序存在以下问题:
1、在楼主的程序里只有函数声明,根本就没有调用函数,何来调用成功与否一说;
2、楼主对于全局变量、局部变量的作用域和生存期没有弄清楚,建议再看看这部分知识;
3、楼主的函数定义错误。在函数声明中可以只写参数类型,而在函数定义中参数类型与参数名都必须要写,否则你的参数接收过来如何引用呢?
4、在multiple函数中对于common函数的调用语法错误;
5、scanf使用错误。
在楼主程序的基础上修改后:
#include <stdio.h>
int main()
{
    int common(int x,int y);
    int multiple(int x, int y,int z);        //声明函数
    int x,y,c,m;
    printf("input two number:");
    scanf("%d%d",&x,&y);
    c=common(x,y);
    m=multiple(x,y,c);
    printf("output its:\n");
    printf("%d,%d",c,m);
    return 0;
}
int multiple(int x, int y,int z)           
{
    return (x*y/z);
}

int common(int x,int y)                    //求最大公约数;辗转相除法
{
    int r,t;

    if(x < y)  {t = x; x = y ; y = t;}  //把x,y从从小到大进行排序;
    while(y != 0)
    {
        r = x % y;
        x = y;
        y = r;
      
    }
    return x;
}
也可参照下面的程序:
#include    <stdio.h>
int main(void)
{
    int ComMul(int,int);        //这是函数声明,可以只写参数类型而不用写参数名称。
    int x,y,z;
    printf("Input two numbers:");
    scanf("%d%d",&x,&y);
    z=ComMul(x,y);             //这里是函数调用。
    printf("最大公约数是:%d\n",z);
    printf("最小公倍数是:%d\n",x*y/z);  
    return 0;
}
int ComMul(int x,int y)        //从这开始是函数定义语句,函数头中必须写明参数类型与参数名。
{               
    int t,r;
    if(x<y){
        t=x;
        x=y;
        y=t;
    }   
    while(y!=0){                //这里的条件表达式判断y是否为0,也就是判断余数是否为0。
        r=x%y;
        x=y;
        y=r;
    }
    return x;
}





[ 本帖最后由 取名字 于 2015-5-18 13:33 编辑 ]
收到的鲜花
  • liting5611992015-05-18 14:41 送鲜花  3朵   附言:对我太有帮助了
2015-05-18 13:30
快速回复:最大公约数的函数调用 错误程序。
数据加载中...
 
   



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

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