目录

顺序流程

分支流程

if关键词

else关键词

嵌套if

else if语句

条件运算符

条件表达式的优先级

循环结构

while循环

for循环

do while循环

循环嵌套

循环辅助

break关键词

continue关键词

while使用continue:

for使用continue

for使用break

总结

break和continue嵌套

多重选择语句switch


在C语言中,一个完整的程序包含三个代码控制流程:

顺序流程

分支流程

循环流程

顺序流程

按照书写的先后顺序,从前到后即从上到下执行的结构。

分支流程

如果满足一个条件(2到10之间)则走向一个流程,否则就走向另一个流程。这个流程属于分支流程。

if关键词


if(测试条件)

条件为真的流程


现在,提出一个新需求:

要求输入一个整数,如果数值在2到10之间,那么输出yes;否则什么也不做。

 int x;scanf_s("%d", &x);if (2 <= x && x <= 10){printf("yes");}

else关键词


if(测试条件)

条件为真的流程

else

条件为假所执行的流程


现在有需求:

要求输入一个整数,如果数值在2到10之间,那么输出yes;否则输出no。

 int x;scanf_s("%d", &x);if (2 <= x && x <= 10){printf("yes");}else{printf("no");}

if和else关键词只对它后面的一条语句产生效果,并且if和else之间只允许有一条语句。

如果想要执行多条语句,则使用大括号{},形成复合语句。

嵌套if

现有需求:

要求输入一个整数,如果小于2,则输出left;如果在2到10之间,则输出in;如果大于10,则输出right。

     int x;scanf_s("%d", &x);if (x < 2){printf("left");}else{if (x > 10){printf("right");}else{printf("in");}}

但是,如果将代码改成

 int x;scanf_s("%d", &x);if (x < 2){printf("left");}if (2 <= x && x <= 10){printf("in");}if (x > 10){printf("right");}

如此,无论x的值满足哪个条件,都必须经过三个if语句的逻辑判断,虽然结果上是没有变化的,但是,如果x已经满足小于2这个条件,则完全没有必要继续测试后面的条件了,这样做会增加性能的消耗

else if语句

即省略大括号。

现有需求:

输入一个学生的分数x。

x<60,输出不及格;60<x<70,输出及格;70<x<80,输出一般;80<x<90,输出良好;90<x<100,输出优秀。

 int x;scanf_s("%d", &x);if (x < 60){printf("不及格");}else if (60<=x&&x<70){printf("及格");}else if (70 <= x && x < 80){printf("一般");}else if (80 <= x && x < 90){printf("良好");}else if (90 <= x && x <= 100){printf("优秀");}

条件运算符

C语言中提供了一种条件表达式,作为if,else语句的一种便捷形式。是C语言中唯一一个三元运算符。


测试条件?表达式1:表达式2;

如果测试条件为真,则表达式1的结果是整个条件表达式的结果;反之,是表达式2的结果。


如果x>=10,则c为Y,反之c则为N:

 int x;char c;if (x >= 10){c = 'Y';}else{c = 'N';}

运用条件运算符,可以写作

 int x;char c;c = x >= 10 ? 'Y' : 'N';

条件表达式的优先级

标记 操作符 类型 优先级
++-- 自增、自减 后缀 16
++-- 自增、自减 前缀 15
! 逻辑非 单目 15
+ - 正、负号 单目 15
* / % 乘、除、取余 双目 13
+ - 加、减 双目 12
< > <= >= 关系 双目 10
== != 相等、不相等 双目 9
&& 逻辑与 双目 5
|| 逻辑或 双目 4
?: 条件 三目 3
= 赋值 双目 2

循环结构

while循环


while(循环条件)

循环行为


(高斯求和)现有需求:计算1+2+3+……+99+100最后的值等于多少

 int i = 1, sum = 0;//sum:用于存放每一次累加结果//i:表示逐个递增的整数while (i <= 100){sum = sum + i;i++;}

在C语言中,非0即为真。

将while()括号里的内容改为0或其他数,0代表假,1(与其他数)代表真。

例如,while(1)将一直循环。

如何保证正确地、有限次数的循环

开始时,为计数器设置初始值

计数器与一个有限值比较,作为循环条件

更新计数器

for循环


for(计数器设置初始值;循环条件;计数器更新)

循环行为


使用for循环,可以将高斯求和写成

 int i, sum = 0;for (i = 1; i <= 100; i++){sum = sum + i;}

代码中,for循环中的计数器,设置初始值仅仅在开始时执行一次,将i赋值为1。

循环条件成立,立即进入循环,否则将结束循环。

运行完一次循环行为后,将进行计数器更新,然后再次判断循环条件是否成立。

如果i仅作为计数器使用,并在循环结束后不关心i的值,则可以把i放在计数器初始化时声明,写成

 int sum = 0;for (int i = 1; i <= 100; i++){sum = sum + i;}

这样i仅在循环体内有效,结束循环后失效。

可以试着用for打印100以内的所有偶数:

 for (int a = 0; a <= 100; a=a+2){printf("%d ", a);}

for循环括号内的三个部分可以写到其他地方,或都可以为空。

例如

(1)计数器初始化为空

 int a = 0;for ( ;a <= 100; a = a + 2){printf("%d ", a);}

(2)可以把计数器更新的部分写到循环里面

 int a = 0;for ( ;a <= 100; ){printf("%d ", a);a = a + 2;

(3)循环条件也可以为空,但是这将导致死循环

do while循环


do

循环行为

while(循环条件);


如果要输入一个数,这个数若不是整数或者零,就一直输入,直到输入了整数或者零为止。

 int x;do{scanf_s("%d", &x);} while (x < 0);

do while循环和while循环的差别是——

while进入循环前先检查循环条件是否满足,如果不满足,则一次都不执行。

do while先进行一次循环,再检查循环条件。所以至少会执行一次循环。

循环嵌套

 for (char c = 'A'; c <= 'E'; c++){for (int i = 0; i <= 9; i++){printf("%c%d ", c,i);}printf("\n");}

代码中,一个for循环嵌套另一个for循环。外层循环是从字母“A”到“E”,内层循环是从数字0到9。

运行之后,外层循环计数器初始值为A,进入循环后将开始内层循环,从0到9,打印的结果为A0到A9。内层循环执行完毕,输出"\n",外层循环计数器更新为B,再次重复上述的过程。

循环辅助

break关键词

作用:结束循环

 int i = 0;while (1){if (i == 10){break;}printf("%d", i);i++;}printf("\ni=%d", i);

break以后的语句均不执行。

现有需求:要求用户刷入一个密码,如果密码不为123456,那么输出密码错误;如果输入正确,则输出登陆成功。

 int password;while (1){scanf_s("%d", &password);if (password == 123456){break;}printf("密码错误\n");}printf("登陆成功\n");

continue关键词

作用:跳过本次循环,直接进入下一轮循环

while使用continue:

 int i = 0;while (i<20){if (i == 6){i = 12;continue;}printf("%d ", i);i++;}​结果为0 1 2 3 4 5 12 13 14 15 16 17 18 19

for使用continue

 for (int i = 0; i < 20; i++){if (i == 6){i = 12;continue;}printf("%d ", i);}​结果为0 1 2 3 4 5 13 14 15 16 17 18 19

两次的结果有一出不同,这是因为对于for循环,每次循环结束,都会执行一次for循环括号内的第三个表达式

所以continue之后先执行i++,再进行新一轮循环。

for使用break

 int i = 0;for (i = 0; i < 20; i++){if (i == 6){i = 12;break;}printf("%d ", i);}printf("\ni=%d", i);​结果为0 1 2 3 4 5i=12

使用break后直接跳出循环,没有更新计数器。

总结

for中使用continue,将立即更新计数器,再进入新循环;

for中使用break,将直接跳出循环,不会更新计数器。

break和continue嵌套

作用于自己直属上层循环,例如break:

 for (;;){for (;;){break;//内层循环调用break,跳到外层循环}//                                 ↓break;//外层循环再次调用break,      ←}//         结束外层循环

多重选择语句switch


switch(整形表达式)

{

case 整形常量1:

语句

case 整形常量2:

语句

case 整形常量3:

语句

default:

语句

}


现有一个自动问答机器人,需要写出程序使得它会根据用户提出的问题回复对应的句子的,便可以使用switch语句:

 printf("请根据屏幕上的提示进行操作。\n");int 问题;scanf_s("%d", &问题);switch (问题){case 1:printf("您提问:今天周几?\n");printf("小C真诚地回答您:今天周日,暂不工作,将在5s后关机,谢谢配合。\n");break;case 2:printf("您提问:吃了吗?\n");printf("小C真诚地回答您:谢邀,机在维修中心,刚喝汽油。\n");break;case 3:printf("您提问:我可以拿走这个吗?\n");printf("小C真诚地回答您:不可以呢亲,请先去XX窗口办理相关凭证。为您估算排队时间...预计一个小时。\n");break;default://如果输入不符合以上任一情况,则printf("小C迷惑地回答您:小C听不懂您在说什么呢,请根据提示使用智能小C问答机器——扣1或2或3呢亲。\n");}

如果case末没有加上break,则程序会把下面语句全部执行。当switch语句运行时遇到break关键字时会跳出,接下来剩下的case语句也不会再执行,switch语句结束。

而switch语句中的break只属于前者,效果只对其有效。(continue不对witch语句产生影响)

假如今天不是周日,智能问答机器小C不会在回答完一句后关机,而是继续服务,则可以写成

 printf("请根据屏幕上的提示进行操作。\n");int 问题;while (1){scanf_s("%d", &问题);switch (问题){case 1:printf("您提问:今天周几?\n");printf("小C热情地回答您:今天周一,小C将燃尽全油为您服务,请问您有什么问题?\n\n");break;case 2:printf("您提问:吃了吗?\n");printf("小C猝不及防地回答您:嗝...\n\n");break;case 3:printf("您提问:我可以拿走这个吗?\n");printf("小C大方地回答您:拿,都可以拿。\n\n");break;default:printf("小C迷惑地回答您:小C听不懂您在说什么呢,请根据提示使用智能小C问答机器——扣1或2或3呢亲。\n\n");}}

总结:学会了分支和循环后,感觉在C语言的学习上进了一大步,但是仍然有不足之处,希望能在后面的学习中不断精进。

C语言修行中(2)学习了分支和循环结构相关推荐

  1. python的两种循环结构_python分支和循环结构

    Python Python开发 Python语言 python分支和循环结构 1.分支结构 1.1应用场景 迄今为止,我们写的Python代码都是一条一条语句顺序执行,这种代码结构通常称之为顺序结构. ...

  2. 分支与循环结构测试题(有答案版)

    习题目录 python基础知识之分支与循环结构练习题 一.基础题: 分别用单分支结构和多分支结构实现判断一个年份是否是闰年. 写出判断⼀个数是否能够被2或者5整除,但是不能同时被2或者5整除的条件语句 ...

  3. j1_09_02。冒泡排序法。实现冒泡游戏功能关键算法。要求:综合使用分支、循环结构语句实现,直接输出结果不计分。

    package com; /*** 任务二:实现冒泡游戏功能关键算法并绘制流程图(30 分) 原始数组:a[]={1,9,3,7,4,2,5,0,6,8} 排序后: a[]={0,1,2,3,4,5, ...

  4. python中e怎么计算_Python之循环结构——实战计算自然底数e,圆周率Π

    循环结构是编程中经常使用的语法,循环结构的巧妙使用对编程来说很重要.刚才群里还有同学说自己不会用循环,其实很简单,只是没有用过才觉得难.这里介绍Python循环语法的用法,并且使用两个小例子,来加强训 ...

  5. C语言学习记录——유 分支与循环(2)

    循环结构 接着之前的继续写.写一个程序 int main() { int ret = 0; char password[20] = {0}; printf("请输入密码:>" ...

  6. php多分支结构 案例,第4天 PHP分支、循环结构

    6. 流程控制 流程控制,就是研究程序的走向. 6.1. 流程控制概述 6.1.1. 三大流程结构: 顺序结构: 程序运行的自然状态,就是从前往后(从上到下)运行程序. 分支结构: 程序运行过程中,根 ...

  7. C语言第三次博客作业---单层循环结构

    一.PTA实验作业. 题目1 1.实验代码 int n,i; double height1,height2;//1为输入身高,2为输出身高. char sex; //1<=height1< ...

  8. Python—语法基础(8) 分支、循环结构

    分支紧凑格式:<表达式1> if <条件> else <表达式2> # 分支结构 if <条件1> :<语句块1> elif <条件2 ...

  9. 模板元实现顺序、分支和循环结构

    顺序 顺序执行没有太多可说的,唯一需要注意的是,类型的声明必须按照顺序,否则编译器无法识别.不按照顺序的声明,在运行时的程序是合法的,编译过程会扫描两次,第一次是找声明位置,第二次是具体的转换. 分支 ...

  10. c语言已知祖父年龄70,实验三循环结构程序设计.doc

    实验三循环结构程序设计 实验三 循环结构程序设计 一.实验目的 (1) 掌握while.do~while.for语句的使用. (2) 掌握循环体内使用break.continue语句的作用. (3) ...

最新文章

  1. Scrum敏捷研发管理平台-Leangoo看板
  2. python和R文件IO操作对比及dataframe创建方式对比:read_csv、to_csv、write.csv、 data.frame、pd.DataFrame
  3. python话雷达图-PYTHON绘制雷达图代码实例
  4. android 从底部网上的平移动画_Android属性动画,看完这篇够用了吧
  5. 简单实用,Python代码调试利器
  6. 4种趋势将在2021-2021年改变您的数据和分析策略
  7. 《Java并发编程的艺术》一一第2章Java并发机制的底层实现原理
  8. 《零基础看得懂的C语言入门教程 》——(十三)socket服务端编写
  9. 取模除法(逆元)(费马小定理)(线性求逆元)
  10. 怎么玩转CSS内部样式表与外部样式表?
  11. 12-事件委托(事件代理)
  12. 基于改进SSD的车辆小目标检测方法
  13. 单片机的最新发展动态_【计算机论文】单片机在节能、语言交流和智能监控上的应用...
  14. java中StringBuilder为单线程做的,StringBuffer相反
  15. 操作BOM对象的方法
  16. Redis-配置文件
  17. 权限管理系统,可以这么设计
  18. 怎样设定目标(一)目标金字塔
  19. 捋一捋Vue构造函数
  20. 比特大陆新一轮裁员50%,回应称系人员调整

热门文章

  1. librdkafka安装步骤
  2. 筛选中很容易粘贴到被隐藏部分_excel数据复制到筛选表格被隐藏了-为什么数据粘贴至筛选后EXCEL 表格显示不完全?...
  3. 在matlab中配置凸优化所需的求解器cvx、mosek之避雷
  4. matlab图像的直方图,Matlab图像直方图相关函数
  5. APK应用程序的解包、修改、编辑、汉化、打包及应用
  6. 关于DSP2812控制W5500的程序解读
  7. 基于51单片机的酒精检测仪设计
  8. 中南大学电磁场理论matlab,中南大学电磁场理论实验2.doc
  9. GPS卫星星历与卫星历书的区别
  10. 第一章第一节第一课时智能训练(2012-01-18 18:42:23)