问题 问答题

fun()的功能是:求出两个非零正整数的最大公约数,并作为函数值返回。
例如,若给hum1和num2分别输入49和21,则输出的最大公约数为7;若给num1和num2分别输入27和81,则输出的最大公约数为27。
#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;a=b;b=t; (2)return(b);

解析: ①本题中函数的功能是求出两个非零正整数的最大公约数。其中,最大公约数是指能最大约去给出的几个数字的数字。例如,15和30能最大约去的数字是15,所以15就是它们的最大公约数。
②从源程序的main()主函数开始入手,从键盘输入两个正整数,通过语句“a=fun(num1,num2);”调用fun()函数求得它们的最大公约数。
①根据算法分析,首先要确保a、b两个数中a是较大数,b是较小数,如果不是,则交换a和b。但是第一个标识下,交换a和b两个数的算法有误,所以应将“t=a;b=a;a=t;”改为“t=a;a=b;b=t;”。
②算法到循环结束,最后余数为0时,b中所存的数即为最大公约数,也就是函数要返回的值。因此,第二个标识下面的“return(a);”改为“return(b)”。
[考点] 函数实现的逻辑关系。

填空题
填空题