第四部分循环结构教学课件.ppt

上传人:本田雅阁 文档编号:3136062 上传时间:2019-07-15 格式:PPT 页数:40 大小:407.53KB
返回 下载 相关 举报
第四部分循环结构教学课件.ppt_第1页
第1页 / 共40页
第四部分循环结构教学课件.ppt_第2页
第2页 / 共40页
第四部分循环结构教学课件.ppt_第3页
第3页 / 共40页
第四部分循环结构教学课件.ppt_第4页
第4页 / 共40页
第四部分循环结构教学课件.ppt_第5页
第5页 / 共40页
点击查看更多>>
资源描述

《第四部分循环结构教学课件.ppt》由会员分享,可在线阅读,更多相关《第四部分循环结构教学课件.ppt(40页珍藏版)》请在三一文库上搜索。

1、第 四 章 循环结构,4.1 用格里高利公式求的近似值 (while语句) 4.2 统计一个整数的位数 (do-while语句) 4.3 判断素数 (break 和 continue 语句) 4.4 求1!+2!+.+100! (循环嵌套) 4.5 循环结构程序设计,本章要点,什么是循环? 为什么要使用循环? 如何实现循环? 实现循环时,如何确定循环条件和循环体? 怎样使用while 和do-while语句实现次数不确定的循环? while 和do-while语句有什么不同? 如何使用break语句处理多循环条件? 如何实现多重循环?,4.1 用格里高利公式求的近似值,例4-1使用格里高利公式

2、求的近似值,要求精确到最后一项的绝对值小于104。 4.1.1 程序解析 4.1.2 while语句,#include 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; pri

3、ntf ( “pi = %fn”, pi); return 0; ,4.1.1 程序解析求的近似值,pi = 3.141613,item=0.0 ?,fabs(item) 0.0001,4.1.2 while 语句,while (条件) 循环体语句;,循环条件,循环体,一条语句,while 语句和for语句 都是在循环前先判断条件,while 语句说明,表达式1; while (表达式2) for的循环体语句; 表达式3; ,把for语句改写成while语句 for(表达式1; 表达式2; 表达式3) 循环体语句,while 和 for 的比较,for (i = 1; i = 10; i+)

4、sum = sum + i;,i = 1; 循环变量赋初值 while (i = 10) 循环条件 sum = sum + i; i+; 循环变量的改变 ,循环体,例4-2 从键盘输入一批学生的成绩,计算平均成绩,并统计不及格学生的人数。 分析: 求累加和 确定循环条件 不知道输入数据的个数,无法事先确定循环次数 用一个特殊的数据作为正常输入数据的结束标志,比如选用一个负数作为结束标志。 循环的三种常见的控制方式(计数控制的循环、条件控制的循环、标记控制的循环),#include Int main(void) int num; double grade, total; num = 0; tot

5、al = 0; printf(“Enter grades: n“); scanf(“%lf“, ,Enter grades: 67 88 73 54 82 -1 Grade average is 72.80 Number of failures is 1,4.2 统计一个整数的位数,例4-3 从键盘读入一个整数,统计该数的位数。 4.2.1 程序解析 4.2.2 do - while语句,int main(void) int count, number; count = 0; printf(“Enter a number: “); scanf (“%d“, ,4.2.1 程序解析统计一个整数的

6、位数,Enter a number: 12534 It contains 5 digits.,Enter a number: -99 It contains 2 digits.,Enter a number: 0 It contains 1 digits.,while (number != 0) number = number / 10; count +; ,4.2.2 do - while 语句,do 循环体语句 while (表达式),先循环,后判断,真,假,表达式,循环体语句,do-while的下一条语句,while 是先判别条件,再决定是否循环; do-while 是先至少循环一次,然

7、后再根据循环的结果决定是否继续循环。,while 和 do-while 的比较,4.3 判断素数,例4-4 输入一个正整数m,判断它是否为素数。 4.3.1 程序解析 4.3.2 break语句 和continue语句,4.3.1 程序解析判断素数,算法:除了1和m,不能被其它数整除。 设 i 取值 2, m-1 如果m不能被该区间上的任何一个数整除,即对每个i,m%i 都不为0,则m是素数 只要找到一个i,使m%i为0,则m肯定不是素数 m %2 %3 %4 %5 %(m-1) 不是素数 | =0 =0 是素数 & !=0 !=0 m不可能被大于 m/2 的数整除 i 取值 2, m-1 、

8、 2, m/2 、 2, ,for(i = 2; i m/2) printf(“yesn“) else printf(“non”);,int main(void) int i, m; printf(“Enter a number: “); scanf (“%d“, ,例4-4源程序判断素数,Enter a number: 9 No,Enter a number: 11 11 is a prime number!,for (i = 2; i = m/2; i+) if (m % i = 0) printf(“No!n“); else printf(“%d is a prime number! n

9、“, m);,循环条件? 循环的结束条件?,4.3.2 break 语句,while(exp) 语句1 if (expb) break; 语句2 ,for (i = 2; i m/2 ) printf(“Yes“); else printf(“No!n“);,当循环有多个出口时: 表示循环条件 区分结束条件,for(i = 2; i = m/2; i+) if(m%i = 0) printf(“No!n“); break; printf(“Yes“);,continue 语句,while(exp) 语句1 if (expb) continue; 语句2 ,跳过continue后面的语句,继续下

10、一次循环,break 和 continue,#include “stdio.h“ int main(void) char c; int i; for (i = 0; i 10; i+) c = getchar(); if (c = n) break; putchar(c); ,abc efgh 123 ,abc,abcefgh1,continue;,break 和 continue,例如 以下程序段输出100200之间所有能被3整除的数。 for(i = 100;i = 200;i+) if( i % 3 != 0 ) continue; printf(“%d ”,i); ,for(i = 1

11、00;i = 200;i+) if(i % 3 = 0) printf(“%d ”,i);,例4-5 简单的猜数游戏。最多允许猜5次。,# include int main(void) int mynumber = 38; /* 计算机指定被猜的数 */ int count = 0,yournumber; for(count = 1;count mynumber ) printf(“Sorry! your number is bigger than my number! n“); else printf(“Sorry! your number is smaller than my number

12、! n“); printf(“Game is over!n“); return 0; ,4.4 求1! + 2! + . + 100!,for (i = 1; i = 100; i+) item = i ! sum = sum + item; 4.4.1 程序解析 调用函数 fact(i) 计算 i 的阶乘 4.4.2 嵌套循环 用循环计算 i 的阶乘,#include double fact (int n); int main(void) int i; double sum; sum = 0; for(i = 1; i = 100; i+ ) sum = sum + fact (i); pr

13、intf(“1! + 2! + 3! + + 100! = %en“, sum); return 0; double fact (int n) int i; double result = 1; for (i = 1; i = n; i+) result = result * i ; return result ; ,4.4.1 程序解析 求1! + 2! + . + 100!,1! + 2! + + 100! = 9.426900e+157,4.4.2 嵌套循环,for (i = 1; i = 100; i+) item = i ! sum = sum + item; ,for(i = 1;

14、 i = 100; i+) item = 1; for (j = 1; j = i; j+) item = item * j; sum = sum + item; ,#include int main(void) int i, j; double item, sum; /* item 存放阶乘 */ sum = 0; for(i = 1; i = 100; i+) item = 1; /* 每次求阶乘都从1开始 */ for (j = 1; j = i; j+) /* 内层循环算出 item = i! */ item = item * j; sum = sum + item; printf(“

15、1! + 2! + 3! + + 100! = %en“, sum); ,例4-7 源程序,内层循环的初始化,for(i = 1; i = 100; i+) item = 1; for (j = 1; j = i; j+) item = item * j; sum = sum + item; ,求1! + 2! + . + 100!,item = 1; for(i = 1; i = 100; i+) for (j = 1; j = i; j+) item = item * j; sum = sum + item; ,求1! + 1!*2! + + 1!*2!*100!,分析嵌套循环的执行过程,

16、for(i = 1; i = 100; i+) item = 1; for (j = 1; j = i; j+) item = item * j; sum = sum + item; ,外层循环变量 i 的每个值 内层循环变量 j 变化一个轮次; 内外层循环变量不能相同 分别用 i 和 j,for (i = 1; i = 100; i+) for (j = 1; j = i; j+) printf (“%d %dn“, i, j );,4.5 循环结构程序设计,循环程序的实现要点: 归纳出哪些操作需要反复执行? 循环体 这些操作在什么情况下重复执行? 循环条件 选用合适的循环语句 for wh

17、ile do-while 循环具体实现时考虑(循环条件): 事先给定循环次数,首选for 通过其他条件控制循环,考虑while或do-while,循环语句的选择,if(循环次数已知) 使用for语句 else /* 循环次数未知 */ if (循环条件在进入循环时明确) 使用while语句 else /* 循环条件需要在循环体中明确 */ 使用do-while语句,#include int main(void) int i, mark, max, n; printf(“Enter n: “); scanf (“%d“, ,例4-8 输入一批学生的成绩,求最高分(for),max,mark,En

18、ter n: 5 Enter 5 maks:67 88 73 54 82 Max = 88,Enter n: 0,#include int main(void) int mark, max; printf(“Enter marks:“); scanf (“%d“, ,例4-8 输入一批学生的成绩,求最高分(while),Enter marks:67 88 73 54 82 -1 Max = 88,Enter marks:-1,#include int main(void) int mark, max; max = -1; /* 给max赋一个小初值 */ printf(“Enter marks

19、: “); do scanf (“%d“, ,例4-8 输入一批学生的成绩,求最高分(do-while),Enter marks: 67 88 73 54 82 -1 Max = 88,Enter marks: -1,例4-9 逆序问题。将一个正整数逆序输出,确定:循环条件和循环体(循环不变式),12345 5 4 3 2 1 12345 % 10 = 5 12345 / 10 = 1234 1234 % 10 = 4 1234 / 10 = 123 123 % 10 = 3 123 / 10 = 12 12 % 10 = 2 12 / 10 = 1 1 % 10 = 1 1 / 10 = 0

20、 结束,循环不变式 x%10 x=x/10 循环结束条件 x=0,scanf( “%d”, ,用do-while实现?,例4-10 求100以内的全部素数,每行输出10个,for (m = 2; m = 100; m+) if (m是素数) printf( “%d“, m);,n = sqrt(m); for(i = 2; i n) printf(“yesn“) else printf(“non”);,for (m = 2; m n) printf(“%d“, m) ,例4-10 源程序,#include #include int main(void) int count, i, m, n;

21、count = 0; for (m = 2; m n) /* 如果m是素数 */ printf(“%6d“, m); count+; /* 每行10个的处理 */ if (count %10 = 0) printf(“n”); ,2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97,例4-11 求Fibonacci序列:1,1,2,3,5,8,13,1, 1, 2, 3, 5, 8, 13, x1 x2 x x1 x2 x,x1 = x2 = 1; x = x1 + x2; x1 = x2; x2 = x;

22、,x1 = 1; x2 = 1; printf (“%6d%6d“, x1, x2 ); /* 输出头两项 */ for (i = 1; i = 8; i+) /* 循环输出后8项 */ x = x1 + x2; /* 计算新项 */ printf(“%6d“, x); x1 = x2; /* 更新x1和x2 */ x2 = x; ,例4-12古典算术问题搬砖头,某地需要搬运砖块,已知男人一人搬3块,女人一人搬2块,小孩两人搬一块。 问用45人正好搬45块砖,有多少种搬法?,for (men = 0; men = 45; men+) for (women = 0; women = 45; wo

23、men+) for (child = 0; child = 45; child+) if (men+women+child=45) ,例4-12 源程序(2),for (men = 0; men = 15; men+) for (women = 0; women = 22; women+) child = 45 women men; if (men * 3 + women * 2 + child * 0.5 = 45) printf(“men=%d women=%d child=%dn“, men, women, child); ,for (men = 0; men = 45; men+) f

24、or (women = 0; women = 45; women+) for (child = 0; child = 45; child+) if (men+women+child=45) ,比较循环次数,本章总结,循环结构以及循环执行机制: while语句 do-while语句 for语句 break语句与continue语句 嵌套循环的使用 循环结构程序的综合设计 几个常用的算法,正确理解 while语句和 do-while 语句的执行机制; 掌握 break 和 continue 语句的 作用方式; 掌握嵌套循环的执行机制与设计 方法; 能合理运用循环语句熟练编写循 环结构类的程序; 熟练掌握几个 常用的算法;,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1