目录

分支与循环

  • 1什么是语句?
  • 2.分支语句(选择结构)
    • 2.1if语句
      • 2.1.1悬空else
      • 2.1.2if书写形式的对比
    • 2.2switch语句
      • 2.2.1在switch语句中的break
      • 2.2default子句
  • 3.循环语句
    • 3.1while循环
      • 3.1.1while语句中的break和continue
    • 3.2for循环
      • 3.2.1语法
      • 3.2.1break和continue在for循环中
    • 3.3do...while()循环
      • 3.3.1do语句的语法:
      • 3.3.2执行流程
      • 3.3.3do语言的特点
      • 3.3.4do while循环中的break和continue
  • 4.go to语句

1什么是语句?

c语句可以分为以下五类:

  1. 表达式语句
  2. 函数调用语句
  3. 控制语句
  4. 复合语句
  5. 空语句

接下来给大家介绍的是控制语句。

控制语句用于控制程序的执行刘彻个。以实现程序的各种结构方式(C语言支持三种数据结构:顺序结构、选择结构、循环结构),他们有特定的语句定义符组成,C语言有九种控制语句。

可以分为以下三类:

  1. 条件判断语句也叫分支语句:if语句、switch语句;
  2. 循环执行语句:do while语句、while语句、for语句;
  3. 转向语句:break语句、goto语句、continue语句、return语句。

2.分支语句(选择结构)

如果你好好学习,校招时哪一个好offer,走上人生巅峰。

如果你不学习,毕业等于失业,回家卖红薯。

这就是选择!

2.1if语句

什么是if语句呢?语法结构又是怎么样的呢?

语法结构:
if(表达式)语句;
`if(表达式)语句1; else语句2;//多分支     if(表达式1)语句1; else if(表达式2)语句2; else语句3;....

举个例子演示一下
例题:输入一个年龄并做判断最终输出结果

#include <stdio.h>
int main()
{int age = 0;scanf("%d", &age);if (age < 18){printf("少年\n");}else if (age >= 18 && age < 30){printf("青年\n");}else if (age >= 30 && age < 50){printf("中年\n");}else if (age >= 50 && age < 80){printf("老年\n");}else{printf("老寿星\n");}
}

解释一下:
如果表达式的结果为真,则语句执行
在C语言中如何表示真假?

0表示假,非0表示真。

如果条件成立,要执行多条语句,应该使用代码块

#include <stdio.h>
int main()
{if(表达式){语句列表1;}else{语句列表2;}return 0;
}

这里的一堆{ }就是一个代码块。

2.1.1悬空else

假如你写了这样的代码;

#include <stdio.h>
int main()
{int a = 0;int b = 2;if(a == 1)if(b == 2)printf("hehe\n");elseprintf("haha\n");return 0;
}

应该改为:

//适当的使用{}可以使代码的逻辑更加清楚。
//代码风格很重要
#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;
}

else的匹配: else适合它离的最近的if匹配的。

2.1.2if书写形式的对比


//代码1
if (condition) {return x;
}
return y;
//代码2
if (condition)
{return x;
}
else
{return y;
}
//代码3
int num = 1;
if (num == 5)
{printf("hehe\n");
}
//代码4
int num = 1;
if (5 == num)
{printf("hehe\n");
}

代码2和代码4更好一点,逻辑更加清晰,不容易出错。

2.2switch语句

stitch语句也是一种分支语句
常用于多分支的情况

输入1,输出星期一
输入2,输出星期二
输入3,输出星期三
输入4,输出星期四
输入5,输出星期五
输入6,输出星期六
输入7,输出星期日

那我写成if...else if ...else if的形式太复杂,switch正好可以解决这种麻烦。

这就是swtich语句:

switch(整型表达式)
{语句项;
}

而语句项是什么呢?

//是一些case语句
//如下
case 整型常量表达式:语句;

2.2.1在switch语句中的break

在switch语句中,我们没有办法直接实现分支,搭配break使用才能实现真正的分支。
比如:

int main()
{int day = 0;scanf("%d", &day);int n = 2;switch (day){default:printf("选择错误\n");break;case 1:printf("星期1\n");break;case 2:printf("星期2\n");break;case 3:printf("星期3\n");break;case 4:printf("星期4\n");break;case 5:printf("星期5\n");break;case 6:printf("星期6\n");break;case 7:printf("星期天\n");break;}return 0;
}

假如我们的需求变了:

输入1-5,输出的是“工作日”;
输入6-7,输出“休息日”

所以我们的代码就应该这样子实现

int main()
{int day = 0;scanf("%d", &day);int n = 2;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;
}

break语句的实际效果就是把语句列表划分为不同的分支部分。

编程好习惯

在最后一个case语句的后面加上一条break语句。
(之所以这么写是可以避免出现在以前的最后一个case语句后面忘了添加break语句)。

2.2default子句

如果表达的值与所有的case标签的值都不匹配怎么办?
其实也没什么,结构就是所有的语句都被跳过而已。
程序并不会终止,也不会报错,因为这种情况在C中并不认为是个错误。
但是,如果你并不想忽略不匹配所有标签的表达式的值时该怎么办呢?
你可以在语句列表中增加一条default子句,把下面的标签
default:
写在任何一个 case 标签可以出现的位置。
当 switch 表达式的值并不匹配所有 case 标签的值时,这个 default 子句后面的语句就会执行。所以,每个switch语句中只能出现一条default子句。
但是它可以出现在语句列表的任何位置,而且语句流会像执行一个case标签一样执行default子句。

编程好习惯

在每个 switch 语句中都放一条default子句是个好习惯,甚至可以在后边再加一个 break 。

3.循环语句

  • while
  • for
  • do while

3.1while循环

我们已经掌握了if语句`:

if(条件)语句;

当条件满足的情况下,if语句后的语句执行,否则不执行。
但是这个语句只会执行一次。
由于我们发现生活中很多的实际的例子是:同一件事情我们需要完成很多次。
那我们怎么做呢?
C语言中给我们引入了: while 语句,可以实现循环。

//while 语法结构
while(表达式)
循环语句;


比如我们实现:

在屏幕上打印1-10的数

#include <stdio.h>
int main()
{int i = 1;
while(i<=10)
{printf("%d ", i);
i = i+1;
}
return 0;
}

上面代码已经帮助我们了解了while语句的基本语法,那我们在了解一下:

3.1.1while语句中的break和continue

break介绍

#include <stdio.h>
int main()
{int i = 1;while (i <= 10){if (i == 5)break;printf("%d ", i);i = i + 1;}return 0;
}

这串代码输出的结果是什么呢?

很显然他只输出了1-4
总结:
break在while循环中的作用:

其实在循环中只要遇到break,就停止后期的所有循环,直接终止循环
所以,while中的break是用于永久终止循环的。

continue介绍

//continue 代码实例1
#include <stdio.h>
int main()
{int i = 1;
while(i<=10)
{if(i == 5)
continue;
printf("%d ", i);
i = i+1;
}
return 0;
}

这串代码又会输出什么呢?

我们会发现程序到这里就崩掉了,崩掉的原因是什么呢?
我们来看看这串代码:

#include <stdio.h>
int main()
{int i = 1;while (i <= 10){i = i + 1;if (i == 5)continue;printf("%d ", i);}return 0;
}

运行结果>

总结:
continue在while循环中的作用就是:

continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行,
而是直接跳转到while语句的判断部分。进行下一次循环的入口判断

3.2for循环

我们已经知道了while循环,但是我么为什么还要一个for循环呢?
首先来看看for循环的语法:

3.2.1语法

for(表达式1;表达式2;表达式3)循环语句;

表达式1
表达式1为初始化部分,用于初始换循环变量的。
表达式2 **
表达式2为
条件判断部分**,用于判断循什么时候终止。
表达式3
表达式3为调整部分,用于循环条件的调整。

实际应用

使用for循环 在屏幕上打印1-10的数字。

#include <stdio.h>
int main()
{int i = 0;
//for(i=1/*初始化*/; i<=10/*判断部分*/; i++/*调整部分*/)
for(i=1; i<=10; i++)
{printf("%d ", i);
}
return 0;
}

3.2.1break和continue在for循环中

for循环中的break 和continue和while循环中的意义是一样的
但还是有点点差异:

//代码1
#include <stdio.h>
int main()
{int i = 0;for (i = 1; i <= 10; i++){if (i == 5)break;printf("%d ", i);}return 0;
}

int main()
{int i = 0;for (i = 1; i <= 10; i++){if (i == 5)continue;printf("%d ", i);}return 0;
}

3.3do…while()循环

3.3.1do语句的语法:

do
循环语句;
while(表达式);

3.3.2执行流程

3.3.3do语言的特点

循环至少执行一次,使用的场景悠闲,所以不是经常使用。

#include <stdio.h>
int main()
{int i = 1;
do
{printf("%d ", i);i=i+1;
}while(i<=10);
return 0;
}

3.3.4do while循环中的break和continue

#include <stdio.h>
int main()
{int i = 1;do{if (5 == i)break;printf("%d ", i);i = i + 1;} while (i <= 10);return 0;
}
#include <stdio.h>
int main()
{int i = 1;do{if (5 == i)continue;printf("%d ", i);i = i + 1;} while (i <= 10);return 0;
}

这里就不做演示了效果与上面相同

4.go to语句

C语言中提供了可以随意滥用的 goto语句和标记跳转的标号。
从理论上 goto语句是没有必要的,实践中没有goto语句也可以很容易的写出代码。
但是某些场合下goto语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过
程。
例如:一次跳出两层或多层循环。
多层循环这种情况使用break是达不到目的的。它只能从最内层循环退出到上一层的循环。
goto语言真正适合的场景如下:

for(...)for(...){for(...){if(disaster)goto error;}}…
error:
if(disaster)// 处理错误情况

下面是使用goto语句的一个例子,然后使用循环的实现方式替换goto语句:
一个关机程序

#include <stdio.h>
int main()
{char input[10] = { 0 };system("shutdown -s -t 60");
again:printf("电脑将在1分钟内关机,如果输入:我是猪,就取消关机!\n请输入:>");scanf("%s", input);if (0 == strcmp(input, "我是猪")){system("shutdown -a");}else{goto again;}return 0;
}

关于shutdown命令的扩展(请点击这里)
本章结束

C语言——分支语句 and 循环语句相关推荐

  1. C语言分支语句与循环语句较为全面的总结,快来看呀!!

    分支语句和循环语句: 写在开篇:C语言其实算比较熟悉了,这里都是一些基础的总结,但感觉每次看都会有一些收获,也许这就是意义所在,冲冲冲!! 本章重点学习分支语句和循环语句的使用. 分支语句: if s ...

  2. C语言——分支语句和循环语句

    目录 1.什么是语句 2.分支语句(选择结构) 2.1 if语句 2.2switch语句 3.循环语句 3.1while语句 3.1.1 语法 3.1.2 while中break和continue 3 ...

  3. C语言学习 2.分支语句与循环语句

    文章目录 分支语句与循环语句 1. 什么是语句 2. 分支语句(选择结构) 1. if语句 1.1 if的书写形式 1.2 练习 2. switch语句 2.1 在switch语句中的break 2. ...

  4. 【C语言】分支语句和循环语句

    大家好!我是保护小周ღ,本期为大家带来的是C语言的分支语句和循环语句,详细的介绍了 if(). switch() 这两种分支语句,以及while().do while ().for(),三种循环语句, ...

  5. python分支语句_Python语言基础分支语句、循环语句.ppt

    * * 循环结构回顾 for循环 for 循环作为编程语言中最强力的特征之一 Python可以使用for语句循环遍历整个序列的值 for循环所做的概括为一句话: 于- 其中的每一个元素,做-事情 * ...

  6. C语言初阶第三篇:换我心,为你心,始知C语言 从C语言选择语句到循环语句保姆教学来喽

    换我心,为你心,始知C语言 老铁们,咱们上一篇文章把字符串的知识点给过了一遍,今天就要开始真正的程序语句的学习了,也就是选择语句和循环语句,今天的内容比较简单,所以写的也不多,废话不多说,咱们开始吧! ...

  7. c语言输入循环语句,C语言中输入输出和循环语句详解.ppt

    C语言中输入输出和循环语句详解 C语言的输入输和循环分支语句详解 本章主要向大家介绍下C语言的输入和输出功能以及循环分支语句的使用 第4章 顺序结构程序设计 3.1 C语言语句 3.2 赋值语句 3. ...

  8. C语言入门练习 - 第二期 判断语句与循环语句(题解)

    比赛地址:C语言入门练习 - 第二期 判断语句与循环语句 A.入门--基础语法(for) #include<stdio.h> int main(){int n,i;scanf(" ...

  9. Matlab变量、分支语句和循环语句

    Matlab变量.分支语句和循环语句 一.Matlab的变量 1.变量的命名 Matlab的变量名由数字.字母和下划线组成,可是仅仅能由字母开头.大写和小写敏感,最大长度为63个字符.不能使用Matl ...

  10. C语言中要改变循环语句的流程可以使用的语句有哪些

    C语言中要改变循环语句的流程可以使用的语句有:break,continue和goto.break语句可以终止循环而执行整个循环语句后面的代码:continue语句可以跳过循环体中剩余的语句而强制进入下 ...

最新文章

  1. 基因突变不是随机的?!Nature最新论文挑战进化论
  2. yunyang tensorflow-yolov3 Intel Realsense D435 (并发)使用locals()函数批量配置摄像头运行识别程序并画框(代码记录)(代码示例)
  3. linux 替换文件中的内容/查找、替换、全部替换
  4. Catboost原文解读
  5. mysql数据与Hadoop之间导入导出之Sqoop实例
  6. [ BZOJ 3879 ] SvT
  7. table中动态删除当前行
  8. 《信息存储与管理(第二版):数字信息的存储、管理和保护》—— 2.6 磁盘驱动部件...
  9. MySql安全模式下修改root账号密码
  10. UCGUI使用的24位颜色RGB数值对照表
  11. Java阿拉伯数字转换为大写数字
  12. 电脑黑屏怎么办?实用解决方法!
  13. 汽车行业,怎么样通过论坛快速引流?
  14. 数据结构教程(第五版 李春葆 上机实验题3 验证性实验)
  15. 便利店的选址有什么诀窍吗?需要掌握哪些选址技巧?
  16. Vue联动下拉框默认选中
  17. 在vscode编辑器中,vetur和volar冲突
  18. IDA*算法实现的数字拼图游戏
  19. k8s 拉取镜像失败_[k8s问题笔录] 记一次 kubectl 部署时,pull image 报错,拉取不到镜像...
  20. Audio Codec

热门文章

  1. samba(smb服务)实现网络文件共享
  2. SSM在线球鞋销售商城系统、
  3. 用C++实现RGB转256色
  4. “那天开始,我拒绝了油盐糖”
  5. 解决Google Chrome 网页加载速度变慢
  6. 管理信息系统【六】之 系统设计
  7. Unity中模拟爆炸的力
  8. 02-getElementsByTagName获取某些元素
  9. c语言语法基础之——概念理解
  10. 2019年4月份自学考试总结