破开C语言暗夜的第三道光——控制语句
控制语句
- 控制语句
- 一、分支语句
- if语句
- switch语句
- 二、循环语句
- while循环
- for循环
- do...while循环
- 三、转向语句
- break
- continue
- return
- goto语句
控制语句
控制语句是用于控制程序的执行流程,以实现程序的各种结构方式的语句。(C语言支持三种结构:顺序结构、选择结构和循环结构)
C语言有九种控制语句,可分为以下三类:
1、条件判断语句(分支语句):if语句,switch语句。
2、循环语句:while语句,for语句,do…while语句。
3、转向语句:break;continue;return;goto语句。
一、分支语句
if语句
if语句的语法结构
//单分支—单代码块if (表达式)语句;//单分支—双代码块if (表达式)语句1;else语句2;//多分支if (表达式1)语句1;else if (表达式2)语句2;……else if (表达式n)语句n;else语句;
else的匹配:没有大括号的嵌套分隔时,else与离它最近的if相匹配。
注:如果表达式为真,语句执行;表达式为假,则不执行。
0表示假,非0表示真
switch语句
switch语句常用于多分支的情况,switch语句允许嵌套使用。
switch语句的语法结构
switch (整型表达式) // !! 整型{语句项;}
其中的语句项是一些case语句和default语句
// case语句case 整型常量表达式: // !! 整型,常量语句;break; //除非有意为之,否则每一条case语句写完下面都要加上一个break;
default子句
default:语句;
当表达式的值与所有case标签的值都不匹配时,用一个default子句来做提示,让整个switch语句的表达更加完整。
default子句可放在任何一个case可以出现的位置,一般建议放在最后。
二、循环语句
while循环
while的语法结构
while (表达式){循环语句;}
for循环
for循环的语法结构
// 初始化 条件判断 循环变量调整for (表达式1; 表达式2; 表达式3){循环语句;}
for循环条件中的3个表达式均可省略,但没有特殊用处或没有把握时不建议省略。
补充,用for还是while?:
- 循环体执行的代码相同的条件下,for循环的效率高于while循环
C源代码:
int main()
{while (1);for (;;);return 0;
}
对应的汇编代码:
while (1);
00007FF68C2F176B xor eax,eax
00007FF68C2F176D cmp eax,1
00007FF68C2F1770 je main+24h (07FF68C2F1774h)
00007FF68C2F1772 jmp main+1Bh (07FF68C2F176Bh) for (;;);
00007FF68C2F1774 jmp main+24h (07FF68C2F1774h)
汇编代码解析:
可以看到,“while (1);”语句,需要4条汇编指令:立即数、与操作、比较、跳转;
而“for (;;);”语句,只需要一条汇编指令。
- C99标准下,for循环的循环变量可在初始化部分同时定义和初始化
for (int i = 0;;);
这样写for循环结束后 i 占用的栈内存就会被释放,可节约内存,while则不行。
- while循环的调整部分在循环体内部,容易一个不小心改动了循环变量导致循环错误。
综上,在能使用for循环的情况下建议使用for循环代替while循环。
do…while循环
do…while循环的使用场景:循环至少循环一次。
do语句的语法结构
do{循环语句;} while (表达式);
三、转向语句
break
break的作用:跳出直接所在的那层循环。
若为一层循环直接跳出循环, 若为嵌套循环,以2层为例:在内层循环遇到break是跳到外层循环,在外层循环则跳出循环体。
continue
continue的作用:跳过所在循环continue下面的代码,直接回到所在循环的循环条件部分。
注:在循环体内才能使用break和continue。
return
return的作用:直接跳出所在的函数体。
goto语句
使用goto语句可实现代码执行顺序的跳转。
可用于一步跳出深度嵌套和实现一些简单的循环。
for(...){for (...) { for (...) { if (disaster)goto error; //跳出深度嵌套}}……//error是标记跳转位置的标号,这个标号名是人为命名的//要与上面goto后面的标号保持一致
error: if (disaster) // 处理错误情况
注意:goto语句只能在同一个函数内部跳转,不能跨函数跳转。
破开C语言暗夜的第三道光——控制语句相关推荐
- 破开C语言暗夜的第四道光(1)—— 函数基础知识
函数基础知识 一.C语言中函数的分类 - 库函数 - 自定义函数 二.函数的声明与定义 - 函数的声明 - 函数的定义 三.函数的参数 - 实际参数(实参) - 形式参数(形参) 四.函数的调用 - ...
- 破开C语言暗夜的第二道光 —— 数据与数据类型(1)
标识符与常量变量 一.标识符 二.常量变量 1.变量 1-1:变量的定义 1-2:变量的命名 1-3:变量的作用域和生命周期 1-4:变量的分类 2.常量 2-1:常量的定义 2-2:常量的分类 三. ...
- 国开1253c语言程序设计,人教版三年级数学下册单元测试题全套
人教版三年级数学下册单元测试题全套 最新人教版三年级数学下册单元测试题全套1 第1单元过关检测卷 一.认真读题,专心填写.(每空1分,共18分) 1.地图通常是按照"( )北,( )南,( ...
- 电大c 语言程序形考作业,国开电大 C语言程序设计 形考三答案
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 国开电大 C语言程序设计 形考三答案 786971758 一.选择题(共30分,每小题2分) 题目1还未回答满分2.00标记题目题干 在下面的函数声明语句 ...
- R语言系统教程(三):多维数组和矩阵
R语言系统教程(三):多维数组和矩阵 3.1 生成数组或矩阵 3.1.1 将向量定义为数组 3.1.2 用array()函数构造多维数组 3.1.3 用matrix()函数构造矩阵 3.2 数组下标 ...
- 航空航天大类C语言程设第三次练习赛
航空航天大类C语言程设第三次练习赛 第四期更新, 鸽子博主终于更新第三次练习赛了 (A题)求区间交并集 多行数据,每行有两个数,用空格分开,表示每个区间的下和上界,保证是合法的非空集,而且得到的并集是 ...
- Swift Web 开发之 Vapor - 模版 Leaf(三)
模版引擎,对现在的 Web 开发极为重要,几乎所有主流 Web 框架都会支持一种或多种模版引擎,模版引擎可以分离用户界面和业务逻辑,工作原理主要是一种翻译,后端对特定的标记.语法.变量等渲染后再输送给 ...
- c语言中,x-y,'105',ab,7f8那个是正确的,C语言程序设计_第三章 数据.ppt
C语言程序设计_第三章 数据 * 运算符功能 与运算量关系 要求运算量个数 要求运算量类型 运算符优先级别 结合方向 结果的类型 学习运算符应注意 * 基本算术运算符: + - * / % 结合方向: ...
- c语言三级上机题库,2006年9月全国等级考试三级c语言上机题库(三十四)
★☆题目34(无忧id 73,102 素数题) 无忧id 102 题提供了求素数isPrime()函数 程序prog1.c的功能是:选出100以上1000之内所有个位数字与十位数字之和被10除所得余数 ...
最新文章
- VSTS Code Analysis 错误 CA1014 CLSCompliantAttribute 及Suppress Message (镇压Code Ananlysis)...
- celery java_Celery详解
- C++STL模板库适配器之stack容器
- Spring MVC使用webSocket保持长连接
- skt7850鸿蒙策略,lol 英雄联盟 SKT状态回暖轻取外卡,SUP难挡Faker
- 计算机组成原理与汇编语言程序设计课后答案,计算机组成原理与汇编语言程序设计课后习题及解答(详解)...
- 读书节第二日丨数据大咖来荐读,互动荐书赢好礼!
- C++ 结构体内存对齐
- 全网最全数据分析师面试干货-业务逻辑篇
- 虚拟机设置共享文件夹之后看不见文件(失败合集+成功分享)
- word插入脚注后最后一页多了一个分页符(下一页),导致最后多了一个空白页,删除不掉。
- 亲爱的朋友,祝您天天好心情!
- Python3 matplotlib 将图片转华为png格式图片数据
- 佛说,是我们自己苦了自己~
- 茂名天源石化宣传“世界急救日”活动 普及急救知识
- HP-UX 基本命令学习
- 剑指 offer 面试题精选图解 10-I.斐波那契数列
- TTL expired in transit
- 从零开始研发GPS接收机连载——8、跟踪调试之遇到瓶颈
- IIS6 + Resin3.1.x 的不爽之处