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);
}
程序调试可以通过,但是不能运行。
------解决方案--------------------
#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; }