中国大学MOOC:根据最大公约数的如下3条性质,采用递归法编写计算最大公约数的函数Gcd(),在主函数中调用该函数计算并输出从键盘任意输入的两正整数的最大公约数。性质1如果a>b,则a和b与a-b和b的最大公约数相同,即Gcd(a,b)=Gcd(a-b,b)性质2如果b>a,则a和b与a和b-a的最大公约数相同,即Gcd(a,b)=Gcd(a,b-a)性质3如果a=b,则a和b的最大公约数与a值和b值相同,即Gcd(a,b)=a=b代码如下,请补充程序中缺少的内容。#includeintGcd(inta,intb);intmain(){inta,b,c;printf(Inputa,b:);scanf(%d,%d,&a,&b);c=Gcd(a,b);if(_________)printf(GreatestCommonDivisorof%dand%dis%d\n,a,b,c);elseprintf(Inputnumbershouldbepositive!\n);return0;}intGcd(inta,intb){if(_______________)return-1;if(a==b)return__________;elseif(a>b)return__________;elsereturn___________;}
举一反三
- 编写用辗转相除法求两个数最大公约数的函数,调用该函数求两个数的最大公约数和最小公倍数。 #include "stdio.h" int gcd(int m,int n) { int r; do {【1】; m=n; n=r; } while(r!=0); return 【2】 ; } main() { int a,b,x,y; scanf("%d%d",&a,&b); x=gcd(【3】); y=a*b/x; /*求a和b的最小公倍数*/ printf("GCD=%d,LCM=%d\n",x,y); }
- 下面程序是用辗转相除法计算两个正整数的最大公约数的递归求解方法。请将程序补充完整。提示:辗转相除法的基本思路是,对正整数a和b,连续进行求余运算,直到余数为0为止,此时非0的除数就是最大公约数。设r=amodb表示a除以b的余数,若r≠0,则将b作为新的a,r作为新的b,重复amodb运算,直到r=0时为止,此时b为所求的最大公约数。例如,50和15的最大公约数的求解过程可表示为:Gcd(50,15)=Gcd(15,5)=Gcd(5,0)=5。intGcd(inta,intb){if(a%b==0)returnb;elsereturn____________________;} A: Gcd(b,a%b) B: Gcd(a,b%a) C: Gcd(b%a,a) D: Gcd(a%b,b)
- 下面是求最大公约数的函数gcd的首部 Function gcd(ByVal x As Integer, ByVal y As Integer) As Integer 若要输出8、12、16这3个数的最大公约数,下列语句中正确的是 A: Print gcd (8,12), gcd(12,6), gcd(16,8) B: Print gcd (8,12,16) C: Print gcd (8), gcd(12), gcd(16) D: Print gcd (8, gcd(12,16))
- gcd()函数是求最大公约数函数
- 通过方法gcd求两个数的最大公约数。public static void main(String[] args) { int a=24,b=15; System.out.println(a+"和 "+b+"的最大公约数是:"+ ⑥ );//调用方法gcd}static ⑦(int a,int b){//定义方法gcd int k; do{ k=⑧; a=b; b=k; }while(⑨); ⑩;//返回最大公约数 }}