帮我检查这个程序错在哪里

来源:百度知道 编辑:UC知道 时间:2024/06/08 16:20:32
# include<stdio.h>
void main()
{ int fac(int n1,int n2);
int a,b,mean;
scanf("%d,%d",&a,&b);
mean=fac(a,b);
printf("%d",mean);
}

int fac(int n1,int n2)
{
int x,y,t,r;
if(n1<n2)
{
t=n1;
n1=n2;
n2=t;
}
x=n1 ;y=n2;
while(r!=0)
{
r=x%y;
y=x;
y=r;
}
return y;
}

错在了fac函数上。
你的本意应该是用捻除法求最大公约数。但是写函数的时候写错了。
应该这样写:
int fac(int m,int n)/* m,n不等于0*/
{
int r;
if(m<n)
{ r=m;m=n;n=r; } /*使m中为大数,n中为小数*/

if(n==0) /*一但为0则在输出Error后,退出整个程序。*/
{printf("Error!\n"); exit();}

while(n>0)/*核心算法*/
{
r=m%n;
m=n;
n=r;
}
return m;
}

另外,你在设计程序的时候最好把特殊情况也加上,如输入的数据里面有0啊等等。希望你天天进步。