读书人

C程序故障解决方案

发布时间: 2012-03-11 18:15:39 作者: rapoo

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;  } 

读书人网 >C语言

热点推荐