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);
} 展开
#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);
} 展开
展开全部
你这个程序错误很多。
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才行
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才行
展开全部
这是我编的 你看看 你的程序没有语法错误 但是有逻辑错误
#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;
}
#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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
想干嘛?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询