【while循环】
1. 区分if和while的异同
(1)相同点:两者都是控制流语句,用于控制程序的执行顺序
(2)不同点:if 语句用于条件判断,满足条件时执行一次特定的代码块
而 while 用于循环,只要满足条件,就会重复执行代码块,直到条件不成立为止
(3)最大的不同在于 if 只执行一次,而 while 可以执行多次,取决于条件
2. 逆序打印一个正整数(进阶: 用函数递归实现)
(1)循环实现:
void printReverse(int num) {
while(num > 0) {
printf("%d", num % 10);
num /= 10;
}
}
(2)递归实现:
void printReverseRecursive(int num) {
if(num > 0) {
printf("%d", num % 10);
printReverseRecursive(num / 10);
}
}
【for循环】
3. 理解for循环的执行流程【重要】, 可以画图展示
(1)for循环通常包含三个部分:初始化、循环条件、更新。执行流程如下:
1. 初始化:只在循环开始前执行一次
2. 检查循环条件:若为真,则执行循环体;若为假,则跳出循环
3. 执行循环体
4. 更新:在每次循环体执行后执行 5
5. 回到第2步
4. while循环和for循环对比?如何选择使用哪个?
(1)对比:for 循环通常用于已知循环次数的情况,而 while 循环适用于不知道循环次数,只知道循环条件的情况
(2)选择:一般来说,当已知迭代次数或需要遍历时,可以优先选择 for 循环。但是如果条件比较复杂,可读性更好的是 while 循环。总的来说,优先考虑代码的可读性和简洁性
5. do-while和while的区别?如何选用?
(1)最大的区别是 do-while 循环会至少执行一次,而 while 循环则可能一次都不执行
(2)如果需要保证循环体至少执行一次,就选择 do-while 循环,否则选择 while 循环
6. break和continue如何理解?作用范围?
(1)break:立即退出循环,不再执行剩余循环
(2)continue:跳过本次循环剩余部分,进入下一次循环
(3)作用范围:作用范围是在循环语句内部
7. 实战,素数判断代码实现
#include <stdio.h>
// 逆序打印一个正整数(使用递归)
void reversePrint(int n) {
if (n == 0) // 递归结束条件
return;
printf("%d", n % 10); // 打印最后一位数字
reversePrint(n / 10); // 递归调用,打印剩余部分
}
// 判断素数
int isPrime(int n) {
if (n <= 1) // 小于等于1的数不是素数
return 0;
for (int i = 2; i * i <= n; i++) {
if (n % i == 0) // 如果能被整除,不是素数
return 0;
}
return 1; // 是素数
}
8. goto语句的缺陷
(1)缺陷:goto 语句会增加代码的复杂性,降低可读性,使得程序难以理解和维护
(2)替代方案:使用循环和条件语句等结构化控制流语句来代替 goto
9. 实战:用goto语句实现一个关机小程序
#include <stdio.h>
#include <stdlib.h>
int main() {
system("shutdown -s -t 60"); // 设置60秒后关机
start: // 标签
printf("电脑将在60秒后关机,输入'取消'取消关机:");
char input[10];
scanf("%s", input);
if (strcmp(input, "取消") == 0) {
system("shutdown -a"); // 取消关机
} else {
goto start; // 跳转到标签start处
}
return 0;
}
请注意,上述代码中的 system 函数调用了操作系统的命令行命令,这在某些环境下可能不被允许,因为它涉及到系统权限和安全性问题。在实际应用中,应谨慎使用此类功能