C语言中包含三种结构,分别是:1.顺序结构,2.选择结构,3.顺序结构。本篇我讲着重写关于循环结构和选择结构。
一.选择结构
1.if语句
if语句是C语言中最常见的分支语句,if(bool类型表达式)
语法:
int main() {if (//boolean_expression){ //如果布尔表达式为真将执行的语句 } return 0;}
举例:
#include<stdio.h>int main(){ int num = 10; if(num>0) { printf("%d是正数\n",num); } return 0;}
if语句中布尔类型表达式非负数就是ture执行括号内语句,0便是false不会执行括号内语句(当然可以不用加括号,但只有下一个语句是根据if的布尔类型)。
2.else语句
①一般的else使用:
else语句配合着if语句来使用
语法:
if(//布尔类型表达式){ //布尔表达式为真将执行的语句 }else{ //布尔表达式为假将执行的语句}
举例:
int main() {int age = 0;scanf("%d",&age);if (age >= 18){printf("你已是成年人,可以自己管理游戏时间,并且可以进入网吧消费\n");}else {printf("你的年龄还不够,限制游戏时间,禁止进去网吧等娱乐场所\n");}return 0;}
以上代码的运行结果:
输入的age>=18时:
你已是成年人,可以自己管理游戏时间,并且可以进入网吧消费
当输入的age<18时:
你的年龄还不够,限制游戏时间,禁止进去网吧等娱乐场所
②if和else的嵌套使用
if...else if...else 语句:if else 语句中 else 可以与另一个if语句连用,构成多重判断
使用条件:
Ⅰ.一个 if 后可跟零个或一个 else,else 必须在所有 else if 之后。
Ⅱ.一个 if 后可跟零个或多个 else if,else if 必须在 else 之前。
Ⅲ.一旦某个 else if 匹配成功,其他的 else if 或 else 将不会被测试。
语法:
if(//布尔表达式 bool_1){ //当布尔表达式 1 为ture(真)时执行 }else if(布尔表达式 bool_2){ // 当布尔表达式 2 为ture(真)时执行 }else if( 布尔表达式 bool_3){ // 当布尔表达式 3 为ture(真)时执行 }else { //当以上条件都为false(假)时执行 }
举例:
#include <stdio.h> int main (){ // 局部变量定义 int age = 60 ; // 判断布尔条件 if( age == 10 ) { // 如果 if 条件为真,则输出下面的语句 printf("age 的值是 10\n" ); } else if( age == 20 ) { //如果 else if 条件为真,则输出下面的语句 printf("age 的值是 20\n" ); } else if( age == 30 ) { // 如果 else if 条件为真,则输出下面的语句 printf("age 的值是 30\n" ); } else { //如果上面条件都不为真,则输出下面的语句 printf("没有对应的年龄\n" ); } printf("age 的准确值是 %d\n", age ); return 0;}
③if和else的注意事项
Ⅰ.在编程的过程中如果没有或忘记使用{},则会造成编程或者阅读的麻烦。所以,为了方便自己和别人在使用可加可不加{}时都应该加上{}。那万一因为各种情况就是没有写呢?这便是else的悬空问题,如果有多个if和else,else总是跟最近的if匹配。
例:
#include <stdio.h> int main() { int a = 0; int b = 2; if (a == 1) if (b == 2) printf("hehe\n"); else printf("haha\n"); return 0; }
我们看这段代码时,第一个if与else相对应,理所当然认为a不等于1就会执行else中语句打印“haha”但是:
这段代码什么也打印不出来,因为第二个if和else相对应,if下的if...else相当与是if中的语句所以这段代码什么也打印不出来。
Ⅰ.在if中写诸如if(a=5)这样的语句,括号中的语句会执行。
3.switch语句
了解if语句后C语言还提供了switch语句来实现分支结构。switch语句就是if...else...的变种,个人认为switch使用的时候比if...else...更加的简洁明了一些,当然这是付出结构比较复杂的代价。
语法:
switch(//表达式){ case constant-expression : statement(s); break; //写不写根据实际需求 case constant-expression : statement(s); break; //写不写根据实际需求 //以上的每一个case——break;可以写任意多个 default : //写不写根据实际需求 statement(s);}
注意:
1.switch 语句中的表达式必须是整数类型(char、short、int或枚举),或者是能够隐式转换为整数类型的表达式。
2.case和后边的数字之间必须要有空格。
3.按照需求是否写break语句来跳出switch语句
举例:
#include <stdio.h>int main() { char grade = 'B'; switch (grade) { case 'A': printf("Excellent!\n"); break; case 'B': printf("Good!\n"); break; case 'C': printf("Average.\n"); break; default: printf("Fail!\n"); } return 0;}
不使用break
和default
:
#include <stdio.h>int main() { char grade = 'B'; int flag = 0; switch (grade) { case 'A': printf("Excellent!\n"); flag = 1; case 'B': if (!flag) printf("Good!\n"); flag = 1; case 'C': if (!flag) printf("Average.\n"); flag = 1; case 'D': if (!flag) printf("Pass.\n"); flag = 1; case 'F': if (!flag) printf("Fail!\n"); break; } return 0;}
第一个示例使用了break
语句来确保每个case
执行后跳出switch
语句,而default
语句处理了grade
不在'A', 'B', 'C'范围内的情况。
第二个示例没有使用break
语句,而是通过一个flag
来控制是否执行每个case
后的代码。
二.循环结构
C语言中提供了3中循环语句,分别是while,do...while,和for。
1.while循环
记忆while语句时可以与if语句类比
语法
if(表达式){ 语句;}while(表达式){ 语句;}
二者非常类似,但是毕竟名字不同,用法当然不同
(这个hehe是无限打印的碍于我手动截屏,所以显示是有限的)
很容易的看出一个只能打印一个hehe,而另一个能打出非常多的hehe。
while语句的原理图:
⾸先上来就是执⾏判断表达式,表达式的值为0,循环直接结束;表达式的值不为0,则执⾏循环语 句,语句执⾏完后再继续判断,是否进⾏下⼀次判断。
while使用例子:打印1—10个数字:
2.for循环
for循环:精准的重复执行
for
循环是一种精准的重复执行特定次数的循环结构。它由三个重要部分组成:初始化表达式、条件表达式和迭代表达式。在每次循环中,初始化表达式仅执行一次,条件表达式用于判断是否继续循环,而迭代表达式则用于更新循环控制变量。
语法:
1 for(表达式1; 表达式2; 表达式3) //表达式就是限定循环条件的三个语句{ //语句;}
for语句的原理图
例子:
#include <stdio.h>int main() { // 使用for循环打印数字1到5 for (int i = 1; i <= 5; i++) { printf("%d ", i); } printf("\n"); return 0;}
3.do...while语句
在循环语句中 do while 语句的使⽤最少,它的语法如下: do 语句;while(表达式);
举例:
#include <stdio.h>int main() { int i = 1; // 使用do-while循环打印数字1到5 do { printf("%d ", i); i++; } while (i <= 5); printf("\n"); return 0;}
4.三者使用注意事项:
循环条件的设置:确保在使用while
、do-while
和for
循环时,循环条件能够正确反映出循环的目的。循环条件控制着循环何时终止,因此必须小心确保条件能够正确地触发循环结束。
循环控制变量的更新:在for
循环中,通常会使用一个循环控制变量来控制循环的次数。确保在循环体中更新这个变量,以避免无限循环或者循环次数不符合预期的情况发生。
初始化和迭代表达式的安排:在for
循环中,初始化表达式和迭代表达式对循环控制变量进行设置和更新,因此必须谨慎地安排它们的位置和逻辑。确保初始化表达式只执行一次,并且迭代表达式正确地更新循环控制变量。
do-while
循环的初始条件:由于do-while
循环至少执行一次循环体后再检查条件,因此必须确保循环体内的操作不会因为初始条件不满足而导致错误。在使用do-while
循环时,特别注意循环的初始条件是否满足预期。
循环体内的操作:无论使用哪种循环结构,都要确保循环体内的操作不会导致意外的行为或错误。特别注意在循环体内操作变量的值,确保其符合预期并不会导致逻辑错误。
避免无限循环:在编写循环时,务必注意避免无限循环的发生。无限循环会导致程序陷入死循环,消耗大量系统资源并可能导致程序崩溃。