C语言求两个数的最大公约数和最小公倍数

求查错:#include<stdio.h>intinput(inta,intb){printf("请输入两个整数:\n");scanf("%d,%d",&a,&b);}i... 求查错:
#include<stdio.h>
int input(int a,int b)
{
printf("请输入两个整数:\n");
scanf("%d,%d",&a,&b);
}
int yue (int a,int b)
{
int m,n;
if(a>b)
m=b-1;
else
m=a-1;
for(n=m;n>0;n--)
{
if((a%n)==0&&(b%n)==0)
break;
}
return n;
}
int bei (int a,int b)
{
int i,j,h;
if(a>b)
j=a;
else
j=b;
for(i=j;i<=a*b;i++)
{
if((i%a)==0&&(i%b)==0)
h=i;
return h;
}
}
void main()
{
int bei (int a,int b);
int yue (int a,int b);
int input(int a,int b);
int a,b,n,i;
input(a,b);
yue(a,b);
bei(a,b);
printf("他们的公约数为%d\n",n);
printf("他们的公倍数为%d\n",i);
}
展开
 我来答
justopenme
2012-11-20 · TA获得超过378个赞
知道答主
回答量:49
采纳率:0%
帮助的人:37.3万
展开全部
你这个程序错误很多。
1,你想通过input来读入,但是呢在input那个函数中,a,b都是对main函数中的拷贝,对其进行修改,main函数中的a,b值是不变的。虽然都叫a,两个函数中的a其实在内存中是不同的变量,这点你要学习一下函数调用和变量的生命周期和作用域。
2,在input函数中你用scanf来读取两个值,中间用逗号隔开,那么你输入的时候也要用逗号隔开,这个设计不太合理。返回值没有,这个也不好,可以返回一个0.
3,yue和bei这两个函数中你的返回值分别是n,i,和第一问题一样,函数里的n和i和main函数里面的n和i不是同一个变量,你main里面的n,i都是没有被赋值的。
4,你设计的程序逻辑本身有问题,公约数从两个数中较小的数-1进行查找,若是较小的数本身就是较大的数的约数,就错了,比如,1,2,公约数应该是1,按你的算法计算得到的是0,这就错了。
正确的程序可以改成:
#include<stdio.h>
#include<stdlib.h>
int input(int& a,int& b)//此处要用引用或者指针,改为intput(int &a,int &b)
{
printf("请输入两个整数:\n");
scanf("%d,%d",&a,&b);
return 0;
}
int yue (int a,int b)
{
int m,n;
if(a>b)
m=b;//不要减一
else
m=a;//不要减一
for(n=m;n>0;n--)
{
if((a%n)==0&&(b%n)==0)
break;
}
return n;
}
int bei (int a,int b)
{
int i,j,h;
if(a>b)
j=a;
else
j=b;
for(i=j;i<=a*b;i++)
{
if((i%a)==0&&(i%b)==0)
h=i;
return h;
}
}
void main()
{
int input(int&,int&);
int yue(int,int);
int bei(int,int);
int a,b,n,i;
input(a,b);//此处要用引用或者指针,否则a,b并不能传递进去,修改形参表
n=yue(a,b);//改为n=yue(a,b);
i=bei(a,b);//改为i=bei(a,b);
printf("他们的公约数为%d\n",n);
printf("他们的公倍数为%d\n",i);
system("pause");
}

注意,引用是C++里面的,文件后缀得是CPP才行
xiami23
2012-11-19
知道答主
回答量:6
采纳率:0%
帮助的人:9096
展开全部
这是我编的 你看看 你的程序没有语法错误 但是有逻辑错误
#include <stdio.h>
int main(void)
{
int p,y,m,n,temp;
printf("please input two integers:\n");
scanf("%d%d",&m,&n);
if(n < m)
{
temp = n;
n = m;
m = temp;
}
p = n*m;
while(m != 0)
{
r = n%m;
n = m;
m = r;
}
printf("greatest common divisor is %d\n",n);
printf("least common multiple is %d\n",p/n);
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
脾气欧文
2012-11-19
知道答主
回答量:31
采纳率:0%
帮助的人:8.6万
展开全部
主函数
你没有输入;输入实参
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
libujun2004
2012-11-19 · 超过15用户采纳过TA的回答
知道答主
回答量:131
采纳率:0%
帮助的人:63.2万
展开全部
想干嘛?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式