改错题
1. 下列给定程序中,fun()函数的功能是:求3个数的最小公倍数。
例如,给变量a、b、c分别输入15、11、2,则输出结果应当是330。
请修改函数中的错误,得出正确的结果。
注意:不要改动main()函数,不能增行或减行,也不能更改程序的结构。
试题程序:
#include<stdio.h>
int fun(int x,int y,int z)
{
int i,temp,n,m;
//****found****
i=1;
temp=m=n=1;
//****found****
while(temp!=0&&m!=0&&n!=0)
{
i=i+1;
temp=i%x;
In=i%y;
n=i%z;
}
return i;
}
void main()
{
int a,b,c,i;
printf("Input a b c:");
scanf("%d%d%d",&a,&b,&c);
printf("a=%d,b=%d,c=%d\n",a,b,c);
i=fun(a,b,c);
printf("The minimal common multiple is:%d\n",i);
}
【正确答案】(1)错误:i=1;
正确:i=0;
(2)错误:while(temp!=0&&m!=0&&n!=0)
正确:while(temp!=0||m!=0||n!=0)
【答案解析】 其中while循环是判断能否除尽x、y、z,循环中“i=i+1;”进行了加1操作,i应该从1开始进行循环,所以i的初始值应该是0,这样第一个错误标识下的“i=1;”就改为“i=0;”。
第二个标识下while循环逻辑关系应该是或的关系,因为最小公倍数成立的条件是同时除尽,所以只要不是同时除尽,循环就继续,这样“while(temp!=0&&m!=0&&n!=0)”应该是“while(temp!=0||m!=0||n!=0)”。