Presentation is loading. Please wait.

Presentation is loading. Please wait.

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

Similar presentations


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

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

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

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

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

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

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

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

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

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

10 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);

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

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

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

14 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");

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

16 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}

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

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

19 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");

20  多学一招 三元运算符: 在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;

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

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

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

24 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;}}

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

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

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

28 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进行自增 }

29 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的值,直到循环条件不成立,如果没有这行代码,整个循环会进入无限循环的状态,永远不会结束。

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

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

32 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); // 循环条件 }

33 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什么也不会打印。

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

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

36 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); //打印累加的和

37 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”。

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

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

40 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"); //换行

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

42 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,判断结果为假,内层循环结束。执行后面的代码,打印换行符。

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

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

45 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进行自增

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

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

48 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;

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

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

51 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);

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

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

54 谢 谢!


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

Similar presentations


Ads by Google