下列给定程序中,函数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\n\n",num1, num2);
a=fun(num1, num2);
printf("The maximun common divisor is %d\n\n", a);
参考答案:(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的最大公约数。关于“交换原则”我们在前面已经讲述过了,这里就不再赘述。