C语言修行中(2)学习了分支和循环结构
目录
顺序流程
分支流程
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)学习了分支和循环结构相关推荐
- python的两种循环结构_python分支和循环结构
Python Python开发 Python语言 python分支和循环结构 1.分支结构 1.1应用场景 迄今为止,我们写的Python代码都是一条一条语句顺序执行,这种代码结构通常称之为顺序结构. ...
- 分支与循环结构测试题(有答案版)
习题目录 python基础知识之分支与循环结构练习题 一.基础题: 分别用单分支结构和多分支结构实现判断一个年份是否是闰年. 写出判断⼀个数是否能够被2或者5整除,但是不能同时被2或者5整除的条件语句 ...
- j1_09_02。冒泡排序法。实现冒泡游戏功能关键算法。要求:综合使用分支、循环结构语句实现,直接输出结果不计分。
package com; /*** 任务二:实现冒泡游戏功能关键算法并绘制流程图(30 分) 原始数组:a[]={1,9,3,7,4,2,5,0,6,8} 排序后: a[]={0,1,2,3,4,5, ...
- python中e怎么计算_Python之循环结构——实战计算自然底数e,圆周率Π
循环结构是编程中经常使用的语法,循环结构的巧妙使用对编程来说很重要.刚才群里还有同学说自己不会用循环,其实很简单,只是没有用过才觉得难.这里介绍Python循环语法的用法,并且使用两个小例子,来加强训 ...
- C语言学习记录——유 分支与循环(2)
循环结构 接着之前的继续写.写一个程序 int main() { int ret = 0; char password[20] = {0}; printf("请输入密码:>" ...
- php多分支结构 案例,第4天 PHP分支、循环结构
6. 流程控制 流程控制,就是研究程序的走向. 6.1. 流程控制概述 6.1.1. 三大流程结构: 顺序结构: 程序运行的自然状态,就是从前往后(从上到下)运行程序. 分支结构: 程序运行过程中,根 ...
- C语言第三次博客作业---单层循环结构
一.PTA实验作业. 题目1 1.实验代码 int n,i; double height1,height2;//1为输入身高,2为输出身高. char sex; //1<=height1< ...
- Python—语法基础(8) 分支、循环结构
分支紧凑格式:<表达式1> if <条件> else <表达式2> # 分支结构 if <条件1> :<语句块1> elif <条件2 ...
- 模板元实现顺序、分支和循环结构
顺序 顺序执行没有太多可说的,唯一需要注意的是,类型的声明必须按照顺序,否则编译器无法识别.不按照顺序的声明,在运行时的程序是合法的,编译过程会扫描两次,第一次是找声明位置,第二次是具体的转换. 分支 ...
- c语言已知祖父年龄70,实验三循环结构程序设计.doc
实验三循环结构程序设计 实验三 循环结构程序设计 一.实验目的 (1) 掌握while.do~while.for语句的使用. (2) 掌握循环体内使用break.continue语句的作用. (3) ...
最新文章
- Scrum敏捷研发管理平台-Leangoo看板
- python和R文件IO操作对比及dataframe创建方式对比:read_csv、to_csv、write.csv、 data.frame、pd.DataFrame
- python话雷达图-PYTHON绘制雷达图代码实例
- android 从底部网上的平移动画_Android属性动画,看完这篇够用了吧
- 简单实用,Python代码调试利器
- 4种趋势将在2021-2021年改变您的数据和分析策略
- 《Java并发编程的艺术》一一第2章Java并发机制的底层实现原理
- 《零基础看得懂的C语言入门教程 》——(十三)socket服务端编写
- 取模除法(逆元)(费马小定理)(线性求逆元)
- 怎么玩转CSS内部样式表与外部样式表?
- 12-事件委托(事件代理)
- 基于改进SSD的车辆小目标检测方法
- 单片机的最新发展动态_【计算机论文】单片机在节能、语言交流和智能监控上的应用...
- java中StringBuilder为单线程做的,StringBuffer相反
- 操作BOM对象的方法
- Redis-配置文件
- 权限管理系统,可以这么设计
- 怎样设定目标(一)目标金字塔
- 捋一捋Vue构造函数
- 比特大陆新一轮裁员50%,回应称系人员调整
热门文章
- librdkafka安装步骤
- 筛选中很容易粘贴到被隐藏部分_excel数据复制到筛选表格被隐藏了-为什么数据粘贴至筛选后EXCEL 表格显示不完全?...
- 在matlab中配置凸优化所需的求解器cvx、mosek之避雷
- matlab图像的直方图,Matlab图像直方图相关函数
- APK应用程序的解包、修改、编辑、汉化、打包及应用
- 关于DSP2812控制W5500的程序解读
- 基于51单片机的酒精检测仪设计
- 中南大学电磁场理论matlab,中南大学电磁场理论实验2.doc
- GPS卫星星历与卫星历书的区别
- 第一章第一节第一课时智能训练(2012-01-18 18:42:23)