循环嵌套结构的实现

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

22
do - while 语句 P60
do { 循环体语句 } while (表达式);
先执行循环体
循环体语句 假
表达式
后判断

do-while的下一条语句
23
while 和 do-while 的比较

while 是先判别条件,再决定是否循环; do-while 是先至少循环一次,然后再根据循 环的结果决定是否继续循环。
实例3 取位算法 sample22_17.cpp
从键盘读入一个整数,统计该数的位数。例 如,输入12534,输出5;输入99,输出2; 输入0,输出1。思路: 1.被10整除减少一位个位数,组成一个新数, 位数+1。 12534/10=1253 2.循环控制:每次被10整除后构造一个新数, 直到该数为0。1253/10、 125/10、 12/10、 1/10=0
scanf(―%lf‖, &grade); while ( grade >= 0) { …… scanf (―%lf‖, &grade); }

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

#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; } 16
第二讲 循环嵌套结构的实现
1
主要内容

模块化程序设计方法 while语句 do......while语句 循环嵌套结构的实现 复合嵌套结构的实现 break和continue 参考教材§4.1、§3.3.2、§3.3、§3.4、§3.5、§3.6 2


模块化程序设计方法 P84
21
程序解析——统计一个整数的位数
Enter a number: 12534 #include<stdio.h> int main(void) It contains 5 digits. { int count, number; Enter a number: -99 count = 0; It contains 2 digits. printf("Enter a number: "); scanf ("%d", &number) ; Enter a number: 0 if (number < 0) number = -number; It contains 1 digits. while do { (number != 0) { number==number number/ /10; 10; number Enter a number: 0 count ++; It contains 0 digits. }}while (number != 0); printf("It contains %d digits.\n", count); return 0; }

模块化设计思想是将系统进行分解成若干功能独 立的,能分别设计、编程和测试的模块。 实际上是一种“分而治之”的思想,把一个大任 务分为若干个子任务,每一个子任务相对简单。 在拿到一个程序模块以后,根据程序模块的功能 将它划分为若干个子模块,如果这些子模块的规 模还嫌大,还再可以进一步划分更小的模块。这 个过程采用自顶向下方法来实现。
while (i <= 10){ 循环条件 循 sum = sum + i; 环 i++; 循环变量的改变 体 }
11
标识性循环
特点: 循环次数在运行前是不缺定的 根据某个变量的值确定循环是否终止 该变量——标识性循环控制变量

12
标识性循环变量分析

标识性循环变量三要素 初值 终值 改变变量的值 item 1.0 fabs (item) < 0.0001(终止) item = flag * 1.0 / denominator;
}
19
思考

输入一个正整数,求
计算其中a的个数:20221中有3个2 逆序输出每一位数:12202 每一位数之和:7 正序输出每一位数

水仙花数:每一位的立方和就是数本身
输出100-400之间的水仙花数
20
do......while语句

第一次不验证循环条件,直接执行循环体 的语句
#include <stdio.h> #include <math.h> int main(void) 运行结果: { pi = 3.141793 int denominator, flag; double item, pi; flag = 1; denominator = 1 ; item = 1.0; pi = 0; while(fabs (item) >= 0.0001) { fabs(item)求:浮 点数item绝对值 item = flag * 1.0 / denominator; 小于10–4 pi = pi + item; flag = -flag; Denominator denominator = denominator +2; [dɪˈn ɔməˈne ɪtə] } pi = pi * 4; π/4=1-1/3+1/5-1/7… P87 printf ("pi = %f\n", pi); return 0; }
假 表达式 真 循环体语句
一条语句,分号结束
循环条件 循环体
while下一条语句
6
实例1

使用格里高利公式求π的近似值,要求 精确到最后一项的绝对值小于10–4。
1 1 1 程序解析 1
4 3 5 7

源自文库
while语句的使用
7
程序解析——求π的近似值sample22_15.cpp
29
#include <stdio.h> int main() {int n,i,j; //输入n printf("Input n:"); scanf("%d",&n); //循环i从1到n行 step 1 for(i=1;i<=n;i++) {
P87
main
while 语句说明
while 语句和for语句
都是在循环前先判断条件
把for语句改写成while语句
for(表达式1; 表达式2; 表达式3) 循环体语句 表达式1; while (表达式2) { for的循环体语句; 表达式3; }
10
while 和 for 的比较
for (i = 1; i <= 10; i++) sum = sum + i; i = 1; 循环变量赋初值
3
模块化设计——自顶向下
划分子模块的原则
模块化程序设计特点:(1)~(6)P84 子模块一般不超过50行。 划分子模块时应注意模块的独立性,即: 一个模块完成一项功能,模块间耦合性愈 少愈好。 通过编写独立函数实现模块化程序设计

P2
5
while 语句 P57
while (表达式) 循环体语句;
表达式 真 循环体语句

循环体语句 假
表达式

while的下一条语句
do-while的下一条语句
24
如何选择合适的循环语句?P67
if(循环次数已知) 使用for语句 else /* 循环次数未知 */ if (循环条件在进入循环时明确) 使用while语句 else /* 循环条件需要在循环体中明确 */ 使用do-while语句
13

实例2
从键盘输入一批学生的成绩,计算平均分。 sample22_16.cpp 分析:

求累加和
确定循环条件
不知道输入数据的个数,无法事先确定循环次数 用一个特殊的数据作为正常输入数据的结束标志, 比如选用一个负数作为结束标志。

14
循环控制分析:

循环控制变量 grade 初值: 键盘输入第一个成绩 终值: grade<0(终止) 改变循环变量: 再次键盘输入
8
/* 定义一个函数 ,求Pi的近似值*/ 例4-3(a) 定义一个函数,实现用公式 #include <math.h> float SelPi(void) //求pi 1 1 1 1 { 4 3 5 7 int nSign=1; 求π 的值。 float fNumber=1.0,fTerm=1,fPi=0; while(fabs(fTerm)>1e-6) //绝对值小于10–6 { fPi=fPi+fTerm; fNumber=fNumber+2; nSign=-nSign; fTerm=nSign/fNumber; } return(4*fPi); } #include <stdio.h> 函编 void main() 数写 { 调 float SelPi(void);//函数声明 用 printf("pi=%.5f\n",SelPi()); }
25
循环嵌套结构

循环结构体里包含其它
顺序语句 选择语句


循环结构体里包含其它
循环结构
复合嵌套
选择结构和循环结构相互嵌套

参考§3.5
26
循环嵌套结构(一)画图形

i 画图形:n行 分析“行”号与“*”、空格个数关系 1 2 3 空格 星号
5
4 3
1
3 5

4
5
2
1 0
7
9 11
n=6
6
归纳
n-i
2*i-1
27
分析过程

循环i从1到n行,step 1
输出一行
输出一行: 1.输出空格
输出空格: 循环变量j从1到n-1 输出一个空格
输出星号: 循环变量j从1到2*i-1 输出一个星号
2.输出星号
3.回车
28
//循环i从1到n行 step 1 算法 sample02_06.cpp for(i=1;i<=n;i++) { 循环i从1到n行, step 1 // 1.输出空格 1.输出空格 for(j=1;j<=n-i;j++) 循环j从1到n-i printf(" "); 输出一个空格 // 2.输出星号 2.输出星号 循环j从1到2*i-1 for(j=1;j<=2*i-1;j++) 输出一个星号 printf(" *"); 3.回车 // 3.回车 写出循环语句 printf("\n"); 编程实现 }
17
循环控制分析

number!=0 while(number) { number/=10; count++; }
循环控制变量: number 计数:count 初值:number 终值:0 改变变量的值: number/=10
number=number/10
写出while语句!
编写程序实现!
18
/* 统计一个整数的位数 */ #include <stdio.h> int main(void) { int count, number;
Enter a number: 12534 It contains 5 digits.
/*count 记录整数number的位数 */
Enter a number: -99 count = 0; printf(―Enter a number:‖); It contains 2 digits. scanf ("%d", &number); if(number < 0) number = -number; /* 将输入的负数转换为正数 */ while(number != 0){ number = number / 10; /* 整除后减少一位个位数,组成一个新数 */ count ++; /* 位数加1 */ Enter a number: 0 } printf("It contains %d digits.\n", count); It contains 0 digits. return 0;
相关文档
最新文档