个人主页:天寒雨落的博客_CSDN博客-C,CSDN竞赛,python领域博主
💬 刷题网站:一款立志于C语言的题库网站蓝桥杯ACM训练系统 - C语言网 (dotcpp.com)?
?特别标注:该博主将长期更新c语言内容,初学c语言的友友们,订阅我的《初学者入门C语言》专栏,关注博主不迷路!
目录
一、最大公约数与最小公倍数
1.题目
2.思路
3.代码
4.运行结果
5.易错点
二、求三个数字的最大值
1.题目
2.思路
3.方法一
代码
运行结果
?4.方法二
三目运算符?:
代码
执行结果
一、最大公约数与最小公倍数
1.题目
输入两个正整数m和n,求其最大公约数和最小公倍数。
2.思路
用辗转相除法(额,这东西能理解就理解不能理解就背住吧) 求最大公约数:先比较两个数的大小,把最大的给m,小的给n,再用m除以n,如果余数y为0,则就是最大公约数,否则,将n赋给m,将余数y赋给n,为什么要这样赋呢?因为上面运算的时候可以明显的知道余数y是小于n的不然它怎么是余数呢,然后就接着用m除以n,直到余数y为0,否则就重复前面的运算。
求最小公倍数:就是n和m的乘积除以最大公约数,即(n*m)/最大公约数
3.代码
#include "stdio.h"
int main() {
int m, n, y, t, p, q;
scanf("%d%d", &m, &n);
p = m;
q = n;
if (n > m) {
t = m;
m = n;
n = t;
}
while (m % n) {
y = m % n;
m = n;
n = y;
}
printf("最大公约数为:%d,最小公倍数为:%d", n, (p * q) / n);
return 0;
}
4.运行结果
5.易错点
在我们判断n大于m,想交换m和n的值的时候,不能直接写成m=n,要写成t=m;m=n;n=t;在这里要引入一个中间变量t
那么大家想一下然后不引用中间变量,然后只用两个变量就实现交换呢?
可以这样:
m=m+n;//此时的m为m与n的和
n=m-n;//此时n为以前的m
m=m-n;//此时m为以前的n
总结一下也就是说:
已知int n,m;
{m=m+n;n=m-n;m=m-n}等效于{int t;t = m;m = n;n = t;}
看到这里真的是不得不感叹一句数学知识博大精深啊!
二、求三个数字的最大值
1.题目
输入x,y,z三个数,比较其大小
2.思路
方法一:两两比较,比较两回就出来了
方法二:用三目运算符
3.方法一
代码
#include "stdio.h"
int main() {
int x, y, z, max;
scanf("%d%d%d", &x, &y, &z);
max = x;
if (y > max) {
max = y;
}
if (z > max) {
max = z;
}
printf("%d", max);
return 0;
}
运行结果
?4.方法二
三目运算符?:
需要先补充一下三目运算符?:
<表达式1> ?<表达式2> :<表达式3>,意思是满足表达式1就执行表达式2,否则执行表达式3.
使用格式:x>y?x:y,判断x大于y吗,如果大于则该表达式的值为x,否则为y
代码
#include"stdio.h"
int main()
{
int x, y, z, max;
scanf("%d%d%d", &x, &y, &z);
max = (x>y?x:y)>z?(x>y?x:y):z;
printf("%d", max);
return 0;
}
执行结果
?max = (x>y?x:y)>z?(x>y?x:y):z;相当于max = x>y?? x:y; max = z>max ? z:max;
各位C语言的初学者有问题随时都可以问我,随时为您解惑!!!
👍+??+??是对博主最大的鼓励与支持!!!
|