| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> C语言之分支、跳转与循环总结 -> 正文阅读 |
|
[C++知识库]C语言之分支、跳转与循环总结 |
目录 前言对于计算机科学而言,一门语言应该提供3种形式的程序流:执行语句系列;如果满足某些条件就重复执行语句序列(循环);通过测试选择执行哪一个语句系列(分支)。本笔记是对分支、跳转与循环的总结。 一、分支1.if语句:(1)if语句被称为分支语句或选择语句。if语句的通用形式如下:if( expression) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? statement statement语句可以是一条简单语句或复合语句。如果expression的值为真,则执行statement,否则,跳过statement。 (2)if? else语句:其通用形式如下:if( expression) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? statement1 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?else ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? statement2 statement1,statement2语句可以是一条简单语句或复合语句。如果expression的值为真,则执行statement1,否则,执行statement2。 (3)多重选择else if:其形式如下:if( expression1) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? statement1 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?else if( expression2) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? statement2 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?else ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? statement3 由于编译器的限制范围,编译器最少支持127层套嵌。 ? ?(4)else 与 if的配对问题:看如下代码段:
?什么时候打印'b',答案是当num>=12时。换言之,else与第二个if配对。因此,我们可以知道,else与离它最近的、没有与别的else匹配过的if配对。? 如果想与第一个if配对,只需要把第二个if用花括号括起来或者增加一个空的else。即:
这里也给我们一个提示:适当的使用{}可以使代码的逻辑更加清楚。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? 2.switch语句:(1)switch语句也是一种分支语句,常常用于多分支的情况。其构造如下: ?(2)switch在圆括号中的测试表达式的值应该是一个整数值(包括char类型)。case必须是整数类型(包括char类型)的常量或整型常量表达式(即,表达式中只包含整型常量),不能用变量作为case标签。 (3)switch和break:break语句在其中的作用:让程序离开switch语句,跳至switch语句后面的下一条语句。如果没有break语句,就会从匹配标签开始执行到switch的末尾。break语句的实际效果是把语句列表划分为不同的部分。 (4)default子句:如果表达的值与所有的case标签的值都不匹配,如果有default:标签行,就跳转至该行,否则,程序继续执行switch后面的语句。程序并不会终止,也不会报错。每个switch语句中只能出现一条default子句。在每个 switch 语句中都放一条default子句是个好习惯,甚至可以在后边再加一个 break 。理论上来说,最后一个 case 语句的后面的break语句并不需要,但是保留这条break语句可以防止以后在添加新的case时遗漏break语句,所以我们建议这条语句最好保留 (5)switch允许嵌套使用 二、循环1.while循环(1)while循环的通用形式:while ( expression )? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? statement? ? ?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? statement部分可以是以分号结尾的简单语句,也可以是用花括号括起来的复合语句。如果expression为真(非零),执行statement部分一次,然后再次判断expression。在expression为假之前,循环的判断和执行一直重复进行。每一次循环都被称为一次迭代。 注意:C语言中“真”的概念很宽,一般而言,所有非零值都视为真,只有0被视为假 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ?(2)何时终止循环:只有在对测试条件求值时,才决定是终止还是继续循环 (3)while循环又可分为不确定循环(在测试表达式为假之前,预先不知道要执行多少次循环)和计数循环(在测试表达式为假之前,预先就知道要执行多少次循环)。 (4)在创建一个重复执行固定次数的循环中涉及了3个行为:①必须初始化计算器②计算器与有限的值进行比较③每次循环时更新计算器。while的小缺点:由于风格问题,使得初始化、测试和更新三个部分很可能偏离较远,这样查找修改就不够集中和方便。我们很容易遗忘初始化或更新部分,看如下代码:
我们可以把测试部分和更新部分放在一起,这样就可以防止不小心漏掉更新部分,看一下代码段:
其实用for循环可以有效避免这些问题,下面我们来总结for循环 2.for循环(1)for循环的形式:for( initialize;test;update)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?statement? ? ? statement部分可以是以分号结尾的简单语句,也可以是用花括号括起来的复合语句。initialize表达式在执行for语句之前只执行一次;然后对test表达式求值,如果表达式为真,执行循环一次,接着对update表达式求值,并在此检查test表达式。for循环圆括号中的表达式也叫作控制表达式,它们都是完整的表达式,所以每个表达式的副作用都发生在对下一个表达式求值之前。for循环把初始化、测试和更新组合在一起。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (2)可以把for语句写成while语句:
? (3)for的灵活性: ①可以使用递减运算符来递减计算器,如:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
②可以让计数器递增某个数,如:
?③可以用字符代替数字计数,如:
④除了测试迭代次数外,还可以测试其他条件 ⑤可以让递增的量不是固定的量,如:
? ⑥第三个表达式update可以是任意合法表达式。无论是什么表达式,每次迭代都会更新该表达式的值,如:
? ⑦可以省略一个或多个表达式(但是不能省略分号),只要在循环中包含可以结束循环的语句即可,如:
? 注意:省略第二个表达式被视为真,循环不会结束? ? ? ?
? ⑧第一个表达式不一定是给变量赋值,也可以使用printf(),如:
? ⑨循环体中的行为可以改变循环头中的表达式,如:for (n = 1; n<10000; n = n + delta),如果发现delta太小或太大,可以在循环体中改变delta的值 (3)for循环也可以有两个循环变量
?(4)一些建议: ①不建议在for 循环体内修改循环变量,防止 for 循环失去控制。如:
?②建议for语句的循环控制变量的取值采用“前闭后开区间”写法,目的:增加代码的可读性。 (5)一道例题:问以下代码循环了多少次?
答案:0次!j = 0,0为假,因此不会进入循环部分。 注意:while循环和for循环都是入口条件循环,即在循环的每一次迭代之前检查测试条件,所以有可能根本不执行循环。 3、do while循环(1)do while是出口条件循环,即在循环的每一次迭代之后检查测试条件,这保证了至少执行循环体中的内容一次。 (2)do while循环的通用形式:do ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?statement ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? while(expression); statement可以一条以分号结尾的简单语句或复合语句。 4.嵌套循环:嵌套循环:一个循环内包含另一个循环。常用于按行按列显示数据。如:
?第一个for循环被称为外层循环,第二个for循环被称为内层循环。 5.continue和break语句(1)continue:①执行该语句时,会跳过本次迭代的剩余部分,并开始下一轮迭代 ②可以用作占位符,如第一个代码段比第二个代码段可读性高:
③一个对比:(代码段)
该循环读取了10个字符,不包括换行符,因为程序会跳过count++。?
该循环读取了10个字符,包括换行符。 (2)break:①程序执行到break语句时,会终止包含它的循环,并继续执行下一阶段。break只跳过一层循环。 ②break可用于循环和switch语句,而continue只能用于循环语句 6.如何选择循环:(1)如果循环次数已知,首选for循环 (2)如果循环次数不明确,需要通过其它条件控制循环,通常选用while语句或do while语句 (3)如果必须先进入循环,经循环体运算得到循环控制条件后,再判断是否进入下一次循环,使用do while语句最合适。 三、跳转?goto语句:1.goto语句的作用:使程序控制跳转至相应标签语句。 2.goto语句由两部分组成:goto和标签名。其一般构成为:goto part; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? part: 3.原则上,根本不用在C程序中中使用goto语句: (1)C用复合语句或块来处理包含多条语句的if 语句 (2)C通过if else语句表达二选一更清楚 (3)C用while循环来代替goto创建不确定循环 (4)C用continue来代替goto跳转至循环末尾,并开始下一轮的迭代的功能 (5)胡乱跳转至循环的不同部分。(不要这样做!!!!) 但是,我们可以接受goto语句的一种用法,出现问题时从一组嵌套循环中跳出(break只能跳出一层循环),如:
|
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 12:25:36- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |