一、if语句
单分支 :if (条件) { ... }
#include<stdio.h>
int main()
{
int a = 10;
int num = 0;//初始化
scanf("%d",&num);
if(num==10)
{
printf("Yes");
}
return 0;
}
双分支 :if (条件) { ... }
else { ... }
#include<stdio.h>
int main()
{
int a = 10;
int num = 0;//初始化
scanf("%d",&num);
if(num==10)
{
printf("Yes");
}
else
{
printf("No");
}
return 0;
}
多分支 :if (条件1) { ... }
else if (条件2) { ... }
else { ... }
#include<stdio.h>
int main()
{
int a = 10;
int num = 0;//初始化
scanf("%d",&num);
if(num==10)
{
printf("猜对了");
}
else if(num<10)
{
printf("猜小了");
}
else if(num>10)
{
printf("猜大了");
}
return 0;
}
注意事项:在if语句的判断语句中,符号 == 是一个容易出错漏写成 = 的一个点,但在编译器中 = 的作用是赋值,所以编译器不会报错,这就让我们很难发现错误点。
解决方法:若 == 的两边是一个常量和一个变量,我们可以把常量放在左边,变量放在右边,如(10 == num),这样的话,如果漏写编译器就会报错,这样就比较容易发现错误。
二、switch语
- 基本语法:switch (表达式) { case 值1: ... break; case 值2: ... break; default: ... }
- switch语句的执行顺序遵循以下规则:
1. `switch`语句较首先评估括号中的表达式,并将其结果与每个`case`标签后面的常量表达式进行比。
2. 如果表达式的值与某个`case`标签后面的常量表达式相匹配,则执行从该`case`标签开始的语句,直到遇到`break`语句或者`switch`语句的结尾。
3. 如果没有任何`case`标签的常量表达式与表达式的值相匹配,并且存在`default`标签,则执行`default`标签下的语句,同样直到遇到`break`语句或者`switch`语句的结尾。
4. 如果`switch`语句中没有`break`语句,即使找到了匹配的`case`标签,程序也会继续执行下一个`case`标签的语句,直到遇到`break`语句或者`switch`语句的结尾。
5. 如果`switch`语句中的所有`case`标签都没有匹配到表达式的值,并且没有`default`标签,则整个`switch`语句不执行任何操作。
例如,考虑以下代码片段:
int num = 3;
switch (num) {
case 1:
printf("Case 1\n");
// Fallthrough to Case 2
case 2:
printf("Case 2\n");
// Break out of the switch statement
break;
case 3:
printf("Case 3\n");
// No break, so it falls through to Case 4
case 4:
printf("Case 4\n");
// Default case is not executed because there's a match before it
break;
default:
printf("Default case\n");
}
在这个例子中,`num`的值为3,所以首先执行`case 3:`的代码,然后因为没有`break`语句,它会继续执行`case 4:`的代码。由于`case 4:`后面有`break`语句,所以执行完成后跳出`switch`语句。`case 1:`和`case 2:`虽然有匹配的值,但是因为`case 3:`和`case 4:`已经被执行,所以它们不会被执行。`default`标签由于前面已经有匹配的`case`,所以也不会被执行。
break语句的作用:
在C语言中,`break`语句主要用于立即终止循环(如`for`、`while`、`do-while`)或`switch`语句中的执行流程。当程序执行到`break`语句时,它会立即跳出当前的循环或`switch`结构,并继续执行该结构之后的代码。
1.循环中的`break`语句
当`break`语句位于循环内部时,它会导致循环立即结束,并跳过循环剩余的部分,继续执行循环后面的语句。例如,在`for`循环中,如果满足某个条件,使用`break`可以提前终止循环。
2.`switch`语句中的`break`语句
在`switch`语句中,`break`用于终止当前`case`的执行,并防止程序流向下一个`case`。如果没有`break`语句,程序会继续执行后续的`case`,直到遇到`break`或`switch`语句的末尾。
3.嵌套循环中的`break`语句
如果你使用的是嵌套循环,`break`语句会停止执行最内层的循环,然后开始执行该块之后的下一行代码。这意味着它不会影响外层循环的执行。
注意:`break`语句只能在循环或`switch`语句中使用,如果在这些结构之外使用,编译器将会报错。
default语句的使用:
`default`语句在C语言中主要用于`switch`语句中,它的作用是当`switch`语句中的`case`标签都不匹配时执行的代码块。`default`语句是可选的,如果没有提供`default`语句,而`switch`表达式的值又没有匹配任何`case`,则程序将不执行任何代码块。
`default`语句的语法如下:
switch (表达式) {
case 常量1:
// 代码块1
break;
case 常量2:
// 代码块2
break;
// 更多case语句
default:
// 默认代码块
break;
}
如果`switch`表达式的值与任何一个`case`后的常量都不匹配,程序将执行`default`后的代码块。
以下是一个使用`default`语句的示例:
#include <stdio.h>
int main() {
int day = 4;
switch(day) {
case 1:
printf("Monday\n");
break;
case 2:
printf("Tuesday\n");
break;
case 3:
printf("Wednesday\n");
break;
default:
printf("Other day\n");
}
return 0;
}
在这个示例中,如果`day`的值是1、2或3,程序将分别打印出对应的星期几。如果`day`的值不是1、2、3,那么程序将执行`default`后的代码块,输出"Other day"。
注意事项:
- `default`语句通常出现在`switch`语句的最后,但这不是强制的,可以放在其他位置。
- `default`语句是可选的,如果没有提供,而`switch`表达式的值又没有匹配的`case`,则程序将不执行任何代码块。
- 如果`default`语句在所有`case`之后,可以不加`break`语句,因为它已经是最后一个分支了。但如果`default`语句之前还有其他`case`语句,为了避免执行到`default`后的其他`case`,通常需要在`default`后面加上`break`语句。
- `default`语句应该谨慎使用,因为它代表了所有未预见的情况,应当确保程序能够妥善处理这些情况。
三、while循环
- 基本语法 while (条件) { ... }
- 循环的执行过程:
1. 初始化条件:在进入`while`循环之前,首先需要初始化一个或多个控制循环的变量。
2. 循环条件判断:接下来,程序会检查`while`循环的条件表达式。如果条件表达式的结果为真(即非零值),则执行循环体中的语句。
3. 循环体执行:如果条件表达式为真,程序将执行循环体中的语句。循环体可以包含一个或多个语句。
4. 更新条件变量:在循环体执行完毕后,程序会更新控制循环的变量,以便在下一次循环条件判断时使用新的值。
5. 返回循环条件判断:更新变量后,程序返回到循环条件判断阶段,再次检查条件表达式。如果条件仍然为真,程序将重复执行上述步骤(步骤2至步骤5)。
6. 循环结束:一旦条件表达式的结果为假(即为零),循环将终止,程序将继续执行循环之后的下一条指令。
以下是一个简单的`while`循环示例,用于打印数字1到10:
#include <stdio.h>
int main() {
int i = 1;
while (i <= 10) {
printf("%d ", i);
i++;
}
return 0;
}
在这个例子中,变量`i`被初始化为1,然后进入`while`循环。循环条件是`i <= 10`,每次循环结束后,`i`的值增加1。当`i`的值达到11时,条件不再满足,循环结束,程序打印出数字1到10,并继续执行`main`函数的其余部分。
此外,`while`循环还可以配合`break`和`continue`语句使用,以控制循环的执行流程。`break`语句用于立即终止循环,而`continue`语句用于跳过当前循环的剩余部分,直接进入下一次循环的条件判断[1][2][3][4]。
- 避免无限循环的技巧:
为了避免`while`循环变成无限循环,需要确保循环条件最终会变为假(即为零)。以下是一些常见的方法:
1. 使用递增或递减操作符:
int count = 0;
while (count < 10) {
// 循环体
count++; // 每次循环后计数器递增
}
2.使用逻辑运算符:
bool isRunning = true;
while (isRunning) {
// 循环体
// 某些条件满足时设置isRunning为false以退出循环
}
3. 使用`break`语句:
while (true) {
// 循环体
if (某个条件) {
break; // 当条件满足时跳出循环
}
}
4. 使用`continue`语句:
while (true) {
// 循环体
if (某个条件) {
continue; // 当条件满足时跳过当前循环迭代,继续下一次迭代
}
// 其他代码
}
5. 使用`do...while`循环作为备选方案:
do {
// 循环体
} while (某个条件); // 只有在循环体执行完毕后才检查条件
```
6. 确保循环条件可变:
确保循环条件中涉及的变量会随着循环的进行而改变状态,否则循环将无法自然结束。
四、do-while循环
- 基本语法 :do { ... } while (条件);
在C语言中,do while循环是一种后置条件测试的循环结构。它的特点是至少执行一次循环体,因为循环条件是在循环体执行后进行测试的。do while循环的基本语法如下:
do {
// 循环体代码
} while (条件表达式);
这里的do关键字后面跟着循环体,而while关键字后面跟随着条件表达式。循环体至少执行一次,因为条件的检验是放在循环的末尾。如果条件表达式的结果为真(非零),控制流会返回到循环体的开头,继续执行循环体内的代码。这个过程会一直持续,直到条件表达式的结果为假(零),这时循环终止。
以下是一个简单的C语言示例,展示了do while循环的使用:
#include <stdio.h>
int main() {
int i = 1;
do {
printf("%d\n", i);
i++;
} while (i < 10);
return 0;
}
在这个例子中,变量i初始化为1,然后进入do while循环。循环体打印出i的值并将其自增。由于循环条件i < 10在每次循环结束后才被检查,因此即使条件最初为真,循环体也至少执行一次。循环会继续执行,直到i的值达到10,这时条件变为假,循环结束。程序输出的结果将是数字1到9。
- 循环的执行过程:do while循环是一种先执行循环体再判断条件的循环结构。它的执行过程如下:
1. 执行循环体:首先执行do后的语句块,也就是循环体内的语句。
2. 判断条件:执行完循环体后,再判断while后的条件表达式。
3. 继续执行或跳出循环:如果条件为真(非0),则继续执行循环体,再次进行步骤1。如果条件为假(0),则跳出循环,执行循环后的语句。
需要注意的是,do while循环至少会执行一次循环体,因为循环体的执行是在条件判断之前。而且,在每次循环结束后,都会重新判断条件并决定是否继续执行循环。
- 与while循环的区别:
C语言中的do-while循环和while循环在结构上有一些不同之处。
-
语法结构:
- do-while循环:
do { // 代码块 } while (条件);
- while循环:
while (条件) { // 代码块 }
- do-while循环:
-
执行顺序:
- do-while循环会先执行一次代码块,然后再判断条件是否满足,如果满足则继续循环执行,直到条件不满足为止。
- while循环会先判断条件是否满足,如果满足则执行代码块,然后再判断条件是否满足,如果满足则继续循环执行,直到条件不满足为止。
-
执行次数:
- do-while循环保证代码块至少执行一次,即使条件一开始就不满足,因为判断条件是在执行代码块之后。
- while循环可能会一次都不执行代码块,如果条件一开始就不满足。
总结:do-while循环和while循环的不同之处在于条件判断的时机。do-while循环先执行一次代码块再判断条件,保证代码块至少执行一次;而while循环先判断条件再执行代码块,可能一次都不执行。
五、for循环
C语言中的for循环是一种常用的循环结构,用于重复执行一段代码。
for循环的语法如下:
其中,初始化表达式在循环开始之前只执行一次,用于初始化循环变量;循环条件在每次循环迭代之前都会被检查,如果条件为真,则执行循环体代码,否则跳出循环;更新表达式在每次循环迭代之后执行,用于更新循环变量的值。
下面是一个计算1到10之间整数之和的例子:
#include <stdio.h>
int main() {
int sum = 0;
for (int i = 1; i <= 10; i++) {
sum += i;
}
printf("Sum: %d\n", sum);
return 0;
}
在这个例子中,初始化表达式初始化了循环变量`i`为1;循环条件判断`i`是否小于等于10;循环体代码将`i`加到`sum`上,并使用更新表达式将`i`递增。
- 循环变量的初始化、条件判断和更新:
在C语言中,for循环的语法如下:
for (初始化; 条件判断; 更新) {
// 循环体
}
循环变量的初始化:在for循环开始之前,可以通过初始化语句来给循环变量赋初始值。通常情况下,循环变量是一个整型变量,可以使用赋值语句为循环变量初始化,例如:
for (int i = 0; i < 10; i++) {
// 循环体
}
条件判断:在每一次循环迭代开始之前,都会对条件进行判断,如果条件为真,则执行循环体;如果条件为假,则退出循环。条件判断通常使用比较运算符(如<、<=、>、>=、==、!=)进行判断,例如:
for (int i = 0; i < 10; i++) {
// 循环体
}
更新:在每一次循环迭代结束之后,会执行更新语句,通常用于更新循环变量的值。更新可以是对循环变量进行自增或自减操作,也可以是对循环变量进行赋值操作。例如:
for (int i = 0; i < 10; i++) {
// 循环体
}
需要注意的是,初始化、条件判断和更新都可以省略,但分号必须保留。如果省略了条件判断,则相当于条件永远为真,即无限循环。如果省略了初始化和更新,那么需要在循环外部提前定义循环变量,并确保更新循环变量的语句在循环体内部。例如:
int i;
for (; i < 10; ) {
// 循环体
i++;
}
五、continue和break语句
- continue语句的作用:
continue语句的作用是跳过当前循环中剩下的代码,直接进行下一轮循环的执行。当程序执行到continue语句时,它会立即结束当前循环的剩余代码,然后跳转到循环的控制条件处,判断是否继续执行循环体。
通常情况下,continue语句会与if语句结合使用,用于跳过某些特定条件下的循环迭代。当满足某个条件时,程序会调用continue语句,跳过该条件下的迭代过程,直接进行下一轮循环的判断和执行。
以下是一个使用continue语句的示例:
#include <stdio.h>
int main() {
int i;
for (i = 1; i <= 10; i++) {
if (i % 2 == 0) {
continue;
}
printf("%d ", i);
}
return 0;
}
在上述示例中,循环从1到10,但是当i为偶数时,程序会调用continue语句,跳过该迭代过程,不执行printf语句。因此,输出结果为1 3 5 7 9。
- break语句的作用:
在C语言中,`break`语句主要用于循环语句和`switch`语句中,其作用为跳出当前的循环或者`switch`语句。
在循环语句中,当满足某个条件时,可以使用`break`语句来立即跳出循环,而不需要继续执行循环中的剩余代码。这样可以有效地控制程序的流程,提高程序的效率。
在`switch`语句中,`break`语句用于结束当前`case`分支的执行,并跳出`switch`语句。这样可以避免后续`case`分支的代码被执行,从而实现选择性执行不同的代码块。
综上所述,`break`语句通过跳出循环或者`switch`语句,可以中断程序的正常执行流程,从而实现程序的跳转和控制。