内容正文:
第五章循环结构
1
第五章循环结构
while循环结构
while循环结构的用法
for循环结构
break语句和continue语句
循环的嵌套
do-while循环结构
典型例题
循环的嵌套
解决复杂的问题时,需有条理地分析,先忽略细节,抓住关键,再由细节出发,得到规律,于是就有了循环的嵌套。
3
循环的嵌套
例5-14 分析下面程序的输出。
程序中for循环结构的循环体中又包含了一个for循环结构,形成了循环的嵌套。这个复杂的循环结构分析如表所示。
循环体中有3条语句,其中第2条又是一个是循环结构
4
循环控制 循环体 表达式3
i i<=5 printf
("第%d行:", i) for(j=1; j<=5; ++j){printf("%2c", '*'); } printf
("
"); ++i
循环控制 循环体 表达式3
j j<=5 printf("%2c",'*'); ++j
程序中for循环结构的循环体中又包含了一个for循环结构,形成了循环的嵌套。这个复杂的循环结构分析如表所示。
循环体中有3条语句,其中第2条又是一个是循环结构
5
循环控制 循环体 表达式3
i i<=5 printf
("第%d行:", i) for(j=1; j<=5; ++j){printf("%2c", '*'); } printf
("
"); ++i
循环控制 循环体 表达式3
j j<=5 printf("%2c",'*'); ++j
1 1-真 第1行: 1 1-真 • * 1→2 ↙ 1→2
2 1-真 •* 2→3
3 1-真 •* 3→4
4 1-真 •* 4→5
5 1-真 •* 5→6
6 0-假 × ×
2 1-真 第2行: 1 1-真 •* 1→2 ↙ 2→3
2 1-真 •* 2→3
3 1-真 •* 3→4
4 1-真 •* 4→5
5 1-真 •* 5→6
6 0-假 × ×
……
5 1-真 第5行: 1 1-真 •* 1→2 ↙ 5→6
2 1-真 •* 2→3
3 1-真 •* 3→4
4 1-真 •* 4→5
5 1-真 •* 5→6
6 0-假 × ×
6 0-假 × × ×
外层的for循环结构第1次执行时,
循环变量i的值为1,循环条件为真,循环体执行,第1条语句输出“第1行”,第2条语句也是循环结构,循环变量j由1到5每次自增1,其循环体执行5次,输出5个*号;第3条语句输出一个换行符,即回车。
第2次执行时,输出“第2行”,5个*号,一个换行符;
第5次执行时,输出“第5行”,5个*号,一个换行符;
第6次执行时,循环条件为假,退出循环结构。
因此,程序的输出结果如图所示。
内层的for循环结构重复输出了5个*号。
6
例5-15 用循环输出如下图形
若忽略细节,则图形共5行。
算法是:输出第1行;输出第2行;输出第3行;输出第4行;输出第5行。
“行”在重复,重复了5次。
循环变量i表示要输出的行号,从1到5,每次自增1,可以用下面的循环结构来实现上述过程。
for(i=1; i<=5; ++i)
{ //输出第i行 }
若忽略细节,则图形共5行。
算法是:输出第1行;输出第2行;输出第3行;输出第4行;输出第5行。
“行”在重复,重复了5次。
循环变量i表示要输出的行号,从1到5,每次自增1,可以用下面的循环结构来实现上述过程。
for(i=1; i<=5; ++i)
{ //输出第i行 }
循环体中不是输出具体的第1行,第3行,而是输出第i行。第i行什么样子呢?
7
输出第i行
具体分析每一行,然后得到第i行的规律。
第1行有1个“空格星号*”和1个换行符;第2行有2个“空格星号*”和1个换行符,……
第i行有i个“空格星号*”和1个换行符。
输出i个“空格星号*”时,用循环实现。循环变量j从1到i,每次自增1,则循环体将执行i次,每次输出一个“空格星号*”。
输出i个“空格星号*”的循环结构如下:
for(j=1; j<=i; ++j) printf(" *");
具体分析每一行,然后得到第i行的规律。
第1行有1个“空格星号*”和1个换行符;第2行有2个“空格星号*”和1个换行符,……
第i行有i个“空格星号*”和1个换行符。
输出i个“空格星号*”时,用循环实现。循环变量j从1到i,每次自增1,则循环体将执行i次,每次输出一个“空格星号*”。
输出i个“空格星号*”的循环结构如下:
for(j=1; j<=i; ++j) printf(" *");
8