目录
[switch case语句](#switch case语句)
if选择结构
当我们需要根据条件的成立与否来执行不同的代码块时,可以使用C语言中的if选择结构。if选择结构可以根据判断条件的结果来决定程序的执行路径,从而实现不同的逻辑分支。
在C语言中,if选择结构有三种形式:单选择、双选择和多选择。下面逐一介绍这三种形式。
单选择结构
单选择结构用if语句实现,它的基本语法如下:
cpp
if (条件表达式)
{
// 当条件成立时执行的代码块
}
其中,条件表达式是一个逻辑表达式,如果它的值为真(非零),则执行if语句后的代码块;如果它的值为假(0),则跳过if语句后的代码块。
双选择结构
双选择结构用if-else语句实现,它的基本语法如下:
java
if (条件表达式)
{
// 当条件成立时执行的代码块
}
else
{
// 当条件不成立时执行的代码块
}
条件表达式的值为真时,执行if语句后的代码块;条件表达式的值为假时,执行else语句后的代码块。
多选择结构
多选择结构用if-else if-else语句实现,它的基本语法如下:
cpp
if (条件表达式1)
{
// 当条件1成立时执行的代码块
}
else if (条件表达式2)
{
// 当条件2成立时执行的代码块
}
else if (条件表达式3)
{
// 当条件3成立时执行的代码块
}
...
else
{
// 当以上条件都不成立时执行的代码块
}
多选择结构中,条件表达式按顺序进行判断,只有第一个为真的条件对应的代码块会被执行。如果所有条件都不成立,则执行else语句后的代码块。
在实际应用中,可以根据具体需求灵活运用这些选择结构。需要注意的是,条件表达式的值应该是一个逻辑值(0或非零),并且代码块的花括号是必需的,即使代码块只有一行。
代码示例
java
#include <stdio.h>
int main() {
int num = 10;
if (num > 0) {
// 单选择:当num大于0时执行以下代码块
printf("数字为正。\n");
} else if (num < 0) {
// 多选择:当num小于0时执行以下代码块
printf("数字为负数。\n");
} else {
// 双选择:当num等于0时执行以下代码块
printf("数字为零。\n");
}
return 0;
}
在这个示例中,我们首先判断num是否大于0,如果是,则打印"数字为正。"。如果不是,则继续判断num是否小于0,如果是,则打印"数字为负数。"。如果num既不大于0也不小于0,那么它必定等于0,于是打印"数字为零。"。
switch case语句
当我们需要根据不同的取值来执行不同的代码块时,可以使用C语言中的switch case语句。switch case语句是一种多选择结构,它可以根据表达式的值来选择执行相应的代码块。
switch case语句的基本语法如下:
cpp
switch (表达式)
{
case 值1:
// 当表达式的值等于值1时执行的代码块
break;
case 值2:
// 当表达式的值等于值2时执行的代码块
break;
case 值3:
// 当表达式的值等于值3时执行的代码块
break;
...
default:
// 当表达式的值与上述所有值都不匹配时执行的代码块
break;
}
switch关键字后面的表达式的值会与各个case后面的值进行比较,如果匹配,则执行对应的代码块。如果没有匹配的值,可以使用default关键字指定一个默认的代码块。在每个case的代码块末尾使用break关键字来终止switch语句的执行,否则会继续执行下一个case的代码块,直到遇到break或整个switch语句结束。
以下是一个简单的示例来说明switch case语句的用法:
cpp
#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;
case 4:
printf("Thursday\n");
break;
case 5:
printf("Friday\n");
break;
default:
printf("Weekend\n");
break;
}
return 0;
}
在这个示例中,我们根据变量day
的值来选择打印相应的星期几。因为day
的值为4,所以匹配到了case 4,并执行了对应的代码块,打印"Thursday"。
需要注意的是,switch case语句只能用于判断整型或字符型的值,不能用于判断浮点数、字符串等其他类型的值。每个case后面的值必须是一个常量表达式,而不能是变量。
break语句的用法
在C语言中,break语句是一种控制语句,用于终止循环或switch语句的执行。当程序执行到break语句时,会立即跳出当前的循环或switch语句,并开始执行下一条语句。
break语句通常用于以下两种情况:
1、终止循环
当我们需要在满足某个条件时退出循环时,可以使用break语句。例如,在一个for循环中,当遇到某个特定条件时,我们希望立即退出循环,可以这样写:
cpp
for (int i = 0; i < 10; i++) {
if (i == 5) {
break;
}
printf("%d\n", i);
}
上述代码中,当i等于5时,执行break语句,跳出for循环,不再执行后续的代码块。
2、终止switch语句
在C语言中,switch语句中的每个case后面都需要使用break语句来终止该case的执行,否则程序将继续执行下一个case的代码块。例如:
cpp
switch (num) {
case 1:
printf("One\n");
break;
case 2:
printf("Two\n");
break;
default:
printf("Other\n");
break;
}
在上述代码中,当num的值为1时,执行case 1的代码块,并在末尾使用break语句来终止该case的执行。如果没有break语句,程序将继续执行下一个case的代码块,直到遇到break或switch语句结束。
需要注意的是,break语句只能用于循环语句或switch语句中,不能在其他地方使用。同时,当嵌套多个循环或switch语句时,break语句只会终止最内层的循环或switch语句的执行,如果需要终止外层的循环或switch语句,可以使用标签(label)和goto语句来实现。
while循环语句
在C语言中,while循环是一种常用的迭代结构,它会根据给定的条件重复执行一段代码块,直到条件不再满足为止。while循环的基本语法如下:
cpp
while (条件)
{
// 循环体代码块
}
在每次循环开始之前,会首先判断条件是否满足。如果条件为真(非零),则执行循环体代码块;如果条件为假(零),则跳过循环体,继续执行后续的代码。
以下是一个简单的示例来说明while循环的用法:
cpp
#include <stdio.h>
int main() {
int i = 0;
while (i < 5) {
printf("%d\n", i);
i++;
}
return 0;
}
运行结果:
cpp
0
1
2
3
4
在这个示例中,我们使用while循环打印从0到4的整数。循环的条件是i < 5,当i小于5时,执行循环体代码块,打印i的值,并将i递增1。当i等于5时,条件不再满足,循环结束。
需要注意的是,如果循环条件一开始就不满足,那么循环体代码块将不会执行,循环会被跳过。
在使用while循环时,需要注意避免无限循环的情况。如果循环条件始终为真,循环将永远不会结束,这可能会导致程序陷入死循环,造成系统资源的浪费。因此,在编写while循环时,确保循环条件能够在某个时刻变为假,以便终止循环。
do-while循环语句
在C语言中,do-while循环是一种迭代结构,它与while循环相似,但是它会先执行一次循环体代码块,然后再根据给定的条件决定是否继续执行循环。do-while循环的基本语法如下:
cpp
do {
// 循环体代码块
} while (条件);
与while循环不同的是,do-while循环的条件是在循环体执行之后进行判断。即使条件不满足,循环体至少会被执行一次。
以下是一个简单的示例来说明do-while循环的用法:
cpp
#include <stdio.h>
int main() {
int i = 0;
do {
printf("%d\n", i);
i++;
} while (i < 5);
return 0;
}
运行结果:
cpp
0
1
2
3
4
在这个示例中,我们使用do-while循环打印从0到4的整数。循环体代码块会先执行一次,然后再判断条件i < 5是否满足。只要条件为真,即i小于5,就会继续执行循环体,打印i的值,并将i递增1。当i等于5时,条件不再满足,循环结束。
需要注意的是,与while循环一样,确保循环条件能够在某个时刻变为假,以便终止循环。否则,如果循环条件始终为真,就会导致无限循环的情况。
do-while循环的一个常见应用是在需要至少执行一次循环体的情况下,再根据条件进行后续的迭代。
for循环语句
在C语言中,for循环是一种常用的迭代结构,它允许我们根据给定的条件重复执行一段代码块,通常用于已知循环次数的情况。for循环的基本语法如下:
cpp
for (初始化表达式; 循环条件; 更新表达式) {
// 循环体代码块
}
for循环由三个部分组成:
- 初始化表达式(Initialization Expression):在循环开始前执行一次的表达式,用于初始化循环变量或设置初始条件。
- 循环条件(Loop Condition):在每次循环开始之前进行判断的表达式,如果条件为真(非零),则执行循环体代码块;如果条件为假(零),则跳出循环。
- 更新表达式(Update Expression):在每次循环结束后执行的表达式,用于更新循环变量或改变循环条件。
以下是一个简单的示例来说明for循环的用法:
cpp
#include <stdio.h>
int main() {
for (int i = 0; i < 5; i++) {
printf("%d\n", i);
}
return 0;
}
运行结果:
cpp
0
1
2
3
4
在这个示例中,我们使用for循环打印从0到4的整数。初始化表达式为int i = 0,将循环变量i初始化为0。循环条件为i < 5,只要条件为真,即i小于5,就执行循环体代码块,打印i的值。更新表达式为i++,每次循环结束后将i递增1。当i等于5时,条件不再满足,循环结束。
需要注意的是,for循环中的三个部分都可以省略,但分号必须保留。例如,如果我们只想实现一个无限循环,可以这样写:
cpp
for (;;) {
// 无限循环体代码块
}
在这种情况下,循环条件被省略,循环将一直执行下去,除非在循环体内部使用break语句或其他方式跳出循环。
循环的嵌套
在C语言中,循环的嵌套指的是在一个循环结构内部包含另一个循环结构。通过循环的嵌套,我们可以实现更复杂的迭代控制和逻辑处理。C语言支持将任意类型的循环结构嵌套在其他循环结构内部,包括for循环、while循环和do-while循环。
下面是一个示例,展示了两个for循环的嵌套:
cpp
#include <stdio.h>
int main() {
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 2; j++) {
printf("i = %d, j = %d\n", i, j);
}
}
return 0;
}
运行结果:
cpp
i = 0, j = 0
i = 0, j = 1
i = 1, j = 0
i = 1, j = 1
i = 2, j = 0
i = 2, j = 1
在这个示例中,我们使用两个for循环进行嵌套。外层循环控制变量i从0到2的迭代,内层循环控制变量j从0到1的迭代。内层循环的每次迭代都会完整地执行一遍,然后外层循环才会进入下一次迭代。这样,内层循环会在外层循环的每一次迭代中都被执行。
循环的嵌套可以用于处理多维数据结构(如二维数组)的遍历、实现复杂的逻辑判断和控制流程等。然而,需要注意的是,循环的嵌套可能会导致代码可读性降低和性能问题,尤其是当嵌套层数过多或循环体内部的操作较为复杂时。因此,在使用循环的嵌套时,需要仔细考虑代码结构和性能影响。
continue语句
在C语言中,continue语句是一种控制流语句,用于跳过当前循环迭代中的剩余代码,直接进入下一次迭代。当循环体内部遇到continue语句时,该语句后面的所有代码都将被忽略,直接开始下一次迭代。
continue语句通常用于在循环结构中进行条件判断,以便跳过某些不需要执行的迭代。以下是一个示例,展示了如何使用continue语句:
cpp
#include <stdio.h>
int main() {
for (int i = 0; i < 5; i++) {
if (i == 2) {
continue;
}
printf("%d\n", i);
}
return 0;
}
运行结果:
cpp
0
1
3
4
在这个示例中,我们使用了一个for循环来迭代从0到4的整数。在每次迭代中,我们使用一个if语句来判断迭代变量i是否等于2。如果是,就执行continue语句,跳过当前迭代中的剩余代码;否则,就打印i的值。
需要注意的是,continue语句只能出现在循环结构内部,否则会导致编译错误。此外,如果嵌套了多层循环结构,在使用continue语句时需要注意,它只会跳过当前循环结构中的代码,而不是跳出所有嵌套的循环结构。