问答题 下列给定程序中,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;
m=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)”。