分支与循环

目录

找最大公约数

法1

法2

求最小公倍数

判断是否是素数

法1

法2

模拟用户登录界面

找两个数的最大公约数 

法1

 法2辗转相除法求最大公约数

判断一个数是否是素数

模拟实现用户输入密码登入界面


找两个数的最大公约数

法1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

int main()
{
int m, n;
scanf("%d %d", &m, &n);
int ret = m < n ? m : n;//求得到m和n中较小的那个数
while (1)
{
if (m%ret == 0 && n%ret == 0)//从m与n的最小值中开始减,减到if成立
{
break;//当ret同时能够被m和n整除时,ret就是最大公约数
}
ret--;
}
printf("%d", ret);
return 0;
}

法2辗转相除法求最大公约数

1
2
3
4
5
6
7
8
9
10
11
12
13
14

int main()
{
int m, n;
scanf("%d %d", &m, &n);//假设输入24 18,ret=24%18=6,将n的值赋给m,m=18,ret的值赋给n,ret=618%6=0;while就停下来此时n的值就是最大公约数,若输入的是182418/%24=18,也会把两者进行交换
int ret = 0;
while (ret = m % n)//ret为0就停下来了,
{
m = n;
n = ret;
}
printf("%d", n);
return 0;
}

 最小公倍数
可以把两个数相乘除以他们的最大公约数

判断一个数是否是素数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int main()
{
int flag = 1;
int num,i;
scanf("%d", &num);
for (i = 2; i < num; i++)//从2到num-1对num进行试除,一旦除成功就跳出去
{
if (num%i == 0)
{
flag = 0;
break;
}
}
if (flag)
{
printf("是素数");
}
else
printf("不是素数");
return 0;
}

但我们还有更高效率的方法
要找一个数的因数如16=2*8,4*4,如果有因数,则在根号16前面至少会有一个因数,所以不用全部进行试除

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include<math.h>

int main()
{
int i;
int flag = 1;
int num = 13;
for (i = 2; i <= sqrt(num); i++)
{
if (num%i == 0)
{
flag = 0;
break;
}
}
if (flag)
{
printf("是素数");
}
return 0;
}

模拟实现用户输入密码登入界面

用户只有3次输入密码的机会,三次都错误就退出界面 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int main()
{
int i = 0;
char password[20] = "";
假设密码是123456
for (i = 0; i < 3; i++)
{
printf("请输入密码\n");
scanf("%s", password);
对字符串进行判断相等,用strcmp
if (strcmp(password, "123456") == 0)
{
printf("登录成功\n");
}
}
if (i == 3)//i最后自增到3<3不成立就不执行了,往下i=3,3次都失败了
{
printf(" 登录失败,退出程序\n");
}
return 0;
}

分支与循环
http://example.com/2021/11/18/分支与循环/
作者
Zevin
发布于
2021年11月18日
许可协议