分支和循环
分支语句
一、if
分支语句
(一)语法结构
if (条件) {
代码块
}
//当条件判断为真时,就执行循环语句
二、else
分支语句
(一)语法结构
if (条件) {
代码块
}
else {
代码块
}
//解释:当 if 语句中所有分支判断都为假时,则执行 else 语句的代码块
三、嵌套if
语句
我们可以在一个if
语句内再使用一遍if
语句,这就叫嵌套if
语句,但是这样的写法比较繁琐,因此我们可以写成else if
形式
(一)语法结构
if (条件)
{
代码块
}
else if (条件) //else if 语句相当于 if 语句嵌套,当if语句内条件判断为假时,就进行else if语句的条件判断
{
代码块
}
else
{
代码块
}
四、关系操作符
-
==
等于 -
>=
大于等于 -
<=
小于等于 -
!=
不等于 -
>
大于 -
<
小于
关系操作符不可以连用, 例如 a <= b <= c
五、条件操作符(三目操作符)
三目操作符其实是简化的if else
语句
(一)语法结构
条件 ? 表达式1 ? 表达式2
//解释:如果条件为真,则执行表达式1,反之,则执行表达式2
六、逻辑操作符
(一)逻辑取反运算符!
!a
就是将真变为假,将假变为真
(二)逻辑与运算符
a && b
全真则真,一假则假
(三)逻辑或运算符
a || b
一真则真,全假则假
(四)短路
逻辑操作符运算都是从左往右计算的,
对于&&
,如果左边为假,右边则没必要计算了,因为该表达式一定为假了
对于||
,如果左边为真,右边则没必要计算了,因为该表达似一定为真了
七、switch
分支语句
switch
语句是一种特殊的if else
分支结构
(一)语法结构
switch (表达式) {
case 值1:
代码块
case 值2:
代码块
default:
代码块
}
//解释:switch中文意思为“开关”,我们可以把switch语句理解为开关,根据表达式不同的值,匹配相应的case后面的值,如果匹配到对应的值,就执行该case分支下面的代码块,如果匹配不到对应的值,就执行default分支
注意:
-
switch后的表达式必须为整型表达式
-
case 后的值,必须是整形常量表达式
(二)switch
语句的break
switch
语句在匹配对应的case值的时候,总是不撞南墙不回头,如果没有break
的阻挡,switch
语句会一直执行下去,甚至执行到其他case
语句的代码块,所以break
的作用就是挡住switch
语句让他跳出switch
。所以break
十分重要,是让switch
语句成为分支语句的关键,否则分支就成为了遍历。不过一个case不一定就必须带一个break
,这要看具体需求而定
(三)switch
语句的注意事项
-
switch
后面的表达式必须为整型表达式 -
case
后面的值必须为常量,不能为变量
循环语句
一、while
循环
(一)语法结构
while (条件判断) {
循环语句
}
(二)while
循环的执行过程
根据while
条件判断的真假(0是假,非0是真),如果是假,就直接跳过这个while
语句,如果是真,那就开始第一次执行循环语句,循环语句执行完之后,再跳回该while
语句的条件判断,再进行一次条件判断,重复上面的步骤。使用时要避免出现死循环.
二、for
循环
(一)语法结构
if (表达式1;表达式2;表达式3) {
循环语句
}
(二)三个表达式的说明
- 表达式1:条件初始化(注意要事先声明创建变量)
- 表达式2:条件判断
- 表达式3:循环语句执行之后的调整
(三)for
循环的执行过程
先拿着表达式1初始化的变量去进行表达式2的条件判断,若条件判断为真,就开始第一次的循环语句的执行,第一次循环语句的执行结束之后,再根据表达式3对表达式1的变量进行调整变化,之后再拿着调整变化之后的变量再进行表达式2的条件判断,若条件判断为真,就开始第二次的循环语句的执行,第二次循环语句的执行结束之后,再根据表达式3对表达式1的变量进行调整变化,重复以上步骤
三、do while
循环
(一)语法结构
do {
代码块
}
while(条件判断);
(二)do while
循环的执行过程
先干再说,先把do
下面的代码块执行之后,再根据while
后面的条件进行判断,若判断结果为真,那么就再执行一次do
后面的代码,执行之后再进行条件判断,知道条件判断为假才停止执行
四、break
和continue
语句
(一)区别
break
语句用于永久终止循环,从而跳出循环
continue
语句用于跳过本轮循环,进行下一轮循环
(二)代码解释
break
:
#include <stdio.h>
int main()
{
int i = 0;
for (i = 1; i <= 10; i++) {
if (i == 4) {
break;
}
printf( "%d ",i );
}
}
//输出结果:1 2 3
coutinue
:
#include <stdio.h>
int main()
{
int i = 0;
for (i = 1; i <= 10; i++) {
if (i == 4) {
continue;
}
printf("%d ", i);
}
}
//输出结果:1 2 3 5 6 7 8 9 10
五、循环的嵌套
循环的嵌套在一些地方也可以用到,比如说求质数的问题
我们可以这样解决:
#include <stdio.h>
int main()
{
int i = 0;
int j = 0;
for (i = 100; i <= 200; i++) { //产生100—200的所有数
int flag = 1;
for (j = 2; j <= i - 1;j++) { //拿2开始的数一个一个去除i
if (i % j == 0) { //看能不能被整除
flag = 0; //如果被整除,那么flag标志就变为0
break; //跳出这个if条件句
}
}
if (flag == 1) {
printf("%d ", i); //如果flag为1,那么就代表i为质数,那么就打印出来
}
}
return 0;
}
求质数有很多种编程方法,此处只是运用了较为简单的一种并且没有进行优化
六、goto
语句
类似一个锚点
代码解释
#include <stdio.h>
int main()
{
printf("1 ");
goto next; //看到了goto语句,并把next作为锚点
printf("2 ");
next: //这里就是被打了锚点的next,代码直接跳转到这里开始执行
printf("3 ");
return 0;
}
//输出结果:1 3