问题 问答题

下列给定程序中,函数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); }

答案

参考答案:

解析:错误:{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的最大公约数。关于“交换原则”我们在前面已经讲述过了,这里就不再赘述。

单项选择题 A1型题
多项选择题