C语言是一门结构化的程序设计语言;C语言的目的是为了解决生活中的方方面面的事情,因此衍
生了三种结构:①、顺序结构 ②、选择结构 ③、循环结构。下文主要对选择(分支)语句和循环
语句进行简述。
分支语句:①、if 语句 ②、switch 语句
循环语句:①、while 语句 ②、for 语句 ③、do while 语句
一、什么叫语句 ?语句的分类:①、表达式语句 ②、函数调用语句 ③、控制语句 ④、 复合语句 ⑤、空语句
本文主要介绍控制语句:控制语句用于控制程序的执行流程,以实现程序的各种结构方式(C语言
支持三种结构:顺序结构、选择结构、循环结构),它们由特定的语句定义符组成,C语言有九种
控制语句,可以分为三大类:
1. 条件判断语句也叫分支语句:if语句、switch语句;
2. 循环执行语句:do while语句、while语句、for语句;
3. 转向语句:break语句、goto语句、continue语句、return语句。
二、分支语句(选择语句) 2.1、if语句 2.1.1、语法结构:①、if(表达式)
语句;
②、if (表达式)
语句1;
else
语句2;
③、if(表达式1)
语句1;
else if (表达式2)
语句2;
else
语句3;
举例1:
#includeint main() { int age = 10; if (age < 18) printf("未成年n"); return 0; }
分析:if语句括号内的如果为真,则执行下面的语句,为假则不执行。
举例2:
#includeint main() { int age = 20; if (age < 18) printf("未成年n"); else printf("成年n"); return 0; }
分析:if else语句适合非此即彼的情况
注:一条if 和 else语句默认只能控制一条语句,如果要控制多条语句需要加{ }。
#includeint main() { int age = 20; if (age < 18) { printf("未成年n"); printf("不能饮酒"); } else { printf("成年n"); printf("适量饮酒n"); } return 0; }
举例3:
#includeint main() { int age = 0; scanf("%d",&age); if (age < 18) printf("少年n"); else if (age >= 18 && age <= 30) printf("青年n"); else if (age >= 31 && age <= 45) printf("中年n"); else if (age >= 46 && age <= 60) printf("壮年n"); else if (age >= 61 && age <= 90) printf("老年n"); else printf("老寿星n"); return 0; }
分析:多分支情况
注:在C语言中0表示假,非0表示真 !!!
2.1.2、悬空 else在if else语句中 else 是和距离最近的 if 语句进行匹配
#includeint main() { int a = 0; int b = 2; if (a == 1) if (b == 2) printf("hehen"); else printf("hahan"); return 0; }
分析:上面一段代码无结果,下面一个 else 与第二个 if 相匹配,由于第一个 if 为假则直接结束。
2.2、switch语句switch语句也是一种分支语句。 常常用于多分支的情况。
下面通过一个一个例子进行说明:
#includeint main() { int day = 0; scanf("%d",&day); if (1 == day) printf("星期1n"); else if (2 == day) printf("星期2n"); else if (3 == day) printf("星期3n"); else if (4 == day) printf("星期4n"); else if (5 == day) printf("星期5n"); else if (6 == day) printf("星期6n"); else if (7 == day) printf("星期天n"); return 0; }
这事一个用 else if 语句来显示星期几的代码。但用switch case 语句可以怎么写呢?
#includeint main() { int day = 0; scanf("%d",&day); switch (day) { case 1: printf("星期1n"); break; case 2: printf("星期2n"); break; case 3: printf("星期3n"); break; case 4: printf("星期4n"); break; case 5: printf("星期5n"); break; case 6: printf("星期6n"); break; case 7: printf("星期天n"); break; } return 0; }
注意:switch语句中switch括号内必须是整型表达式,case后必须是整型常量表达式。
在某些情况下switch case语句更加简介明了:
#includeint main() { int day = 0; scanf("%d", &day); switch (day) { case 1: case 2: case 3: case 4: case 5: printf("工作日n"); break; case 6: case 7: printf("休息日n"); break; default: printf("输入错误n"); break; } return 0; }
注:default处理非case语句的情况,写在任何一个 case 标签可以出现的位置。 当 switch 表达式的值并不匹配所有 case 标签的值时,这个 default 子句后面的语句就会执行。 所以,每个switch语句中只能出现一条default子句。 但是它可以出现在语句列表的任何位置,而且语句流会像执行一个case标签一样执行default子句。
编程好习惯 :在每个 switch 语句中都放一条default子句是个好习惯,甚至可以在后边再加一个break 。
三、循环语句分类: ①、while循环 ②、for循环 ③、do while循环
3.1 while 循环接下来以一个例子来进行说明:在屏幕上打印1-10的数字。
#include3.1.1、while语句中的break和continueint main() { int i = 1; while (i <= 10) { printf("%dn",i); i++; } return 0; }
#includeint main() { int i = 1; while (i <= 10) { if (5 == i) break; printf("%dn",i); i++; } return 0; }
分析:在while语句中加入break,只要遇到break,就停止后期的所有的循环,直接终止循环。
因此:while中的break是用于永久终止循环的。
#inciudeint main() { int i = 1; while (i <= 10) { if (5 == i) continue; printf("%dn",i); i++; } return 0; }
分析:continue是用于跳过本次循环后面的部分,也就是本次循环中continue后边的代码不会再执
行, 而是直接跳转到while语句的判断部分。进行下一次循环的入口判断。
3.2、for循环 3.2.1格式:for (表达式1;表达式2;表达式3)
循环语句;
表达式1:表达式1为初始化部分,用于初始化循环变量的。
表达式2:表达式2为条件判断部分,用于判断循环时候终止。
表达式3:表达式3为调整部分,用于循环条件的调整。
由于在for循环之中初始化、判断、调整三个是在同一步之中,所以for循环是优于while循环的。
#include3.2.2、在 for 循环中的 break 和 continueint main() { int i = 0; for (i = 1; i <= 10; i++) { printf("%dn",i); } return 0; }
#includeint main() { int i = 0; for (i = 1; i <= 10; i++) { if (i == 5) break; printf("%dn",i); } return 0; }
分析:可以看到程序只到4就停止了
#include3.2.3 for语句的循环控制变量int main() { int i = 0; for (i = 1; i <= 10; i++) { if (i == 5) continue; printf("%dn",i); } return 0; }
两点建议:
1. 不可在for 循环体内修改循环变量,防止 for 循环失去控制。
2. 建议for语句的循环控制变量的取值采用“前闭后开区间”写法。
3.2.4 for循环的一些变种for循环中的初始化部分,判断部分,调整部分是可以省略的。但是省去判断部分就意味着判断恒为真。



