第三章 流程控制 程序的运行流程 选择结构语句 循环结构语句 主讲:李祥 时间:2015年10月.

Slides:



Advertisements
Similar presentations
While 迴圈 - 不知重複執行次數
Advertisements

CSIM, PU C Language Introduction to the C Programming Language 重覆敘述 (for,while,break,continue) 適合重複性的計算或判斷.
C语言程序设计 主讲教师 :张群燕 电话:
第4章 條件判斷與迴圈 Java 2 程式設計入門與應用.
“八皇后”问题 崔萌萌 吕金华.
第一章 C语言概述 计算机公共教学部.
项目五——校园一卡通程序功能模块化设计 5-1项目显示查询和退出函数设计.
第三章 控制结构.
程式設計實作.
C语言程序设计 课程 第5章 数组 主讲:李祥 博士、副教授 单位:软件学院软件工程系.
高级语言程序设计 主讲人:陈玉华.
循环结构又称为重复结构:用来处理需要重复处理的问题,它是程序中一种很重要的结构。
Class 2 流程控制-選擇敘述與迴圈.
流程控制結構 4-1 流程控制與UML活動圖 4-2 程式區塊與主控台基本輸入 4-3 條件控制敘述 4-4 迴圈控制敘述 4-5 巢狀迴圈
適用於多選一 可減少if 與 else配對混淆的錯誤.
C程序设计.
If … else 選擇結構 P27.
C 程式設計— 控制敘述 台大資訊工程學系 資訊系統訓練班.
QQ: 李祥 QQ: 欢迎多种方式的学习交流,祝大家学有所成.
授课老师:龚涛 信息科学与技术学院 2018年3月 教材: 《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
PHP 程式流程控制結構.
第三章 流程控制與例外處理 資訊教育研究室 製作 注意:本投影片僅供上課使用,非經同意,請勿散播或轉載。
第5章 堆疊(Stacks) 5-1 堆疊的基礎 5-2 堆疊的表示法 5-3 堆疊的應用 - 運算式的計算與轉換
Introduction to the C Programming Language
C语言 程序设计基础与试验 刘新国、2012年秋.
第3讲 C++程序控制结构 3.1 顺序结构 3.2 分支结构 3.3 循环结构 3.4 转向控制 3.5 综合案例分析.
本章中將會更詳細地考慮有關重複的概念,並且會 介紹for和do…while等兩種用來控制重複的敘述 式。 也將會介紹switch多重選擇敘述式。 我們會討論直接和迅速離開某種控制敘述式的 break敘述式,以及用來跳過重複敘述式本體剩餘 部份的continue敘述式。 本章會討論用來組合控制條件的邏輯運算子,最後.
程序的三种基本结构 if条件分支语句 switch多路开关语句 循环语句 循环嵌套 break,continue和goto语句
計數式重複敘述 for 迴圈 P
第5讲 结构化程序设计(Part II) 周水庚 2018年10月11日.
授课老师:龚涛 信息科学与技术学院 2016年3月 教材:《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
第2章 C++流程控制语句 if 语句 switch语句 for语句 while语句 do - while语句 break语句
第0章作业: 教材P12-练习与实践 1.写出用符号’*’输出描绘汉字”大”的流程图。
第1章 概述 本章要点: C语言程序结构和特点 C语言程序的基本符号与关键字 C语言程序的编辑及运行 学习方法建议:
第4讲 C++程序控制结构(二) 4.1 循环结构 4.2 转向控制 4.3 综合案例分析.
C++大学基础教程 第3章 C++控制语句 北京科技大学 信息基础科学系.
C语言概述 第一章.
第1讲 C语言基础 要求: (1) C程序的组成 (2) C语言的标识符是如何定义的。 (3) C语言有哪些基本数据类型?各种基本数
程式結構&語法.
4 條件選擇 4.1 程式基本結構 循序式結構 選擇式結構 重複式結構 4-3
第三章 C++的语句和简单的程序设计 主要内容:
第 二 章 数据类型、运算符与表达式.
第一章 程序设计和C语言 主讲人:高晓娟 计算机学院.
C语言程序示例: 1.输入10个数,按从小到大的顺序排序。 2.汉诺塔问题。.
C++语言程序设计 C++语言程序设计 第三章 控制语句 第十一组 C++语言程序设计.
C程序设计.
C 语言程序设计 程序的循环结构 电大崇信县工作站 梁海亮.
第2章 算法与C语言程序 程序 (1)数据的描述:数据的类型和组织形式(数据结构) (2)操作的描述:操作步骤(算法) 沃思指出:
浙江长征职业技术学院—计算机与信息技术系—相方莉制作
C程序设计.
第一章 C语言概述 教师:周芸.
第2章 认识C语言 教学要点 2. 1 项目二C语言程序识读 2 .2 项目三班级成绩排名 2 .3 知识链接 返回.
<编程达人入门课程> 本节内容 为什么要使用变量? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
第二章 Java语法基础.
第一章 C语言概述 目录 什么是语言、程序 C语言的历史与发展 C语言的书写形式与程序结构 运行C语言的步骤与方法
目标 流程控制 字符串处理 C# 的类和对象 C# 访问修饰符 C# 构造函数和析构函数.
程序设计基础.
#include <iostream.h>
第二章 Java基本语法 讲师:复凡.
第五章 逻辑运算和判断选取控制 §5.1 关系运算符和关系表达式
PHP程式設計 五、程式流程控制結構 建國科技大學 資訊管理學系 饒瑞佶.
第七章  数 组.
第1章 数据结构基础概论 本章主要介绍以下内容 数据结构研究的主要内容 数据结构中涉及的基本概念 算法的概念、描述方法以及评价标准.
Do While 迴圈 東海大學物理系‧資訊教育 施奇廷.
C/C++基礎程式設計班 C語言入門、變數、基本處理與輸入輸出 講師:林業峻 CSIE, NTU 3/7, 2015.
多重條件選擇敘述
第二章 Java基础语法 北京传智播客教育
第二章 Java基本语法 讲师:复凡.
Q1(a) 小偉打算編寫一個程序。該程序把兩個44的表內的數字相加。表3內的數字是由表1和表2應格子內的數字相加而成。例如:
函式庫補充資料 1.
Presentation transcript:

第三章 流程控制 程序的运行流程 选择结构语句 循环结构语句 主讲:李祥 时间:2015年10月

2.1 程序的运行图 2.2 顺序结构语句 2.3 选择结构语句 2.4 循环结构语句 2.5 本章小结

3.1程序的运行流程图 流程图是描述问题处理步骤的一种常用图形工具,它是由一些图框和流程线组成的。使用流程图描述问题的处理步骤,形象直观,便于阅读。画流程图时必须按照功能选用相应的流程图符号,常用的流程图符号如图3-1所示: 图3-1 流程图符号

3.1程序的运行流程图 图3-1所示的流程图符号中,列举了四个图框、一个流程线和一个连接点,具体说明如下: 起止框用于表示流程的开始或结束; 输入/输出框用平行四边形表示,在平行四边形内可以写明输入或输出的内容; 判断框用菱形表示,它的作用是对条件进行判断,根据条件是否成立来决定如何执行后续的操作; 处理框用矩形表示,它代表程序中的处理功能,如算术运算和赋值等;

3.1程序的运行流程图 流程线用实心单向箭头或直线表示,可以连接不同位置的图框,流程 线的标准流向是从左到右和从上到下,可用直线表示,非标准流向的流程线应使用箭头指示方向; 连接点用圆形表示,用于流程图的延续; 学习画流程图可以有效的进行结构化程序设计,基本的流程结构有3种,即顺序结构、选择结构和循环结构。它们可以编写各种复杂程序。在接下来的小节中,将分别讲解这3种基本流程结构,而流程图可以更好的理解和学习这些流程结构语句。

3.2 顺序结构语句 程序中的所有语句都是从上到下逐条执行,这样的程序结构称为顺序结构。顺序结构是程序开发中最常见的一种结构,它可以包含多种语句,如变量的定义语句、输入输出语句、赋值语句等。下面来看一个顺序结构的简单例子,如例3-1所示: 例3-1: #include <stdio.h> void main() { printf("我\n"); printf("爱\n"); printf("C\n"); printf("语\n"); printf("言\n"); }

3.2 顺序结构语句 运行结果如图3-2: 图3-2 运行结果 在例3-1的程序中,使用了5个printf()语句,从上往下依次输出字符“我、爱、C、语、言”。从运行结果可以看出,程序是按照语句的先后顺序依次执行的,这样的程序就是一个顺序结构的程序。

3.3 选择结构语句 3.3.1 if 条件语句 if 语句 if 语句是指如果满足某种条件,就进行相应的处理。在C语言中,if语句的具体语法格式如下: 上述语法中,判断条件的值只能是0或非0,若判断条件的值为0,按“假”处理,若判断条件的值为非0,按“真”处理,执行{}中的语句。 if (判断条件) { 代码块 }

3.3 选择结构语句 if语句的执行流程如图3-3所示: 图3-3 if语句流程图

3.3 选择结构语句 通过一个案例来学习if语句的具体用法,如例3-2所示: 例3-2: #include<stdio.h> void main() { //声明变量x int x = 5; //如果x的值小于10则执行if大括号中的代码 if (x < 10) x++; } printf("x=%d\n" , x);

3.3 选择结构语句 运行结果如图3-4: 图3-4 运行结果 在if语句的判断条件中判断x的值是否小于10,很明显条件成立,因此{}中的语句会被执行,变量x的值将进行自增。从图3-4的运行结果可以看出,x的值已由原来的5变成了6。

3.3 选择结构语句 3.3.1 if 条件语句 if …else语句 if…else语句是指如果满足某种条件,就进行相应的处理,否则就进行另一种处理。if…else语句的具体语法格式如下: if (判断条件) { 执行语句1 …… } else 执行语句2

3.3 选择结构语句 if…else语句的执行流程如图3-4所示: 图3-3 if…else语句流程图

3.3 选择结构语句 例3-3通过一个实现奇偶数判断来演示if…else语句的具体用法: 例3-3: #include<stdio.h> void main() { int num = 19; if (num % 2 == 0) //判断条件成立,num被2整除 printf("num是一个偶数\n"); } else printf("num是一个奇数\n");

3.3 选择结构语句 运行结果如图3-5所示: 图3-5 运行结果 例3-3中,变量num的值为19,模以2的结果为1,不等于0,判断条件不成立,因此程序会执行else后面{}中的语句,打印“num是一个奇数”。

3.3 选择结构语句 3.3.1 if 条件语句 if …else if…else语句 if…else if…else语句用于对多个条件进行判断,从而进行多种不同的处理。if…else if…else语句的具体语法格式如下: if (判断条件1) {执行语句1} else if (判断条件2) {执行语句2} …… else if (判断条件n) {执行语句n} else {执行语句n+1}

3.3 选择结构语句 if…else if …else语句的执行流程如图3-5所示: 图3-5 if…else if…else语句流程图

3.3 选择结构语句 通过一个对学生考试成绩进行等级划分的案例来演示if…else if…else语句的用法,如例3-4所示: 运行结果如图3-6: 图3-6 运行结果 例3-4中,定义了学生成绩grade为75,由于它不满足第一个判断条件grade>=80,会执行第二个判断条件grade>=70,条件成立,因此会打印“该成绩的等级为良”。

3.3 选择结构语句 例3-4: #include<stdio.h> void main() { int grade = 75; //定义学生成绩 if (grade >= 80) //满足条件 grade >=80 printf("该成绩的等级为优\n"); } else if (grade >= 70) //不满足条件 grade >= 80 ,但满足条件 grade >= 70 printf("该成绩的等级为良\n"); else if (grade >= 60) //不满足条件 grade >= 70 ,但满足条件 grade >= 60 printf("该成绩的等级为中\n"); else //不满足条件 grade >= 60 printf("该成绩的等级为差\n");

 多学一招 三元运算符: 在C语言中有一种特殊的运算叫做三元运算,它和if…else语句类似具体语法格式如下: 三元运算通常用于对某个变量进行赋值,当判断条件成立时,运算结果为表达式1的值,否则结果为表达式2的值。如求x,y中最大值: 判断条件 ? 表达式1 : 表达式; int x = 0; //if…else语句 int y = 1; int max; if (x > y) { max = x; } else max = y; } //三元运算 int x = 0; int y = 1; int max; max = x > y ? x : y;

3.3 选择结构语句 3.3.2 switch 条件语句 switch 条件语句也是一种很常用的选择语句,和if条件语句不同,它只能针对某个表达式的值作出判断,从而决定程序执行哪一段代码。例如,在程序中使用数字1~7来表示星期一到星期天,如果想根据某个输入的数字来输出对应中文格式的星期值,可以通过下面的一段伪代码来描述: 用于表示星期的数字 如果等于1,则输出星期一 如果等于2,则输出星期二 如果等于3,则输出星期三 如果等于4,则输出星期四 如果等于5,则输出星期五 如果等于6,则输出星期六 如果等于7,则输出星期天 如果不是1~7,则输出此数字为非法数字

3.3 选择结构语句 对于上面一段伪代码的描述,大家可能会立刻想到用刚学过的if…else if…else语句来实现,但是由于判断条件比较多,实现起来代码过长,不便于阅读。这时就可以使用C语言中的switch语句来实现这种需求。在switch语句中,switch关键字后面有一个表达式,case关键字后面有目标值,当表达式的值和某个目标值匹配时,会执行对应case下的语句。接下来通过一段伪代码来描述switch语句的基本语法格式,具体如下:

3.3 选择结构语句 switch语句格式: switch (表达式) { case 目标值1: 执行语句1 break; 执行语句2 …… case 目标值n: 执行语句n default: 执行语句n+1 }

3.3 选择结构语句 例3-5,用switch语句实现星期输出: #include<stdio.h> void main() { int week = 5; switch (week) {case 1: printf("星期一"); break; case 2: printf("星期二"); case 3: printf("星期三"); case 4: printf("星期四"); case 5: printf("星期五"); case 6: printf("星期六"); case 7: printf("星期天"); default: printf("输入的数字不正确..."); break;}}

3.3 选择结构语句 例3-5输出结果如图3-7: 图3-7 运行结果 由于变量week的值为5,整个switch语句判断的结果满足第19行的条件,因此打印“星期五”。程序中的default语句用于处理和前面的case都不匹配的情况,将第4行代码替换为int week = 8,再次运行程序,输出结果如图3-8所示: 图3-8 运行结果

3.4 循环结构语句 3.4.1 while循环语句 while循环语句和3.3小节讲到的条件判断语句有些相似,都是根据判断条件来决定是否执行大括号内的执行语句。区别在于,while语句会反复地进行条件判断,只要条件成立,{}内的执行语句就会一直执行下去,直到条件不成立,while循环才会结束。while循环语句的具体语法格式如下: while (循环条件) { 执行语句 ……… }

3.4 循环结构语句 while循环语句的执行流程图如图3-8所示: 图3-8 while循环流程图

3.4 循环结构语句 接下来通过while语句来实现1~4之间自然数的打印,如例3-6所示: 例3-6: #include <stdio.h> void main() { int x = 1; //定义变量x,初始值为1 while (x <= 4) // 循环条件 printf("x = %d\n", x); // 条件成立,打印x的值 x++; // x进行自增 }

3.4 循环结构语句 例3-6运行结果如图3-9所示: 图3-9 运行结果 图3-9 运行结果 例3-7中,x的初始值为1,在满足循环条件x <= 4的情况下,循环体会重复执行,打印x的值并让x进行自增。因此,打印结果中x的值分别为1、2、3、4。需要注意的是,例3-7中的第8行代码用于在每次循环时改变变量x的值,直到循环条件不成立,如果没有这行代码,整个循环会进入无限循环的状态,永远不会结束。

3.4 循环结构语句 3.4.2 do…while循环语句 do…while循环语句和while循环语句功能类似,二者的不同之处在于,while语句需要先判断循环条件,然后根据判断结果来决定是否执行大括号中的代码,而do…while循环语句先要执行一次大括号内的代码再判断循环条件,其具体语法格式如下: 在上面的语法格式中,关键字do后面{}中的执行语句是循环体。do…while循环语句将循环条件放在了循环体的后面。这也就意味着,循环体会无条件执行一次,然后再根据循环条件来决定是否继续执行。 do { 执行语句 ……… } while(循环条件);

3.4 循环结构语句 do…while循环语句的执行流程图如图3-10所示: 图3-10 do…while循环流程图

3.4 循环结构语句 接下来使用do…while循环语句将例3-6进行改写,如例3-7所示: 例3-7: #include <stdio.h> void main() { int x = 1; //定义变量x,初始值为1 do printf("x = %d\n", x); // 条件成立,打印x的值 x++; // x进行自增 } while (x <= 4); // 循环条件 }

3.4 循环结构语句 例3-7运行结果如图3-11所示: 图3-11 运行结果 图3-11 运行结果 例3-8和例3-7的运行结果一致,这说明do …while循环和while循环能实现同样的功能。然而在程序运行过程中,这两种语句还是有差别的。如果循环条件在循环语句开始时就不成立,那么while循环的循环体一次都不会执行,而do…while循环的循环体还是会执行一次。若将例中的循环条件x<=4改为x < 1,例3-8会打印x=1,而例3-7什么也不会打印。

3.4 循环结构语句 3.4.3 for循环语句 在前面的小节中分别讲解了while循环和do…while循环。在程序开发中,还经常会使用另一种循环语句,即for循环,它通常用于循环次数已知的情况,其具体语法格式如下: 在上面的语法格式中,for关键字后面()中包括了初始化表达式、循环条件和操作表达式三部分内容,它们之间用“;”分隔,{}中的执行语句为循环体。 for(初始化表达式; 循环条件; 操作表达式) { 执行语句 ……… }

3.4 循环结构语句 接下来分别用“①”表示初始化表达式、“②”表示循环条件、“③”表示操作表达式、“④”表示循环体,通过序号来具体分析for循环的执行流程。具体如下: 第一步,执行①; 第二步,执行②,如果判断条件的值非0,执行第三步,如果判断条件的值为0,执行第五步; 第三步,执行④; 第四步,执行③,然后继续执行第二步; 第五步,退出循环; for(① ; ② ; ③) { ④ }

3.4 循环结构语句 对自然数1~4求和,实现方式如例3-8所示: 例3-8: #include<stdio.h> void main() { int sum = 0; //定义变量sum,用于记住累加的和 for (int i = 1; i <= 4; i++) //i的值会在1~4之间变化 sum += i; //实现sum与i的累加 } printf("sum = %d \n", sum); //打印累加的和

3.4 循环结构语句 例3-8运行结果如图3-12所示: 图3-11 运行结果 图3-11 运行结果 例3-8中,变量i的初始值为1,在判断条件i<=4为真的情况下,会执行循环体sum+=i,执行完毕后,会执行操作表达式i++,i的值变为2,然后继续进行条件判断,开始下一次循环,直到i=5时,条件i<=4为假,结束循环,执行for循环后面的代码,打印“sum=10”。

3.4 循环结构语句 为了让读者能熟悉整个for循环的执行过程,现将例3-9运行期间每次循环中变量sum和i的值通过表3-1列举出来: 循环次数 sum i 第一次 1 第二次 3 2 第三次 6 第四次 10 4

3.4 循环结构语句 3.4.4 循环嵌套 有时为了解决一个较为复杂的问题,需要在一个循环中再定义一个循环,这样的方式被称作循环嵌套。在C语言中,while、do…while、for循环语句都可以进行嵌套,并且它们之间也可以互相嵌套。for循环中嵌套是最常见的循环嵌套,其语法格式如下所示: for(初始化表达式; 循环条件; 操作表达式) { …… 执行语句; } }

3.4 循环结构语句 接下来,通过for语句的循环嵌套来实现使用“*”打印直角三角形,如例3-10所示: #include<stdio.h> void main() { int i, j; //定义两个循环变量 for (i = 1; i <= 9; i++) //外层循环 for (j = 1; j <= i; j++) //内层循环 printf("*"); //打印* } printf("\n"); //换行

3.4 循环结构语句 例3-10运行结果如图3-12所示: 图3-12 运行结果

3.4 循环结构语句 例3-10运行步骤解析: 第一步,在第4行代码中定义了两个循环变量i和j,其中i为外层循环变量,j为内层循环变量; 第二步,在第5行代码中将i初始化为1,条件i <= 9为真,程序将首次进入外层循环的循环体; 第三步,在第7行代码中将j初始化为1,由于此时i的值为1,条件j <= i为真,程序将首次进入内层循环的循环体,打印一个“*”。 第四步,执行第7行代码中内层循环的操作表达式j++,将j的值自增为2。 第五步,执行第7行代码中的判断条件j<=i,判断结果为假,内层循环结束。执行后面的代码,打印换行符。

3.4 循环结构语句 第六步,执行第5行代码中外层循环的操作表达式i++,将i的值自增为2。

3.4 循环结构语句 3.4.5 跳转语句 跳转语句用于实现循环执行过程中程序流程的跳转,在C语言中,跳转语句有break语句、goto语句和continue语句。 break 在switch条件语句和循环语句中都可以使用break语句。当它出现在switch条件语句中时,作用是终止某个case并跳出switch结构。当它出现在循环语句中,作用是跳出当前循环语句,执行后面的代码。接下来通过一个具体的案例来演示break语句如何跳出当前循环。 如例3-11所示:

3.4 循环结构语句 例3-11: #include<stdio.h> void main() { int x = 1; //定义变量x,初始值为1 while (x <= 4) //循环条件 printf("x = %d\n", x); //条件成立,打印x的值 if (x == 3) break; } x++; //x进行自增

3.4 循环结构语句 例3-11运行结果如图3-13: 图3-13 运行结果 图3-13 运行结果 例3-11中,通过while循环打印x的值,当x的值为3时使用break语句跳出循环。因此打印结果中并没有出现“x=4”。

3.4 循环结构语句 goto语句 当break语句出现在嵌套循环中的内层循环时,它只能跳出内层循环,如果想要跳出外层循环则需要对外层循环添加标记,然后使用goto语句。接下来通过一个案例来演示如何使用goto语句。 如例3-12所示:

3.4 循环结构语句 例3-12: #include<stdio.h> void main() { int i, j; //定义两个循环变量 for (i = 1; i <= 9; i++) //外层循环 { for (j = 1; j <= i; j++) //内层循环 if (i > 4) //判断i的值是否大于4 goto end; //跳至标识为end的语句 } printf("*"); //输出* printf("\n"); //换行 end: return 0;

3.4 循环结构语句 例3-12运行结果如图3-14: 图3-14 运行结果 图3-14 运行结果 例3-12中,在return语句前面增加了标记“end”。当i>4时,使用“goto end;”语句跳出外层循环。因此程序只打印了4行“*”。

3.4 循环结构语句 continue语句 在循环语句中,如果希望立即终止本次循环,并执行下一次循环,此时就需要使用continue语句。接下来通过一个1~100之内的奇数求和的案例来演示continue语句的使用。 如例3-13所示:

3.4 循环结构语句 例3-13: #include<stdio.h> void main() { int sum = 0; //定义变量sum,用于记住和 for (int i = 1; i <= 100; i++) if (i % 2 == 0) //如果i是一个偶数,执行if语句中的代码 continue; //结束本次循环 } sum += i; //实现sum和i的累加 printf("sum = %d\n", sum);

3.4 循环结构语句 例3-13运行结果如图3-15所示: 图3-15 运行结果 例3-13使用for循环让变量i的值在1~100之间循环,在循环过程中,当i的值为偶数时,将执行continue语句结束本次循环,进入下一次循环。当i的值为奇数时,sum和i进行累加,最终得到1~100之间所有奇数的和,打印“sum = 2500”。

本章小结 本章首先讲解了程序的运行流程图,然后讲解了C语言中最基本的三种流程控制语句,包括顺序结构语句、选择结构语句和循环语句。通过本章的学习,读者应该能够熟练的运用if判断语句、switch判断语句、while循环语句、do-while循环语句以及for循环语句。掌握本章的内容就能够编写逻辑比较复杂的C语言程序并且有助于后面章节的学习。

谢 谢!