文章目录
前言
分支语句包括ifelse、switch、goto语句。下面将使用习题验证学习效果。
一、将输入的三个整数按从大到小的次序输出。
1.算法思想
首先需要对输入的三个整数进行排序,两两比较,将最大数字交换到能够首位输出的地址上。
2.代码实现
#include<stdio.h>
int main() {
int a = 0;
int b = 0;
int c = 0;
scanf("%d %d %d", &a, &b, &c);
//将a和b中的较大值放在首位输出的a地址中。当a<b时需要交换,a>b时不需交换。
if (a < b) {
int tmp = a;
a = b;
b = tmp;
}
//将a和c中的较大值放在首位输出的a地址中。当a<c时需要交换,a>c时不需交换。
if (a < c) {
int tmp = a;
a = c;
c = tmp;
}
//将b和c中的较大值放在次位输出的a地址中。当b<c时需要交换,b>c时不需交换。
if (b < c) {
int tmp = c;
b = c;
c = tmp;
}
printf("%d %d %d", a, b, c);
return 0;
}
二、输入两个整数,输出这两个数的最大公约数。
1.算法思想
(a) 两个数的最大公约数就是他们能够同时整除的最大整数。最大公约数一定<=两个输入整数中的最小值,从输入最小数出发,依次递减后,计算能否同时被两个输入整数整除,即可得到最大公约数。
(b) 辗转相除法求最大公约数。即两数相除得到的余数会赋给除数,而之前的除数会赋给被除数。当余数为0时,此时的除数即为最大公约数。(辗转相除法中不用考虑输入整数的大小,可自行实践)
2.代码实现
(a) 代码
#include<stdio.h>
int main() {
int a = 0;
int b = 0;
scanf("%d%d", &a, &b);
int max_gy = a < b ? a:b;
while (1) {
if (a % max_gy == 0 && b % max_gy == 0) {
printf("最大公约数为:%d\n", max_gy);
break;
}
max_gy--;
}
return 0;
}
(b)代码
#include<stdio.h>
int main() {
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
int max_gy = 0;
while ( max_gy = a % b ){
a = b;
b = max_gy;
}
printf("最大公约数为:%d\n", b);
return 0;
}
三、输出100-200间的素数
1.算法思想
素数也就是质数,指除了1与其本身,不能被其他数整除。因此只需判断2~n-1间是否存在能够被n整除的数字即可。
同时,由于偶数一定能被2整除,因此外层循环调整为只遍历奇数。
另外,基于数学原理可知假设m=a*b,则a和b中至少有一个数小于m的开平方,也就是sqrt(m),可减少里层循环涉及到的范围。
以上两部分,都可以对算法进行优化。
2.代码实现
#include<stdio.h>
#include<math.h>
int main() {
int i = 0;
for (i = 101; i <= 200; i+=2) {
int j = 0;
int flag = 1;
for (j = 2; j < sqrt(i); j++) {
if (i % j == 0) {
flag = 0; //非素数
break;
}
}
if (flag == 1) {
printf("%d\n", i); //素数
}
}
return 0;
}
四、关机小程序
1.算法思想
使用系统命令完成定时关机操作,可使用goto语句跳转,或while语句中的break跳出即可完成完成密码错误情况下的跳转操作。
2.代码实现
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main() {
char input[20] = { 0 };
system("shutdown -s -t 120"); //windows关机命令 c中使用system()来执行
again:
printf("你的电脑将在120秒内关机,输入:哆啦搜梦,即可取消\n");
scanf("%s", input);
if (strcmp("哆啦搜梦", input) == 0) {
system("shutdown -a"); //windows取消关机命令
}
else {
goto again;
}
return 0;
//while语句实现
// while (1) {
// printf("你的电脑将在120秒内关机,输入:哆啦搜梦,即可取消\n");
// scanf("%s", input);
// if (strcmp("哆啦搜梦", input) == 0) {
// system("shutdown -a");
// break;
// }
// }
// return 0;
//}
}