第六章循环控制结构
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
printf(“\n”);
}
}
2019/7/26
39/63
2.如何修改程序使其输出直角三角形?
#include <stdio.h> main() { int i,j,m;
scanf("%d",&m); for(i=1;i<=m;i++) {
for(j=1;j<=i;j++) printf("* ");
break; printf("n = %d\n", n); } printf("Program is over!\n"); }
2019/7/26
n ?-11?00? Please enter n:10↙ n = 10 Please enter n: -10↙ Program is over!
31/63
123645 << 66 tftraruulseee
n 23564
2019/7/26
sum ← sum + n
counter++ output sum
end
counter-controlled
计数器每次增1
使用了3个变量
6/63
2019/7/26
6.2计数控制的循环
counter ← initialValue
1!, 2!, 3!, … , n!
2019/7/26
24/63
【例6.5】输入两个整型数,计算并 输出两个整数的最大值
若用户不慎输入了非法字符,那么先清除输入缓冲区中 的内容,然后提示用户重新输入数据直到输入正确为止
scanf()返回值为正确读入的数据项数
2019/7/26 清除输入缓冲区中的错误数据
【例6.1】计算并输出1+2+3+…+n的值
循环次数已知,计数控制的循环
sum = 0的作用?
2019/7/26
14/63
【例6.1】计算并输出1+2+3+…+n的值
循环次数已知,计数控制的循环
2019/7/26
15/63
【例6.1】计算并输出1+2+3……+n的值
2019/7/26
循环条件第一次就为假(如 输入-1)时会怎样?
2019/7/26
n ?-12312?00?
Please enter n:10↙ n = 10 Please enter n: -10↙ Please enter n:20↙ n = 20 Please enter n: -20↙ Please enter n:30↙ n = 30 Program is over!
【例6.1】计算并输出1+2+3+…+n的值
如何减少循环的次数?
2019/7/26
20/63
【例6.1】计算并输出1+2+3+…+n的值
2019/7/26
21/63
逗号运算符(Comma Operator)
表达式1, 表达式2, …, 表达式n
多数情况下,并不使用整个逗号表达式的值,更 常见的情况是要分别得到各表达式的值
【例6.14】 演示break与continue
#include <stdio.h> main() {
int i, n; for (i=1; i<=5; i++) {
printf("Please enter n:"); scanf("%d", &n); if (n < 0)
continue; printf("n = %d\n", n); } printf("Program is over!\n"); }
false test counter true
Step x Update counter
Step n
循环体 (Body of
Loop)
7/63
for循环语句
当型循环——Condition is tested first
计数循控环起制始—条—件Loop循i环s c结o束n条tro件lled by循a环c变o量un增t值er Syntax
16/63
【例6.1】计算并输出1+2+3+…+n的值
当
条 假件P 假
型
真
循 环
A
T20e19s/7t/26ing Condition First
17/63
【例6.1】计算并输出1+2+3+…+n的值
A
条 件P
真
直 到 假型 循 环
2019/7/26
Testing condition l1a8/s63t
主要用在循环语句中,同时对多个变量赋初值等
for (i = 1 , j = 100; i < j; i++, j--)
循环起始条件
2019/7/26
循环结束条件
循环变量增值
22/63
【例6.3】计算并输出 n! = 1 × 2 × 3 × … × n
2019/7/26
23/63
【例6.4】计算并输出
compound statement 被当作一条语句看待
} 2019/7/26
8/63
start
i ← 0, sum ← 0
false
i< 5
true
input n
sum←sum+ n
i++
output sum
2019/7/26
end
for循环语句
int i, sum, n; sum = 0; for (i = 0; i < 5; i++) {
——Loop is controlled by condition or a counter
语法
while (condition)
statement;
Or
while (condition)
{ statement;
No semicolon!!
statement;
}
2019/7/26
11/63
do-while循环语句
Break?退出一层 循环或switch
2019/7/26
Continue?中断此次
循环,开始下一次 30/63
【例6.14】 演示break与continue
#include <stdio.h> main() {
int i, n; for (i=1; i<=5; i++) {
printf("Please enter n:"); scanf("%d", &n); if (n < 0)
直到型循环——Statements in the loop are executed first (at least once), and condition is tested last
条件或计数控制
—— Loop is controlled by condition or a counter
25/63
【例6.2】输入数据,显示每次累加 的结果,直到输入0时为止
循环次数未知,标记控制的循环
2019/7/26
标记值(Sentinel Value)26/63
【例6.2】输入数据,显示每次累加 的结果,直到输入0时为止
循环次数未知,标记控制的循环
2019/7/26
27/63
选择三种循环的一般原则
for (initial value ; condition; update counter)
statement;
循环变量控制循环次
Or
数,不要在循环体内 改变这个变量的值
for (initial value ; condition; update counter)
{
复合语句
statement; statement;
语法
do{ statement; statement;
Don’t forget the
semicolon!!
} while (condition) ;
statement;
2019/7/26
12/63
【例6.1】计算并输出1+2+3+…+n的值
循环次数已知,计数控制的循环
2019/7/26
13/63
利用前项 计算后项
2019/7/26
36/63
【例6.9】输入n值,计算并输出
1! + 2! + 3! + … + n!
每次单独计算 累加项
2019/7/26
37/63
使用嵌套循环的注意事项
使用复合语句,以保证逻辑上的正确性 – 即用一对花括号将各层循环体语句括起来
内层和外层循环控制变量不能同名,以免造 成混乱
32/63
goto语句与语句标号
语句标号(Label)举例
error:
goto语句举例
goto error;
一般形式
2019/7/26
33/63
用if — goto构成循环
结构形式:
语句标号:if (表达式) { 语句/语句组
goto 语句标号; }
kk: if(a>b) { a=a-2; goto kk; }
如果循环次数已知,计数控制的循环 – 用for
如果循环次数未知,条件控制的循环 – 用while
如果循环体至少要执行一次 – 用do-while
这只是“一般”原则,不是“原则”
2019/7/26
28/63
6.5流程的转移控制
转移控制语句——goto语句、break和 continue语句
功能:无条件转去执行语句标号所指语句行。
此结构构成的是“当型”循环。
2019/7/26
34/63
Exit() 函数
exit(0) 作用是终止整个程序的执行,强制返回操作系统 调用该函数需要嵌入头文件<stdlib.h>
2019/7/26
35/63
【例6.9】输入n值,计算并输出
1! + 2! + 3! + … + n!
printf("\n"); } }
* ** *** **** *****
2019/7/26
40/63
3.如何修改程序使其输出正三角形?
* ** *** **** *****
注意
在for和while语句之后一般没有分号 有分号表示循环体就是分号之前的内容
– 空语句——表示循环体内什么都不做
while (i < 100); i++;
– 死循环
for (i = 0; i < 100; i++); printf("%d", i);
– 用于延时
2019/7/26
19/63
break语句的作用:循环体中使用break语 句可以提前结束整个循环。
Continue 语 句 的 作 用 : 循 环 体 中 使 用 continue语句可以提前结束本次循环。
return语句
20标19/7/2准6 库函数exit()
29/63
6.5流程的转移控制
break语句 和 continue语句 – 对for、while、do-while循环进行内部手术
scanf(“%d”, &n); sum = sum + n; } printf(“%d”, sum);
9/63
6.3条件控制的循环
当
条 假件P 假
型
真
循
环
A
A
条 件P
真
直 到 型 假循 环
2019/7/26
10/63
while循环语句
当型循环——Condition is tested first 条件或计数控制
4/63
6.1循环控制结构与循环语句
如何对循环进行控制呢?
2019/7/26
5/63
6.2计数控制的循环 Assume input example: start 23456
counter ← 1, sum ← 0
counter<6 true
input n
false
counter sum
123465 12025940 102594 + 23456
第6章 循环控制结构
本章学习内容
计数控制的循环 条件控制的循环 for语句,while语句,do-while语句 continue语句,break语句 嵌套循环 程序调试与排错
2019/7/26
2/63
Example:
问题的提出
Draw a flowchart for the following problem: 读入5个整数,计算并显示它们的和.
使用了6个不同的变量
start Input n1 Input n2 Input n3
n1 2 n2 3 n3 4
input n4
n4 5
读入1000个整数,in计pu算t n并5 显示它们的n5和.? 6
sum ← n1+n2+n3+n4+n5
sum 20
output sum
2019/7/26
end
采用右缩进格式书写,以保证层次的清晰性
2019/7/26
38/63
例:输出图形
1.编程实现输出四行“*”号,每行输出5个
“*”号
*****
main()
*****
{ int i,j; for(i=1;i<=4;i++) {
***** *****
for(j=1;j<=5;j++)
printf(“* ”);
Input : 5 个整数n1, n2, n3, n4, n5 Output: n1, n2, n3, n4, n5的和 Input example: 2 3 4 5 6 Output example: 20
如何确定 程序的输 入和输出
呢?
2019/7/26
3/63
问题的提出
Assume input example: 23456