7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 }
case 1: case 2: case 3: case 4: case 5:
//当 week 满足值 1、2、3、4、5 中任意一个时,处理方式相同 printf(\今天是工作日\\n\break;
case 6: case 7: }
return 0;
//当 week 满足值 6、7 中任意一个时,处理方式相同 printf(\今天是休息日\\n\break;
运行结果如图3-12所示。
图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 (循环条件) { }
执行语句 ………
在上面的语法格式中,{}中的执行语句被称作循环体,循环体是否执行取决于循环条件。当循环条件
11
第3章 流程控制
为true时,循环体就会被执行。循环体执行完毕时会继续判断循环条件,如条件仍为true则会继续执行,直到循环条件为false时,整个循环过程才会结束。
while循环的执行流程如图3-13所示。
开始循环条件true执行语句false
图3-13 while循环的流程图
接下来通过while语句来实现1~4之间自然数的打印,如例3-7所示。
例3-7
1 #include
int x = 1; { }
return 0;
printf(\条件成立,打印x的值 x++; // x进行自增
//定义变量x,初始值为1
结束while (x <= 4) // 循环条件
运行结果如图3-14所示。
图3-14 while循环
例3-7中,x的初始值为1,在满足循环条件x <= 4的情况下,循环体会重复执行,打印x的值并让x进行自增。因此打印结果中x的值分别为1、2、3、4。值得注意的是,例3-7中的第8行代码用于在每次循环时改变变量x的值,直到循环条件不成立,如果没有这行代码,整个循环会进入无限循环的状态,永远不会结束。
3.4.2 do-while循环语句
do…while循环语句和while循环语句功能类似,二者的不同之处在于,while语句需要先判断循环条
12
件,然后根据判断结果来决定是否执行大括号中的代码,而do…while循环语句先要执行一次大括号内的代码再判断循环条件,其具体语法格式如下:
do {
执行语句 ………
} while(循环条件);
在上面的语法格式中,关键字do后面{}中的执行语句是循环体。do…while循环语句将循环条件放在了循环体的后面。这也就意味着,循环体会无条件执行一次,然后再根据循环条件来决定是否继续执行。
do…while循环的执行流程如图3-15所示。
开始执行语句true循环条件false结束
图3-15 do…while循环的执行流程
接下来使用do…while循环语句将例3-7进行改写,如例3-8所示。
例3-8
1 #include
int x = 1; do {
printf(\条件成立,打印x的值 x++; // x进行自增
//定义变量x,初始值为1
} while (x <= 4); // 循环条件 return 0;
运行结果如图3-16所示。
图3-16 do while实例
例3-8和例3-7的运行结果一致,这说明do …while循环和while循环能实现同样的功能。然而在程序运行过程中,这两种语句还是有差别的。如果循环条件在循环语句开始时就不成立,那么while循环的循环体一次都不会执行,而do…while循环的循环体还是会执行一次。若将例中的循环条件x<=4改为x < 1,
13
例3-8会打印x=1,而例3-7什么也不会打印。
第3章 流程控制
3.4.3 for循环语句
在前面的小节中分别讲解了while循环和do…while循环。在程序开发中,还经常会使用另一种循环语句,即for循环,它通常用于循环次数已知的情况,其具体语法格式如下:
for(初始化表达式; 循环条件; 操作表达式) { }
执行语句 ………
在上面的语法格式中,for关键字后面()中包括了初始化表达式、循环条件和操作表达式三部分内容,它们之间用“;”分隔,{}中的执行语句为循环体。
接下来分别用“①”表示初始化表达式、“②”表示循环条件、“③”表示操作表达式、“④”表示循环体,通过序号来具体分析for循环的执行流程。具体如下:
for(① ; ② ; ③) { }
第一步,执行①
第二步,执行②,如果判断结果为true,执行第三步,如果判断结果为false,执行第五步 第三步,执行④
第四步,执行③,然后继续执行第二步 第五步,退出循环
④
接下来通过一个案例对自然数1~4进行求和,如例3-9所示。
例3-9
1 #include
int sum = 0; //定义变量sum,用于记住累加的和 for (int i = 1; i <= 4; i++) //i的值会在1~4之间变化 { }
printf(\打印累加的和 return 0;
sum += i; //实现sum与i的累加
运行结果如图3-17所示。
图3-17 运行结果
例3-9中,变量i的初始值为1,在判断条件i<=4为true的情况下,会执行循环体sum+=i,执行完毕
14
后,会执行操作表达式i++,i的值变为2,然后继续进行条件判断,开始下一次循环,直到i=5时,条件i<=4为false,结束循环,执行for循环后面的代码,打印“sum=10”。
为了让初学者能熟悉整个for循环的执行过程,现将例3-9运行期间每次循环中变量sum和i的值通过表3-1罗列出来。
表3-1 sum和i循环中的值
循环次数 第一次 第二次 第三次 第四次 sum 1 3 6 10 1 2 3 4 i 3.4.4 循环嵌套
有时为了解决一个较为复杂的问题,需要在一个循环中再定义一个循环,这样的方式被称作循环嵌套。在C语言中,while、do…while、for循环语句都可以进行嵌套,并且它们之间也可以互相嵌套,这当中最常见的就是在for循环中嵌套for循环,具体语法格式如下:
for(初始化表达式; 循环条件; 操作表达式) { }
{
} ………
执行语句; ……… ………
for(初始化表达式; 循环条件; 操作表达式)
接下来通过for语句的循环嵌套来实现使用“*”打印直角三角形,如例3-10所示。
例3-10
1 #include
int i, j; //定义两个循环变量 for (i = 1; i <= 9; i++) //外层循环 { }
return 0;
for (j = 1; j <= i; j++) //内层循环 { }
printf(\
//换行
printf(\
//打印*
运行结果如图3-18所示。
15