资源简介 第3章 面向对象(上)模块三 循环程序设计训练职业本科规划教材《C语言程序设计》教学设计课程名称: C语言程序设计授课年级: 2022年级授课学期: 2022学年第一学期教师姓名: XXX2021年10月22日课题名称 模块三 循环程序设计训练 计划学时 8学时内容分析 重复做某件事的现象称为“循环”。C程序的循环结构就是在满足循环条件时,重复执行某程序段,直到循环条件不满足为止,重复执行的程序段称为循环体。循环结构有两种形式:“当型”循环和“直到型”循环。教学目标及基本要求 (1) 掌握循环结构的构成及特点;(2) 掌握循环控制变量的使用;(3) 熟练掌握三种基本的循环控制语句;(4) 熟练掌握一重循环的构建方法,学会构建二重循环;(5) 了解goto语句构成的循环;教学重点 循环结构的构成、循环控制变量、循环控制语句教学难点 循环控制变量的使用、构建二重循环教学方式 教学采用教师课堂讲授与学生操作练习共同进行的一体化教学方式概念性知识点:提出为什么,将抽象具体化,配合教学PPT、案例辅助讲解。操作性知识点:提需求,并上机演示如何操作,重点内容总结经验及注意事项。学生操作练习:完成教材中的引例、做中学以及练中学案例,有能力的学生还可以完成教师额外布置的拓展练习题目。教学过程 第一、二学时(while语句)一、引例任务,提出需求(1)通过引力任务,引出本节所需知识内容。【引例任务】计算1+2+...+100。【程序代码】#include void main( ){ int s=0;//s用来存放累加和,初始值为0int i=1;//i用来存放累加次数,初值为1表示第一次相加 while(i<=100){ s=s+i;//把数i累加到s中 i++;//累加次数增1,i也是累加数 } printf(“s=%d\n”,s);}【程序运行】s=5050(2)明确学习方向。【知识点】循环控制变量:用于控制循环次数的变量,引例中的i为循环控制变量。循环体结构:由四个部分组成,包括初始化部分、判断部分、循环体部分和迭代部分。初始化部分:对循环控制变量的初始化,只做一次。引例中的“int i=1;”就是初始化部分,初值为1表示做第1 次循环。判断部分:判断循环控制变量的值是否超过边界值,若没有超过执行循环体,否则退出循环。引例中的“while(i<=100)”就是判断部分,若i的值小于等于100,执行循环体。循环体部分:被反复执行的部分。引例中的“s=s+i;”就是循环体,被反复执行了100次。迭代部分:用来修改循环控制变量的值。引例中的“i++;”就是迭代部分,每执行一次,循环控制变量i的值就更加接近边界值(100)。明确目标,完成任务用while语句实现的循环,其结构是当型循环结构,即先判断后执行循环体的循环结构。【做中学3-1】从键盘输入n(n≥0)的值,计算并输出“n!”的值。【程序代码】 #include void main( ){ int i=1,n;//初始化部分 double f=1; printf("请输入变量n的值:\n"); scanf("%d",&n); while(i<=n) { //判断部分 f=f*i;//循环体部分 i++;//迭代部分 } printf("%d!=%le",n,f);}1.while语句语法格式: while(表达式) 语句其中,“语句”表示while循环结构中不断被重复执行的语句行,称为循环体。若循环体内有多条语句,则用花括弧引起来。2.while循环结构的功能:只要循环条件表达式成立(条件表达式为真),则执行循环体,直到表达式不成立(表达式为假)时结束循环。循环体可以为空语句、简单语句或复合语句。三、归纳总结,布置课后作业 (1)回顾上课前的学习目标,对本节课知识点进行总结。 (2)扫描二维码查看相应资源,完成课后实训题。第三、四学时(do-while语句、for语句)一、引入学习任务(1)回顾上节课的内容,while语句。(2)明确学习方向。【知识点】do-while语句for语句【能力点】熟练掌握do-while语句熟练掌握for语句二、明确目标,完成任务1.do-while语句用do-while语句实现的循环,其结构是直到型循环结构。它的特点是先执行循环体,再判断循环条件是否成立,流程图如图3-4所示。【做中学3-2】用do-while语句完成〖引例任务〗。【程序代码】 #include void main( ){ int n=1,total=0; do { total=total+n; n++; } while(n<=100); printf("total=%d",total);}1)do-while语句语法格式: do{ 语句组 }while(条件表达式);2)执行过程:先执行循环体语句一次,再判别表达式的值,若为真(非0) ,则继续循环,否则终止循环。2.for语句在C语言程序设计中,for循环结构使用最为灵活,不仅适用于循环次数已知的情况,也适用于循环次数不能确定、只能给出循环结束条件的情况,它完全可以替代while语句。【做中学3-3】用for语句实现求1~100的累加和。【程序代码】#include void main(){int k, s=0; for(k=1;k<=100;k++) s+= k;printf("sum=%d\n",s);}1)for语句语法格式: for(表达式1;表达式2;表达式3) 循环体语句;2)执行过程:(1) 求解表达式1,初始化循环控制变量,只求一次。(2) 求解表达式2,判断表达式2的值是否成立。若表达式2的值为真,执行循环体语句。若表达式2的值为假,结束循环。执行for语句后面的一条语句。执行循环体。(3) 求解表达式3,修改循环控制变量的值。(4) 返回第2步继续执行。3)说明:3个表达式可以为任何表达式。(1) 表达式1为循环控制变量赋初值,通常为赋值表达式。(2) 表达式2通常为关系表达式或逻辑表达式,作为循环控制条件。(3) 表达式3为循环控制变量的修正表达式,通常也为赋值表达式。(4) 表达式1和表达式3一般为简单表达式,也可以为逗号表达式。(5) 3个表达式均可以省略或部分省略。但是用作分隔符的分号不能省略。省略了表达式1,表示不对循环控制变量赋初值。省略了表达式2,for循环便成了死循环。省略了表达式3,则不对循环控制变量进行修改,这时需在循环体中加入修改循环控制变量的语句,否则for循环也可能成为死循环。4)循环的比较:(1) 几种循环(while、do-while、for)一般情况下可互相替代。(2) for语句主要用于给定循环控制变量初值,步长增量以及循环次数确定的循环结构。(3) 循环次数及控制条件要在循环过程中才能确定的循环可用while或do-while语句。(4) 循环条件:while、do-while在while条件表达式中指定,for循环在“表达式2”中指定。(5) 循环变量的初始化:while、do-while在循环之前指定循环变量初值,for循环在“表达式1”中指定。(6) 判断循环条件的时机:while、for循环先判断循环条件,后执行循环体;do-while循环先执行循环体,后判断循环条件。 三、归纳总结,布置课后作业 (1)回顾上课前的学习目标,对本节课知识点进行总结。 (2)扫描二维码查看相应资源,完成课后作业。第五、六学时(循环嵌套、循环退出语句)引例任务,提出需求(1)回顾上节课的内容,do-while语句、for语句。(2)明确本节课学习方向。【知识点】循环嵌套break语句continue语句goto语句【能力点】掌握二重循环嵌套了解三重循环嵌套熟练应用break语句和continue语句掌握goto语句的使用二、明确目标,完成任务1.循环嵌套所谓循环嵌套即一个循环体内还包含另一个或几个完整的循环结构,当内嵌的循环中还嵌套其他循环时,成为多层循环。【做中学3-4】 打印下列形式的乘积表:1×1=12×1=2 2×2=43×1=3 3×2=1 3×3=9…………………9×1=9 9×2=18 9×3=27 …… 9×9=81【程序清单】#include void main(void){int i,j;for(i=1;i<=9;i++){ for(j=1;j<=i;j++) printf("%d*%d=%2d ",i,j,i*j);printf("\n");}} 123456while(){ … while(){…} …}do{ … do{…}while(); …}while();for(;;){ … for(;;){…} …}while(){ … do{…}while(); …}for(;;){ … while(){…} …}do{ … for (;;){…} …}while();三种循环结构(for、while和do while)可以互相嵌套,多重循环的使用与单一循环完全相同,但应特别注意内、外层循环条件的变化。2.break语句有时在循环的过程中,若满足一定的条件需要退出循环,可用break语句实现。【做中学3-5】求解当n 多少时1×2×…×n的积刚好大于1000。【程序代码】 #include void main(void){ float f=1; int n; for(n=1;;n++) { f*=n; if (f>1000) break;//积大于1000时,推出循环 } printf("n=%d,%d!=%f\n",n,n,f);}break语句的作用是跳出switch语句或跳出本层循环。break语句用于switch结构的情况在任务二已讲,用于for、while或do while循环语句中时,可使程序终止循环而执行循环体后面的语句,通常与if语句配合使用,用于提前退出循环。3. continue语句有时在循环的过程中,若满足一定的条件本次循环的剩余语句可以不执行,用来加速循环,可用continue语句实现。【做中学3-6】输出1~100之间的不能被5整除的数。【程序代码】#include void main(void){ int n; for (n=1;n<=100;n++){ if (n%5==0) continue; printf("%5d",n); }}continue语句的作用是跳过循环体中剩余的语句而强行执行下一次循环。只用于for、while、do-while等循环体中,常与if条件语句一起使用,用于加速循环。4.goto语句goto语句为无条件转向语句,它可以控制程序的转向操作。【做中学3-7】反复读取键盘字符,并显示在屏幕,直到读到回车符为止。【程序代码】#include void main(){char ch,ch1;printf("请输入一串字符:\n");output :ch=getchar();//定义了语句标号outputch1=getchar();//读取回车符printf("\n你输入的字符为:%c\n",ch);if (ch!='\n') goto output;}1)goto语句语法格式: goto 语句标号;2)说明:(1) 语句标号是按标识符规定书写的符号,放在某一语句行的前面,标号后加冒号。(2) 语句标号起标识语句的作用,与goto语句配合使用。执行goto语句后,程序将跳转到该标号处并执行其后的语句。(3) 标号必须与goto语句同处于一个函数中,但可以不在一个循环体中。(4) goto语句用途有两种:①与if语句一起构成循环;②从循环体内跳到循环体外。三、归纳总结,布置课后作业 (1)回顾上课前的学习目标,对本节课知识点进行总结.(2)扫描二维码查看相应资源,完成课后作业。第七、八学时(边学边练、实训题)一、上机练习【能力点】掌握循环结构的基本构成。掌握3种循环语句的执行过程。掌握循环语句的实际应用。掌握多重的构建和使用。掌握循环边界的定义。【练中学3-1】判断一个整数是否为“素数”。【程序代码】#include #include void main(){ int m,i,k; scanf(“%d”,&m); k=(int)sqrt(m); for (i=2;i<=k;i++) if (m%i==0) break; if (i>=k+1) printf(“%d是素数。\n”,m); else printf(“%d不是素数。\n”,m);}【练中学3-2】求100~200间的全部素数,并统计素数个数。【程序代码】#include “math.h”#include void main(){ int m,k,i,n=0; /*n用于累计素数的个数*/ for (m=101;m<=200;m=m+2) { k=(int)sqrt(m); for (i=2;i<=k;i++) if (m%i==0) break; if (i>=k+1) { printf(“%6d”,m); n=n+1; } if (n%10==0) printf(“\n”); } printf(“\n共有%d个素数\n”,n);}【练中学3-3】用以下公式计算π的值,直到最后一项的绝对值小于10-6为止。【程序代码】#include “math.h”#include void main(){ int s=1; float n=1.0f,t=1.0f,pi=0.0f; while((fabs(t))>=1e-6) { pi=pi+t;//PI的累加和 n=n+2;//后一项分母等于前一项分母加2 s= -s;//是分子,主要处理正负号 t=(float)(s)/n;//计算加项,无类型强制转换,t为0 } pi=pi*4; printf(“pi=%-10.6f”,pi);}【练中学3-4】求具有abcd=(ab+cd)2性质的四位数。如:3025=(30+25)2。【程序代码】#include void main(void){ int k,m,n; printf("以下的这些数满足条件:\n"); for(k=1000;k<10000;k++){ /*四位数k的取值范围1000一9999*/ n=k%100; /*截取N的后两位数存于n*/ m=k/100; /*截取N的前两位数存于m*/ if ((m+n)*(m+n)==k) /*判断k是否为符合条件*/ printf("%d ",k); }}【练中学3-5】求3000以内的全部亲密数。如果整数a的全部因子(包括1,不包括a本身)之和等于b;且整数b的全部因子(包括1,不包括b本身)之和等于a,则将整数a和b称为亲密数。。【程序代码】#include void main(void){ int a,i,b,n; printf("以下这些数是亲密数:\n"); for(a=1;a<3000;a++) { /*穷举3000以内的全部整数*/ b=0;for(i=1;i<=a/2;i++) if (a%i==0) b+=i; /*计算数a的各因子,将各因子之和存于b*/n=0;for(i=1;i<=b/2;i++) if (!(b%i)) n+=i; /*计算b的各因子,将各因子之和存于n*/if (n==a&&avoid main(){int x,y,z,j=0;printf("下面是百钱买百鸡的答案:\n");for(x=0;x<=20;x++) /*外层循环控制公鸡数n在0-20变化*/ for(y=0;y<=33;y++) { /*内层循环控制母鸡数y在0-33变化*/ z=100-x-y; /*内层循环控制下,雏鸡数受x、y值的制约*/ if(z%3==0&&5*x+3*y+z/3==100) /*验证取z值的合理性及得到的一组解的合理性*/ printf("%2d:公鸡=%2d 母鸡=%2d 雏鸡=%2d\n",++j,x,y,z); }}二、归纳总结,完成课后实训题 (1)回顾本节课的学习目标,对知识点进行总结。 (2)完成课后实训作业。教学后记2 展开更多...... 收起↑ 资源预览