前言
分支和循环是C语言中非常重要的控制结构。通过分支结构,我们可以根据条件选择不同的执行路径。而通过循环结构,我们可以重复执行一段代码,直到满足某个条件为止。今天我们来一起学习一下吧。
一、分支结构
-
if语句
-
a. 基本语法:if语句仅包含一个条件和一个执行体,当条件为真时执行执行体。
-
b. 单分支:if语句包含一个条件和一个执行体,当条件为真时执行执行体,没有其他分支。
-
例子:
-
score = 80 if score >= 60: print("你及格了")
score = 50 if score >= 60: print("你及格了")
-
c. 双分支:if语句包含一个条件和两个执行体,当条件为真时执行第一个执行体,当条件为假时执行第二个执行体。
-
例子:
-
x = 3 if x > 5: print("x是大于5的数") else: print("x是小于等于5的数")
score = 50 if score >= 60: print("你及格了") else: print("你不及格")
-
d. 多重分支(嵌套if语句):if语句可以嵌套在另一个if语句的执行体中,形成多重分支的结构。
-
例子:
-
x = 10 y = 5 if x > y: print("x大于y") if x > 0: print("x大于0") else: print("x小于等于0") else: print("x小于等于y")
-
e. if-else-if语句(多重选择):if语句可以与多个else-if语句结合使用,形成多个条件选择的结构。当条件为真时执行对应的执行体,如果所有条件都为假,则执行else语句中的执行体。
- 例子:
x = 3 if x > 5: print("x是大于5的数") elif x == 5: print("x等于5") else: print("x是小于5的数")
score = 50 if score >= 80: print("你的等级是A") elif score >= 70: print("你的等级是B") elif score >= 60: print("你的等级是C") else: print("你的等级是D")
-
switch语句
-
a. 基本语法 :switch语句是一种条件语句,用于选择性地执行不同的代码块。
-
b. case标签 case标签用于匹配表达式的值,并执行与其对应的代码块。在switch语句中,可以有多个case标签,每个case标签后面跟着一个冒号(:)。
c. default标签 default标签是可选的,用于处理当表达式的值不匹配任何case标签时的情况。default标签后面也跟着一个冒号(:)。
d. break语句 在每个case代码块的末尾,通常会使用break语句来终止整个switch语句的执行。如果没有break语句,会继续执行下一个case代码块,直到遇到break语句或整个switch语句结束。
-
我们可以通过通讯录的这个例子来看看
- e. switch语句与if语句的比较 switch语句和if语句都是用于根据条件来选择性地执行代码。但它们之间有一些区别:
- switch语句适用于多个可能的情况,每个情况执行的代码块不同,而if语句适用于只有两个可能的情况(真或假)。
- switch语句的条件是一个表达式的值,而if语句的条件可以是任意的布尔表达式。
- switch语句的结构更紧凑,适用于等值比较,而if语句适用于更复杂的逻辑条件。
-
三目运算符
- a. 基本语法:condition ? expression1 : expression2。其中,condition是一个条件表达式,expression1和expression2是两个可能的结果表达式。如果condition为真,则返回expression1的结果;如果condition为假,则返回expression2的结果。
b. 三目运算符适用于需要根据条件选择返回不同结果的场景。它可以简化代码,提高代码的可读性和简洁性。例如,当需要根据条件判断一个变量的值时,可以使用三目运算符来实现,而不需要使用if语句。
-
代码示例:
int a = 10; int b = 5; int max = (a > b) ? a : b; System.out.println("较大的数是:" + max);
在这个例子中,我们比较了变量a和b的值,如果a大于b,则将a的值赋给max;否则将b的值赋给max。最终输出较大的数是10。
使用三目运算符可以在一行代码中完成简单的条件判断,使代码更加简洁。
c. 与if语句相比,三目运算符具有以下特点:
1、三目运算符是一个表达式,而if语句是一个语句。这意味着三目运算符可以在表达式中使用,而if语句不能。
2、三目运算符只能进行简单的条件判断,只能根据条件返回两个结果之一。而if语句可以进行更复杂的条件判断,并可以执行多个语句块。
3、三目运算符通常用于简单的条件判断,而if语句更适用于需要执行多个语句块或处理复杂逻辑的情况。
二、循环结构
-
while循环
- a. 基本语法
-
while (循环条件) { 循环体 }
-
b. 循环条件: 在每次循环开始之前,检查循环条件的布尔值。如果条件为真,则执行循环体,然后再次检查循环条件,直到条件为假时循环结束。
c. 循环体: 循环体是在每次循环中要执行的代码块。
d. 循环流程控制: 在循环体中,可以使用流程控制语句来控制循环的行为。例如,可以使用break语句来提前终止循环,或者使用continue语句来跳过当前循环中的剩余代码,直接进行下一次循环。
e. while循环示例 -
#include <stdio.h> int main() { int i = 1; while (i <= 10) { printf("%d ", i); i++; } return 0; }
这个代码使用while循环打印出1到10的数字。在循环开始时,我们初始化一个整数变量
i
为1,然后在while
循环中,我们检查i
的值是否小于等于10。如果是,就执行循环体内的代码:打印i
的值并将i
增加1。循环继续进行,直到i
的值不满足循环条件。 -
do-while循环
- a. 基本语法
-
do { // 循环体 } while (循环条件);
-
b. do-while循环的循环条件判断时机是在循环体执行完毕之后。即先执行循环体,然后再判断循环条件是否满足,如果满足则继续循环,否则跳出循环。
c. do-while循环的循环体是要重复执行的代码块。
d. do-while循环的循环流程控制是通过循环条件判断来控制是否继续循环。如果循环条件为真,则继续循环;如果循环条件为假,则跳出循环。
e. 以下是一个do-while循环的代码示例:
-
int input = 0; do { menu(); printf("请输入:"); scanf("%d", &input); switch (input) { case Exit:printf("已退出通讯录\n"); break; case Add:Add_Contact(&con); break; case Del:Del_Contact(&con); break; case Search:Search_Contact(&con); break; case Modify:Modify_Contact(&con); break; case Show:Show_Contact(&con); break; case Sort:Sort_Contact(&con); break; case Destory:Destory_Contact(&con); break; default:printf("选择错误,请重新选择\n"); break; } } while (input);
-
for循环
- a. 基本语法
-
for (初始化语句; 循环条件; 循环控制语句) { 循环体 }
-
b. 循环条件:在for循环的括号中设置的循环条件,只有在条件为真时才会执行循环体。如果条件为假,则跳出循环。
c. 循环控制语句:在每次循环结束后执行的语句,常用的循环控制语句有增量语句(如
i++
)和减量语句(如i--
),用于改变循环条件的值。d. 循环体:在for循环中要重复执行的代码块,可以包含任意数量的语句。
e. for循环示例:下面是一个简单的使用for循环输出数字的示例:
-
for (int i = 1; i <= 10; i++) { System.out.println(i); }
这个示例中,循环从1开始,每次递增1,直到i的值小于等于10为止。在每次循环中,程序会输出当前的i的值。输出结果为1到10的数字。
-
循环嵌套
- a. 基本语法: 循环嵌套是指在一个循环内部再嵌套另一个循环。
-
for (int i = 0; i < outerLimit; i++) { // 外层循环代码 for (int j = 0; j < innerLimit; j++) { // 内层循环代码 } }
while (condition1) { // 外层循环代码 while (condition2) { // 内层循环代码 } }
-
b. 嵌套层数: 循环嵌套的层数指的是在一个循环内部嵌套的循环的数量。可以根据实际需求嵌套任意层数的循环,但是嵌套层数过多可能导致代码难以理解和维护。
c. 嵌套循环的执行顺序: 循环嵌套的执行顺序是将内层循环完全执行完才会回到外层循环进行下一次迭代。在每次外层循环迭代时,内层循环会从头开始执行。
d. 循环嵌套示例:
-
#include <stdio.h> int main() { int i, j; for (i = 1; i <= 9; i++) { for (j = 1; j <= i; j++) { printf("%d*%d=%d\t", i, j, i * j); } printf("\n"); } return 0; }
在这个代码中,外层循环控制打印的行数,内层循环控制每行打印的乘法表达式。对于每一个 i 和 j 的取值,程序会计算 i * j 并输出结果。最后,程序会打印一个换行符,以便下一行的乘法表达式能够在独立的一行显示。打印的效果就是一个完整的九九乘法表。
-
循环控制语句
-
a. break语句:用于终止整个循环,当break语句执行时,程序将跳出循环体并继续执行循环外的语句。
b. continue语句:用于跳过当前循环中剩余的代码,执行下一次循环。当continue语句执行时,程序会立即跳到循环的开始处进行下一次循环的判断。
c. goto语句:用于无条件地转移到程序中的指定标签位置。但是由于goto语句会造成程序流程不清晰、逻辑混乱,增加调试难度,所以一般不推荐使用。
总结
以上就是c语言中分支与循环的内容,后续我会带来更多实用的内容,感兴趣的可以点个赞支持一下!