C语言是一种结构化的语言,其基本有:顺序结构,选择结构,循环结构。
这也对应了我们生活中的三种结构或这三种结构的组合。
例如我们从学校走到家里,这一路就是顺序结构。
我们从学校出来,是回家,还是去网吧,这个就是选择结构。
我们从学校到家,再从家到学校,周而复始,这就是循环结构。
分支语句:
我们常见的分支语句有两种,分别是:用 if(表达式/常量/变量) ,引起的选择结构。
以及用 switch(表达式/常量/变量) 来引起的选择结构。
首先我们来介绍用 “if” 来引起的选择结构
if:
if语句的语法基本形式如下:
if(表达式)
语句
表达式成立(为真),则执行 “if” 控制的语句
若表达式不成立(为假),则不执行 “if” 控制的语句
在C语言中我们通常用 “0” 来表示假,用非 “0” 来表示真
如果表达式的结果为0,则语句不执行,若表达式为非“0”,则执行语句
例如如下的代码:
#include<stdio.h>
int main()
{
int a = 0;
//输入一个数值来表示变量a
scanf("%d", &a);
//分支语句
if (a)
printf("Hello,C!\n");
return 0;
}
通过我们输入的变量a的值来判断“Hello,C!”是否进行打印,如果我们输入一个非0的值,就会打印,如果我们输入0,则不执行打印。
此为输入0的效果。
此为输入非0数值的效果。
if语句的判断条件如上图所示。
else:
如果我们想输入0则打印别的内容应该怎么办呢?应该怎么表示呢?
例如我们不回家,就去网吧,此时就要用到else语句
那么else语句应该用何种形式表达呢?
else的语法形式如下:
if(表达式)
语句1
else
语句2
如上就是else的语法形式
下面我将举例给大家说明
首先我们定义一个整数变量,并且输入一个整数,如果我们输入非0,则表示回家
如果我们输入0,则表示去网吧
下面我们用代码说明
#include<stdio.h>
int main()
{
//创建一个变量来表示回家还是去网吧
int i = 0;
//我们输入一个数值来表示去网吧还是回家
scanf("%d", &i);
//如果我们输入0,就去网吧,如果我们输入的数值非0,则回家
if (i)
printf("回家");
else
printf("去网吧");
return 0;
}
下面为我们输入非0的打印情况:
下面为我们输入0的打印情况:
分支中包含多条语句的情况:
分支中如果包含多条语句会怎么样呢?
#include<stdio.h>
int main()
{
int a = 0;
scanf("%d", &a);
if (a)
printf("回家");
printf("不去网吧");
return 0;
}
例如如上代码,我们输入一个非0值,想要打印 “回家 不去网吧”我们做一下试验
如果我们输入0,我们来看一下是什么效果
可以看到 ,无论我们输入0,还是非0,不去网吧都会被打印到屏幕上,那么这是什么情况呢?
这是因为,if语句只会控制一条语句,如果我们输入0,则只会控制打印回家,而不会控制打印不去网吧,对于不去网吧这一条语句而言,它是独立存在的,无论我们输入什么,他都不会被if 语句控制,依旧会打印出来,那如果我们要if语句同时控制两条及以上语句,怎么办呢?那么我们就要用 ”{ }” 这样一对括号括起来我们要控制的语句,当然,else语句后也可跟上括号,如下:
#include<stdio.h>
int main()
{
int a = 0;
scanf("%d", &a);
if (a)
{
printf("回家");
printf("不去网吧");
}
else
{
printf("去网吧");
printf("不回家");
}
return 0;
}
通过如上代码,我们就可以控制两条语句,例如我们输入非0;则打印” 回家不去网吧 “
我们输入0,则打印 ” 去网吧不回家 “
以上就是我们代码的运行截图
嵌套if:
如果我们回家以后想要选择做作业还是打游戏怎么办呢?
那么我们就要用到嵌套if来实现
代码如下所示:
#include<stdio.h>
int main()
{
//创建一个变量来表示回家还是去网吧
int a = 0;
//再次创建一个变量来表示回家以后是学习还是打游戏
int b = 0;
//进行判断是回家还是去网吧
if (a)
{
printf("回家");
printf("不去网吧");
//判断回家后是打游戏还是学习
if (b)
{
printf("学习");
}
else
{
printf("打游戏");
}
}
else
{
printf("去网吧");
printf("不回家");
}
return 0;
}
此时我们就要用到 if 的嵌套使用,来表示回家是学习还是打游戏。
悬空else问题:
请看如下代码:
#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;
}
那么很多初学者,上来以判断 a 是 0,不等于 1 ,那就执⾏ else ⼦句,打印 haha
其实这是错误的,当我们运行代码后会发现什么都不输出
这是因为,if 总是和离他最近的else匹配
上⾯的代码排版,让 else 和第⼀个 if 语句对⻬,让我们以为 else 是和第⼀个if匹配的
其实它是和离他最近的 if 匹配的
如果我们要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;
}
switch语句:
C 语言除了 if 语句外,还提供了switch 语句来实现分支结构
switch语句是一种特殊的,if ...... else 结构,用于判断有多个结果的情况,它把多重的else if改成 更简单的形式
switch语句的基本定义代码如下:
switch (expression)
{
case value1: statement
case value2: statement
default: statement
}
上面的代码中,expression表示不同的值,执行相应的case分支,如果找不到对应的值,则执行default分支语句。
if语句和switch语句的对比
请看如下代码,用来计算除3之后的余数
#include <stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
if(n%3 == 0)
printf("整除,余数为0\n");
else if(n%3 == 1)
printf("余数是1\n");
else
printf("余数是2\n");
return 0;
}
如果用switch语句来实现是这样的:
#include <stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
switch(n%3)
{
case 0:
printf("整除,余数为0\n");
break;
case 1:
printf("余数是1\n");
break;
case 2:
printf("余数是2\n");
break;
}
return 0;
}
switch语句中,我们需要注意的是,case后必须有空格
每一个case语句结束后都需要加上break,才能跳出switch语句
如果不加break跳出switch,则会一直往下依次执行