C程序故障,解决方案

C程序故障,
#include<stdio.h>
int max(int,int,int); //定义一个获取3个数的最大值的函数。
int min(int,int,int); //定义一个获取3个数的最小值的函数。
int gcd3(int,int,int); //定义一个获取3个数的最大公约数的函数。
int lcm3(int,int,int); //定义一个获取3个数的最大公约数的函数。
int gcd2(int,int); //定义一个获取2个数的最小公倍数的函数。
int lcm2(int,int); //定义一个获取2个数的最小公倍数的函数。
int main()
{  
FILE *out=fopen("result.txt","w"); //定义一个文件指针变量out,指向result.txt文件,操作类型为w,即写入。
int i,j,k,c=1;

for(i=0;i<=9;i++)

for(j=0;j<=9;j++)

for(k=0;k<=9;k++)
if(
lcm3(i,j,k)%10%3==1
&& lcm2(i,j)%10%3==2
)
printf("%-3.3d-<%d%d%d> %d %d\t",c++,i,j,k,lcm3(i,j,k)%10%3,lcm2(i,j)%10%3);
fprintf(out,"%d%d%d\n",i,j,k); //此语句可以把结果导出到result.txt文件。
 

  printf("\n");
   
  getch(0);  
}
//最大值
int max(int i,int j,int k)
{
int result;
result=i;
 if (j>result)
  result=j;
 if (k>result)
  result=k;
   
  return result;
}
//最小值
int min(int i,int j,int k)
{
  int result;
  result =i;
 if (j<result)
  result=j;
 if (k<result)
  result=k;
 
return result;
}
//最大公约数3位
int gcd3(int a,int b,int c)
{
int m;
for(m=max(a,b,c);m>=1;m--)
if((a%m==0)&&(b%m==0)&&(c%m==0))
break;
return (m);
}
//最小公倍数3位
int lcm3(int a,int b,int c) 
{
int m;
for(m=min(a,b,c);m<(a*b*c);m++)
if((m%a==0)&&(m%b==0)&&(m%c==0))
break;
return (m);
}
//最大公约数2位
int gcd2(int a,int b)
{
int i,gcd;
for(i=a;i>=1;i--)
{
if(a%i==0)
{
if(b%i==0)
{
gcd=i;
return gcd;
}
}
}
//return gcd;

//最小公倍数2位
int lcm2(int a,int b)
{
int lcm;
lcm=a*b/gcd2(a,b); //最小公倍数等于两数之积除以最大公约数   
return lcm; 
}

故障1:
if(
  lcm3(i,j,k)%10%3==1
  && lcm2(i,j)%10%3==2
  )
改成
if(
  lcm2(i,j)%10%3==2
  )
程序调试可以通过,但是不能运行。
故障2:
int lcm3(int a,int b,int c) 
{
int m;
for(m=min(a,b,c);m<=(a*b*c);m++) //修改
if((m%a==0)&&(m%b==0)&&(m%c==0))
break;
return (m);
}
程序调试可以通过,但是不能运行。





------解决方案--------------------
C/C++ code

int max(int i,int j,int k)
{
    if (i>j)
    {
        if (j>k)
        {//i>j>k
            return i;
        } 
        else//i>j && k>j
        {
            if(i>k)
                return i;
            else 
                return k;
        }
    }
    else//i<=j
    {
        if(j>k)//j>k && j>=i
            return j;
        else//j>=i && k>j
        {
            return k;
        }
    }
}
//最小值
//同样只比较了两个值
int min(int i,int j,int k)
{
    if (i<j)
    {
        if (j<k)
        {//i<j<k
            return i;
        } 
        else//i<j && k<j
        {
            if(i<k)
                return i;
            else 
                return k;
        }
    }
    else//i>=j
    {
        if(j<k)//j<k && j<=i
            return j;
        else//j=<i && k<j
        {
            return k;
        }
    }
}

//最大公约数3位
int gcd3(int a,int b,int c)
{
    int m;
    m = gcd2(a,b);
    m = gcd2(m,c);
    return (m);
}

//最小公倍数3位
int lcm3(int a,int b,int c)  
{
    int m;
    m = lcm2(a,b);
    m = lcm2(m,c);
    return (m);
}

//最大公约数2位
int gcd2(int a,int b)
{
    int gcd;
    if(b>a)
    {
        gcd = b;
        b = a;
        a = gcd;
    }
    while(1)
    {
        if(a%b==0)
            break;
        else
        {
            gcd = b;
            b = a%b;
            a = gcd;
        }
    }
    return b;
}  

//最小公倍数2位
int lcm2(int a,int b)
{
    int lcm;
    lcm=a*b/gcd2(a,b); //最小公倍数等于两数之积除以最大公约数   
    return lcm;  
}