没有合适的资源?快使用搜索试试~ 我知道了~
04 教师用书_第4章_循环结构 2017021
需积分: 0 0 下载量 31 浏览量
2022-08-03
15:40:26
上传
评论
收藏 2.03MB PDF 举报
温馨提示
试读
40页
第 4 章 循环结构4.1 教学要点本章通过典型程序解析,介绍循环结构程序设计的基本思想和实现方法,以及典型算法,使学生理解 C 语言所提供的三种循环语句即 f
资源详情
资源评论
资源推荐
第 4 章 循环结构
4.1 教学要点
本章通过典型程序解析,介绍循环结构程序设计的基本思想和实现方法,以及典型算法,
使学生理解 C 语言所提供的三种循环语句即 for、while 和 do-while 语句的执行机制,并能
综合运用编写循环结构类的程序。
4.1 节通过引例“用格里高利公式求
π
的近似值”和示例“统计学生成绩”,针对没有
显性给出循环次数的情况(分别对比例 2-8 和例 3-3), 介绍如何确定循环条件,并引入 while
语句。教师在讲授时,应重点说明根据具体问题,确定循环条件和循环体的基本思路,并针
对 3 种常见的循环控制方式(计数控制、计算值控制和输入值控制),选择合适的循环语句
实现。还要介绍 while 语句的执行流程和使用方法,通过与 for 语句的比较,加深对循环语
句的理解,使学生能使用 for/while 语句进行循环程序设计。
4.2 节通过案例“统计一个整数的位数”, 详细介绍 do-while 语句的执行流程以及使用
方法,教师在讲授时,应详细介绍 do-while 语句的执行流程、循环条件以及循环体,并通
过与 for、while 语句的比较,加深理解 do-while 语句,使学生不仅能使用 do-while 语句进行
循环程序的设计,并且能合理选择循环语句。
4.3 节通过案例“判断素数”,详细介绍循环结构中 break 和 continue 语句的功能以及执
行流程,教师在讲授时,应详细介绍判断素数的算法以及 break 和 continue 语句的执行流程,
使学生能在循环结构中正确使用 break 和 continue 语句。
4.4 节通过案例“求 1!+2!+3!+…+100!”, 详 细 介 绍 嵌套循环的程序设计方法,教师在讲
授时,应详细嵌套循环的执行流程(过程),使学生能正确使用嵌套循环进行程序设计。
4.5 节综合介绍循环结构的程序设计,涉及到多个典型的算法,教师在讲授时,重点应
放在问题的分析、算法分析以及选择合理的循环语句上。使学生充分理解程序设计的思想与
方法。
讲授学时:4 学时,实验学时同讲授学时。
本章的知识能力结构图见图 4.1。
图 4.1 知识能力结构图
循环结构的
概念
循环体
循环条件
循环语句选择
while
语句
循环语句
do-while
语句
break 语句
continue
语句
典型算法
(循环嵌套
)
典型问题的
算法框架
能正确分析实际问题
能根据实际情况合理使用
能根据实际情况熟练编写程序
for 语句
4.2 讲稿
1
本章分 4 节。
2
提出本章的学习要点。
3
借助引例提出要解决的问题,并比较与例
2-8 的异同,简要分析,提供思路,聚焦在
如何确定循环条件。
可运行例 4-1 程序,让学生感受场景。
本节介绍为解决这个问题所编写的程序和
涉及到的语言知识。
4
对比分析例 2-8 源程序,共同点在于循环体
不变,差异在于本例并没有显性给出循环
次数,但给出了循环的结束条件。通过具
体分析示例的处理流程,提出问题:
(1)循环条件是什么?
(2)如何确保循环的初始条件为真?使循
环能正常启动?
(3)程序如何实现?
提醒:学习就是在已有的基础上(循环体
不变),从已知到未知(循环条件变化),
不断探索深化的过程,要扎实走好每一步。
4.1πwhile
4.2do-while
4.3break continue
4.41! + 2! + … + 100!
4.5
!
!
! whiledo-while
! whiledo-while
! break
!
4.1π
4-1 π
10
4
4.1.1
4.1.2 while
π
4
= 1 −
1
3
+
1
5
−
1
7
+…
4-1 π
10
4
4.1.1π
π
4
= 1 −
1
3
+
1
5
−
1
7
+…
2-81-1/3+1/5-… n
flag = 1;
denominator = 1;
sum = 0 ;
for (i = 1; i <= n; i++) {
item = flag * 1.0 / denominator;
sum = sum + item ;
flag = -flag;
denominator = denominator + 2;
}
|item| < 0.0001
|item| >= 0.0001
fabs(item) >= 0.0001
while (fabs(item) >= 0.0001)
item = 1;
5
展示、运行例 4-1 程序,并解读程序:
(1)程 序 运 行 过 程 :当 item 的值尚未足够
小的时候,计算 item,并累加至 pi,周而
复始,直到循环条件为假,即|item|已足够
小,不再满足其值>=0.0001。
提醒:循环结束时,最后一次累加至 pi 的
item 之值恰好小于 0.0001,满足题 目要求。
(2)简要介绍 while 语句的执行流程。
(3)说明变量初值、循环条件、循环体、
循环体语句先后顺序等之间的逻辑关系。
设问,以加深对循环条件的理解:
(1)若 item 初值为 0,运行结果?
(2)若循环条件由>=改成<,运行结果?
解答:循环初始条件为假,一次也不执行。
6
从例 4-1 分析得知,累 加 求 π 的 循 环 次数事
先不确定,需要在循环累加的过程中反复
测试 item 值来决定是否继续循环,即“当
条件成立时要做循环”,从而引出 while 语
句。
说明:
(1)while 语句的一般形式;
(2)while 语句的执行流程,强调先判断
条件;
(3)while 语句与 for 语句流程的比较。
7
继续对比 while 语句与 for 语句,重点说明
两者可互换。应针对具体问题,选择合适
的循环语句实现。
8
继续讨论 while 语句与 for 语句,举例说明
两者可互换,建议让学生练习。
强调 while 语句的循环体内必须有能改变
循环条件的语句(如 i++),以 避 免 死循 环 。
# include <math.h>
int main (void)
{
int denominator, flag;
double item, pi;
flag = 1; denominator = 1; item = 1.0; pi = 0;
while (fabs (item) >= 0.0001) {
item = flag * 1.0 / denominator;
pi = pi + item;
flag = -flag;
denominator = denominator + 2;
}
pi = pi * 4;
printf ("pi = %f\n", pi);
return 0;
}
4-1π
pi = 3.141613
item = 0.0 ?
fabs (item) < 0.0001?
4.1.2 while
while (
while
while for
while
1
while (2) {
for
3
}
for (123
for
while
while for
sum = 0;
for (i = 1; i <= 10; i++){
sum = sum + i;
}
sum = 0;
i = 1; /*
*/
while (i <= 10){ /*
*/
sum = sum + i;
i++; /*
*/
}
9
例 4-2 介绍如何根据输入值确定循环条件。
可通过运行例 4-2 程序,让学生感受场景
(程序运行停不下来,无法结束)。
对比分析例 3-3 源程序,共同点在于循环体
基本不变,差异在于,本例同样没有显性
给出循环次数(与例 4-1 相似),问题也同
样聚焦在如何确定循环条件。
10
通过用一个特殊的值作为正常输入数据的
结束标志,解决系列输入数据何时结束的
问题,这也是解决此类问题的常用方法。
即给出循环的结束条件,进而确定循环条
件。
再次提醒:
如果题目描述的是循环的结束条件,必须
将其转换为循环条件。这是 C 语言中循环
语句的语法要求。
11
具体分析示例的处理流程,在例 3-3 源程序
上修改,边修改边运行,渐进式提出问题:
(1)循环条件是什么?已解决
(2)如何确保循环的初始条件为真?使循
环能正常启动?正常运转?
如果参照例 4-1,while 前 grade 赋值 1(>=0
皆可),循环正常启动,但伪数据也累加至
total。原 因 在 于 输 入 的 数 据 先 参 加 运 算 ,再
判断其值是否满足循环条件。例如:
输入 90 50 -2,total 值:138(90+50-2)
输入 -1,total 值:-1
解答:将 while 循环体的输入语句移到最
后,并在 while 前输入第 1 个数。
(3)如何求平均值?增加变量 num 计数
12
展示、运行程序,分析程序结构。
设问:
(1)为什么 while 循环前要先输入第一个
数据?
(2)循环体中语句的先后顺序可以任意调
整吗?
(3)循 环 结 束 后 ,为 什 么 要 用 if 语句判断?
3-3 nn
total = 0;
count = 0;
for (i = 1; i <= n; i++){
scanf ("%lf", &grade);
total = total + grade;
if (grade < 60){
count++;}
}
-
!
"
"
grade < 0
grade >= 0
-
total = 0;
count = 0;
for (i = 1; i <= n; i++){
scanf ("%lf", &grade);
total = total + grade;
if (grade < 60){
count++;}
}
total = 0;
count = 0;
while (grade >= 0) {
total = total + grade;
if (grade < 60){
count++; }
}
scanf ("%lf", &grade);
scanf ("%lf", &grade);
num = 0;
num ++;
scanf ("%lf", &grade);
4-2-
include <stdio.h>
int main (void)
{ int count, num; double grade, total;
num = 0; total = 0; count=0;
printf ("Enter grades: \n");
scanf ("%lf", &grade); /*
while (grade >= 0) { /*
total = total + grade;
num++;
if (grade < 60){
count++; }
scanf ("%lf", &grade);
}
if(num != 0) {
printf("Grade average is %.2f\n", total/num);
printf("Number of failures is %d\n", count);
}
else{
printf("Grade average is 0\n");}
return 0;
}
Enter grades: 67 88 73 54 82 -1
Grade average is 72.80
Number of failures is 1
剩余39页未读,继续阅读
Friday永不为奴
- 粉丝: 16
- 资源: 317
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0