c语言教案第9讲_第1页
c语言教案第9讲_第2页
c语言教案第9讲_第3页
c语言教案第9讲_第4页
c语言教案第9讲_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第九讲 循环嵌套z教学目的与要求:教学目的与要求: 了解三种循环语句的特点了解三种循环语句的特点 掌握循环的嵌套掌握循环的嵌套z教学内容提要:教学内容提要: 1.三种循环语句三种循环语句 2. 循环语句的嵌套循环语句的嵌套z教学重点:教学重点:循环语句的嵌套循环语句的嵌套z教学难点:教学难点: 循环语句的嵌套循环语句的嵌套z教学进度:教学进度:P124P133z教学过程:教学过程:1 1三种循环语句的比较三种循环语句的比较 (2 2)dowhiledowhile语句是后测试终止条件的循环语句,语句是后测试终止条件的循环语句,循环体至少执行一次。循环体至少执行一次。(3 3) whilewhil

2、e和和dodowhilewhile循环,只在循环,只在whilewhile后面指定循后面指定循环条件,在循环体中应包含使循环趋于结束的语句环条件,在循环体中应包含使循环趋于结束的语句( (如如i+i+,或,或i=i+1i=i+1等等) )。 forfor循环可以在表达式循环可以在表达式3 3中包含使循环趋于结束的操中包含使循环趋于结束的操作,甚至可以将循环体中的操作全部放到表达式作,甚至可以将循环体中的操作全部放到表达式3 3中。中。因此因此forfor语句的功能更强,凡用语句的功能更强,凡用whilewhile循环能完成的,用循环能完成的,用forfor循环都能实现。循环都能实现。 whil

3、ewhile语句和语句和forfor语句是属于先测试终止条件的语句是属于先测试终止条件的循环语句,故循环体有可能一次也不执行。循环语句,故循环体有可能一次也不执行。(4) (4) 用用whilewhile和和dodowhilewhile循环时,循环变量初始化的循环时,循环变量初始化的操作应在操作应在whilewhile和和dodowhilewhile语句之前完成。而语句之前完成。而forfor语语句可以在表达式句可以在表达式1 1中实现循环变量的初始化。中实现循环变量的初始化。(5 5) 如果循环次数可以在进入循环语句之前确定,如果循环次数可以在进入循环语句之前确定,使用使用forfor语句较

4、好;在循环次数难以确定时使用语句较好;在循环次数难以确定时使用whilewhile和和dowhiledowhile语句较好。语句较好。例例1 1 用用/41-1/3+1/5-/41-1/3+1/5-1/7+1/7+公式求公式求的近似值,的近似值,直到最后一项的绝对值小直到最后一项的绝对值小于于1010-6-6为止。为止。用用NSNS结构化流程图表示结构化流程图表示算法算法( (见图见图1)1)。图图1 1程序如下:程序如下:#include#includemain()main() int s;int s;float nfloat n,t t,Pi;Pi;t=1t=1;Pi=0;n=1.0;S=

5、1;Pi=0;n=1.0;S=1;while(fabs(t)=1e-6)while(fabs(t)=1e-6)Pi=Pi+t;Pi=Pi+t; n=n+2; n=n+2; s=-s; s=-s;t=s/n;Pi=Pi*4;printf(Pi=%10.6fn,Pi);运行结果为:运行结果为:Pi= 3.141594例例2 2 有一对兔子,出生后第有一对兔子,出生后第3 3个月起每个月都生一对兔子,个月起每个月都生一对兔子,小兔子长到第小兔子长到第3 3个月后每个月又生一对兔子,假设所有兔个月后每个月又生一对兔子,假设所有兔子不死,前子不死,前4040个月每个月的兔子总数。个月每个月的兔子总数。

6、图图2 2即即:f1=1 (n=1)f2=1 (n=2)fn=fn-1+fn-2 (n3)解此题的算法如图解此题的算法如图2所示。所示。main()main() long int f1 long int f1,f2;f2; int i; int i; f1=1;f2=1; f1=1;f2=1; for(i=1; i=20; i+) for(i=1; i=20; i+) printf(%12ld %12ld printf(%12ld %12ld ,f1f1,f2);f2); if(i%2=0) printf( if(i%2=0) printf(n);n); f1=f1+f2; f1=f1+f2;

7、 f2=f2+f1; f2=f2+f1; 运行结果为:运行结果为: 1 1 1 1 2 3 2 3 5 8 13 21 5 8 13 21 34 55 89 144 34 55 89 144 233 377 610 987 233 377 610 987 1597 2584 4181 6765 1597 2584 4181 6765 10946 17711 28657 46368 10946 17711 28657 46368 75025 121393 196418 317811 75025 121393 196418 317811 514229 832040 1346269 2178309

8、514229 832040 1346269 21783093524578 5702287 9227465 149303523524578 5702287 9227465 1493035224157817 39088169 63245986 10233415524157817 39088169 63245986 102334155 在循环体语句中又包含有另一个完整的循环结构在循环体语句中又包含有另一个完整的循环结构的形式,称为循环的嵌套。如果内循环体中又有的形式,称为循环的嵌套。如果内循环体中又有嵌套的循环语句,则构成多重循环。嵌套的循环语句,则构成多重循环。2 2、循环语句的嵌套、循环语句的嵌

9、套嵌套在循环体内的循环体称为内循环,外面的循环嵌套在循环体内的循环体称为内循环,外面的循环称为外循环。称为外循环。while 、do-while、for三种循环都可以互相嵌套。三种循环都可以互相嵌套。循环语句之间的关系循环语句之间的关系for(.) . for(.) .内循环内循环外循环外循环for(.).for(.).并列循环并列循环嵌套循环嵌套循环交叉循环交叉循环for(.).for(.).错错误误例如,下面几种都是合法的形式:例如,下面几种都是合法的形式:(1) while( ) whilewhile( ) (3) for(;)(3) for(;) for(; ;) for(; ;) (

10、2) do do while( ); while( );(4) while( ) do while( ); (9) for(; ;) while( ) (7) do for (; ;) while( );(8) for(; ;) do while( ); (6) do while( ) while( );(5) while( ) for (; ;) 真真真真外循环初始条件外循环初始条件外循环循环体外循环循环体内循环体内循环体外循环条件外循环条件假假内循环条件内循环条件假假外循环循环体内外循环循环体内后续语句后续语句循环结束循环结束二重二重循环循环嵌套嵌套结构结构执行执行流程流程 例例3:输出图

11、形输出图形: * * * *编程分析编程分析:采用双重循环,一行一行输出。采用双重循环,一行一行输出。每一行输出步骤:一般每一行输出步骤:一般3步。步。 1)光标定位)光标定位3)每输完一行光标换行)每输完一行光标换行(n)2)输出图形。)输出图形。 例如本题:共例如本题:共4行行,若行号用若行号用k表示,表示,则每一行有则每一行有2*k-1个个*号。号。 #include stdio.h void main() int k1,k2; for(k1=1;k1=4;k1+) putchar(t); for(k2=1;k2=4-k1;k2+) putchar( );for(k2=1;k2=k1*2

12、-1;k2+) putchar(*);putchar(n); 定位(还可定位(还可以用空格的以用空格的方法)方法)输出输出例例4、输出下面的数字金字塔、输出下面的数字金字塔(1到到9 )。 1 121 12321 . 12345678987654321 #include stdio.h main() int k1,k2; for(k1=1;k1=9;k1+) for(k2=1;k2=9-k1;k2+) printf(“%c”, );for(k2=1;k2=1;k2-) printf(“%d”,k2);输出右输出右边数字边数字例例3 打印九九表打印九九表(如图所示如图所示)。1 1 2 2 3

13、3 4 4 5 5 6 6 7 7 8 8 9 91 12 2 4 43 3 6 6 9 94 4 8 8121216165 510101515202025256 6121218182424303036367 71414212128283535424249498 816162424323240404848565664649 918182727363645455454636372728181下面用逐步求精的方法分析本例的解法。下面用逐步求精的方法分析本例的解法。 首先,把上述九九表分为三部分,表头首先,把上述九九表分为三部分,表头(即即19九个数字九个数字)、隔线、表体。于是,这个程序也可以分为

14、如下三部分:隔线、表体。于是,这个程序也可以分为如下三部分: 打印表头;打印表头; 打印隔线;打印隔线; for(i=1; i=9;i+)printf (%4d,i);for(i=1; i=36; i+)printf (%c, -);for(i=1; i=9;i+) 打印第打印第i行行for(j=1, j=i; j+)打印第打印第j个数个数printf (%4d, i*j);如何如何“打印第打印第i行行”,每行都有每行都有i个数字个数字“打印第打印第j个数个数”即在第即在第i行的第行的第j列上打印一个数,大小为列上打印一个数,大小为i*j 打印表体;打印表体;/* 打印九九乘法表打印九九乘法表

15、 */#include int main(void) int i,j; for (i=1; i=9; i+) printf(%4d,i); printf (n); for (i=1; i=36;i+) printf (%c,-); printf (n); for (i=1;i=9; i+) for (j=1; j=i;j+) printf (%4d,i*j); printf (n); return 0;例例4 百钱买百鸡问题。鸡翁一值钱五,鸡母一值钱三,鸡雏百钱买百鸡问题。鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、母、雏各几何三值钱一。百钱买百鸡,问鸡翁、母、雏各几何?co

16、cks+hens+chicks=1005*cocks+3*hens+chicks/3=100zcocks:鸡翁数:鸡翁数zhens:鸡母数:鸡母数zchicks:鸡雏数:鸡雏数cocks: 019中的整数中的整数(因为每只鸡翁因为每只鸡翁5钱,因此它不可能超过钱,因此它不可能超过19只只)hens: 033中的整数中的整数chicks: 0100中的整数中的整数/* 百钱买百鸡问题百钱买百鸡问题 */#include int main(void) int cocks,hens, chicks; printf(%8s%8s%8sn,cocks,hens,chicks); for(cocks=0;cocks=19;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论