-
求任意两个数的最大公约数
- 两个数的最大公约数有可能是其中较小的数字,在寻找最大公约数时按从大到小的顺序进行排序,循环变量i的初值从较小的数字开始,依次递减,去寻找第一个能同时整除两个整数的自然数,并将其输出。
- 注意:虽然判定条件是i>0,但在找到第一个满足条件的i的值后,即可跳出循环,例如输入25和15,最大公约数是5,对于后面的4、3、2、1没有必要继续执行,但此时判定条件仍然成立,要结束循环只能借助
break
语句。
#include <stdio.h> int main() { int a, b, t, i; printf("enter 2 numbers:\n"); scanf("%d%d", &a, &b); if (a < b) { //比较大小,a存储大值,b存储小值 t = a; a = b; b = t; } for (i = b; i > 0; i--) { //i的初值从较小的数字开始,依次递减,去寻找第一个能同时整除两个整数的自然数,并将其输出 if (a % i == 0 && b % i == 0){ printf("The GDC of %d and %d is %d\n", a, b, i); break; //结束循环 } } return 0; }
-
求任意两个数的最小公倍数
-
输入的两个数字,大数a是小数b的倍数,a即为所求最小公倍数,若a不能被b整除,则需要寻找一个能同时被两个整数整除的自然数,在寻找最小公倍数时按从大到小的顺序进行排序,循环变量i的初值从较大的数字a开始向后递增,直到找到第一个能同时被两个整数整除的数字,并将其输出。
-
注意:由于i的最大值不能确定而导致终止条件不确定,故有如下解决办法:
- 将判定条件表示成循环变量满足的基本条件,如终止条件可以设置为i > 0;
- 终止条件省略不写,利用循环体中的语句结束循环,如在找到第一个满足条件的自然数时利用
break
语句跳出循环。
#include <stdio.h> int main() { int a, b, t, i; printf("enter 2 numbers:\n"); scanf("%d%d", &a, &b); if (a < b) { //比较大小,a存储大值,b存储小值 t = a; a = b; b = t; } for (i = a; i > 0; i++) { //i的初值从较大的数字a开始向后递增,直到找到第一个能同时被两个整数整除的数字,并将其输出,此处循环终止条件可不写for (i = a; ; i++) if (i % a == 0 && i % b == 0) { printf("The LCW of %d and %d is %d\n", a, b, i); break; } } return 0; }
-
-
求两个数m和n的最大公约数
-
利用格式输入语句将输入的两个数分别赋给 a 和 b,然后判断 a 和 b 的关系,如果 a 小于 b,则利用中间变量 t 将其互换。再利用辗转相除法求出最大公约数,进而求出最小公倍数。最后用格式输出语句将其输出。
-
辗转相除法:
- 有两个整数a和b:
- a%b得余数c;
- 若c = 0,则b为两数得最大公约数;
- 若c ≠ 0,则a = b, b = c,再执行1;
- 最小公倍数 = 两数的乘积 / 最大公约数
- 有两个整数a和b:
#include <stdio.h> int main() { int a, b, c, m, t; printf("enter 2 numbers:\n"); scanf("%d%d", &a, &b); if (a < b) { t = a; a = b; b = t; } m = a * b; c = a % b; while (c != 0) { a = b; b = c; c = m % b; } printf("The GDC of %d and %d is %d\n", a, b, b); printf("The LCW of %d and %d is %d\n", a, b, m/b); return 0; }
-
-
猴子吃桃问题
- 猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将第一天剩下的桃子吃掉一半,有多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第 10 天早上想再吃时,发现只剩下一个桃子了。编写程序求猴子第一天摘了多少个桃子。
#include <stdio.h> int main() { int day, x1, x2; day = 9; x2 = 1; while(day > 0) { x1 = (x2 + 1) * 2; x2 = x1; day--; } printf("total is %d\n", x1); return 0; }
-
输入10个数字,输出其中最大的一个数字:
#include <stdio.h> int main() { int i, max; int a[10]; printf("enter 10 numbers:\n"); for (i = 0; i < 10; i++) scanf("%d", &a[i]); max = a[0]; for (i = 1; i < 10; i++) { if (max < a[i]) max = a[i]; } printf("max = %d\n", max); return 0; }
c_20200504
最新推荐文章于 2022-03-04 09:16:22 发布