程序的控制结构循环控制结构课件

上传人:仙*** 文档编号:241635748 上传时间:2024-07-11 格式:PPT 页数:79 大小:1.55MB
返回 下载 相关 举报
程序的控制结构循环控制结构课件_第1页
第1页 / 共79页
程序的控制结构循环控制结构课件_第2页
第2页 / 共79页
程序的控制结构循环控制结构课件_第3页
第3页 / 共79页
点击查看更多>>
资源描述
程序的控制程序的控制结构循构循环控制控制结构构本章学习内容本章学习内容 算法的描述方法算法的描述方法算法的描述方法算法的描述方法常用算法(累加累乘、统计、递推迭代、穷举)常用算法(累加累乘、统计、递推迭代、穷举)常用算法(累加累乘、统计、递推迭代、穷举)常用算法(累加累乘、统计、递推迭代、穷举)选择结构及相关控制语句选择结构及相关控制语句选择结构及相关控制语句选择结构及相关控制语句 循环结构及相关控制语句循环结构及相关控制语句循环结构及相关控制语句循环结构及相关控制语句 结构化程序设计的基本思想结构化程序设计的基本思想结构化程序设计的基本思想结构化程序设计的基本思想 Skill:Skill:Map problem to solution in flowchart and pseudocode Map problem to solution in flowchart and pseudocode formsformsBe able to develop a program containing selection and Be able to develop a program containing selection and loop control structureloop control structure循环结构循环结构学习内容学习内容 计数控制的循环计数控制的循环计数控制的循环计数控制的循环 条件控制的循环条件控制的循环条件控制的循环条件控制的循环 forfor语句,语句,语句,语句,whilewhile语句,语句,语句,语句,do-whiledo-while语句语句语句语句 continuecontinue语句,语句,语句,语句,breakbreak语句语句语句语句 嵌套循环嵌套循环嵌套循环嵌套循环 结构化程序设计的基本思想结构化程序设计的基本思想结构化程序设计的基本思想结构化程序设计的基本思想 程序调试与排错程序调试与排错程序调试与排错程序调试与排错Example: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问题的提出问题的提出问题的提出问题的提出Input n1Input n2Input n3input n4input n5output sumsum n1+n2+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问题的提出问题的提出问题的提出问题的提出循环控制结构与循环语句循环控制结构与循环语句标记标记控制控制控制控制Sentinel Sentinel ControlledControlled计计数控制数控制数控制数控制Counter ControlledCounter Controlled1,2,3,4,4,3,2,1条件控制条件控制条件控制条件控制Condition Condition ControlledControlledHow Loops are Controlled?How Loops are Controlled?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 Increases by 1Uses only 3 variablesAssume input example:2 3 4 5 6计数控制的循环计数控制的循环计数控制的循环计数控制的循环startend计数控制的循环计数控制的循环counter initialValuecounter initialValuetest countertest counterStep nStep xfalsetrueUpdate counterUpdate counter循环体循环体循环体循环体(Body of Body of LoopLoop)当型循环当型循环Condition is tested first 计数控制计数控制Loop is controlled by a counterSyntaxforfor(initial value;condition;update counter)statement;Orforfor(initial value;condition;update counter)statement;statement;for循环语句循环语句循环起始条件循环起始条件循环起始条件循环起始条件循环结束条件循环结束条件循环结束条件循环结束条件循环变量增值循环变量增值循环变量增值循环变量增值复合语句复合语句compound statement被当作一条语句看待被当作一条语句看待循环变量控制循环次循环变量控制循环次数,不要在循环体内数,不要在循环体内改变这个变量的值改变这个变量的值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循环语句循环语句startendExample:for(num=1;num=3;num+)printf(“%dt”,num);num1_printf(“have come to exitn”);1_212_3123_4123have come to exit_for循环语句循环语句A直直到到型型循循环环假假真真条件控制的循环条件控制的循环A当当型型循循环环真真假假假 当型循环当型循环Condition is tested first 条件或计数控制条件或计数控制 Loop is controlled by condition or a counter Syntaxwhilewhile(condition)(condition)statement;statement;Orwhilewhile(condition)(condition)statement;statement;statement;statement;No No semicolon!while循环语句循环语句 直到型循环直到型循环直到型循环直到型循环Statements in the loop are Statements in the loop are executed first(executed first(at least onceat least once),and condition is),and condition is tested tested lastlast 条件或计数控制条件或计数控制条件或计数控制条件或计数控制 Loop is controlled by Loop is controlled by conditioncondition or a or a countercounter SyntaxSyntaxdodo statement;statement;statement;statement;whilewhile(condition);(condition);statement;statement;Dont forget the Dont forget the semicolon!do-while循环语句循环语句 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 value: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循环语句循环语句【例例】计算并输出计算并输出1+2+3+n的值的值 循环次数已知,计数控制的循环循环次数已知,计数控制的循环循环次数已知,计数控制的循环循环次数已知,计数控制的循环sum=0的作用?的作用?【例例】计算并输出计算并输出1+2+3+n的值的值 循环次数已知,计数控制的循环循环次数已知,计数控制的循环循环次数已知,计数控制的循环循环次数已知,计数控制的循环【例例】计算并输出计算并输出1+2+3+n的值的值循环条件第一次就为假循环条件第一次就为假(如输入(如输入-1)时会怎样?)时会怎样?【例例】计算并输出计算并输出1+2+3+n的值的值A当当型型循循环环真真假假假假 Testing Condition First【例例】计算并输出计算并输出1+2+3+n的值的值直直到到型型循循环环A假真真A假假Testing condition last 注意注意 在在在在forfor和和和和whilewhile语句之后一般没有分号语句之后一般没有分号语句之后一般没有分号语句之后一般没有分号 有分号表示循环体就是分号之前的内容有分号表示循环体就是分号之前的内容有分号表示循环体就是分号之前的内容有分号表示循环体就是分号之前的内容空语句空语句空语句空语句表示循环体内什么都不做表示循环体内什么都不做表示循环体内什么都不做表示循环体内什么都不做 while while(i 100)(i 100);i+;i+;死循环死循环死循环死循环 for for(i=0;i 100;i+)(i=0;i 100;i+);printf(%d,i);printf(%d,i);用于延时用于延时用于延时用于延时注意!注意!【例例】计算并输出计算并输出1+2+3+n的值的值 如何减少循环的次数?如何减少循环的次数?如何减少循环的次数?如何减少循环的次数?逗号运算符(逗号运算符(Comma Operator)多数情况下,并不使用整个逗号表达式的值,更多数情况下,并不使用整个逗号表达式的值,更多数情况下,并不使用整个逗号表达式的值,更多数情况下,并不使用整个逗号表达式的值,更常见的情况是要分别得到各表达式的值常见的情况是要分别得到各表达式的值常见的情况是要分别得到各表达式的值常见的情况是要分别得到各表达式的值 主要用在循环语句中,同时对多个变量赋初值等主要用在循环语句中,同时对多个变量赋初值等主要用在循环语句中,同时对多个变量赋初值等主要用在循环语句中,同时对多个变量赋初值等 forfor(i=1,j=100;i j;i+,j-)(i=1,j=100;i j;i+,j-)表达式表达式表达式表达式1,1,表达式表达式表达式表达式2,2,表达式表达式表达式表达式n n循环起始条件循环起始条件循环变量增值循环变量增值循环结束条件循环结束条件【例例】计算并输出计算并输出1+2+3+n的值的值【例例】计算并输出计算并输出n!=1 2 3 n【例例】计算并输出计算并输出1!,2!,3!,n!若用户不慎输入了非法字符,那么先清除输入缓冲区中若用户不慎输入了非法字符,那么先清除输入缓冲区中若用户不慎输入了非法字符,那么先清除输入缓冲区中若用户不慎输入了非法字符,那么先清除输入缓冲区中的内容,然后提示用户重新输入数据直到输入正确为止的内容,然后提示用户重新输入数据直到输入正确为止的内容,然后提示用户重新输入数据直到输入正确为止的内容,然后提示用户重新输入数据直到输入正确为止【例例】输入两个整型数,计算并输输入两个整型数,计算并输出两个整数的最大值出两个整数的最大值scanf()返回值为正确读入的数据项数返回值为正确读入的数据项数#include#include int main()int main()int sum=0,x,y;int sum=0,x,y;do do scanf(%d%d,&x,&y);scanf(%d%d,&x,&y);while(while(x0&y0 x0&y0););sum=x+y;sum=x+y;printf(The sum=%dn,sum);printf(The sum=%dn,sum);return 0;return 0;拓展练习拓展练习输入两个非负数并求和输入两个非负数并求和 循环次数未知,循环次数未知,循环次数未知,循环次数未知,条件条件条件条件控制的循环控制的循环控制的循环控制的循环 循环次数未知,循环次数未知,循环次数未知,循环次数未知,标记标记标记标记控制的循环控制的循环控制的循环控制的循环标记值标记值Sentinel ValueCan you identify the input and output?【例例】输入数据,显示每次累加的输入数据,显示每次累加的结果,直到输入结果,直到输入0时为止时为止truenum!=0sumsum+numfalseinput numsum 0output sumtruestartend#include void main()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 循环次数未知,循环次数未知,循环次数未知,循环次数未知,标记标记标记标记控制的循环控制的循环控制的循环控制的循环【例例】输入数据,显示每次累加的输入数据,显示每次累加的结果,直到输入结果,直到输入0时为止时为止选择三种循环的一般原则选择三种循环的一般原则 如果循环次数已知,计数控制的循环如果循环次数已知,计数控制的循环如果循环次数已知,计数控制的循环如果循环次数已知,计数控制的循环用用用用forfor 如果循环次数未知,条件控制的循环如果循环次数未知,条件控制的循环如果循环次数未知,条件控制的循环如果循环次数未知,条件控制的循环用用用用whilewhile 如果循环体至少要执行一次如果循环体至少要执行一次如果循环体至少要执行一次如果循环体至少要执行一次用用用用do-whiledo-while 这只是这只是这只是这只是“一般一般一般一般”原则,不是原则,不是原则,不是原则,不是“原则原则原则原则”例例4.11:国王的许诺国王的许诺 相传国际象棋是古印度舍罕王的宰相达依尔发明的。舍罕王十相传国际象棋是古印度舍罕王的宰相达依尔发明的。舍罕王十相传国际象棋是古印度舍罕王的宰相达依尔发明的。舍罕王十相传国际象棋是古印度舍罕王的宰相达依尔发明的。舍罕王十分喜欢象棋,决定让宰相自己选择何种赏赐。分喜欢象棋,决定让宰相自己选择何种赏赐。分喜欢象棋,决定让宰相自己选择何种赏赐。分喜欢象棋,决定让宰相自己选择何种赏赐。这位聪明的宰相指着这位聪明的宰相指着这位聪明的宰相指着这位聪明的宰相指着8 88 8共共共共6464格的象棋盘说:陛下,请您赏给格的象棋盘说:陛下,请您赏给格的象棋盘说:陛下,请您赏给格的象棋盘说:陛下,请您赏给我一些麦子吧,就在棋盘的第一个格子中放我一些麦子吧,就在棋盘的第一个格子中放我一些麦子吧,就在棋盘的第一个格子中放我一些麦子吧,就在棋盘的第一个格子中放1 1粒,第粒,第粒,第粒,第2 2格中放格中放格中放格中放2 2粒,第粒,第粒,第粒,第3 3格放格放格放格放4 4粒,以后每一格都比前一格增加一倍,依此放完粒,以后每一格都比前一格增加一倍,依此放完粒,以后每一格都比前一格增加一倍,依此放完粒,以后每一格都比前一格增加一倍,依此放完棋盘上的棋盘上的棋盘上的棋盘上的6464个格子,我就感恩不尽了。个格子,我就感恩不尽了。个格子,我就感恩不尽了。个格子,我就感恩不尽了。舍罕王让人扛来一袋麦子,他要兑现他的许诺。舍罕王让人扛来一袋麦子,他要兑现他的许诺。舍罕王让人扛来一袋麦子,他要兑现他的许诺。舍罕王让人扛来一袋麦子,他要兑现他的许诺。国王能兑现他的许诺吗?试编程计算舍罕王共要多少麦子赏赐国王能兑现他的许诺吗?试编程计算舍罕王共要多少麦子赏赐国王能兑现他的许诺吗?试编程计算舍罕王共要多少麦子赏赐国王能兑现他的许诺吗?试编程计算舍罕王共要多少麦子赏赐他的宰相,这些麦子合多少立方米?他的宰相,这些麦子合多少立方米?他的宰相,这些麦子合多少立方米?他的宰相,这些麦子合多少立方米?(已知(已知(已知(已知1 1立方米麦子约立方米麦子约立方米麦子约立方米麦子约1.42e81.42e8粒)粒)粒)粒)总粒数为:总粒数为:总粒数为:总粒数为:sum=1+2+2sum=1+2+2sum=1+2+2sum=1+2+22 2 2 2+2+2+2+23 3 3 3+2+2+2+263636363#definedefine CONST 1.42e8 CONST 1.42e8#includeinclude#includeinclude mainmain()()intint n;n;doubledouble term,sum term,sum=0=0;/*;/*累加求和变量赋初值累加求和变量赋初值累加求和变量赋初值累加求和变量赋初值*/forfor(n=1;n=64;n+)(n=1;n=64;n+)term=pow(2,n-1);term=pow(2,n-1);/*/*根据累加项的规律计算累加项根据累加项的规律计算累加项根据累加项的规律计算累加项根据累加项的规律计算累加项 */sum=sum+term;/*sum=sum+term;/*作累加运算作累加运算作累加运算作累加运算*/printfprintf(sum=%en,sum=%en,sum);/*sum);/*打印总麦粒数打印总麦粒数打印总麦粒数打印总麦粒数*/printfprintf(volum=%envolum=%en,sum/CONST);/*,sum/CONST);/*折合总麦粒体积数折合总麦粒体积数折合总麦粒体积数折合总麦粒体积数*/例例4.11方法方法1sum=1+2+2sum=1+2+22 2+2+23 3+2+26363#define CONST 1.42e8#define CONST 1.42e8#include#include mainmain()()intint n;n;doubledouble term term=1=1,sum,sum=1=1;/*/*累乘求积累加求和变量赋初值累乘求积累加求和变量赋初值累乘求积累加求和变量赋初值累乘求积累加求和变量赋初值*/forfor(n=(n=2 2;n=64;n+);n=64;n+)term=term*2;/*term=term*2;/*根据后项总是前项的根据后项总是前项的根据后项总是前项的根据后项总是前项的2 2倍计算累加项倍计算累加项倍计算累加项倍计算累加项*/sum=sum+term;/*sum=sum+term;/*作累加运算作累加运算作累加运算作累加运算*/printfprintf(sum=%ensum=%en,sum);/*,sum);/*打印总麦粒数打印总麦粒数打印总麦粒数打印总麦粒数*/printfprintf(volum=%envolum=%en,sum/CONST);/*,sum/CONST);/*折合总麦粒体积数折合总麦粒体积数折合总麦粒体积数折合总麦粒体积数*/例例4.11方法方法2sum=1+2+2sum=1+2+22 2+2+23 3+2+26363循序渐进式编程循序渐进式编程例例4.64.6:猜数游戏猜数游戏想一个想一个1100之间的数之间的数猜对猜对:right猜错猜错:wrong并提示大并提示大小小只猜1次直到猜对为止最多猜10次猜多个数10次猜不对就猜下一个数循序渐进式编程循序渐进式编程:猜数游戏:猜数游戏猜数游戏用到的库函数猜数游戏用到的库函数 怎样模拟计算机怎样模拟计算机怎样模拟计算机怎样模拟计算机“想想想想”一个数呢?一个数呢?一个数呢?一个数呢?随机函数随机函数随机函数随机函数rand()rand()产生产生产生产生0,RAND_MAX 0,RAND_MAX 之间的随机数之间的随机数之间的随机数之间的随机数magic=rand();magic=rand();#include#include RAND_MAXRAND_MAX在在在在stdlib.hstdlib.h中定义,不大于双字节整数中定义,不大于双字节整数中定义,不大于双字节整数中定义,不大于双字节整数的最大值的最大值的最大值的最大值32767 32767 产生产生产生产生0,b-1 0,b-1 之间的随机数之间的随机数之间的随机数之间的随机数magic=rand()%b;magic=rand()%b;产生产生产生产生a,a+b-1 a,a+b-1 之间的随机数之间的随机数之间的随机数之间的随机数magic=rand()%b+a;magic=rand()%b+a;#includeinclude#includeinclude main()main()intint magic;/*magic;/*计算机计算机计算机计算机 想想想想 的数的数的数的数*/intint guess;/*guess;/*人猜的数人猜的数人猜的数人猜的数*/magic=rand()%100+1;magic=rand()%100+1;/*“/*“想想想想”一个一个一个一个11,100100之间的数之间的数之间的数之间的数magic*/magic*/printf(Please guess a magic number:);printf(Please guess a magic number:);scanf(%d,&guess);scanf(%d,&guess);ifif(guess magic)(guess magic)printf(Wrong!Too high!n);printf(Wrong!Too high!n);else ifelse if(guess magic)(guess magic)printf(Wrong!Too low!n);printf(Wrong!Too low!n);elseelse printf(Right!n);printf(Right!n);printf(The number is:%d n,magic);printf(The number is:%d n,magic);例例4.6只猜1次#includeinclude#includeinclude main()main()intint magic;magic;intint guess;guess;intint counter;counter;/*/*记录人猜次数的计数器变量记录人猜次数的计数器变量记录人猜次数的计数器变量记录人猜次数的计数器变量*/magic=rand()%100+1;magic=rand()%100+1;counter=0;counter=0;/*/*计数器变量计数器变量计数器变量计数器变量countcount初始化为初始化为初始化为初始化为0*/0*/dodo printf(Please guess a magic number:);printf(Please guess a magic number:);scanf(%d,&guess);scanf(%d,&guess);counter+;counter+;/*/*计数器变量计数器变量计数器变量计数器变量countcount加加加加1*/1*/ifif(guess magic)(guess magic)printf(Wrong!Too high!n);printf(Wrong!Too high!n);else ifelse if(guess magic)(guess magic)printf(Wrong!Too low!n);printf(Wrong!Too low!n);else else printf(Right!n);printf(Right!n);whilewhile (guess!=magic);(guess!=magic);printf(counter=%d n,counter);printf(counter=%d n,counter);直到猜对为止例例4.9猜数游戏用到的库函数猜数游戏用到的库函数 每次运行程序时机器所每次运行程序时机器所每次运行程序时机器所每次运行程序时机器所“想想想想”的数都是一样的,这的数都是一样的,这的数都是一样的,这的数都是一样的,这是什么原因呢?是什么原因呢?是什么原因呢?是什么原因呢?函数函数函数函数rand()rand()产生的只是伪随机数产生的只是伪随机数产生的只是伪随机数产生的只是伪随机数 随机函数随机函数随机函数随机函数srandsrand为函数为函数为函数为函数rand()rand()设置随机数种子来实现对函数设置随机数种子来实现对函数设置随机数种子来实现对函数设置随机数种子来实现对函数randrand所产所产所产所产生的伪随机数的生的伪随机数的生的伪随机数的生的伪随机数的“随机化随机化随机化随机化”通过键入随机数种子,产生通过键入随机数种子,产生通过键入随机数种子,产生通过键入随机数种子,产生0,1000,1000,1000,100之间的随机数之间的随机数之间的随机数之间的随机数scanf(%u,&seed);scanf(%u,&seed);srand(seed);srand(seed);magic=rand()%100+1;magic=rand()%100+1;#includeinclude#includeinclude main()main()intint magic;magic;intint guess;guess;intint counter;/*counter;/*记录人猜次数的计数器变量记录人猜次数的计数器变量记录人猜次数的计数器变量记录人猜次数的计数器变量*/unsigned int unsigned int seed;seed;printf(Please enter seed:);printf(Please enter seed:);scanf(%u,&seed);scanf(%u,&seed);srand(seed);srand(seed);magic=rand()%100+1;magic=rand()%100+1;counter=0;/*counter=0;/*计数器变量计数器变量计数器变量计数器变量countcount初始化为初始化为初始化为初始化为0*/0*/dodo printf(Please guess a magic number:);printf(Please guess a magic number:);scanf(%d,&guess);scanf(%d,&guess);counter+;/*counter+;/*计数器变量计数器变量计数器变量计数器变量countcount加加加加1*/1*/ifif(guess magic)(guess magic)printf(Wrong!Too high!n);printf(Wrong!Too high!n);else ifelse if(guess magic)(guess magic)printf(Wrong!Too low!n);printf(Wrong!Too low!n);else else printf(Right!n);printf(Right!n);whilewhile (guess!=magic);(guess!=magic);printf(counter=%d n,counter);printf(counter=%d n,counter);直到猜对为止例例4.9猜数游戏用到的库函数猜数游戏用到的库函数 使用计算机读取其时钟值并把该值自动设置为随机使用计算机读取其时钟值并把该值自动设置为随机使用计算机读取其时钟值并把该值自动设置为随机使用计算机读取其时钟值并把该值自动设置为随机数种子,产生数种子,产生数种子,产生数种子,产生0,1000,100之间的随机数之间的随机数之间的随机数之间的随机数 函数函数函数函数time()time()返回以秒计算的当前时间值,该值被返回以秒计算的当前时间值,该值被返回以秒计算的当前时间值,该值被返回以秒计算的当前时间值,该值被转换为无符号整数并用作随机数发生器的种子转换为无符号整数并用作随机数发生器的种子转换为无符号整数并用作随机数发生器的种子转换为无符号整数并用作随机数发生器的种子#include#include srand(time(NULL);srand(time(NULL);magic=rand()%100+1;magic=rand()%100+1;函数函数函数函数time()time()能为程序员提供代表时间的字符串,能为程序员提供代表时间的字符串,能为程序员提供代表时间的字符串,能为程序员提供代表时间的字符串,使用使用使用使用NULLNULL作为函数参数使其不具备此功能作为函数参数使其不具备此功能作为函数参数使其不具备此功能作为函数参数使其不具备此功能#includeinclude#includeinclude#include#include main()main()intint magic;magic;intint guess;guess;intint counter;/*counter;/*记录人猜次数的计数器变量记录人猜次数的计数器变量记录人猜次数的计数器变量记录人猜次数的计数器变量*/srand(time(NULL);srand(time(NULL);magic=rand()%100+1;magic=rand()%100+1;counter=0;/*counter=0;/*计数器变量计数器变量计数器变量计数器变量countcount初始化为初始化为初始化为初始化为0*/0*/dodo printf(Please guess a magic number:);printf(Please guess a magic number:);scanf(%d,&guess);scanf(%d,&guess);counter+;/*counter+;/*计数器变量计数器变量计数器变量计数器变量countcount加加加加1*/1*/ifif(guess magic)(guess magic)printf(Wrong!Too high!n);printf(Wrong!Too high!n);else ifelse if(guess magic)(guess magic)printf(Wrong!Too low!n);printf(Wrong!Too low!n);else else printf(Right!n);printf(Right!n);whilewhile (guess!=magic);(guess!=magic);printf(counter=%d n,counter);printf(counter=%d n,counter);直到猜对为止例例4.9#includeinclude#includeinclude#includeinclude main()main()intint magic;magic;intint guess;guess;intint counter;/*counter;/*记录人猜次数的计数器变量记录人猜次数的计数器变量记录人猜次数的计数器变量记录人猜次数的计数器变量*/srand(time(NULL);srand(time(NULL);magic=rand()%100+1;magic=rand()%100+1;counter=0;/*counter=0;/*计数器变量计数器变量计数器变量计数器变量countcount初始化为初始化为初始化为初始化为0*/0*/dodo printf(Please guess a magic number:);printf(Please guess a magic number:);scanf(%d,&guess);scanf(%d,&guess);counter+;/*counter+;/*计数器变量计数器变量计数器变量计数器变量countcount加加加加1*/1*/ifif(guess magic)(guess magic)printf(Wrong!Too high!n);printf(Wrong!Too high!n);else ifelse if(guess magic)(guess magic)printf(Wrong!Too low!n);printf(Wrong!Too low!n);else else printf(Right!n);printf(Right!n);whilewhile (guess!=magic(guess!=magic&counter 10&counter magic)(guess magic)printf(Wrong!Too high!n);printf(Wrong!Too high!n);else ifelse if(guess magic)(guess magic)printf(Wrong!Too low!n);printf(Wrong!Too low!n);elseelse printf(Right!n);printf(Right!n);whilewhile(guess!=magic&counter 10);(guess!=magic&counter magic)(guess magic)printf(Wrong!Too high!n);printf(Wrong!Too high!n);else ifelse if(guess magic)(guess magic)printf(Wrong!Too low!n);printf(Wrong!Too low!n);elseelse printf(Right!n);printf(Right!n);whilewhile(guess!=magic&counter 10);(guess!=magic&counter 10);printf(counter=%dn,counter);printf(counter=%dn,counter);printf(Do you want to continue(Y/N or y/n)?);printf(Do you want to continue(Y/N or y/n)?);scanf(%c,&reply);scanf(%c,&reply);while(reply=Y)|(reply=y);while(reply=Y)|(reply=y);嵌套循环嵌套循环例例例例防止非法字符输入防止非法字符输入防止非法字符输入防止非法字符输入【例例】输入输入n值,计算并输出值,计算并输出 1!+2!+3!+n!每次每次单独独计算算累加累加项【例例】输入输入n值,计算并输出值,计算并输出 1!+2!+3!+n!利用前利用前项计算算后后项使用嵌套循环的注意事项使用嵌套循环的注意事项 使用复合语句,以保证逻辑上的正确性使用复合语句,以保证逻辑上的正确性即用一对大花括号将各层循环体语句括起来即用一对大花括号将各层循环体语句括起来即用一对大花括号将各层循环体语句括起来即用一对大花括号将各层循环体语句括起来 内层和外层循环控制变量不能同名,以免造内层和外层循环控制变量不能同名,以免造成混乱成混乱 采用右缩进格式书写,以保证层次的清晰性采用右缩进格式书写,以保证层次的清晰性 注意!注意!#includeinclude mainmain()()intint m,n;m,n;forfor(m=1;m10;m+)(m=1;m10;m+)printf(%4d,m);/*printf(%4d,m);/*打印表头打印表头打印表头打印表头*/printf(n);printf(n);forfor(m=1;m10;m+)(m=1;m10;m+)printf(-);printf(-);printf(n);printf(n);forfor (m=1;m10;m+)(m=1;m10;m+)forfor (n=1;n10;n+)(n=1;n10;n+)printf(%4d,m*n);printf(%4d,m*n);printf(n);printf(n);例例4.144.14:打印:打印乘法九九表乘法九九表#includeinclude mainmain()()intint m,n;m,n;forfor(m=1;m10;m+)(m=1;m10;m+)printf(%4d,m);/*printf(%4d,m);/*打印表头打印表头打印表头打印表头*/printf(n);printf(n);forfor(m=1;m10;m+)(m=1;m10;m+)printf(-);printf(-);printf(n);printf(n);forfor (m=1;m10;m+)(m=1;m10;m+)forfor (n=1;(n=1;n=mn=m;n+);n+)printf(%4d,m*n);printf(%4d,m*n);printf(n);printf(n);例例4.15:打印:打印下三角乘法下三角乘法九九表九九表 breakbreak语句语句语句语句 和和和和 continuecontinue语句语句语句语句对对对对forfor、whilewhile、dodo-whilewhile循环进行内部手术循环进行内部手术循环进行内部手术循环进行内部手术BreakBreak?退出一退出一层循循环或或switchContinueContinue?中断此次中断此次循循环,开始下一次,开始下一次流程的转移控制流程的转移控制 n?10Please enter n:10n=10Please enter n:-10Program is over!【例例4.17】演示演示break与与continue-10#includeinclude void mainvoid main()()intint i,n;i,n;forfor(i=1;i=5;i+)(i=1;i=5;i+)printf(Please enter n:);printf(Please enter n:);scanf(%d,&n);scanf(%d,&n);ifif(n 0)(n 0)breakbreak;printf(n=%dn,n);printf(n=%dn,n);printf(Program is over!n);printf(Program is over!n);n?10Please enter n:10n=10Please enter n:-10Please enter n:20n=20Please enter n:-20Please enter n:30n=30Program is over!【例例4.17】演示演示break与与continue-1020-2030#includeinclude void mainvoid main()()intint i,n;i,n;forfor(i=1;i=5;i+)(i=1;i=5;i+)printf(Please enter n:);printf(Please enter n:);scanf(%d,&n);scanf(%d,&n);ifif(n 0)(n 0)continuecontinue;printf(n=%dn,n);printf(n=%dn,n);printf(Program is over!n);printf(Program is over!n);标号举例标号举例标号举例标号举例error:error:gotogoto举例举例举例举例gotogoto error;error;一般形式一般形式一般形式一般形式goto与标号(与标号(label)韩信有一队兵,他想知道有多少人,便让士兵排队韩信有一队兵,他想知道有多少人,便让士兵排队韩信有一队兵,他想知道有多少人,便让士兵排队韩信有一队兵,他想知道有多少人,便让士兵排队报数。按从报数。按从报数。按从报数。按从1 1 1 1至至至至5 5 5 5报数,最末一个士兵报的数为报数,最末一个士兵报的数为报数,最末一个士兵报的数为报数,最末一个士兵报的数为1 1 1 1;按;按;按;按从从从从1 1 1 1至至至至6 6 6 6报数,最末一个士兵报的数为报数,最末一个士兵报的数为报数,最末一个士兵报的数为报数,最末一个士兵报的数为5 5 5 5;按从;按从;按从;按从1 1 1 1至至至至7 7 7 7报报报报数,最末一个士兵报的数为数,最末一个士兵报的数为数,最末一个士兵报的数为数,最末一个士兵报的数为4 4 4 4;最后再按从;最后再按从;最后再按从;最后再按从1 1 1 1至至至至11111111报报报报数,最末一个士兵报的数为数,最末一个士兵报的数为数,最末一个士兵报的数为数,最末一个士兵报的数为10101010。你知道韩信至少有。你知道韩信至少有。你知道韩信至少有。你知道韩信至少有多少兵吗?多少兵吗?多少兵吗?多少兵吗?设兵数为设兵数为设兵数为设兵数为x x,则,则,则,则x x应满足:应满足:应满足:应满足:x%5=1&x%6=5&x%7=4&x%5=1&x%6=5&x%7=4&x%11=10 x%11=10穷举法,穷举法,穷举法,穷举法,对对对对x x从从从从1 1 1 1开始试验开始试验开始试验开始试验【例例】韩信点兵韩信点兵#includeinclude void void main()main()intint x;x;forfor(x=1;(x=1;x 5000 x 5000;x+);x+)ifif(x%5=1&x%6=5&x%7=4&x%11=10)(x%5=1&x%6=5&x%7=4&x%11=10)printf(x=%dn,x);printf(x=%dn,x);【例例】韩信点兵韩信点兵“瞎猫碰死耗子瞎猫碰死耗子”#includeinclude void void main()main()intint x;x;forfor(x=1;x+)(x=1;x+)ifif(x%5=1&x%6=5&x%7=4&x%11=10)(x%5=1&x%6=5&x%7=4&x%11=10)printf(x=%dn,x);printf(x=%dn,x);【例例】韩信点兵韩信点兵“死循死循环”#includeinclude void void main()main()intint x;x;forfor(x=1;x+)(x=1;x+)ifif(x%5=1&x%6=5&x%7=4&x%11=10)(x%5=1&x%6=5&x%7=4&x%11=10)printf(x=%dn,x);printf(x=%dn,x);goto END;goto END;END:;END:;【例例】韩信点兵韩信点兵goto#includeinclude void void main()main()intint x;x;forfor(x=1;x+)(x=1;x+)ifif(x%5=1&x%6=5&x%7=4&x%11=10)(x%5=1&x%6=5&x%7=4&x%11=10)printf(x=%dn,x);printf(x=%dn,x);break;break;【例例】韩信点兵韩信点兵break#includeinclude#include#include void void main()main()intint x;x;forfor(x=1;x+)(x=1;x+)ifif(x%5=1&x%6=5&x%7=4&x%11=10)(x%5=1&x%6=5&x%7=4&x%11=10)printf(x=%dn,x);printf(x=%dn,x);exit(0)exit(0);【例例】韩信点兵韩信点兵break标准准库函数,函数,作用是终止整作用是终止整个程序的执行,个程序的执行,强制返回操作强制返回操作系统系统#includeinclude void void main()main()intint x;x;int find=0;int find=0;/*/*置找到标志为假置找到标志为假*/forfor(x=1;(x=1;!find!find;x+);x+)ifif(x%5=1&x%6=5&x%7=4&x%11=10)(x%5=1&x%6=5&x%7=4&x%11=10)printf(x=%dn,x);printf(x=%dn,x);find=1;find=1;/*/*置找到标志为置找到标志为真真*/【例例】韩信点兵韩信点兵标志变量标志变量结构清晰的程构清晰的程序序结构化程序设计结构化程序设计 Structured ProgrammingStructured Programming,简称,简称,简称,简称SPSP 19651965年,最早由年,最早由年,最早由年,最早由E.W.DijkstraE.W.Dijkstra在一次国际会议上提出在一次国际会议上提出在一次国际会议上提出在一次国际会议上提出 19661966年,年,年,年,C.BohmC.Bohm和和和和G.JacopiniG.Jacopini首先证明了:首先证明了:首先证明了:首先证明了:只用顺序、选择、循环三种基本的控制结构就能实现任何只用顺序、选择、循环三种基本的控制结构就能实现任何只用顺序、选择、循环三种基本的控制结构就能实现任何只用顺序、选择、循环三种基本的控制结构就能实现任何单入口、单出口的程序单入口、单出口的程序单入口、单出口的程序单入口、单出口的程序给结构化程序设计奠定了基础给结构化程序设计奠定了基础给结构化程序设计奠定了基础给结构化程序设计奠定了基础 19711971年,年,年,年,IBMIBM公司的公司的公司的公司的MillsMills提出:提出:提出:提出:程序应该只有一个入口和一个出口程序应该只有一个入口和一个出口程序应该只有一个入口和一个出口程序应该只有一个入口和一个出口进一步补充了结构化程序的规则进一步补充了结构化程序的规则进一步补充了结构化程序的规则进一步补充了结构化程序的规则结构化程序设计结构化程序设计 目前,还没有一个严格的定义目前,还没有一个严格的定义目前,还没有一个严格的定义目前,还没有一个严格的定义19741974年,年,年,年,D.GriesD.Gries教授将已有的对结构化程序设计的不同教授将已有的对结构化程序设计的不同教授将已有的对结构化程序设计的不同教授将已有的对结构化程序设计的不同解释归纳为解释归纳为解释归纳为解释归纳为1313种。种。种。种。一个比较流行的定义是:一个比较流行的定义是:一个比较流行的定义是:一个比较流行的定义是:结构化程序设计是一种进行程序设计的原则和方法结构
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!