第3章:流程控制

*学习目标*

u *掌握选择**结构**语句*

u *掌握循环结构语句*

前面的章节一直在介绍C语言的基本语法知识,然而仅仅依靠这些语法知识还不能编写出完整的程序。在程序中,通常需要加入业务逻辑,并对程序的流程进行控制。本章将重点讲解C语言中最基本的三种流程控制语句。

3.1 *程序**的**运行**流程**图*

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

![img](file:///C:\Users\M7510\AppData\Local\Temp\ksohtml12012\wps1.png)

图3-1 流程图符号

图3-1所示的流程图符号中,列举了四种图框和两种流程线,具体说明如下:

l 起止框用于表示流程的开始或结束;

l 输入/输出框用平行四边形表示,在平行四边形内可以写明输入或输出的内容;

l 判断框用菱形表示,它的作用是对条件进行判断,根据条件是否成立来决定如何执行后续的操作;

l 处理框用矩形表示,它代表程序中的处理功能,如算术运算和赋值等;

l 流程线用实心单向箭头或直线表示,可以连接不同位置的图框,流程线的标准流向是从左到右和从上到下,可用直线表示,非标准流向的流程线应使用箭头指示方向;

l 连接点用圆形表示,用于流程图的延续。

通过上面的讲解,初学者对流程图符号有了简单的认识,接下来先来看一个简单的流程图,如图3-2所示。

![img](file:///C:\Users\M7510\AppData\Local\Temp\ksohtml12012\wps2.png)

图3-2 判断奇偶数

图3-2表示的是一个判断奇偶数的流程图,下面针对该流程图中的执行顺序进行说明,具体如下:

第1步:程序开始;

第2步:进入处理框,将变量number赋值为1;

第3步:进入判断框,判断number是否为偶数,如果是偶数,则进入下面的输出框,输出number是偶数;否则进入左面的输出框,输出number是奇数;

第4步:输出完成后,进入结束状态,程序终止。

3.2 *顺序**结构语句*

前面章节讲解的程序都有一个共同的特点,即程序中的所有语句都是从上到下逐条执行,这样的程序结构叫做顺序结构。顺序结构是程序开发中最常见的一种结构,它可以包含多种语句,如变量的定义语句、输入输出语句、赋值语句等。下面来看一个顺序结构的简单例子,通过程序实现按顺序输出“我爱C语言”,如例3-1所示。

例3-1

1 #include <stdio.h>

2 int main()

3 {

4 printf("我\n");

5 printf("爱\n");

6 printf("C\n");

7 printf("语\n");

8 printf("言\n");

9 return 0;

10 }

运行结果如图3-3所示。

![img](file:///C:\Users\M7510\AppData\Local\Temp\ksohtml12012\wps3.jpg)

图3-3 运行结果

在例3-1的程序中,使用了5个printf()语句,从上往下依次输出“我、爱、C、语、言”。从运行结果可以看出,程序是按照语句的先后顺序执行的。因此,可以说明该程序是一个顺序结构的程序。

3.3 *选择**结构语句*

在实际生活中经常需要作出一些判断,比如开车来到一个十字路口,这时需要对红绿灯进行判断,如果前面是红灯,就停车等候,如果是绿灯,就通行。同样,在C语言中也经常需要对一些条件做出判断,从而决定执行哪一段代码,这时就需要使用选择语句。选择结构语句分为if条件语句和switch条件语句,接下来本小节将对它们进行详细地讲解。

3.3.1 *if条件语句*

if条件语句分为三种语法格式,每一种格式都有其自身的特点,下面分别进行讲解。

*1、if语句*

if语句是指如果满足某种条件,就进行相应的处理。例如,小明妈妈跟小明说“如果你考试得了100分,星期天就带你去游乐场玩”。这句话可以通过下面的一段伪代码来描述。

如果小明考试得了100分

​ 妈妈星期天带小明去游乐场

在上面的伪代码中,“如果”相当于C语言中的关键字if,“小明考试得了100分”是判断条件,需要用()括起来,“妈妈星期天带小明去游乐场”是执行语句,需要放在{}中。修改后的伪代码如下:

if (小明考试得了100分)

{

​ 妈妈星期天带小明去游乐场

}

上面的例子就描述了if语句的用法,在C语言中,if语句的具体语法格式如下:

if (条件语句)

{

​ 代码块

}

上述语法格式中,判断条件是一个布尔值,当判断条件为true时,{}中的执行语句才会被执行。if语句的执行流程如图3-4所示。

![img](file:///C:\Users\M7510\AppData\Local\Temp\ksohtml12012\wps4.png)

图3-4 if语句流程图

接下来通过一个案例来学习if语句的具体用法,如例3-2所示。

例3-2

1 #include<stdio.h>

11 int main()

12 {

13 //声明变量x

14 int x = 5;

15 //如果x的值小于10则执行if大括号中的代码

16 if (x < 10)

17 {

18 x++;

19 }

20 printf("x=%d\n" , x);

21 return 0;

22 }

运行结果如图3-5所示。

![img](file:///C:\Users\M7510\AppData\Local\Temp\ksohtml12012\wps5.jpg)

图3-5 运行结果

例3-2中,定义了一个变量x,其初始值为5。在if语句的判断条件中判断x的值是否小于10,很明显条件成立,因此{}中的语句会被执行,变量x的值将进行自增。从图3-5的运行结果可以看出,x的值已由原来的5变成了6。

*2、**if…**else语句*

if…else语句是指如果满足某种条件,就进行相应的处理,否则就进行另一种处理。例如,要判断一个正整数的奇偶,如果该数字能被2整除则是一个偶数,否则该数字就是一个奇数。if…else语句的具体语法格式如下:

if (判断条件)

{

​ 执行语句1

​ ……

}

else

{

​ 执行语句2

​ ……

}

上述语法格式中,判断条件是一个布尔值。当判断条件为true时,if后面{}中的执行语句1会被执行。当判断条件为false时,else后面{}中的执行语句2会被执行。if…else语句的执行流程如图3-6所示。

![img](file:///C:\Users\M7510\AppData\Local\Temp\ksohtml12012\wps6.png)

图3-6 if…else语句流程图

接下来通过一个实现奇偶数判断的案例来演示if..else语句的具体用法,如例3-3所示。

例3-3

1 #include<stdio.h>

23 int main()

24 {

25 int num = 19;

26 if (num % 2 == 0)

27 {

28 //判断条件成立,num被2整除

29 printf("num是一个偶数\n");

30 }

31 else

32 {

33 printf("num是一个奇数\n");

34 }

35 return 0;

36 }

运行结果如图3-7所示。

![img](file:///C:\Users\M7510\AppData\Local\Temp\ksohtml12012\wps7.jpg)

图3-7 运行结果

例3-3中,变量num的值为19,模以2的结果为1,不等于0,判断条件不成立。因此会执行else后面{}中的语句,打印“num是一个奇数”。

*3、**if…**else if**…**else语句*

if…else if…else语句用于对多个条件进行判断,从而进行多种不同的处理。例如,对一个学生的考试成绩进行等级的划分,如果分数大于等于80分等级为优,如果分数小于80分大于等于70分等级为良,如果分数小于70分大于等于60分等级为中,否则,等级为差。if…else if…else语句的具体语法格式如下:

if (判断条件1)

{

​ 执行语句1

}

else if (判断条件2)

{

​ 执行语句2

}

……

else if (判断条件n)

{

​ 执行语句n

}

else

{

​ 执行语句n+1

}

上述语法格式中,判断条件是一个布尔值。当判断条件1为true时,if后面{}中的执行语句1会执行。当判断条件1为false时,会继续执行判断条件2,如果为true则执行语句2,以此类推,如果所有的判断条件都为false,则意味着所有条件均未满足,else后面{}中的执行语句n+1会被执行。if…else if…else语句的执行流程如图3-8所示。

![img](file:///C:\Users\M7510\AppData\Local\Temp\ksohtml12012\wps8.png)

图3-8 if…else if…else语句的流程图

接下来通过一个对学生考试成绩进行等级划分的案例来演示if…else if…else语句的用法,如例3-4所示。

例3-4

1 #include<stdio.h>

37 int main()

38 {

39 int grade = 75; //定义学生成绩

40 if (grade >= 80)

41 {

42 //满足条件 grade >=80

43 printf("该成绩的等级为优\n");

44 }

45 else if (grade >= 70)

46 {

47 //不满足条件 grade >= 80 ,但满足条件 grade >= 70

48 printf("该成绩的等级为良\n");

49 }

50 else if (grade >= 60)

51 {

52 //不满足条件 grade >= 70 ,但满足条件 grade >= 60

53 printf("该成绩的等级为中\n");

54 }

55 else

56 {

57 //不满足条件 grade >= 60

58 printf("该成绩的等级为差\n");

59 }

60 return 0;

61 }

运行结果如图3-9所示。

![img](file:///C:\Users\M7510\AppData\Local\Temp\ksohtml12012\wps9.jpg)

图3-9 运行结果

例3-4中,定义了学生成绩grade为75。它不满足第一个判断条件grade>=80,会执行第二个判断条件grade>=70,条件成立,因此会打印“该成绩的等级为良”。

&*多学一招:三元运算符*

在C语言中有一种特殊的运算叫做三元运算,它和if…else语句类似,具体语法格式如下:

判断条件 ? 表达式1 : 表达式2

三元运算通常用于对某个变量进行赋值,当判断条件成立时,运算结果为表达式1的值,否则结果为表达式2的值。

例如求两个数x、y中的较大者,如果用if…else语句来实现,具体代码如下:

int x = 0;

int y = 1;

int max;

if (x > y)

{

​ max = x;

} else

{

​ max = y;

}

上面的代码运行之后,变量max的值为1。如果if…else语句用三元运算来替换,具体代码如下:

int x = 0;

int y = 1;

int max;

max = x > y ? x : y;

3.3.2 *switch条件语句*

switch 条件语句也是一种很常用的选择语句,和if条件语句不同,它只能针对某个表达式的值作出判断,从而决定程序执行哪一段代码。例如,在程序中使用数字1~7来表示星期一到星期天,如果想根据某个输入的数字来输出对应中文格式的星期值,可以通过下面的一段伪代码来描述:

用于表示星期的数字

​ 如果等于1,则输出星期一

​ 如果等于2,则输出星期二

​ 如果等于3,则输出星期三

​ 如果等于4,则输出星期四

​ 如果等于5,则输出星期五

​ 如果等于6,则输出星期六

​ 如果等于7,则输出星期天

​ 如果不是1~7,则输出此数字为非法数字

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

switch (表达式)

{

​ case 目标值1:

​ 执行语句1

​ break;

​ case 目标值2:

​ 执行语句2

​ break;

​ ……

​ case 目标值n:

​ 执行语句n

​ break;

​ default:

​ 执行语句n+1

​ break;

}

在上面的语法格式中,switch语句将表达式的值与每个case中的目标值进行匹配,如果找到了匹配的值,就会执行相应case后的语句,否则执行default后的语句。关于switch语句中的break关键字将在后面的小节中做具体介绍,此处,初学者只需要知道break的作用是跳出switch语句即可。

接下来通过一个案例来实现根据数字输出中文格式的星期的功能,如例3-5所示。

例3-5

1 #include<stdio.h>

62 int main()

63 {

64 int week = 5;

65 switch (week)

66 {

67 case 1:

68 printf("星期一");

69 break;

70 case 2:

71 printf("星期二");

72 break;

73 case 3:

74 printf("星期三");

75 break;

76 case 4:

77 printf("星期四");

78 break;

79 case 5:

80 printf("星期五");

81 break;

82 case 6:

83 printf("星期六");

84 break;

85 case 7:

86 printf("星期天");

87 break;

88 default:

89 printf("输入的数字不正确...");

90 break;

91 }

92 return 0;

93 }

运行结果如图3-10所示。

![img](file:///C:\Users\M7510\AppData\Local\Temp\ksohtml12012\wps10.jpg)

图3-10 运行结果

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

![img](file:///C:\Users\M7510\AppData\Local\Temp\ksohtml12012\wps11.jpg)

图3-11 运行结果

在使用switch语句的过程中,如果多个case条件后面的执行语句是一样的,则该执行语句只需书写一次即可,这是一种简写的方式。例如,使用数字1~7来表示星期一到星期天,当输入的数字为1、2、3、4、5时视为工作日,否则视为休息日,这时如果需要判断一周中的某一天是否为工作日,就可以采用switch语句的简写方式,具体如例3-6所示。

例3-6

1 #include<stdio.h>

2 int main()

3 {

4 int week = 2;

5 switch (week)

6 {

7 case 1:

8 case 2:

9 case 3:

10 case 4:

11 case 5:

12 //当 week 满足值 1、2、3、4、5 中任意一个时,处理方式相同

13 printf("今天是工作日\n");

14 break;

15 case 6:

16 case 7:

17 //当 week 满足值 6、7 中任意一个时,处理方式相同

18 printf("今天是休息日\n");

19 break;

20 }

21 return 0;

22 }

运行结果如图3-12所示。

![img](file:///C:\Users\M7510\AppData\Local\Temp\ksohtml12012\wps12.jpg)

图3-12 运行结果

例3-6中,当变量week的值为1、2、3、4、5中任意一个值时,处理方式相同,都会打印“今天是工作日”。同理,当变量week值为6、7中任意一个值时,打印“今天是休息日”。

3.4 *循环**结构语句*

在实际生活中经常会将同一件事情重复做很多次,比如在走路时,会重复使用左右脚,打乒乓球时,会重复挥拍的动作等。同样在C语言中,也经常需要重复执行同一代码块,这时就需要使用循环语句。循环语句分为while循环语句、do…while循环语句和for循环语句三种。接下来,本小节将针对这三种循环语句分别进行详细地讲解。

3.4.1 *while**循环**语句*

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

while (循环条件)

{

​ 执行语句

………

}

在上面的语法格式中,{}中的执行语句被称作循环体,循环体是否执行取决于循环条件。当循环条件为true时,循环体就会被执行。循环体执行完毕时会继续判断循环条件,如条件仍为true则会继续执行,直到循环条件为false时,整个循环过程才会结束。

while循环的执行流程如图3-13所示。

![img](file:///C:\Users\M7510\AppData\Local\Temp\ksohtml12012\wps13.png)

图3-13 while循环的流程图

接下来通过while语句来实现1~4之间自然数的打印,如例3-7所示。

例3-7

1 #include <stdio.h>

94 int main()

95 {

96 int x = 1; //定义变量x,初始值为1

97 while (x <= 4) // 循环条件

98 {

99 printf("x = %d\n", x);// 条件成立,打印x的值

100 x++; // x进行自增

101 }

102 return 0;

103 }

运行结果如图3-14所示。

![img](file:///C:\Users\M7510\AppData\Local\Temp\ksohtml12012\wps14.jpg)

图3-14 while循环

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

3.4.2 *d**o**-**while循环语句*

do…while循环语句和while循环语句功能类似,二者的不同之处在于,while语句需要先判断循环条件,然后根据判断结果来决定是否执行大括号中的代码,而do…while循环语句先要执行一次大括号内的代码再判断循环条件,其具体语法格式如下:

do

{

执行语句

………

} while(循环条件);

在上面的语法格式中,关键字do后面{}中的执行语句是循环体。do…while循环语句将循环条件放在了循环体的后面。这也就意味着,循环体会无条件执行一次,然后再根据循环条件来决定是否继续执行。

do…while循环的执行流程如图3-15所示。

![img](file:///C:\Users\M7510\AppData\Local\Temp\ksohtml12012\wps15.png)

图3-15 do…while循环的执行流程

接下来使用do…while循环语句将例3-7进行改写,如例3-8所示。

例3-8

1 #include <stdio.h>

104 int main()

105 {

106 int x = 1; //定义变量x,初始值为1

107 do

108 {

109 printf("x = %d\n", x);// 条件成立,打印x的值

110 x++; // x进行自增

111 } while (x <= 4); // 循环条件

112 return 0;

113 }

运行结果如图3-16所示。

![img](file:///C:\Users\M7510\AppData\Local\Temp\ksohtml12012\wps16.jpg)

图3-16 do while实例

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

3.4.3 *for循环语句*

在前面的小节中分别讲解了while循环和do…while循环。在程序开发中,还经常会使用另一种循环语句,即for循环,它通常用于循环次数已知的情况,其具体语法格式如下:

for(初始化表达式; 循环条件; 操作表达式)

{

​ 执行语句

​ ………

}

在上面的语法格式中,for关键字后面()中包括了初始化表达式、循环条件和操作表达式三部分内容,它们之间用“;”分隔,{}中的执行语句为循环体。

接下来分别用“①”表示初始化表达式、“②”表示循环条件、“③”表示操作表达式、“④”表示循环体,通过序号来具体分析for循环的执行流程。具体如下:

for(① ; ② ; ③)

{

​ ④

}

第一步,执行①

第二步,执行②,如果判断结果为true,执行第三步,如果判断结果为false,执行第五步

第三步,执行④

第四步,执行③,然后继续执行第二步

第五步,退出循环

接下来通过一个案例对自然数1~4进行求和,如例3-9所示。

例3-9

1 #include<stdio.h>

2 int main()

3 {

4 int sum = 0; //定义变量sum,用于记住累加的和

5 for (int i = 1; i <= 4; i++) //i的值会在1~4之间变化

6 {

7 sum += i; //实现sum与i的累加

8 }

9 printf("sum = %d \n", sum); //打印累加的和

10 return 0;

11 }

运行结果如图3-17所示。

![img](file:///C:\Users\M7510\AppData\Local\Temp\ksohtml12012\wps17.jpg)

图3-17 运行结果

例3-9中,变量i的初始值为1,在判断条件i<=4为true的情况下,会执行循环体sum+=i,执行完毕后,会执行操作表达式i++,i的值变为2,然后继续进行条件判断,开始下一次循环,直到i=5时,条件i<=4为false,结束循环,执行for循环后面的代码,打印“sum=10”。

为了让初学者能熟悉整个for循环的执行过程,现将例3-9运行期间每次循环中变量sum和i的值通过表3-1罗列出来。

表3-1 sum和i循环中的值

*循环次数* *sum* *i*
第一次 1 1
第二次 3 2
第三次 6 3
第四次 10 4

3.4.4 *循环嵌套*

有时为了解决一个较为复杂的问题,需要在一个循环中再定义一个循环,这样的方式被称作循环嵌套。在C语言中,while、do…while、for循环语句都可以进行嵌套,并且它们之间也可以互相嵌套,这当中最常见的就是在for循环中嵌套for循环,具体语法格式如下:

for(初始化表达式; 循环条件; 操作表达式)

{

​ ………

​ for(初始化表达式; 循环条件; 操作表达式)

{

​ 执行语句;

​ ………

​ }

​ ………

}

接下来通过for语句的循环嵌套来实现使用“*”打印直角三角形,如例3-10所示。

例3-10

1 #include<stdio.h>

114 int main()

115 {

116 int i, j; //定义两个循环变量

117 for (i = 1; i <= 9; i++) //外层循环

118 {

119 for (j = 1; j <= i; j++) //内层循环

120 {

121 printf(""); //打印

122 }

123 printf("\n"); //换行

124 }

125 return 0;

126 }

运行结果如图3-18所示。

![img](file:///C:\Users\M7510\AppData\Local\Temp\ksohtml12012\wps18.jpg)

图3-18 运行结果

在例3-10中定义了两层for循环,分别为外层循环和内层循环,外层循环用于控制打印的行数,内层循环用于打印“”,每一行的“”个数逐行增加,最后输出一个直角三角形。由于嵌套循环程序比较复杂,下面分步骤进行详细地讲解,具体如下:

第一步,在第4行代码中定义了两个循环变量i和j,其中i为外层循环变量,j为内层循环变量。

第二步,在第5行代码中将i初始化为1,条件i <= 9为true,程序将首次进入外层循环的循环体。

第三步,在第7行代码中将j初始化为1,由于此时i的值为1,条件j <= i为true,程序将首次进入内层循环的循环体,打印一个“*”。

第四步,执行第7行代码中内层循环的操作表达式j++,将j的值自增为2。

第五步,执行第7行代码中的判断条件j<=i,判断结果为false,内层循环结束。执行后面的代码,打印换行符。

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

第七步,执行第5行代码中的判断条件i<=9,判断结果为true,程序将进入外层循环的循环体,继续执行内层循环。

第八步,由于i的值为2,内层循环会执行两次,即在第2行打印两个“*”。在内层循环结束时会打印换行符。

第九步,以此类推,在第3行会打印3个“*”,逐行递增,直到i的值为10时,外层循环的判断条件i <= 9结果为false,外层循环结束,整个程序也就结束了。

3.4.5 *跳转语句(break、goto、continue)*

跳转语句用于实现循环执行过程中程序流程的跳转,在C语言中,跳转语句有break语句、goto语句和continue语句。接下来分别进行详细地讲解。

*1、break语句*

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

例3-11

1 #include<stdio.h>

127 int main()

128 {

129 int x = 1; //定义变量x,初始值为1

130 while (x <= 4) //循环条件

131 {

132 printf("x = %d\n", x); //条件成立,打印x的值

133 if (x == 3)

134 {

135 break;

136 }

137 x++; //x进行自增

138 }

139 return 0;

140 }

运行结果如图3-19所示。

![img](file:///C:\Users\M7510\AppData\Local\Temp\ksohtml12012\wps19.jpg)

图3-19 运行结果

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

*2、goto语句*

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

例3-12

1 #include<stdio.h>

141 int main()

142 {

143

144 int i, j; //定义两个循环变量

145 for (i = 1; i <= 9; i++) //外层循环

146 {

147 for (j = 1; j <= i; j++) //内层循环

148 {

149 if (i > 4) //判断i的值是否大于4

150 {

151 goto end; //跳至标识为end的语句

152 }

153 printf(""); //输出

154 }

155 printf("\n"); //换行

156 }

157 end: return 0;

158 }

运行结果如图3-20所示。

![img](file:///C:\Users\M7510\AppData\Local\Temp\ksohtml12012\wps20.jpg)

图3-20 运行结果

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

*3、continue语句*

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

例3-13

1 #include<stdio.h>

2 int main()

3 {

4 int sum = 0; //定义变量sum,用于记住和

5 for (int i = 1; i <= 100; i++)

6 {

7 if (i % 2 == 0) //如果i是一个偶数,执行if语句中的代码

8 {

9 continue; //结束本次循环

10 }

11 sum += i; //实现sum和i的累加

12 }

13 printf("sum = %d\n", sum);

14 return 0;

15 }

运行结果如图3-21所示。

![img](file:///C:\Users\M7510\AppData\Local\Temp\ksohtml12012\wps21.jpg)

图3-21 运行结果

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

3.5 *本章小结*

本章首先介绍了程序的运行流程图,然后讲解了C语言中最基本的三种流程控制语句,包括顺序结构语句、选择结构语句和循环语句。

通过本章的学习,初学者应该能够熟练的运用if判断语句、switch判断语句、while循环语句、do-while循环语句以及for循环语句。掌握本章的内容就能够编写逻辑比较复杂的C语言程序并且有助于后面章节的学习。

posted @ 2020-09-26 19:22  江c  阅读(273)  评论(0)    收藏  举报