过程控制(3)--循环结构

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Fra Baidu bibliotek
scanf(“%lf”, &grade); while ( grade >= 0) { …… scanf (“%lf”, &grade); }

分析: 变量total:累加和 变量num:计数 编程实现 30

#include <stdio.h> int main(void) { int num; Enter grades: 67 88 73 54 82 -1 double grade, total; num = 0; total = 0; Grade average is 72.80 printf("Enter grades: "); scanf("%lf", &grade); /*输入第1个成绩*/ while ( grade >= 0) { /* 输入负数,循环结束 */ total = total + grade; num++; Enter grades: -1 scanf ("%lf", &grade); /*输入下1个成绩*/ Grade average is 0 } if(num != 0) printf("Grade average is %.2f\n", total/num); else printf(" Grade average is 0\n"); return 0; } 31
(2)算法分析
11
(3)程序编写【例4.12
#include<stdio.h> #include<math.h> int main() { int flag,denominator; double s,item,precision; printf("precision="); scanf("%lf",&precision); s=0; item=1; flag=1,denominator=1;
标志型循环: 求解最后一项已小 于一个输入精度时 的π值
求解要计算到第几 项计算结果能保证 小数点后4位 (3.1415)有效
5
1. 求解累加到n项时的π值

denominator
被累加项item的构成:item=flag*1.0/denominator 循环通项:s=s+item 改变分母: denominator = denominator +2 改变符号: flag=-flag
16
(3)程序编写【例4.13
#include<stdio.h> #include<math.h> int main() {int flag,denominator; long n; double s,item ;
sample04_15.cpp】
do { s=s+item; n++;
denominator = denominator +2;

调试
error04_05.cpp
14
3. 求解要计算到第几项计算结果能保证小数 点后4位(3.1415)有效(最少的项数)
问题分析 π值保证小数点后4位(3.1415)有效需要两个条件 来保证 1.浮点数不能判断等于3.1415,而是表示为计算的π 值与3.1415的差值的绝对值小于0.00001就代表到 达3.1415。 2.计算的π值应大于3.1415
9
2. 求解最后一项已小于一个输入精度时的π 值

问题分析 本任务要求当最后一项item的值达到一个精度例如 0.000001时,累加停止。循环控制的方式发生了变化,不 再是计数n次控制循环,循环的控制由一个变量item的值 来决定,当item的值大于等于精度,执行循环,当item的 值小于精度,循环结束。这种由一个循环变量的值来控制 的循环结构称为标志型循环,item为标志变量。
b=number%10 s=s+b
s=0
27
其他与取位算法有关

输入一个正整数,求
计算其中a的个数:20221中有3个2
逆序输出每一位数 逆序数 正序输出每一位数 输出100-400之间的水仙花数

是否为水仙花数:
一个小于等于三位数的整数,每一位的立方和就是数本身 四位数的整数,它的每个位上的数字的4次幂之和等于它 本身
12
While循环
while语句的基本格式 while(条件表达式) { 循环体语句; } 使用while语句的一般形式 循环控制变量初值e1 while(判终值e2) { 循环通项 改变循环控制变量的值e3 }
13
(4)运行调试

运行示例
precision=0.0001 pi=3.14139265359179 precision=0.000000001 pi=3.14159265158926

课堂练习
从键盘输入一批学生的成绩,计算平均分。 要求两种情况: 1、输入n个学生 2、学生数未知,当输入一个结束标志(-1) 结束

29
学生数未知循环 控制分析:

循环控制变量 grade 初值: 键盘输入第一个成绩 终值: grade<0(终止) 改变循环变量: 再次键盘输入
flag=-flag; item=flag*1.0/denominator; }while (!(fabs(4*s3.1415)<0.00001&&4*s>3.1415));
s=0; n=0; item=1; flag=1,denominator=1;
printf("pi=%16.14f\n",4*s); printf("n=%d\n",n); return 0; }
7
(3)代码实现
sample04_13.cpp
#include<stdio.h> int main() { int n,i,flag,denominator; double s,item; printf("n="); scanf("%d",&n); //变量赋初值 s=0; flag=1; denominator=1; for(i=1;i<=n;i++){ //计算累加项item,并累加到s item=flag*1.0/denominator; s=s+item; //为下一次累加改变分母 denominator及符号位flag denominator = denominator +2; flag=-flag; } printf("pi=%16.14f\n",4*s); return 0;}
sample04_14.cpp】
while(fabs(item)>=precision){ s=s+item; denominator = denominator +2; flag=-flag; item=flag*1.0/denominator; } s=s+item; printf("pi=%16.14f\n",4*s); return 0;}
10
标志型循环结构的构建方式 1.标志变量的初值 item=1 2.标志变量的终值 fabs(item)<precision(结束) 1.输入精度precision 3.改变标志变量的值 2.s=0 item=flag*1.0/denominator 3.item=1,flag=1, denominator=1 4.循环当item的绝对值大于等于precision 4.1 s=s+item 4.2 denominator = denominator +2 4.3 flag=-flag 4.4 item=flag*1.0/denominator 5. s=s+item //把最后一项小于精度的item累加到s 6.输出π值:4*s
计数型循环程序设计

循环体
重复操作

循环控制结构—计数 变量
计数变量的初值
计数变量的终值
步长
22
示例:累和累积问题
1+2+……+n sample04_16.cpp a+aa+……+a..aaa sample04_17.cpp n! sample04_18.cpp Xn sample04_19.cpp
6

(2)算法设计
【算法】 1.输入n 2.和变量赋初值s=0 3.符号位赋初值 flag=1, 分母赋初值denominator=1 4.循环i从1到n,步长1 4.1计算累加项item item=flag*1.0/denominator 4.2累加到s s=s+item 4.3改变分母denominator = denominator +2 4.4改变符号位 flag=-flag 5.输出π值:4*s
8
(4)运行示例
从运算的结果可以看到,累加的项目越多,π值越精确,但 当n到达一定的规模,double类型就不足以表示数据的精度 而崩溃了。所以使用计算机计算π值还需设计能够支持计算 精度的数据类型和算法。
n=500 pi=3.13959265558979 n=500000 pi=3.14159065358969 n=5000000000 pi=3.14159265217023 n=50000000000 pi=0.00000000000000

19
一、计数和标志循环的构建 二、循环语句(while、for、do…while) 三、break和continue语句 四、循环的嵌套结构
知识精讲
20
一、计数和标志循环的构建

计数型循环
指定次数的循环控制结构。
标志型循环
由标志变量的值决定循环是否执行,循环体中
修改标志变量的值。
21

sum=0;(累加和变量)
(累乘积变量) item各项的设定
product=1;
25
标志型循环程序设计

特点:
循环次数在运行前是不

循环体
重复操作
缺定的 根据某个变量的值确定 循环是否终止 该变量为标志型循环控 制变量
循环控制结构—标志 变量
标志变量的初值 标志变量的终值 改变标志变量的值
17
do…while循环
do...while语句的基本格式 do { 使用 do...while 语句的一般 形式 循环控制变量初值e1 do { 循环通项 改变循环控制变量的值e3 } while(判终值e2);
循环体语句; } while(条件表达式);
18
(4)运行示例
pi=3.14150000952847 n=10794

a+aa+……+a..aaa循环分析
循环控制要素 通项 初值
循环i从1到n 步长1
item=item*10+a sum=sum+item
item=0 sum=0
23
课堂练习

求1+1/2+1/3+……+ 1/n
24
常见编程错误
for(i=0,i<n,i++)sum+=i; for(i=0;i<n;i++);sum+=i; 初值设定
26
示例:对一个整数的各位求和
sample04_20.cpp

方法
取位:number%10
截位:number/10



321%10=>1 321/10=>32 32%10=>2 32/10=>3 3%10=>3 3/10=0
初值
循环控制要素
通项
键盘读入number 循环当number>0 number/=10
二、循环语句比较(while、for 、do…while)
计数型循环可以用任何一种语句实现,for 语句最适合,结构清晰 标志型循环中如果标志量的获取和改变比 较复杂,不适合for语句 第一次可以不要判读循环条件的可以使用 do…while语句,第一次就有可能不执行的 不能用do…while语句,可以用while语句。
15
(2)算法分析
1.s=0 2.n=0 //项数计数变量n 3.item=1,flag=1, denominator=1 4.循环当π值能保证小数点后4位(3.1415) 4.1 s=s+item 4.2 n增1 4.3 denominator = denominator +2 4.4 flag=-flag 4.5 item=flag*1.0/denominator 5.输出π值:4*s和n值
第4讲过程控制(3) -循环结构
1
学习路线图
2
任务3 探索π的求解
引导实验
3
任务3 探索π的求解

4
任务解决

循环结构包括循环控制三要素和循环体,循环控制三要素决定循环控制 的方法。 循环结构问题,首先要理解循环控制的方法,主要包括:计数型循环控 制和标志型循环控制。
计数型循环: 求解累加到n项时 的π值
相关文档
最新文档