程序的控制结构循环控制结构.pptx
《程序的控制结构循环控制结构.pptx》由会员分享,可在线阅读,更多相关《程序的控制结构循环控制结构.pptx(78页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、本章学习内容算法的描述方法常用算法(累加累乘、统计、递推迭代、穷举)选择结构及相关控制语句循环结构及相关控制语句结构化程序设计的基本思想Skill:Map problem to solution in flowchart and pseudocode formsBe able to develop a program containing selection and loop control structure第1页/共78页循环结构学习内容 计数控制的循环 条件控制的循环 for语句,while语句,do-while语句 continue语句,break语句 嵌套循环 结构化程序设计的基本思
2、想 程序调试与排错第2页/共78页Example:Can you identify the input and output?Draw a flowchart for the following problem:读入5个整数,计算并显示它们的和.Input:5 个整数n1,n2,n3,n4,n5 Output:n1,n2,n3,n4,n5的和Input example:2 3 4 5 6Output example:20问题的提出问题的提出问题的提出问题的提出第3页/共78页Input n1Input n2Input n3input n4input n5output sumsum n1+n2+
3、n3+n4+n52 2n1Assume input example:2 3 4 5 63 3n24 4n35 5n46 6n52020sumendThis flowchart does not use loop,hence we need to use 6 different variablesstart问题的提出问题的提出问题的提出问题的提出第4页/共78页循环控制结构与循环语句标记控制标记控制Sentinel Sentinel ControlledControlled计数控制计数控制Counter ControlledCounter Controlled1,2,3,4,4,3,2,1条件控
4、制条件控制Condition Condition ControlledControlledHow Loops are Controlled?How Loops are Controlled?第5页/共78页counter 1,sum 0counter6sum sum+nfalsetruecounter+output suminput n1countersum01 6true2n0+2222 6true32+3533 6true45+4944 6true59+51455 6true614+62066 6falseThis loop iscounter-controlled The counter
5、 Increases by 1Uses only 3 variablesAssume input example:2 3 4 5 6计数控制的循环计数控制的循环计数控制的循环计数控制的循环startend第6页/共78页计数控制的循环counter initialValuecounter initialValuetest countertest counterStep nStep xfalsetrueUpdate counterUpdate counter循环体循环体(Body of Body of LoopLoop)第7页/共78页当型循环当型循环Condition is tested fi
6、rst 计数控制计数控制Loop is controlled by a counterSyntaxforfor(initial value;condition;update counter)statement;Orforfor(initial value;condition;update counter)statement;statement;for循环语句循环语句循环起始条件循环起始条件循环起始条件循环起始条件循环结束条件循环结束条件循环结束条件循环结束条件循环变量增值循环变量增值循环变量增值循环变量增值复合语句复合语句compound statement被当作一条语句看待被当作一条语句看待
7、循环变量控制循环次循环变量控制循环次数,不要在循环体内数,不要在循环体内改变这个变量的值改变这个变量的值第8页/共78页i 0,sum 0i 5sumsum+nfalsetruei+output suminput nint i,sum,n;sum=0;for(i=0;i 5;i+)scanf(“%d”,&n);sum=sum+n;printf(“%d”,sum);for循环语句循环语句startend第9页/共78页Example:for(num=1;num=3;num+)printf(“%dt”,num);num1_printf(“have come to exitn”);1_212_312
8、3_4123have come to exit_for循环语句循环语句第10页/共78页A A条条 件件P P P P直直直直到到到到型型型型循循循循环环环环假假真真条件控制的循环条件控制的循环A A当当当当型型型型循循循循环环环环真真假假假条条 件件P P P P第11页/共78页 当型循环当型循环Condition is tested first 条件或计数控制条件或计数控制 Loop is controlled by condition or a counter Syntaxwhilewhile(condition)(condition)statement;statement;Orwhi
9、lewhile(condition)(condition)statement;statement;statement;statement;No No semicolon!while循环语句循环语句第12页/共78页直到型循环Statements in the loop are executed first(at least once),and condition is tested last条件或计数控制 Loop is controlled by condition or a counter Syntaxdo statement;statement;while(condition);stat
10、ement;Dont forget the Dont forget the semicolon!do-while循环语句循环语句第13页/共78页Example:printf(“Input start and end value:“);scanf(“%d%d”,&start,&end);do printf(“%c(%d)n“,start,start);start+;while(start=end);_?start?endInput start and end value:_Input start and end value:65 67_65656767Input start and end v
11、alue:65 67A(65)_666666=67Input start and end value:65 67A(65)B(66)_67=6767Input start and end value:65 67A(65)B(66)C(67)_686868=67do-while循环语句循环语句第14页/共78页【例】计算并输出1+2+3+n的值循环次数已知,计数控制的循环循环次数已知,计数控制的循环循环次数已知,计数控制的循环循环次数已知,计数控制的循环sum=0的作用?的作用?第15页/共78页【例】计算并输出1+2+3+n的值循环次数已知,计数控制的循环循环次数已知,计数控制的循环循环次数已
12、知,计数控制的循环循环次数已知,计数控制的循环第16页/共78页【例】计算并输出1+2+3+n的值循环条件第一次就为假(如输入-1)时会怎样?第17页/共78页【例】计算并输出1+2+3+n的值A A当当型型循循环环真真假假条条 件件P P P P假假条条 件件P P P P Testing Condition First第18页/共78页【例】计算并输出1+2+3+n的值条条 件件P P P P直直到到型型循循环环A A假真真条条 件件P P P PA A假假Testing condition last 第19页/共78页注意在for和while语句之后一般没有分号有分号表示循环体就是分号之
13、前的内容空语句表示循环体内什么都不做 while(i 100);i+;死循环 for(i=0;i 100;i+);printf(%d,i);用于延时注意!注意!第20页/共78页【例】计算并输出1+2+3+n的值如何减少循环的次数?如何减少循环的次数?如何减少循环的次数?如何减少循环的次数?第21页/共78页逗号运算符(Comma Operator)多数情况下,并不使用整个逗号表达式的值,更常见的情况是要分别得到各表达式的值主要用在循环语句中,同时对多个变量赋初值等 for(i=1,j=100;i j;i+,j-)表达式表达式1,1,表达式表达式2,2,表达式表达式n n循环起始条件循环变量增
14、值循环结束条件第22页/共78页【例】计算并输出1+2+3+n的值第23页/共78页【例例】计算并输出计算并输出n!=1 2 3 n 第24页/共78页【例例】计算并输出计算并输出1!,2!,3!,n!第25页/共78页若用户不慎输入了非法字符,那么先清除输入缓冲区中的内容,然后提示用户重新输入数据直到输入正确为止【例】输入两个整型数,计算并输出两个整数的最大值scanf()返回值为正确读入的数据项数返回值为正确读入的数据项数 第26页/共78页#include int main()int sum=0,x,y;do scanf(%d%d,&x,&y);while(x0&y0);sum=x+y;
15、printf(The sum=%dn,sum);return 0;拓展练习输入两个非负数并求和循环次数未知,循环次数未知,循环次数未知,循环次数未知,条件条件条件条件控制的循环控制的循环控制的循环控制的循环第27页/共78页循环次数未知,标记控制的循环标记值标记值Sentinel ValueCan you identify the input and output?【例】输入数据,显示每次累加的结果,直到输入0时为止truenum!=0sumsum+numfalseinput numsum 0output sumtruestartend第28页/共78页#include void main()
16、int num;int sum=0;do printf(Input num:);scanf(“%d”,&num);sum=sum+num;printf(sum=%dn,sum);whilewhile(num!=0);【例】输入数据,显示每次累加的结果,直到输入0时为止truenum!=0sumsum+numfalseinput numsum 0output sumtruestartend第29页/共78页循环次数未知,标记控制的循环【例】输入数据,显示每次累加的结果,直到输入0时为止第30页/共78页选择三种循环的一般原则如果循环次数已知,计数控制的循环用for如果循环次数未知,条件控制的循环
17、用while如果循环体至少要执行一次用do-while这只是“一般”原则,不是“原则”第31页/共78页例4.11:国王的许诺相传国际象棋是古印度舍罕王的宰相达依尔发明的。舍罕王十分喜欢象棋,决定让宰相自己选择何种赏赐。这位聪明的宰相指着88共64格的象棋盘说:陛下,请您赏给我一些麦子吧,就在棋盘的第一个格子中放1粒,第2格中放2粒,第3格放4粒,以后每一格都比前一格增加一倍,依此放完棋盘上的64个格子,我就感恩不尽了。舍罕王让人扛来一袋麦子,他要兑现他的许诺。国王能兑现他的许诺吗?试编程计算舍罕王共要多少麦子赏赐他的宰相,这些麦子合多少立方米?(已知1立方米麦子约1.42e8粒)总粒数为:s
18、um=1+2+22+23+263 第32页/共78页#define CONST 1.42e8#include#include main()int n;double term,sum=0;/*累加求和变量赋初值*/for(n=1;n=64;n+)term=pow(2,n-1);/*根据累加项的规律计算累加项*/sum=sum+term;/*作累加运算*/printf(sum=%en,sum);/*打印总麦粒数*/printf(volum=%en,sum/CONST);/*折合总麦粒体积数*/例4.11方法1sum=1+2+2sum=1+2+2sum=1+2+22 22+2+2+23 33+2+2
19、+2636363第33页/共78页#define CONST 1.42e8#include main()int n;double term=1,sum=1;/*累乘求积累加求和变量赋初值*/for(n=2;n=64;n+)term=term*2;/*根据后项总是前项的2倍计算累加项*/sum=sum+term;/*作累加运算*/printf(sum=%en,sum);/*打印总麦粒数*/printf(volum=%en,sum/CONST);/*折合总麦粒体积数*/例4.11方法2sum=1+2+2sum=1+2+2sum=1+2+22 22+2+2+23 33+2+2+2636363第34页
20、/共78页循序渐进式编程例4.64.6:猜数游戏想一个想一个1100之间之间的数的数猜对猜对:right猜错猜错:wrong并提示大并提示大小小第35页/共78页只猜只猜1 1次次直到猜对为止直到猜对为止最多猜最多猜1010次次猜多个数猜多个数1010次猜不对就猜下一个数次猜不对就猜下一个数循序渐进式编程:猜数游戏第36页/共78页猜数游戏用到的库函数怎样模拟计算机“想”一个数呢?随机函数rand()产生0,RAND_MAX 之间的随机数magic=rand();#include RAND_MAX在stdlib.h中定义,不大于双字节整数的最大值32767 产生0,b-1 之间的随机数magi
21、c=rand()%b;产生a,a+b-1 之间的随机数magic=rand()%b+a;第37页/共78页#include#include main()int magic;/*计算机想的数*/int guess;/*人猜的数*/magic=rand()%100+1;/*“想”一个1,100之间的数magic*/printf(Please guess a magic number:);scanf(%d,&guess);if(guess magic)printf(Wrong!Too high!n);else if(guess magic)printf(Wrong!Too low!n);else p
22、rintf(Right!n);printf(The number is:%d n,magic);例4.6只猜只猜1 1次次第38页/共78页#include#include main()int magic;int guess;int counter;/*记录人猜次数的计数器变量*/magic=rand()%100+1;counter=0;/*计数器变量count初始化为0*/doprintf(Please guess a magic number:);scanf(%d,&guess);counter+;/*计数器变量count加1*/if(guess magic)printf(Wrong!To
23、o high!n);else if(guess magic)printf(Wrong!Too low!n);else printf(Right!n);while(guess!=magic);printf(counter=%d n,counter);直到猜对为止直到猜对为止例4.9第39页/共78页猜数游戏用到的库函数每次运行程序时机器所“想”的数都是一样的,这是什么原因呢?函数rand()产生的只是伪随机数随机函数srand为函数rand()设置随机数种子来实现对函数rand所产生的伪随机数的“随机化”通过键入随机数种子,产生0,100之间的随机数scanf(%u,&seed);srand(s
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序 控制 结构 循环
限制150内