在前两篇已经对c语言已经有了一个初步的了解,在接下来一系列的文章开始上正菜了,我将对c语言展开进行详细的分析。今天要学习的是分支语句。
一,什么是语句
我们学习分支语句首先得了解什么是语句。
C语句可分为以下五类:
1. 表达式语句
2. 函数调用语句
3. 控制语句
4. 复合语句
5. 空语句
选择语句就是属于控制语句,控制语句主要用于控制程序的执行流程,实现程序的各种结构方式,c语言是一种结构化的程序设计语言(c语言支持顺序结构,选择结构,循环结构)。
二,分支语句(选择结构)
条件判断语句也叫分支语句,主要有两种写法(if语句,switch语句)
大家在日常生活中都是怎么度过的呢?肯定不会是日复一日按照同样的生活方式度过吧,我们可以通过某种判断来决定自己的行动。比如说今天下雨我们就要带上伞。
或者说我们考上大学之后,不好好学习就要回家种地,如果好好学习在校招时就会拿到一个好的offer,这里就面临了两种选择。
在生活中处处面临这选择,会通过我们自己的选择而改变这些事情的结果。
那c语言如何实现这种选择呢?请看下文
三,if语句
为了实现这个选择,在c语言中提供了if语句。
if语句基本用法
if(表达式) { 语句; }
注:如果表达式成立,就执行语句。
if(表达式) { 语句1; } else { 语句2; }
注:如果表达式成立就执行语句1,不成立就执行语句二。
if(表达式1) { 语句1; } else if(表达式2) { 语句2; } else 语句三;
注:表达式1成立,执行语句1。
表达式2成立,执行语句2。
都不成立执行表达式3。
用if语句判断一个人是否成年
总结来说,如果要执行多条语句,就判断条件是否成立,成立就执行对应的代码块。
一对 { } 就是一个代码块
3.1悬空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; }
在我第一眼看到这个代码的时候我认为会打印haha,但是这段代码什么都不会打印
这里涉及到了一个if语句嵌套的问题, 在这种场景下else会找离他最近的if进行匹配,而不是找和他对齐的if进行匹配。
建议在自己写代码的时候加上括号,当然有时候题目会有这种坑。
3.2if语句的应用
判断一个一个数是不是奇数
#include <stdio.h> int main() { int n = 0; scanf("%d", &n); if (n % 2 == 0) { printf("是奇数"); } else { printf("不是奇数"); } }
四,switch语句
有这么一个场景,输入一个数字,输出对应是星期几,需要n多条分支语句。用if语句能不能实现?
当然能实现,但是用这种方法似乎不太方便,形式太复杂了。
在这种背景下就引入了,switch语句,用于多分支语句。
代码如下:
#include <stdio.h> int main() { int day = 0; switch(day) { case 1: printf("星期一\n"); break; case 2: printf("星期二\n"); break; case 3: printf("星期三\n"); break; case 4: printf("星期四\n"); break; case 5: printf("星期五\n"); break; case 6: printf("星期六\n"); break; case 7: printf("星期天\n"); break; } return 0; }
这就是switch语句的用法
switch(整型表达式) { 语句项; }
那语句项是什么呢?
就是一些case子句,如下
case 整形常量表达式:
语句;
会根据整形表达式的值执行相匹配的case语句,例如:如果day是1,就会在屏幕上打印星期一。
2.1介绍break语句
break是停止结束的意思。
在switch语句中,我们没办法直接实现分支,搭配break使用才能实现真正的分支。
看下面这段代码,应该能应该能体现出break的作用。
int main() { int a=1; int b; switch (a) { case 1: b = 30; case 2: b = 20; case 3: b = 16; default: b = 0; } return 0; }
这个代码的运行结果是0,程序没有遇到break就会一直往下运行,b的值会改变。
当程序遇到break,就会跳出将他围起来的switch语句。
总结:case是入口,break是出口。
2.2default子句
default是默认的意思。
输入的值没有与之匹配的case语句,程序该怎么办呢?会出错?
这个时候就可以加一条default语句了,像这样。
注:语法原则上,default可以写在任何位置。
在switch语句中default只能出现一个。