第五章循环控制(教学设计)-《C语言(上)》同步教学(高教版)

2024-08-03
| 18页
| 80人阅读
| 0人下载
普通

内容正文:

教 学 内 容 及 过 程 设 计 一 新课引入 无条件转移语句形成的循环易成“一碗面”。 二、新授   语法:while (exp) 循环体语句; 功能:当exp为真时,执行循环体;为假时,执行循环语句的后续语句; 如:用while语句构成循环,求sum=1+2+…+100 程序如下:main() { int i=1, sum=0; while (i<=100) { sum+=i; i++; } printf(“%d”,sum); } 说明:1)  循环体可以用复合语句; 2) 在while语句前应有为测试表达式(exp)中的循环控制变量赋初值的语句,以确保循环的正常开始; 3)循环体内应有改变循环控制变量的语句,以确保循环进行有限次后正常结束; 如:i=1;while (i<=100) sum=sum+1; (死循环) 4)        while 循环的特点是先判断后执行,故循环有可能一次都不被执行; 如: i=3; while (i<3) printf(“i=%d ”,i); 课堂练习:用while语句构成循环,求 sum=1*2+2*3+…+100*101 参考答案(略) 三、课堂小结 1、  while语句的语法结构 2、   注意循环控制的范围 四、布置作业1、上机练习: 2、汇编:(P47)1-10 备注 上机实验,注意作业的讲解 第五章 循环控制 课 题 while循环控制习题课 教 学 目 的 1、 循环控制算法的巩固 2、 while语句格式与功能 教 材 分 析 教学重点 while语句执行流程 教学难点 语句的应用 课时安排 1 教学方法 讲授与演示法相结合讨论法 教具 计算机、投影仪 教 学 内 容 及 过 程 设 计 一 习题内容 一)、填空 (1)语句while (!e);中的条件!e等价于 A 。 A. e==0 B. e!=1 C. e!=0 D. ~e (2)C语言中 D 。 A. 不能使用do-while语句构成的循环 B. do-while语句构成的循环必须用break语句才能退出 C. do-while语句构成的循环,当while语句中的表达式值为非零时结束循环 D. do-while语句构成的循环,当while语句中的表达式值为零时结束循环 二)、分析以下程序的输出结果是__ _。 #include <stdio.h> main() { int num=0; while (num<=2) { num++; cout<<num<<endl; } } 三)编程题(要求用while) (1)编写一个程序,求 之值。 (2)编写一个程序,求s=1+(1+2)+(1+2+3)+…+(1+2+3+…+n)的值。 (3)编写一个程序,用户输入一个正整数,把它的各位数字前后颠倒一下,并输出颠倒后的结果。 备注 上机实验,注意作业的讲解 课 题 do-while循环控制 教 学 目 的 1、掌握do-while循环语句的语法结构 2、灵活运用循环语句 教 材 分 析 教学重点 循环语句do-while执行过程 教学难点 do-while的应用、While、do-while循环语句的区别 课时安排 2 教学方法 讲授与演示法相结合 教具 计算机、投影仪 教 学 内 容 及 过 程 设 计 1、 复习while语句 2、 do-while语句 语法:do 循环体语句; while (exp); 功能:当exp为真时,执行循环体;为假时,执行循环语句的后续语句; 如:用do-while语句构成循环,求 sum=1+2+…+5 程序如下: main() { int i=1,sum=0; do { sum+=i; i++; } while (i<=5); printf(“%d”,sum); }  执行过程:先执行一次指定的循环体语句,然后判别表达式,当表达式的值为非零(“真”) 时,返回重新执行循环体语句,如此反复,直到表达式的值等于0为止,此时循环结束。 练一练: 1、 求1到5的积(5!) 2、高考模拟训练:写出下列程序的运行结果(调试) main() {int x=3; do{printf(“%d ”,x=x-2)}while(!(--x)); } 说明: 1)        循环体可以用复合语句;  2)        循环控制变量在执行do前必须赋初值;循环体内应有改变循环控制变量的语句; 3)        do-while 循环的特点是先执行后判断,故循环至少被执行一次; 思考:关于死循环讲解(P58 5.46汇) main() {int y,x =3; do { y=x- - ; if(!y) printf(“x”); printf(“#”); } while (1<=x<=2); 二、while语句和用do-while语句的比较: 在一般情况下,用while语句和用do-while语句处理同一问题时,若二者的循环体部分是一样的,它们的结果也一样。但是如果while后面的表达式一开始就为假(0值)时,两种循环的结果是不同的。 例5.4 while和do-while循环的比较 (1) #include <stdio.h> (2) #include <stdio.h> void main ( ) void main( ) {int sum=0,i; {int sum=0,i; scanf(“%d″,&i); scanf(”%d″,&i); while (i<=10) do {sum=sum+I; { sum=sum+i; i++; i++; } while (i<=10); printf(“sum=%d\ ″ ,sum); } printf(“sum=%d\ ”,sum); } 说明:(1)当while后面的表达式的第一次的值为“真”时,两种循环得到的结果相同。否则,二者结果不相同。 练习:分别用while与do-while语句构成循环,求 sum=10! 求1到100的和 思考:如:i=3; do { sum+= i; i++; } while (i>10); 该程序段的I值是多少?参考答案略 思考:统计2000到3000之间有多少个素数 三、课堂小结 1、do-while语句的语法结构 2、  while语句和用do-while语句的比较 四、布置作业: 试试: 判断从键盘输入的任一整数是否为素数。 1、上机练习实践:2、汇编:(P50)16-25 备注 上机实验,学习循环结构程序设计 课 题 do-while循环控习题课 教 学 目 的 1、 do-while循环控制算法 2、 do-while语句的使用格式和注意事项 教 材 分 析 教学重点 循环语句do-while执行过程的理解巩固 教学难点 do-while语句的应用 课时安排 1 教学方法 讲授与演示法相结合讨论法 教具 计算机、投影仪 教 学 内 容 及 过 程 设 计 一 习题内容 1、以下程序段 C 。 int x=-1; do { x=x*x; } while (!x); A. 是死循环 B. 循环执行二次 C. 循环执行一次 D. 有语法错误 2、判断下程序段是否为死循环,可不是共执行了多少次。 k=0; do { ++k; } while (k<=0) 3、 编程: (1) 统计2000到3000之间有多少个素数?(要求分do-while与while用两种方法实现编写一个程序, (2) 求 之值。 (3)编写一个程序,求s=1+(1+2)+(1+2+3)+…+(1+2+3+…+n)的值。 作业:编写一个程序,用户输入一个正整数,把它的各位数字前后颠倒一下,并输出颠倒后的结果。 备注 另要求上机实验,学习do-while循环结构程序设计 课 题 for循环控制(第一课时) 教 学 目 的 1、 掌握 for循环控制算法 2、 for语句的使用格式和注意事项 教 材 分 析 教学重点 for的语法与功能 教学难点 for语句的应用 课时安排 共2课时 教学方法 案例引入法、演示法相讲解法 教具 计算机、投影仪 教 学 内 容 及 过 程 设 计 一 新课引入 从while和do-while语句中引入新的循环语句:for 语句 C语言中的for语句使用最为灵活,不仅可以用于循环次数已经确定的情况,而且可以用于循环次数不确定而只给出循环结束条件的情况,它完全可以代替while语句。 二、新授 实例比较分析程序i=1; while(i<=100) {sum=sum+i;i++;} 完全等效于for(i=1;i<=100;i++) sum=sum+i; 一)、for 语句 语法:for(表达式1;表达式2;表达式3) 循环体语句; 功能: 1、先求表达式1; 2、求解表达式2,若其值为真,则执行第三步;若为假,则结束循环; 3、执行循环体中的语句; 4、求解表达式3; 5、转回第二步继续执行 如: for( i=1; i<=100; i++) sum=sum+i;可看成: for(循环变量赋初值;循环条件;循环变量增值)语句; 三、小结 备注 教 学 内 容 及 过 程 设 计 for语句等价于下列语句: 表达式1; while (表达式2) { 语句; 表达式3; } 说明: (1)显然for循环更简洁,更灵活; (2)循环体可以是复合语句; (3)for语句中的三个表达式均可以是逗号表达式,故可同时对多个变量赋初值及修改。如:for(i=0, j=1; j<n && i<n; i++, j++) …   (4)for语句中三个表达式可省: (5)for语句的一般形式中的“表达式1”可以省略,此时应在for语句之前给循环变量赋初值。注意省略表达式1时,其后的分号不能省略。如 for(;i<=100;i++) sum=sum+i; 执行时,跳过“求解表达式1”这一步,其他不变。 (6)如果表达式2省略,即不判断循环条件,循环无终 止地进行下去。也就是认为表达式2始终为真。 例如:for(i=1; ;i++) sum=sum+i; 表达式1是一个赋值表达式,表达式2空缺。它相当于: i=1; while(1) {sum=sum+1;i++;} 课 题 for循环控制(第二课时) 教 学 目 的 1、 掌握 for循环控制算法 2、 for语句的使用格式和注意事项 教 材 分 析 教学重点 for的语法与功能 教学难点 for语句的应用 课时安排 共2课时 教学方法 讲授与演示法相结合讨论法 教具 计算机、投影仪 教 学 内 容 及 过 程 设 计 一 新课 (7)表达式3也可以省略,但此时程序设计者应另外设法保证循环能正常结束。 如: for(i=1;i<=100;) {sum=sum+i;i++;} 在上面的for语句中只有表达式1和表达式2,而没有表达式3。i++的操作不放在for语句的表达式3的位置处,而作为循环体的一部分,效果是一样的,都能使循环正常结束。 (8)可以省略表达式1和表达式3,只有表达式2,即只 给循环条件。如: for(;i<=100;) while(i<=100) {sum=sum+i; 相当于 {sum=sum+i; i++;} i++;} 在这种情况下,完全等同于while语句。可见for语句比while语句功能强,除了可以给出循环条件外,还可 以赋初值,使循环变量自动增值等。 (9)3个表达式都可省略,如: for(; ;) 语句 相当于 while(1) 语句 即不设初值,不判断条件(认为表达式2为真值),循环变量不增值。无终止地执行循环体。 (10)) 表达式1可以是设置循环变量初值的赋值表达式,也可以是与循环变量无关的其他表达式。如: for (sum=0;i<=100;i++) sum=sum+i; 表达式3也可以是与循环控制无关的任意表达式 (11) 表达式1和表达式3可以是一个简单的表达式,也可以是逗号表达式,即包含一个以上的简单表达式,中间用逗号间隔。如: for(sum=0,i=1;i<=100;i++) sum=sum+i; 或 for(i=0,j=100;i<=j;i++,j--) k=i+j; 表达式1和表达式3都是逗号表达式,各包含两个赋值表达式,即同时设两个初值,使两个变量增值. (12)表达式一般是关系表达式(如i<=100)或逻辑表达式 (如a<b && x<y),但也可以是数值表达式或字符表达式,只要其值为非零,就执行循环体。 补说明: ① for(i=0;(c=getchar())!=′\n′;i+=c); 在表达式2中先从终端接收一个字符赋给c,然后判断此赋值表达式的值是否不等于′\n′(换行符),如果不等于′\n′,就执行循环体。 注意:此for语句的循环体为空语句,把本来要在循环体内处理的内容放在表达式3中,作用是一样的。可见for语句功能强,可以在表达式中完成本来应在循环体内完成的操作。 ② for( ;(c=getchar())!=′\n′;) printf(″%c″,c); for语句中只有表达式2,而无表达式1和表达式3。其作用是每读入一个字符后立即输出该字符,直到输入一个“换行”为止。请注意,从终端键盘向计算机输入时,是在按Enter键以后才将一批数据一起送到内存缓冲区中去的。 备注 课 题 三种循环控制 教 学 目 的 1、 循环控制算法的比较 2、 语句的使用格式和注意事项 教 材 分 析 教学重点 能正确运用各循环语句 教学难点 语句的应用 课时安排 1 教学方法 讲授与演示法相结合讨论法 教具 计算机、投影仪 教 学 内 容 及 过 程 设 计 一新授 .1)几种循环的比较 (1)可以相互代替使用 (2)while, do-while循环,在while后面指定循环条件,在循环体中应包含使循环趋向于结束的语句 (3)凡是在while中能完成的,在for 语句中也能完成。 (4)用while和do-while循环时,循环变量初始化的操作应在while和do-while语句之前完成。而for语句可以在表达式1中实现循环变量的初始化 2)、break和continue语句 1、 break语句:可以用于switch语句中,也可以用于循环语句中,当用于循环语句中时,用于在满足条件情况下,跳出本层循环。 2、 continue语句:用于循环语句中,在满足条件情况下,跳出本次循环。即跳过本次循环体中下面尚未执行的语句,接着进行下一次的循环判断。 3)、循环结构程序设计实例:用公式求π的近似值,直到最后一项的绝对值小于10-6为止。π/4≈ 1-1/3+1/5-1/7+…… # include <stdio.h> main( ) { int s=1; float n=1.0, t=1, pi=0; while((fabs(t))>1e-6) { pi=pi+t; n+=2; s=-s; t=s/n; } pi=pi*4; printf(“pi=%10.6f ”,pi); } 4、分别用三种循环实现编写一个程序,求s=1+(1+2)+(1+2+3)+…+(1+2+3+…+n)的值。 三、小结 1、循环语句的语法结构,特别是for语句中三个表达式的作用 2、  注意循环控制的范围 四、布置作业 汇编练习:(P53)26-38 备注 上机实验,学习循环结构程序设计 课 题 for循环控制练习课 教 学 目 的 1、 循环控制算法的实现与应用 2、 for语句的使用格式和注意事项 教 材 分 析 教学重点 教学难点 语句的应用 课时安排 1 教学方法 讲授与演示法相结合讨论法 教具 计算机、投影仪 教 学 内 容 及 过 程 设 计 二、习题内容 1、下面有关for循环的正确描述是 D 。 A. for循环只能用于循环次数已经确定的情况 B. for循环是先执行循环体语句,后判定表达式 C. 在for循环中,不能用break语句跳出循环体 D. for循环体语句中,可以包含多条语句,但要用花括号括起来 2、分析以下程序的运行结果是__S=7__。 #include <stdio.h> main() { int s=0,k; for (k=7;k>=0;k--) { switch(k) { case 1: case 4: case 7: s++; break; case 2: case 3: case 6: break; case 0: case 5: s+=2; break; } }printf(“s=%d”,s); } 3、以下程序的运行结果是____。 #include <stdio.h> main() 教 学 内 容 及 过 程 设 计 { int i,j; for (i=4;i>=1;i--) { printf(“*”); for (j=1;j<=4-i;j++) printf(“*”); printf(" "); } } 输出结果: * ** *** **** 3、学生独立分析以下程序的运行结果是____。 #include <stdio.h> main() { int i,j,k; for (i=1;i<=6;i++) { for (j=1;j<=20-2*i;j++) printf(“ ”); for (k=1;k<=i;k++) printf(“ i ”); printf(" "); } } 输出结果: 1 22 333 4444 55555 666666 备注 要求作为上机实验补充内容 课 题 循环控制嵌套 教 学 目 的 1、循环控制算法的巩固 教 材 分 析 教学重点 教学难点 语句的应用 课时安排 1 教学方法 讲授与演示法相结合讨论法 教具 计算机、投影仪 教 学 内 容 及 过 程 设 计 一、复习引导 从while和do-while语句、for 语句 二、讲授新课 • 一、含义:一个循环体内又包含另一个完整的循环结构 称为循环的嵌套。内嵌的循环中还可以嵌套 循环,这就是多层循环。三种循环(while循环、do-while循环和for循 环)可以互相嵌套 • 下面几种都是合法的形式: (1) while( ) (2) do (3) for(;;) {… {… { while( ) do for(;;) {…} {… } while( ); {… } } } } while( ); (4) while( ) (5) for(;;) (6) do {… {… {… do{…} while( ) for(;;){ } while( ) ; { } … {…} … } } } while( ); 二、注意: (1)循环都可以用来处理同一问题,一般情况下它们可以互相代替。但一般不提倡用goto型循环。(有的用for写的不一定可用while来代替) (2)在while循环和do-while循环中,只在while后面的括号内指定循环条件,因此为了使循环能正常结束,应在循环体中包含使循环趋于结束的语句(如i++,或i=i+1等)。 例:求100以内的质数和 代码略 三、课堂小结 1、 循环语句的嵌套 四、布置作业 书面作业:写出求 1!+2!+-----+10!的程序代码 备注 上机实践,另进两节课的试题测验 C语言各章练习题---循环控制 一、 选择题 1.while (!E);语句中,条件表达式等价于 (1) 。 A. E= =0 B. E!=1 C. E!=0 D. E= =1 2.下面程序的运行结果是 (2) 。 int n=0; while(n++<=2); printf(“%d”,n); A. 2 B. 3 C. 4 D. 有语法错 3. 下面程序段的运行结果是 (3) 。 a=1; b=2; c=2; while (a<b<c) { t=a; a=b; b=t; c――;} printf (“%d, %d, %d ”, a, b, c); A. 1, 2, 0 B. 2, 1, 0 C. 1, 2, 1 D. 2, 1, 1 4. C语言中,while与do-while循环的主要区别是(4) 。 A. do-while的循环体至少无条件执行一次 B. while的循环控制条件比do-while的循环控制条件严格 C. do-while允许从外部转到循环体内 D. do-while的循环体不能是复合语句 5. 对for (表达式1; ;表达式3 )可理解为 (5) 。 A. for (表达式1; ;表达式3) B. for (表达式1;1 ;表达式3) C. for (表达式1;表达式1;表达式3) D. for (表达式1;表达式3;表达式3) 6. 以下for循环体执行的次数是 (6) 。 for (x=0,y=0; (y=123) && (x<4);x++); A. 为无限次循环 B. 循环次数不定 C. 4次 D. 3次 7. 下列不是死循环的是 (7) 。 A. int i=100; while (1) { i=i%100+1; if (i>100) break; } B. for ( ; ;); C. int k=0; do {++k;} while (k>=0) D. int s=36; while (s); ――s; 8. 执行语句for (i=1;i++<4;=;后i的值为 (8) 。 A. 3 B. 4 C. 5 D. 不定 9. 下列程序段的输出结果是 (9) 。 int x=3; do {printf (“%2d ”,x-=2);} while (!(――x)); A. 1 B. 1 -2 C. 3,0 D. 是死循环 10. 以下四个关于C语言的结论中,只有一个是错误的,它是(10) 。 A. 可以用while语句实现的循环一定可以用for语句实现 B. 可以用for语句实现的循环一定可以用while语句实现 C. 可以用do-while语句实现的循环一定可以用while语句实现 D. do-while语句与while语句的区别仅是关键字”while”出现的地方不同 二、填空题 1.执行下面程序段后,k值是 (11) 。 k=1; n=263; do { k*=n%10; n/=10 ; } while(n); 2.鸡兔共有30只,脚共有90个,下面的程序段是计算鸡兔各有多少只 for ( x=1;x<=29;x++ ) { y=30—x; if ( (12) ) printf(“%d,%d ”,x,y); } 3.下面程序的运行结果是 (13) 。 main ( ) { int i,x,y; i=x=y=0; do { ++ i; if(i%2!=0) {x=x+i; i++; } y=y+i++; } while(i<=7); printf(“x=%d, y=%d ”,x,y); } 4.下面程序的运行结果是 (14) 。 main ( ) { int i,j=4; for(i=j;i<=2*j;i++) switch(i/j) { case 0: case 1: printf (“**”); break; case 2: printf (“#”); } } 5.以下程序段的功能:从键盘输入的字符中统计数字字符的个数,用换行符结束循环 int n=0,c;c=getchar( ); while ( (15) ) { if ( (16) ) n++; c=getchar( );} 6.下面程序的输出结果是 (17) 。 main( ) { int i, j, k=19; while( i=k-1) { k-=3; if(k%5==0) {i++; continue;} else if(k<5) break; i ++; } printf(“i=%d,k=%d ”,i,k); } 7.填空完成下面程序,其功能是打印100以内个位数为6且能被3整除的所有数。 main( ) { int i, j; for(i=0; (18) ;i++) { j=i*10+6; if ( (19) ) continue; printf(%d”,j); } } 8.下面程序的运行结果是 (20) main( ) { int i=1; while(i<=15) if(++i%3!=2) continue; else printf(“%d”,i); printf(“ ”); } 9.填空完成下面程序,其功能是计算100至1000之间有多少个数其各位数字之和是5。 main( ) { int is,k,count=0; for(i=100;i<=1000;i++) {s=0; k=i; while ( (21) ) { s=s+k%10; k= (22) 。; } if (s!=5) (23) ; else count++; } printf(%d”,count); } 10.填空完成下面程序,其功能是从3个红球,五个白球,六个黑球中任意取出八个球,且其中必须有白球,输出所有可能的方案。 void main( ) { int i,j,k; printf(“ hong bai hei ”); for(i=0;i<=3;i++) for ( (24) ;j<=5;j++) { k=8-i-j; if ( (25) ) printf (“ %3d %3d %3d ”,i,j,k); } } 11、下面程序段是找出整数的所有因子,请分析程序填空。 scanf("%d",&x); for (i=1; ; i++) if (x%i==0) printf("%3d",i); 参考答案:i<=x 12、鸡兔同笼,头30,脚90,下面程序段计算鸡兔各有多少只。请分析程序填空。 for(x=1;x<=30;x++ ) {y=30-x; if(【1】) printf("%d,%d",x,y); } 参考答案:2*x+4*y==90 13、下面程序的功能是计算1-3+5-7+...-99+101的值,请分析程序填空。 #include<stdio.h> main() {int i,t=1,s=0; for(i=1;i<=101;i+=2) {【1】;s=s+t;【2】;} printf("%d ",s); } 参考答案:【1】t=t*i 【2】t=-t/i 14、以下程序的功能是根据公式e=1+1/1!+1/2!+...1/n!求e的近似值,精度要求为10-6。请分析程序填空。 #include<stdio.h> main() {int i;double e,new; 【1】;new=1.0; for(i=1;【2】;i++) {new/=(double)i; e+=new;} printf("e=%lf ",e); } 参考答案:【1】e=1 【2】new>1e-6 3、 写运行结果 1、下面程序的运行结果是 。 #include <stdio.h> main ( ) { int i=5; do { switch (i%2) { case 4: i――; break; case 6: i――; continue; } i――; i――; printf (“%d”, i ); } while (i>0); } 2、当运行以下程序时,从键盘输入1 2 3 4 5 -1<CR>,则下面程序的运行结果是 。 #include<stdio.h> main() {int k=0,n; do{scanf("%d",&n);k+=n;}while(n!=-1); printf("k=%d n=%d ",k,n); } 参考答案:k=14 n=-1 3、下面程序的运行结果是 。 main() {int i,j,a=0; for(i=0;i<2;i++) {for(j=0;j<4;j++) {if(j%2) break; a++; } a++; } printf("%d ",a); } 参考答案: 4 三、编程:1、求1000以内的水仙花数。 2、编写程序,找出1至99之间的全部同构数。同构数是这样一组数:它出现在平方数的右边。例如,5是25右边的数,25是625右边的数,5和25就是同构数。 参考程序: main() {int i; for(i=1;i<100;i++) if(i*i%10==i||i*i%100==i) printf("%3d",i); } 3、 编写程序,求一个整数任意次方的最后三位数。即求xy值的最后三位数,要求x,y从键盘输入。 参考程序: main() {int x,y,i,s=1; printf("Input x and y:"); scanf("%d%d",&x,&y); for(i=1;i<=y;i++) s=s*x%1000; printf("The last 3 digit of %d*%d is:%d ",x,y,s); } 说明:(1)循环体如果包含一个以上的语句,应该用花括弧括起来,以复合语句形式出现.(2)在循环体中应有使循环趋向于结束的语句 1 2 3 学科网(北京)股份有限公司 $$

资源预览图

第五章循环控制(教学设计)-《C语言(上)》同步教学(高教版)
1
第五章循环控制(教学设计)-《C语言(上)》同步教学(高教版)
2
第五章循环控制(教学设计)-《C语言(上)》同步教学(高教版)
3
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。