《循环结构for语句.ppt》由会员分享,可在线阅读,更多相关《循环结构for语句.ppt(30页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Programming in CProgramming in C西安电子科技大学计算机学院 -School of Computer Science&Engineering,Xidian University,China 1C程序设计程序设计Programming in C Programming in CProgramming in C西安电子科技大学计算机学院 -School of Computer Science&Engineering,Xidian University,China 2上次课的内容提要上次课的内容提要pA成立成立不成立不成立ab循环结构循环结构1(while)pAab循环
2、结构循环结构2(until)lwhilewhile语句的循环体执行语句的循环体执行0 0次次或多次或多次while(while(表达式表达式p)p)循环体语句循环体语句A A;ldo-whiledo-while语句的循环体执行语句的循环体执行1 1次或多次次或多次 do do 循环体语句循环体语句A A;while(while(表达式表达式p);p);Programming in CProgramming in C西安电子科技大学计算机学院 -School of Computer Science&Engineering,Xidian University,China 3q分析问题,在求解过程中
3、:分析问题,在求解过程中:存在一个(些)运算(动作)需要重复进行(循存在一个(些)运算(动作)需要重复进行(循环)若干次。环)若干次。重复的次数是事先确定的,或者是根据条件确定重复的次数是事先确定的,或者是根据条件确定的。的。q处理循环计算需要明确的三个问题:处理循环计算需要明确的三个问题:循环体:循环体:哪些运算(动作)是需要重复进行的;哪些运算(动作)是需要重复进行的;循环条件:循环条件:重复这些运算的条件是什么,即在什重复这些运算的条件是什么,即在什么情况下终止么情况下终止/继续这个重复的过程。继续这个重复的过程。循环准备:循环准备:在进行重复的运算处理之前,需要进在进行重复的运算处理之
4、前,需要进行的准备工作是什么;行的准备工作是什么;循环结构程序的编写要点循环结构程序的编写要点Programming in CProgramming in C西安电子科技大学计算机学院 -School of Computer Science&Engineering,Xidian University,China 4这次课的主要内容这次课的主要内容l lfor语句语句l lbreak语句语句l lcontinue语句语句l l循环嵌套循环嵌套Programming in CProgramming in C西安电子科技大学计算机学院 -School of Computer Science&Engi
5、neering,Xidian University,China 5forfor语句的格式和含义语句的格式和含义lforfor语句的基本格式:语句的基本格式:for(for(表达式表达式1;1;表达式表达式2;2;表达式表达式3)3)循环体语句循环体语句A Alforfor语句的含义:语句的含义:1)1)计算表达式计算表达式1 1;2)2)计算表达式计算表达式2,2,若表达式若表达式2 2的值为的值为“假假”,则结束,则结束forfor语句语句的执行的执行,转转4)4);否则,执行循环体语句;否则,执行循环体语句A;A;3)3)计算表达式计算表达式3,3,然后转然后转2)2);4)4)执行执行f
6、orfor语句之后的第一条语句;语句之后的第一条语句;表达式表达式2 2?A真真 假假表达式表达式1 1表达式表达式3 3Programming in CProgramming in C西安电子科技大学计算机学院 -School of Computer Science&Engineering,Xidian University,China 6forfor语句语句:1+2+.+100:1+2+.+100#include main()int i,s;printf(%dn,s);TC2.0BYNI 1S 0I=100?S S+I输出输出S的值的值开始开始结束结束I I+1ACfor(i=1,s=0;
7、i=100;i+)s+=i;Programming in CProgramming in C西安电子科技大学计算机学院 -School of Computer Science&Engineering,Xidian University,China 7forfor语句中的表达式语句中的表达式lforfor语句的基本格式:语句的基本格式:for(for(表达式表达式1;1;表达式表达式2;2;表达式表达式3)3)循环体语句循环体语句A Al一般情况下一般情况下表达式表达式1 1进行循环计算的初始化进行循环计算的初始化处理处理表达式表达式2 2是循环的条件是循环的条件表达式表达式3 3进行的计算能够
8、对表达进行的计算能够对表达式式2 2的值产生影响的值产生影响表达式表达式2 2?A真真 假假表达式表达式1 1表达式表达式3 3Programming in CProgramming in C西安电子科技大学计算机学院 -School of Computer Science&Engineering,Xidian University,China 8求最大公约数程序求最大公约数程序(for)(for)#include main()int m,n,r;printf(input two integers:);scanf(%d%d,&m,&n);printf(ngcd=%dn,n);TC2.0YNr不
9、等于不等于0?输出输出n的值的值输入正整数输入正整数m和和n开始开始结束结束m n;n rrm被被n除的余数除的余数rm被被n除的余数除的余数for(r=m%n;r!=0;r=m%n)m=n;n=r;Programming in CProgramming in C西安电子科技大学计算机学院 -School of Computer Science&Engineering,Xidian University,China 9forfor语句与语句与whilewhile语句的等价关系语句的等价关系lforfor语句的基本格式:语句的基本格式:for(for(表达式表达式1;1;表达式表达式2;2;表达
10、式表达式3)3)循环体语句循环体语句A A表达式表达式2 2?A真真 假假表达式表达式1 1表达式表达式3 3表达式表达式1 1;while(while(表达式表达式2)2)循环体语句循环体语句A A;表达式表达式3 3;Programming in CProgramming in C西安电子科技大学计算机学院 -School of Computer Science&Engineering,Xidian University,China 10Y N K 2K不能整除不能整除n?K K+1输出输出n是素数是素数 输入输入n的值的值开始开始结束结束YNK等于等于n?输出输出n不是素数不是素数判断素
11、数算法及程序判断素数算法及程序#include main()int k,n;printf(input an integer:);scanf(%d,&n);k=2;while(n%k!=0)k+;if(k=n)printf(%d is a prime.n,n);else printf(%d is not a prime.n,n);TC2.0#include main()int k,n;printf(input an integer:);scanf(%d,&n);if(k=n)printf(%d is a prime.n,n);else printf(%d is not a prime.n,n);
12、for(k=2;n%k!=0;k+);Programming in CProgramming in C西安电子科技大学计算机学院 -School of Computer Science&Engineering,Xidian University,China 11forfor语句小结语句小结l表达式表达式1 1可放置在可放置在forfor语句之前语句之前for(for(表达式表达式1;1;表达式表达式2;2;表达式表达式3)3)循环体语句循环体语句A A表达式表达式1;1;for(;for(;表达式表达式2;2;表达式表达式3)3)循环体语句循环体语句A Al表达式表达式3 3可放置在可放置在f
13、orfor语句的循环体中语句的循环体中for(for(表达式表达式1;1;表达式表达式2;)2;)循环体语句循环体语句A;A;表达式表达式3;3;lforfor语句中的表达式可以是语句中的表达式可以是C C语言允许的任何表达式语言允许的任何表达式Programming in CProgramming in C西安电子科技大学计算机学院 -School of Computer Science&Engineering,Xidian University,China 12forfor语句小结语句小结(续续)l进一步,表达式进一步,表达式2 2可以没有,可以没有,表示无休止地循环表示无休止地循环for
14、(for(表达式表达式1;1;表达式表达式3)3)循环体语句循环体语句A Al三个表达式都省略三个表达式都省略for(;)for(;)循环体语句循环体语句A AAA表达式表达式1表达式表达式3Programming in CProgramming in C西安电子科技大学计算机学院 -School of Computer Science&Engineering,Xidian University,China 13break语句语句Programming in CProgramming in C西安电子科技大学计算机学院 -School of Computer Science&Engineeri
15、ng,Xidian University,China 14breakbreak语句的作用语句的作用l在在switchswitch语句中使用语句中使用 grade=score/10;/*百分制成绩百分制成绩score转换为等级分制转换为等级分制*/switch(grade)case 10:case 9:printf(grade=An);break;case 8:printf(grade=Bn);break;case 7:printf(grade=Cn);break;case 6:printf(grade=Dn);break;case 5:case 4:case 3:case 2:case 1:c
16、ase 0:printf(grade=En);break;default:printf(Invalid data!n);Programming in CProgramming in C西安电子科技大学计算机学院 -School of Computer Science&Engineering,Xidian University,China 15breakbreak语句的作用语句的作用(续续)l在循环语句中使用,强行中止循环在循环语句中使用,强行中止循环pA成立成立不成立不成立ab循环结构循环结构1(while)pAab循环结构循环结构2(until)TC2.0pA成立成立不成立不成立循环结构循环
17、结构(while)BbreakpA成立成立不成立不成立循环结构循环结构(while)BbreakProgramming in CProgramming in C西安电子科技大学计算机学院 -School of Computer Science&Engineering,Xidian University,China 16breakbreak语句的作用语句的作用(续续)l在循环语句中使用,强行中止循环在循环语句中使用,强行中止循环/*计算正整数计算正整数m和和n的最大公约数的最大公约数*/for(k=m;k-)if(n%k=0&m%k=0)break;printf(Gcd=%dn,k);TC2.0
18、Programming in CProgramming in C西安电子科技大学计算机学院 -School of Computer Science&Engineering,Xidian University,China 17continue语句语句Programming in CProgramming in C西安电子科技大学计算机学院 -School of Computer Science&Engineering,Xidian University,China 18continuecontinue语句的作用语句的作用l执行流程到达执行流程到达continuecontinue语句时,结束本轮循
19、语句时,结束本轮循环,开始下一轮循环环,开始下一轮循环pA成立成立不成立不成立循环结构循环结构(while)BpA成立成立不成立不成立循环结构循环结构(while)BcontinuepA成立成立不成立不成立循环结构循环结构(while)BcontinueProgramming in CProgramming in C西安电子科技大学计算机学院 -School of Computer Science&Engineering,Xidian University,China 19continuecontinue语句的应用举例语句的应用举例l输出输出100100200200之间所有不能被之间所有不能被
20、3 3整除的整数。整除的整数。#include main()int n;for(n=100;n=200;n+)if(n%3=0)continue;printf(%dt,n);/*end of for*/TC2.0Programming in CProgramming in C西安电子科技大学计算机学院 -School of Computer Science&Engineering,Xidian University,China 20循环嵌套循环嵌套Programming in CProgramming in C西安电子科技大学计算机学院 -School of Computer Science&
21、Engineering,Xidian University,China 21循环嵌套的概念循环嵌套的概念l循环语句的内嵌语句仍然是循环语句时,循环语句的内嵌语句仍然是循环语句时,则构成嵌套的循环。则构成嵌套的循环。l筛法求不大于正整数筛法求不大于正整数N N的所有素数的所有素数排列排列2,3,.,N2,3,.,N,取出,取出2 2,再从中删除,再从中删除2 2的倍数;的倍数;取出取出3 3,再从中删除,再从中删除3 3的倍数;的倍数;剩余的数中最小者剩余的数中最小者k k必为素数,取出必为素数,取出k k,再从中删除,再从中删除k k的倍数;重复这一步,直到所有的数都已取走或被删的倍数;重复这
22、一步,直到所有的数都已取走或被删除;除;所有取出的数汇集在一起就形成了不大于所有取出的数汇集在一起就形成了不大于N N的素数表的素数表Programming in CProgramming in C西安电子科技大学计算机学院 -School of Computer Science&Engineering,Xidian University,China 22设有两个筛子,分别用设有两个筛子,分别用sievesieve和和primeprime标识,初始时标识,初始时primeprime为空,为空,元素元素2 2n n放在放在sievesieve中中算法结束时,算法结束时,sievesieve为空,
23、而不为空,而不大于大于n n的素数都放在的素数都放在primeprime中中k找出找出sieve中最小的数中最小的数sieve不为空?不为空?Y置置prime为空,为空,sieve包含包含整数整数2,3,.,n2,3,.,n开始开始结束结束将将k放入放入prime中中从从sieve中去掉中去掉k及其倍数及其倍数Nj kjn?从从sieve中去掉中去掉jj j+kYN求精求精筛法求素数筛法求素数Programming in CProgramming in C西安电子科技大学计算机学院 -School of Computer Science&Engineering,Xidian Universit
24、y,China 23百钱百鸡问题百钱百鸡问题中国古代数学家张丘建在他的中国古代数学家张丘建在他的算经算经中曾提出中曾提出著名的著名的“百钱百鸡问题百钱百鸡问题”,其题目如下:,其题目如下:鸡翁鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,翁、母、雏各几何?百钱买百鸡,翁、母、雏各几何?Programming in CProgramming in C西安电子科技大学计算机学院 -School of Computer Science&Engineering,Xidian University,China 24百钱百鸡问题百钱百鸡问题解:设解
25、:设i i、j j、k k分别代表公鸡、母鸡、小鸡的数分别代表公鸡、母鸡、小鸡的数量,根据题意列方程:量,根据题意列方程:根据题意可知,根据题意可知,i i、j j、k k的范围一定是的范围一定是0 0到到100100的正的正整数整数,那么,最简单的解题方法是:穷举,那么,最简单的解题方法是:穷举i i、j j、k k每一种可能的取值组合,直接代入方程组,若满足每一种可能的取值组合,直接代入方程组,若满足该方程组则是一组解。这样即可得到问题的全部解。该方程组则是一组解。这样即可得到问题的全部解。Programming in CProgramming in C西安电子科技大学计算机学院 -Sch
26、ool of Computer Science&Engineering,Xidian University,China 25百钱百鸡问题百钱百鸡问题i 0i 20?买母鸡和买母鸡和小鸡小鸡NY开始开始结束结束i i+1YNj 34?j j+1j 0买小鸡买小鸡YNk 100?k k+1k 0将将i、j、k代入代入i+j+k和和5i+3j+k/3,若都为若都为100,则是一,则是一种买法种买法Programming in CProgramming in C西安电子科技大学计算机学院 -School of Computer Science&Engineering,Xidian University
27、,China 26i=0;while(i 20)i+;int i,j,k;TC2.0j=0;while(j 34)j+;k=0;while(k 100)if(i+j+k=100&i*5+j*3+k/3=100)printf(%d%d%dn,i,j,k);k+;百钱百鸡问题百钱百鸡问题Programming in CProgramming in C西安电子科技大学计算机学院 -School of Computer Science&Engineering,Xidian University,China 27for(i=0;i 20;i+)main()int i,j,k;TC2.0for(j=0;j
28、 34;j+)for(k=0;k 100;k+)if(i+j+k=100&i*15+j*9+k=300)printf(%d%d%dn,i,j,k);百钱百鸡问题(百钱百鸡问题(forfor)Programming in CProgramming in C西安电子科技大学计算机学院 -School of Computer Science&Engineering,Xidian University,China 28for(i=0;i 20;i+)main()int i,j,k;TC2.0for(j=0;j 34;j+)k=100 i j;if(i*15+j*9+k=300)printf(%d%d%
29、dn,i,j,k);百钱百鸡问题(百钱百鸡问题(forfor续)续)Programming in CProgramming in C西安电子科技大学计算机学院 -School of Computer Science&Engineering,Xidian University,China 29语句小结语句小结l l表达式语句、赋值语句表达式语句、赋值语句l lifl lswitchl lgotol lwhilel ldo.whilel lforl lbreakl lcontinueProgramming in CProgramming in C西安电子科技大学计算机学院 -School of Computer Science&Engineering,Xidian University,China 30作业作业6.4 6.7 6.10