内容正文:
教
学
内
容
及
过
程
设
计
一 新课引入
无条件转移语句形成的循环易成“一碗面”。
二、新授
语法: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
学科网(北京)股份有限公司
$$