改错题 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)”。