下列给定程序中 函数fun()的功能是;求出两个数的最大公约数 并作为函数值返回。例如 若给num1和nu
下列给定程序中,函数fun()的功能是;求出两个数的最大公约数,并作为函数值返回。例如,若给num1和num2输入 49和21,则输出的最大公约数为7:若给num1和num2分别输入27和81,则输出最大公约数为27。
请改正函数fun()中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
include <stdio.h>
int fun(int a, int b)
{ int r,t;
if(a<b)
/******************found*****************/
{ t=a; b=a; a=t;}
r=a%b;
while(r!=0)
{ a=b; b=r; r=a%b;}
/******************found*****************/
return(a);
}
main()
{ int num1, num2, a;
printf("Input num1 num2:"); scanf("%d %d",&num1, &num2);
printf("num1=%d num2=%d ",num1, num2);
a=fun(num1, num2);
printf("The maximun common divisor is %d ", a);
}
请帮忙给出正确答案和分析,谢谢!
-
正确答案:(1)错误:{t=a;b=a;a=t;} 正确:{t=a;a=b;b=t;} (2)错误:return(a); 正确:return(b);
(1)错误:{t=a;b=a;a=t;} 正确:{t=a;a=b;b=t;} (2)错误:return(a); 正确:return(b); 解析:若求两个数的最大公约数,如果b除a的非零余数能够整除a,那么该余数就是最大公约数;若余数为0,则最大公约数为a。该题程序中采用了循环语句,若b除以a的余数不等于0,则继续用a除以所得余数,直至余数为0,如此可以得到 a,b的最大公约数。关于“交换原则”我们在前面已经讲述过了,这里就不再赘述。
