2.2.10循环结构程序设计 - 循环结构程序设计_教学案例

合集下载

循环结构程序设计教案ppt课件

循环结构程序设计教案ppt课件

}
解法2 do_while 语句
#inlcude <stdio.h>
main()
{ int s = 0, i = 1;
do{ s = s + i; i++; }
解法3 for 语句 #inlcude <stdio.h>
while ( i <= 100 );
printf( "1+2+3+…+100=%d\n“ , s ); }
for ( i = 1;i <= n;i++ ) s+= i;
2 若表达式e2省略,即不判断循环条件,循环无法终止—死循环(应避免), 该结构一定要有break之类的跳出循环控制语句
for( i=1; ;i++) s+= i;
i = 1; while (1) { s+= i; i++;}
3 表达式e3可以省略,放入后面的循环体语句s中
Ex 计算
s111 1 2 3 100
i <=100


s += 1.0 / i; i++;
#include <stdio.h> main() {
int i = 1; float s = 0;
while( i <= 100 ) { s += 1.0 / i; i++; }
printf( "s=%f\n", s ); }
{ a = a + 1; b = b + 1;
}
例如:a = 0;b = 0; for ( i = 1;i <= 10;i++ ) { a = a + 1; b = b + 1; }

第六课循环结构程序设计(全课)解析ppt课件

第六课循环结构程序设计(全课)解析ppt课件
x :E n Writeln( x) ; End. 21
repeat-until语句 (直到循环)
n repeat 语句用于"重复执行循环体,一直 到指定的条件为真时为止"。语法格式为:
repeat
语句1;


语 句 n;
until 布 尔 表 达 式 ;
其中Repeat、 until是Pascal保留字,
n
31
作业
n 1、编写一个译码程序,把一个英语句子译成数字 代码。译码规则是以数字1代替字母A,数字2代
替字母B, … 26代替字母Z,如遇空格则打印
一个星号‘*’,英文句子以‘ .‘结束。 n 2、五个好朋友聚在一起,第一个带了很多糖块送
给大家,他使每人的糖块在原来基础上翻了一倍。
接着第二个人也同样向每人发糖块,他也使每人

用 5 0 0元 钱 买 了 90只 鸡 ,

鸡 一 只 1 0元 , 小 鸡 一 只 5 母 鸡、 公 鸡、 小 鸡 各 买 多
分析:设母鸡I只,公鸡J只,则小鸡为90 I- J-只, 则15*I+ 10* J+(90-I-J)*5=500,显然一个方
程求两个未知数是不能直接求解。必须组合出所有 可能的I,j值,看是否满足条件。这里I的值可以 是0到33,J的值可以0到50。
repeat语 句 的 保 留 字 repeat和 until已 经 起
语句括号作用,可以包含多个语句而无须
begin和end。
25
当循环和直到循环的区别
n 3、repeat语句中,当布尔表达式为true时 结束循环,而while语句中,是当表达式为
false时 才 结 束 循 环 。 当 描进述行由的计计算算操时作,后

C语言循环结构程序设计2PPT教学课件

C语言循环结构程序设计2PPT教学课件

if(m%i==0) break;
if(i<=k)
printf("%d不是一个素数\n",m);
else
printf("%d是一个素数\n",m);
if(b%3==1) {b+=3; continue;} } printf("%d\n",a); }
2020/12/10
程序运行结果: 4
10
循环程序设计(循环嵌套)
例7:打印如下所示等腰三角形() * ***
***** ******* *********
2020/12/10
11
循环程序设计(循环嵌套)
结果的输出:
如果循环是中途退出的,则i<=k,输出m不是素 数;否则,m是一个素数。
2020/12/10
23
例6.6 程序
#include<stdio.h>
#include<math.h>
main( )
{
int i,m,k;
scanf("%d",&m);
k=(int)sqrt(m);
for(i=2;i<=k;i++)
(2)语句作用:
结束本次循环。
(3)语句执行流程:
continue语句可以结束本次循环,即不再执
行循环体中continue 语句之后的语句,转入
下一次循环条件的判断与执行。
2020/12/10
8
【例6:ch6_006】 求300以内能被17整除 的所有整数。
#include "stdio.h"
void main()
... }

第5章 循环结构程序设计PPT课件

第5章 循环结构程序设计PPT课件

}
C语言程序设计
第5章 循环结构程序设计
§ 5.2 用while语句实现循环i=1w; hile (i<=100)
2、while语句的注意事项
{ sum=sum+i;
注意:
i++; }
(1) 循环体如果包含一个以上的语句,应该用花括弧括
起来,以复合语句形式出现
(2) 在循环体中应有使循环趋向于结束的语句。如果无
C语言程序设计
第5章 循环结构程序设计
§ 5.2 用while语句实现循环
1、while语句的一般形式
while语句用来实现“当型”循环结构 一般形式: while (表达式)
循环体语句
当表达式为非0值时,执行while 语句中的循环体语句 其特点是:
先判断表达式,后执行语句
C语言程序设计
第5章 循环结构程序设计
} 运行结果:
}
1↙ sum=55 再运行一次:
}说明:当while后面的表达式的第一次的
值为“真”时,两种循环得到的结果相
11↙ sum=0
同。否则,二者结果不相同
C语言程序设计
第5章 循环结构程序设计
§ 5.4 用for语句实现循环
1、for语句的一般形式
C语言中的for语句使用最为灵活,不仅可以用于 循环次数已经确定的情况,而且可以用于循环次数 不确定而只给出循环结束条件的情况,它完全可以 代替while语句
语句,转到第(5)步
(3) 求解表达式3
(4) 转第(2)步骤继续执行
(5) 循环结束,执行for语句下面的一个语句
C语言程序设计
第5章 循环结
执行表达式1
循环初始条件

C语言程序设计:第5章-循环结构-课件教案

C语言程序设计:第5章-循环结构-课件教案

C语言程序设计课件教案第五章循环结构教学目的掌握循环结构中的while语句、dowhile语句、for语句的用法,掌握中断语句中break和continue语句的用法。

教学要求1.熟练掌握while语句、dowhile语句、for语句2.熟练掌握break语句、continue语句重点和难点1.while语句、dowhile语句、for语句的使用2.break语句、continue语句的使用教学支撑环境与教学资源:1.笔记本电脑2.VC20103.投影仪教学方法讲授法、练习法、讨论法授课课时6课时教学过程AM一、课程引入计算1+2+3+...+n有几种方法,需要多少步骤?、循环结构语句什么时候用到循环结构:处理重复的问题的时候。

循环结构的三大语句:while语句、dowhile语句、for语句。

1.while语句while(循环条件表达式)循环体语句;执行过程:只有循环条件表达式的值为真就执行循环体语句,先判断后执行。

1.输出1---n之间的数intmain(void){inti=1;intn=0;printf("请输入n的值:");scanf("%d",&n);//1015while(i<=n)15printf("%d\n",i);i++;}return0;}2.计算m+...+n 的值intmain(void){inti=1;intn=0;intm=0;intsum=0;printf("请依次输入m 和n 的值:");scanf("%d%d",&m,&n);//m+...n10while(m<=n){sum=sum+m ;m++;}printf("sum=%d\n",sum);return0;}2.do...while 语句do循环体语句;}while(循环条件表达式);执行过程:先执行循环体语句,再检查循环条件表达式的值是否为真,如果为真则继续执行循环体语句,否则结束循环。

C语言课件第5章循环结构程序设计2

C语言课件第5章循环结构程序设计2
18
思考 1、如果去掉循环体 中的大括号会怎样? 2、在循环体中,使 循环条件趋向于不满 足(假)的语句是哪 条?
第5章
循环结构程序设计
举例
while和do-while循环的比较。
此程序的 功能?
#include <stdio.h> int main() { int i,sum=0; scanf("%d",&i); while(i<=10) { sum=sum+i; i++; } printf("sum=%d\n",sum); return 0; }
第5章
循环结构程序设计
举例
现有某班20名学生的C语言成绩,求该班学生的C语 言的平均成绩。即:输入20个学生的成绩,计算平 均值,输出平均值。
分析:定义变量表示学生的成绩、全班总和、平均成绩。 如果定义20个变量保存20 算法设计: 个成绩,程序中计算成绩 第一步:输入20个学生的成绩 总和会有什么问题? 第二步:计算成绩总和 (用累加求和的方法)
运行结果:凵2550
#include <stdio.h> int main() { int i=1, n; float fac=1; printf("请输入n:"); scanf ("%d",&n); while (i<=n) { fac=fac*i; i++; } printf("%.0f\n",fac); return 0; } 请输入n:5
分析
求1~100的累加和。
换一种思路:
sum=sum+n;
首先设置一个累计器sum,其初值为0,利用sum += n来计算(n依次 取1、2、……、100),只要解决以下3个问题即可: (1)将n的初值置为1; (2)每执行1次“sum += n;”后,n增1; (3)当n增到101时,停止计算。此时,sum的值就是1~100的累 计和。

C语言程序设计循环结构程序设计PPT课件

C语言程序设计循环结构程序设计PPT课件
printf("sum=%d\n",sum); }
程序输出结果:
sum=5050
2020/12/17
注意:
13
如果while的 (表达式) 值为0,则循环体一
次也不执行 (例如当i的初值=101) 。
在循环体中必须有使循环趋向结束的操作, 否则循环将无限进行(死循环)。
在循环体中,语句的先后位置必须符合逻 辑,否则会影响运算结果。
思考程序段的输出?
…… i=1; sum=0; while (i<=100)
{ i++; sum=sum+i; }
运行后,输出: sum=5150
原因是什么?
2020/12/17
注意(续):
14
总结:为了保证循环正常运行,应该特 别注意: – 循环控制条件的描述
– 控制条件的初始状态(初始值)
– 循环体内部对控制条件的影响
表达式非0?
Y 语句
循环控制条件
N-S结构图 当表达式为真 N
语句
循环体
2020/12/17
例如:
11
【例5.1】编写程序,求100个自然数的和 即: s=1+2+3+ … +100
思路:寻找加数与求和的规律
加数i——从1变到100,每循环一次,使i增1, 直到i的值超过100。i的初值设为1。
求和——设变量 sum 存放和,循环求 sum=sum+i,直至i超过100。
do-while循环的算法
16
流程图
N-S结构图
循环体
循环体 当表达式为真
表达式非0?
Y
N
用do-while语句 求100个自然数的和

《循环结构程序设计》PPT课件

《循环结构程序设计》PPT课件

2021年1月11日星期一
5
第5章 循环结构程序设计
2.while语句的执行过程 首先计算表达式的值,如果为真(非0),执行循环体,再判断 表达式。如果表达式的值为假(0),结束循环,执行while语 句后面的语句。while语句的执行流程图如下: while语句的特点是: 先判断表达式,为真才执行循环体语句, 否则不执行。
修改为
int i=1; printf("%d\n",i);i++; printf("%d\n",i);i++; printf("%d\n",i);i++; printf("%d\n",i);i++; printf("%d\n",i);i++; printf("%d\n",i);i++; printf("%d\n",i);i++; printf("%d\n",i);i++; printf("%d\n",i);i++; printf("%d\n",i);
第5章 循环结构程序设计
问题:要求在屏幕上按行打印1~10。
可采用顺序结构写10行代码实现。程序代码如下:
printf("%d\n",1 ); printf("%d\n",2 ); printf("%d\n",3 ); printf("%d\n",4 ); printf("%d\n",5 ); printf("%d\n",6 ); printf("%d\n",7 ); printf("%d\n",8 ); printf("%d\n",9 ); printf("%d\n",10 );
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

【教学案例一】1. 实验目的熟练使用for语句控制循环。

2. 实验任务(1)实验内容:打印输出所有"水仙花数"。

所谓"水仙花数"是指一个三位的正整数,其各位数字立方和等于该数本身。

例如:153是一个"水仙花数",因为153=13+53+33。

(2)实验要求:没有输入,输出所有"水仙花数"。

程序输出以下4个"水仙花数":153 370 371 4073. 实验分析(1)问题分析:用循环语句循环测试每一个三位数是否符合"水仙花数"的规则。

即对所有100至999的数,把每个数分解出个位数,十位数和百位数,再判断是否符合条件。

(2)实现要点:用一次穷举循环就可以了。

因为是固定次数的循环,一般采用for语句。

对于每个当前的整数,用取余和整除运算分解出各位的数字。

对于三位的正整数n,个位数g = n%10,十位数s = (n%100)/10,百位数b = n/100。

4. 参考代码#include <stdio.h>int main(void){int n, g, s, b;for (n=100; n<=999; n++){b = n / 100;s = n / 10 % 10;g = n % 10;if ( g*g*g + b*b*b + s*s*s==n) printf("%d ",n);}return 0;}5. 思考题什么情况下采用穷举循环是比较合适的?【教学案例二】1. 实验目的(1)熟练使用while 语句和理解该语句的执行顺序,掌握累加和计算的算法。

(2)熟练运用断点调试。

2. 实验任务74(1)实验内容:根据下面关系式,求π的值,直到最后一项的值小于epsilon 。

epsilon 的值由键盘输入。

12!3!!12335357357n p =++++ᄡᄡᄡᄡᄡᄡᄡ…+…(2n+1)(2)实验要求:改正下面的错误程序,达到满足如下表的运行示例结果。

测试用例:/* 1 */ #include <stdio.h>/* 2 */ int main(void)/* 3 */ {/* 4 */double sum,item;/* 5 */double epsilon;/* 6 */int i;/* 7 */printf("Enter Epsilon:");/* 8 */scanf("%lf",&epsilon);/* 9 */item = 1;/* 10*/sum = 0; /*调试时设置断点*//* 11*/while (item >= epsilon)/* 12*/{/* 13*/sum += item;/* 14*/i++;/* 15*/item *= i;/* 16*/item /=(2*i-1);/* 17*/}/* 18*/printf("Pi=%.6lf\n",2*sum); /*调试时设置断点*//* 19*/return 0; /* 20*/ }3. 实验分析(1)程序分析:这是一个求累加和的问题。

为解决这个问题,首先抽取出具有共性的算式:sum=sum + item ,其中sum 存放累加和,item 表示第i 项的内容。

题目没有显式地给出循环次数,只是提出了精度要求。

在反复计算累加的过程中,一旦第i 项的绝对值小于Epsilon ,就达到了给定的精度,计算终止,这说明精度要求实际上给出了循环的结束条件,转换为循环条件item≧Epsilon。

通过以上分析,主要的错误可能会出现在求和变量的初值赋值以及循环的次数错误及输入输出的格式等。

(2)调试要点:该程序调试的主要要点是:对源代码进行编译,解读相关的编译信息,若存在编译错误,则根据提示信息修改源代码;用测试用例数据运行,看结果是否有错;若有错,设置断点,利用断点调试运行;设置断点的分析,观察在第一个断点时各边量的值(初值是否设置正确),单步进行循环时观察各个变量的值的变化以及while循环语句条件的变化;根据观察情况综合分析,与预期结果做比对,从而找出错误,给出正确结果。

具体调试步骤:1)先编译源程序,信息窗口中显示编译正确信息,然后执行连接,完全正确。

运行该程序,发现输出结果不正确,调试该程序。

2)在源程序第10行和第18行设置断点,运行至第一个断点处,输入变量测试用例,查看变量epsilon的值,此时,epsilon的值与输入的值一致。

3)单步执行,程序执行到输入第15行,观察变量i,这时看到变量i的值是一个奇怪的数值。

检查之前的代码,发现程序忘记给变量i赋初值了。

变量i的初值到底应该是多少是合适的?分析代码可以得出变量i的初值设置为0较合适,这是通过比较变量item的初值得出的。

终止调试,修改程序代码,在语句“item =1;”之前插入语句“i=0;”,重新编译,连接运行,输入测试用例。

4)程序执行到第一个断点。

单步执行,程序执行到输入第16行,观察到变量item值为1.00,但是分析计算公式,item的值应该为1/3,按照item的值推算,语句“item /=(2*i-1);”应为“item /=(2*i+1);”。

修改程序代码,然后重新编译和连接,程序显示结果正确。

4. 参考代码#include <stdio.h>int main(void){double sum,item;double epsilon;int i;printf("Enter Epsilon:");scanf("%lf",&epsilon);i = 0;item = 1;sum = 0; /*调试时设置断点*/while (item >= epsilon){sum += item;i++;item *= i;item /=(2*i+1);}printf("Pi=%.6lf\n",2*sum); /*调试时设置断点*/return 0; /*调试时设置断点*/}5. 思考题修改上面程序,利用格利高里公式求π的值,要求精确到最后一项的绝对值小于10-4。

公式如下:⋯+-+-=71513114π【教学案例三】1. 实验目的(1)熟练使用while 语句控制循环。

(2)熟练理解和掌握循环体内变量存储的循环变化规则。

2. 实验任务(1)实验内容:一对兔子,从出生后第3个月起每个月都生一对兔子。

小兔子长到第3个月后每个月又生一对兔子。

假如兔子都不死,请问第1个月出生的一对兔子,至少需要繁衍到第几个月时兔子总数才可以达到R 对?(R 为给定的正整数。

)(2)实验要求:输入一个正整数R ,输出“至少到第几个月时,兔子总对数才能达到R 对。

”测试用例:3. (1)问题分析:这显然是一个循环计算的问题。

设某一个月的当月出生的兔子有R1对,两个月大的兔子有R2对,三个月及以上大小的兔子有R3对,则总数是R1+R2+R3对。

那么下一个月的兔子数量按年龄分别是R3=R3+R2、R2=R1、R1=R3。

第1个月的初始值:R1=1、R2=0、R3=0。

(2)实现要点:1)循环控制结构。

循环计算的次数不能预先知道,所以可以采用while 循环,只要R1+R2+R3 < R 的条件满足,就要继续计算下一个月,否则结束循环。

2)每月不同年龄兔子数量的循环更新。

每月不同年龄兔子数量的循环更新规则:R3=R3+R2、R2=R1、R1=R3。

3)把每个月的各月龄兔子数量序列都打印出来,就容易验证结果是否正确。

正确的序列是:1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, ……如果不正确,进行跟踪调试。

4. 参考代码/* 1 */ #include <stdio.h>/* 2 */ int main(void)/* 3 */ {/* 4 */int month=1, R, R1=1, R2=0, R3=0;/* 5 */scanf("%d", &R);/* 6 */while( R1+R2+R3 < R )/* 兔子数量未达到给定的量,继续计算下个月的值 *//* 7 */{ month++;/* 8 */R3 += R2; /* 二月龄兔子变成成年兔子*//* 9 */ R2 = R1; /* 一月龄兔子变成二月龄兔子*//* 10 */ R1 = R3; /* 成年兔子又生出一月龄兔子*//* 11 */}/* 12 */printf("至少第 %d 个月才有 %d 对兔子。

\n", month, R1+R2+R3 );/* 13 */ }5. 思考题这个兔子繁殖的增长序列与Fibonacci序列(后一项是前两项的和)有什么关系?【教学案例四】1. 实验目的(1) 熟练使用当形循环语句控制循环。

(2) 熟练掌握整数中各位数的处理。

2. 实验任务(1) 实验内容:从键盘读入一个整数,统计该数的位数。

实验分析(1)问题分析:一个整数由多位数字组成,统计过程需要逐位地数,因此这是个循环过程,循环次数由整数的位数决定。

(2)实现要点:由于需要处理的数据有待输入,故无法事先确定循环次数。

程序中采用do-while循环语句。

由于负数和相应的正数的位数是一样的,所以把输入的负数转换为正数后再处理。

将输入的整数不断地整除10,该数最后变成了0。

例如,234 / 10商为23,23再整除10商为2,2再整除10商为0并结束循环,一共循环了三次,故234的位数是3。

4. 参考代码/* 1 */ # include <stdio.h>/* 2 */ int main(void)/* 3 */ {/* 4 */ int count, number; /* count 记录整数number的位数 *//* 5 *//* 6 */ count = 0;/* 7 */ printf("Enter a number:"); /* 输入提示 *//* 8 */ scanf ("%d", &number);/* 9 */ if(number < 0) number = -number; /* 将输入的负数转换为正数 *//* 10 */ do{/* 11*/ number = number / 10; /* 整除后减少一位个位数,组成一个新数 *//* 12 */ count++; /* 位数加1 *//* 13 */ }while(number != 0); /* 判断循环条件 *//* 14 */ printf("It contains %d digits.\n", count);/* 15 *//* 16 */ return 0;/* 17 */ }5. 思考题将程序中的do-while语句改为下列while语句,会影响程序的功能吗?为什么?再增加一条什么语句,就可以实现同样的功能?while(number != 0){number = number / 10;count ++;}【教学案例五】1. 实验目的(1)熟练使用do/while 循环语句以及理解do/while语句的执行顺序;(2)理解二分法的概念,掌握运用二分法求简单方程近似解的方法;(2)熟练理解和掌握程序错误判断及修改。

相关文档
最新文档