函数
1、求最小公倍数
题目:采用穷举法,用函数编程实现计算两个正整数的最小公倍数(LCM)的函数,在主函数中调用该函数计算并输出从键盘任意输入的两正整数的最小公倍数。
#include <stdio.h>
int Lcm(int a,int b);
int main()
{
int a,b,x;
printf("Input a,b:");
scanf("%d%d",&a,&b);
x=Lcm(a,b);
if(x!=-1)
{
printf("%d和%d的最小公倍数为%d",a,b,x);
}
else
printf("Input error!");
return 0;
}
int Lcm(int a,int b)
{
int i;
if(a<=0||b<=0)
return -1;
for(i=1;i<b;i++)
{
if(a*i%b==0)
return i*a;
}
return b*a;
}
2、求最大公因数
题目:编写计算最大公因数的函数Ged(),在主函数中调用该函数计算并输出从键盘任意输入的两正整数的最大公因数。
法一:
/*枚举法*/
#include <stdio.h>
int Gcd(int a,int b);
int main()
{
int a,b,c;
printf("Input a,b:");
scanf("%d%d",&a,&b);
c=Gcd(a,b);
if(c!=0)
{
printf("%d和%d的最大公因数为%d",a,b,c);
}
else
printf("Input error!");
return 0;
}
int Gcd(int a,int b)
{
int t,i;
if(a<=0||b<=0)
return -1;
t=a<b?a:b;
for(i=t;i>0;i--)
{
if(a%i==0&&b%i==0)
return i;
}
return 1;
}
法二:
/*欧几里得法(辗转相除法)*/
#include <stdio.h>
int Gcd(int a,int b);
int main()
{
int a,b,c;
printf("Input a,b:");
scanf("%d%d",&a,&b);
c=Gcd(a,b);
if(c!=0)
{
printf("%d和%d的最大公因数为%d",a,b,c);
}
else
printf("Input error!");
return 0;
}
int Gcd(int a,int b)
{
int r;
if(a<=0&&b<=0)
return -1;
do{
r=a%b;
a=b;
b=r;
}while(r!=0);
return a;
}
/*函数Gcd()用递归的表示方法如下*/
int Gcd(int a,int b)
{
if(a<=0&&b<=0)
return -1;
if(a%b==0)
return b;
else
return Gcd(b,a%b);
}
法三:
#include <stdio.h>
int Gcd(int a,int b);
int main()
{
int a,b,c;
printf("Input a,b:");
scanf("%d%d",&a,&b);
c=Gcd(a,b);
if(c!=0)
{
printf("%d和%d的最大公因数为%d",a,b,c);
}
else
printf("Input error!");
return 0;
}
int Gcd(int a,int b)
{
if(a<=0&&b<=0)
return -1;
while(a!=b)
{
if(a>b)
a=a-b;
else if(b>a)
b=b-a;
}
return a;
}
/*函数Gcd()用递归的表示方法如下*/
int Gcd(int a,int b)
{
if(a<=0&&b<=0)
return -1;
if(a==b)
return a;
else if(a>b)
return Gcd(a-b,b);
else
return Gcd(a,b-a);
}