2023年《C语言程序设计》精品讲义第三章程序的控制结构循环结构while和dowhile1.pdf
学习必备 欢迎下载 C 语言程序设计课程教案表 授课题目 第三章 程序的控制结构(6)循环结构 while和 do-while 课时安排 2 授课时间 教学目的和要求 1掌握:while 语句、do-while 语句 2熟悉:三种循环语句 教学内容 1基本内容:(1)while 语句(2)do-while 语句(3)for 语句 2重点:三种循环语句 讲课进程和时间分配 1、问题引入:回顾 if 语句和 for 语句。(15 分钟)2、while 语句(35 分钟)(1)while 语句 格式:while(条件表达式)语句序列;执行过程:先计算 while 后面的表达式的值,如果其值为“真”则执行循环体,在执行完循环体后,再次计算 while 后面的表达式的值,如果其值为“真”则继续执行循环体,如果表达式的值为假,退出此循环结构。说明:1)循环体可以是一条简单的语句,也可以由多个语句组成。若是 2 个语句以上必须用 括起来,形成复合语句。2)在循环体中应有使循环趋向于结束的语句,即设置改变循环条件的语句。3)while 语句又称“当型”循环结构。其特点是先判断表达式的值,然后执行循环体中的语句。如果表达式的值一开始为假(值为 0),则直接执行循环体下面的语句。思考;如何求 1+2+3+4+100=?算法 1:直接写出算式(用变量 sum 存放和)sum=1+2+3+4+5+100 考虑:1+2+3+100 可以改写为:(1+2)+3)+100),sum=0;sum=sum+1;sum=sum+2;sum=sum+3;sum=sum+100;规律:每一步都是两个数相加,加数总是对上一步加数增加 1 后参与本次加法运算,被加数总是上一步加法运算的和。可以考虑用一个变量 i 存放加数,一个变量 sum 存放上一步的和。那么每一步都可以写成:sum+i 根据规律上述式子可以改成:sum=sum+i,i=i+1 sum=sum+i,i=i+1 sum=sum+i,i=i+1 规律:若 i 小于或等于 100 重复执行该算式 循环条件 循环体 学习必备 欢迎下载 算法 2:分析:设想用 sum 作为累加器,初值为 0,利用 sum+=i(i 依次取值为 1、2。100)此分析需要解决的 3 个问题:1)sum=0,i=1;2)每执行一次 sum+=i 后,i 增 1(i=i+1);3)判断如果 i 小于或等于 100,重新执行步骤(2),否则停止计算 main()int i,s=0;i=1;while(i=100)/*i=100 为循环条件*/s=s+i;i+;/*改变 i 的值*/printf(s=%d,s);运行结果:s=5050 说明:循环结构的三个术语:1、循环条件:循环结构中的条件表达式如 while(i=100)其中,i100 就是循环条件。2、循环体:在每个循环周期均要执行一次的语句序列。如 while 下用 括起来的语句序列。3、循环控制变量:能够决定控制条件是真是假的量。如 while(i 100)中的变量 i 要写出一个正确的循环结构,对控制变量要做三方面的工作:1、对循环控制变量赋初值。2、将循环控制变量写入正确的控制条件。3、对循环控制变量值的更新。使用 while 语句需要注意以下几点:while 语句的特点是先计算表达式的值,然后根据表达式的值决定是否执行循环体中的语句。因此,如果表达式的值一开始就为“假”,那么循环体一次也不执行。当循环体为多个语句组成,必须用 括起来,形成复合语句。在循环体中应有使循环趋于结束的语句,以避免“死循环”的发生。下列情况,退出 while 循环 条件表达式不成立(为零)循环体内遇 break,goto 题引入回顾语句和语句分钟语句分钟语句格式条件表达式语句序列执行出此循环结构说明循环体可以是一条简单的语句也可以由多个语句组成值然后执行循环体中的语句如果表达式的值一开始为假值为则直接执行学习必备 欢迎下载 无限循环:while(1)循环体;例:分析程序的运行结果#include main()int i=1,sum=0;while(i=100)printf(“i=%d,sum=%dn”,i,sum+=i);printf(“sum=%dn”,sum);结果:程序将不停的打印“i=1,sum=.”。无法正常终止的程序,称为“死循环”。结论:在 while 语句循环体中,一定要有能够对循环 控制条件产生影响的语句。避免出现“死循环”现象。例 显示 110 的平方#include main()int i=1;while(i=10)printf(%d*%d=%dn,i,i,i*i);i+;运行结果:1*1=1 2*2=4 3*3=9 4*4=16 5*5=25 6*6=36 7*7=49 8*8=64 9*9=81 10*10=100 练习:对下列程序段叙述正确的是 。int k=0;while(k=0)k=k-1;A)while 循环执行 10 次 B)无限循环 C)循环体一次也不被执行 D)循环体被执行一次 下面程序的运行结果是_。main()int s=0,i=1;题引入回顾语句和语句分钟语句分钟语句格式条件表达式语句序列执行出此循环结构说明循环体可以是一条简单的语句也可以由多个语句组成值然后执行循环体中的语句如果表达式的值一开始为假值为则直接执行学习必备 欢迎下载 while(s=10)s=s+i*i;i+;printf(“%d”,-i);A)4 B)3 C)5 D)6 对以下程序段,描述正确的是_。int x=0,s=0;while(!x!=0)s+=+x;printf(“%d”,s);A)运行程序段后输出 0 B)运行程序段后输出 1 C)程序段中的控制表达式是非法的 D)程序段循环无数次 下面程序段的运行结果是 。int n=0;while(n+7)a-;printf(“%d”,a);A)10 9 8 B)9 8 7 C)10 9 8 7 D)9 8 7 6 3、do while 语句(20 分钟)do while 语句的一般形式:格式:do 语句 while(表达式);功能:先执行语句,后判断表达式的值。执行过程:先执行一次指定的语句,然后判断表达式的值,当表达式的值为非零(“真”)时,返回重新执行该语句,如此反复,直到表达式的值等于 0 为止,此时循环结束。结构流程图如图 5-3所示。题引入回顾语句和语句分钟语句分钟语句格式条件表达式语句序列执行出此循环结构说明循环体可以是一条简单的语句也可以由多个语句组成值然后执行循环体中的语句如果表达式的值一开始为假值为则直接执行学习必备 欢迎下载 说明:1)循环体如果包含一个以上的语句,应该用花括弧括起来,以复合语句形式出现;2)do while 语句与 while 语句都是循环语句,但有区别,do while 语句先执行一次循环体,然后再回去判断条件是否成立,比 while 语句多执行一次。该语句用来实现“直到型”循环结构。例:计算 1+2+100=?main()int i=1,sum=0;do sum=sum+i;i+;while(i=100);printf(“the sum is:%d”,sum);例:求正整数 5 的阶乘 (即求 5!)。main()float fact=1.0;int i=1;do fact=fact*i;i+;while(i=5)printf(“the 5!is:%f”,fact);说明:do-while 循环,总是先执行一次循环体,然后再求表达式的值,因此,无论表达式是否为“真”,循环体至少执行一次。do-while 循环与 while 循环十分相似,它们的主要区别是:while 循环先判断循环条件再执行循环体,循环体可能一次也不执行。do-while 循环先执行循环体,再判断循环条件,循环体至少执行一次。其它:复合语句,避免死循环要求同 while 循环。练习:以下程序段的执行结果是()main()int y=4;doy-;while(-y);printf(“%d n”,y-);A)-1 B)1 C)2 D)0 以下程序段的执行结果是()main()int a=1;b=10;do 题引入回顾语句和语句分钟语句分钟语句格式条件表达式语句序列执行出此循环结构说明循环体可以是一条简单的语句也可以由多个语句组成值然后执行循环体中的语句如果表达式的值一开始为假值为则直接执行学习必备 欢迎下载 b-=a;a+;while(b-0);printf(“%d,%d n”,a,b);A)3,11 B)2,8 C)1,-1 D)4,9 以下说法正确的是()x=1;do x=x*x;while(!x);A)无限循环 B)循环执行两次 C)循环执行一次 D)有语法错误 4、总结(10 分钟)学过的三种循环语句 循环结构的基本组成部分(小结)循环变量、条件(状态)的初始化 循环变量、条件(状态)检查,以确认是否进行循环 循环变量、条件(状态)的修改,使循环趋于结束(循环体中)循环体处理的其它工作。2、三种循环的比较 循环变量初始化:while 和 do-while 循环,循环变量初始化应该在 while 和 do-while语句之前完成;而 for 循环,循环变量的初始化可以在表达式 1 中完成。循环条件:while 和 do-while 循环只在 while 后面指定循环条件;而 for 循环可以在表达式 2 中指定。循环变量修改使循环趋向结束:while 和 do-while 循环要在循环体内包含使循环趋于结束的操作;for 循环可以在表达式 3 中完成。for 循环可以省略循环体,将部分操作放到表达式 2,表达式 3 中,for 语句功能强大。while 和 for 循环先测试表达式,后执行循环体,而 do-while 是先执行循环体,再判断表达式。(所以 while,for 循环是典型的当型循环,而 do-while 循环可以看作是直到型循环)。三种基本循环结构一般可以相互替代,不能说哪种更加优越。具体使用哪一种结构依赖于程序的可读性和程序设计者个人程序设计的风格(偏好)对计数型的循环或确切知道循环次数的循环,用 for 比较合适,对其它不确定循环次数的循环,许多程序设计者喜好用 while/do-while 循环 5、多重循环(10 分钟)一个循环结构程序的循环体包含另一个循环。形如:for()for()例 5.12】求出 1-100 间的全部素数。提示:素数(质数)是除了 1 和它本身以外,不能够被其它数除尽的数,例 3,5,7,11while()while()while()for()题引入回顾语句和语句分钟语句分钟语句格式条件表达式语句序列执行出此循环结构说明循环体可以是一条简单的语句也可以由多个语句组成值然后执行循环体中的语句如果表达式的值一开始为假值为则直接执行学习必备 欢迎下载 等;判断一个素数:数 m 用 2m-1除,若都除不尽,则 m 是素数。程序代码:main()int m,n=0,i,k;for(m=1;m=100;m=m+2)if(n%10=0)printf(n);/*每行打印 10 个数*/for(i=2;i=m)/*若是素数应 i=m */printf(%5d,m);n+;讨论、思考题、作业:实验指导书习题 参考资料(含参考书、文献等):叶斌 陈世强.C 语言程序设计.北京:科学出版社 授课类型:理论课 讨论课 实验课 练习课 其他 教学方式:传统授课 双语 讨论 示教 指导 其他 教学资源:多媒体 模型 实物 挂图 音像 其他 题引入回顾语句和语句分钟语句分钟语句格式条件表达式语句序列执行出此循环结构说明循环体可以是一条简单的语句也可以由多个语句组成值然后执行循环体中的语句如果表达式的值一开始为假值为则直接执行