C语言程序5章循环结构_ppt.txt

大学C语言程序设计-任正云-课件PPT

收藏

资源目录
跳过导航链接。
大学C语言程序设计-任正云-课件PPT.zip
C语言程序设计-任正云-PPT演示文稿
教案资料.ppt---(点击预览)
C语言程序设计-任正云-PPT课件文件
文稿ppt_ppt.txt---(点击预览)
文稿ppt_ppt.jpg---(点击预览)
文稿ppt.ppt---(点击预览)
C语言程序设计-任正云-大学教学资料
(课件资料)《C语言程序设计》-任正云-电子教案
压缩包内文档预览:
预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图
编号:21836451    类型:共享资源    大小:13.43MB    格式:ZIP    上传时间:2019-09-06 上传人:QQ24****1780 IP属地:浙江
25
积分
关 键 词:
大学 语言程序设计 任正云 课件 ppt
资源描述:
大学C语言程序设计-任正云-课件PPT,大学,语言程序设计,任正云,课件,ppt
内容简介:
5.1 while语句5.2 do-while语句5.3 for语句5.4 三种循环语句的比较5.5 循环的嵌套5.5 break语句和continue语句5.7 综合实例 第5章 循环结构循环结构又称重复结构,可以完成重复性、规律性的操作。如求若干数的和、迭代求根等等。C语言共有三种类型的循环语句: whiledo-whilefor第5章 循环结构While语句的一般格式: while(表达式) 循环体 5.1 while语句流程图:功能:先判断表达式的值的真假,若为真(非零)时,就执行循环体的语句系列,否则退出循环结构。说明:所谓循环是指使用一定条件对同一个程序段重复执行若干次。被重复执行的部分(可能由若干语句组成)称为循环体。5.1 while语句【例5.1】编程实现1+2+3+100。 用传统流程图(图5.2)和N-S结构流图(图5.3)表示算法。图5.2图5.3# include stdio.hmain() int i,sum=0; i=1; while(i=100) sum+=i; i+; printf(%dn,sum); 5.1 while语句需要注意的是:循环体如果包含一个以上的语句,应该用花括号括起来,以复合语句的形式出现。如果不用花括号,则while语句的范围只到while后面第一个分号处。例如本例中while语句若无花括号,则while语句范围只到“sum+=i;”。在循环体中应该有使循环趋向于结束的语句。如无此语句,循环将永不结束。5.1 while语句【例5.2】看一个简单的印数程序。 # include stdio.h main() int number=0; while(number=1) number+; printf(%dn,number); 运行结果为:125.1 while语句【例5.3】 第二个印数程序。 # include stdio.h main() int number=0; while(number+=1) printf(*%dn,number); printf(*%dn,number); 运行结果为:*1*2*35.1 while语句 # include stdio.h main() int number=0; while(number=1) number+; printf(%dn,number); 运行结果为:12# include stdio.h main() int number=0; while(number+=a&c= A&c=0&c=a&c= A&c=0&c= 9) digit+; else other+; printf(alpha=%dndigit=%dnother= %dn, alpha,digit,other);【例5.4】输入一正文,统计正文包含的行数,字数和字符数。 分析:正文的一行是以n为结束标志的一串字符,一个字是以 为结束标志的一串字符。而字符数则是对每个输入的字符(不包含EOF)进行计数 . 算法:将标志state置初值0,表示字符不在字中;各计数器变量均置初值为0。 读一个字符c,如果c不是EOF,则 -1 字符数加1。 -2 若c是n则行数加1。 -3 如果c是空格字符 、换行字符n 或制表字符t,则将标志置为0,表示c字符不在字中;否则(c为非空白符),如果标志为0(表示c是字的第一个字符)则将字数加1,并修改标志为1(表示当前字符c是一个字中的字符)。 -4 转步骤循环.如果c是EOF,则循环结束,转步骤 输出计数结果。# include stdio.h# define IN 1# define OUT 0/*count lines,words and characters in input*/void main(void)int c,nl,nw,nc,state;state=OUT;nl=nw=nc=0;printf(input a text end of ctrl+z:n);while(c=getchar()!=EOF)+nc;if(c=n) +nl;if(c= | c=n| c=t) state=OUT;else if (state=OUT)state=IN;+nw;/*end of else-if*/ /*end of while*/printf(lines=%d words=%d characters=%dn,nl,nw,nc);【例5.6】搬砖问题。(36块砖,36人搬;男搬4,女搬3,两个小孩抬一砖。要求一次全搬完,问男、女、小孩各若干)设计搬砖问题的程序。 分析:男人(men)的可能取值范围为:0-8;女人(women)的可能取值范围为:0-11;小儿(children)的可能取值范围为:0-36;对于men:men=0;while(men=8)找满足题意的women,children;men+;下面再进一步细化,找每一个women下的children:men=0;while(men=8)women=0;while(women=11) 找满足题意的children; women+;men+;当men与women已知后children=36-women-men若这一children满足条件:4*men+3*women+children/2=36则就找到了一组解。main()int men=0,women,children; while(men=8) women=0; while(women=11) children=36-women-men; if(4.0men+3.0*women+children/2=36) printf(nmen is %d,men); printf(twomen is %d,women); printf(tchildren is %dn,children); women+; men+; 5.2 do-while语句do-while语句的一般格式是: do 循环体 while ();功能: 先执行一次循环体,再判断表达式的真假。若表达式为真(非0)则继续执行循环体,一直到表达式为假(0)时退出循环结构。 和while语句不同的是:while语句先判断是否成立,然后再执行循环体。而do-while语句是先执行循环体一次,然后再去判断是否成立。5.2 do-while语句注意:while后面的分号(;)不能少。 【例5.7】用do-while语句实现【例5.1】。 # include stdio.hvoid main() int i,sum=0; i=1; do sum=sum+i; i+; while(i=100); printf(%dn,sum);5.2 do-while语句 【例5.8】while和do-while循环的比较。 main() (2) main()int sum=0,i; int sum=0,i; scanf(%d,&i); scanf(%d,&i); while(i=10) do sum=sum+i; sum=sum+i;i+; i+; while(i=10);printf(sum=%dn,sum); printf(sum=%dn,sum); 运行结果如下: 运行结果如下:1 1 sum=55 sum=55再运行一次: 再运行一次:11 11sum=0 sum=11一、for语句的一般形式: for(;) 5.3 for语句注意:三个表达式之间必须用分号;隔开。首先计算。求的值,若其值为非零,执行,然后转执行,若的值为零,则结束for语句。求解,转执行。5.3 for语句其执行过程如下:注意: for循环的三个表达式可以是C语言中任何有效的表达式。for语句的三个控制表达式可以灵活应用,由此for语句形式多种多样。1for语句中的减值 for(counter=100;counter=10;counter-=5) printf(%d,counter); 2.为空语句 for( ;i=n;i+)3和可以是逗号表达式 for(i=1,sum=0;i=n;sum+=i,i+) 5.3 for语句4常用空循环来延长时间 for(t=0;ttime;t+); 5无限循环形式for循环可以省略三个表达式,但是分号;不可省略。 for( ; ;) 5.3 for语句【例5.9】 求自然数列前n 项的和。 5.3 for语句main() int sum=0,i,n; printf(please input n: ); scanf(%d,&n); for(i=1;i=n;i+) sum+=i; printf(sum=%dn,sum); please input n:0sum=0please input n:1sum=1please input n:10sum =55please input n:100sum=5050【例5.9】 从键盘上输入10个数,求其平均值。5.3 for语句main() int i; float f,sum; for(i=1,sum=0;i11;i+) scanf(%f,&f); sum+=f; printf(average=%fn,sum/10);输入如下数据:89 72 83 96 50 98 78 93.5 91 86程序运行结果:average=83.6500005.3 for语句【例5.11】试求2000-2050年间的闰年。分析:判断一个年份是闰年的方法是:该年份能被4整除,但不能被100整除;或者该年份能被100整除,也能被400整除。main() int i; for(i=2000;i=3 # include stdio.hmain()long int f,f1=1,f2=1;int i,n;printf(请输入n: ):scanf(%d,&n);printf(%8ld%8ld,f1,f2);for(i=3;i=n;i+);f=f1+f2;f1=f2; f2=f;printf (%8ld,f);if(i%5=0)printf(n);运行结果: 请输入n:10 1 1 2 3 5 8 13 21 34 555.3 for语句【例5.12】相传古代印度国王舍罕要褒奖他的聪明能干的宰相达依尔(国际象棋的发明者),问他需要什么,达依尔回答说:“国王只要在国际象棋的棋盘上的第一个格子上放一粒麦子,第二个格子上放上2粒,第三个格子上放上4粒,依次类推,每格是前一格的2倍,一直放到64格,我就感恩不尽了”。国王答应了,结果全印度的粮食用完还都不够。国王很纳闷,怎么也算不清这笔帐。请用C语言编程来算一下。(1m3小麦大约1.42108粒)分析 :需要计算sum=1+2+22+23+24+25+264算出小麦的颗粒数# include stdio.hmain()int n;double v,sum=0.0,t=1.0;for(n=0;n64;n+)sum+=t;t*=2;printf(sum=%e,sum);v=sum/1.42e8;运行结果:sum=1.84467e19v=1.29907e115.4 三种循环语句的比较1. C语句提供的三种循环控制结构,可以用来处理同一问题。一般情况下可以相互代替。2. while循环结构,只设置了结束循环的条件。循环体内需要设置打破循环条件而使循环趋向结束的语句。3. do-while 循环和while 循环相似,但do-while 循环先运行循环体,然后再进行循环结束条件的测试,循环体最少运行一次。4. 对于已知重复次数的循环,使用for结构更方便、更清晰。而仅知道循环结束的条件,不知道循环次数的用while 循环和do-while 循环更简洁。5. C语言支持goto语句,但不提倡使用它构造循环结构,以免影响程序的可读性。5.5 循环的嵌套1.循环嵌套的概念 在一个循环结构中又包含另一个循环结构,称为循环的嵌套。2.循环嵌套的形式 前面介绍了三种类型的循环,它们自己本身可以嵌套,也可以互相嵌套。(1) (2) (3)for ( ) while ( ) do . for ( ) while ( ) do . . while( ); (4) (5) (6)for ( ) while ( ) for ( ) . while ( ) for ( ) do . . while ( ) ; 5.5 循环的嵌套3. 注意: (1)外循环执行一次,内循环执行一轮。即只有当内层循环结束时,外层循环才进入下一次循环。 (2) 使用相关语句可以从循环体内转入循环体外,提前结束循环。5.5 循环的嵌套4. 应用【例5.14】 计算s=11+22+33+nn,n由终端输入。分析:设每一项的底用整型变量i表示,i从1开始每次增1直至n,考虑到溢出,i的i次方及各项之和分别用长整型变量term和sum表示。term=i*i*i*i,即i个i连乘,显然计算term要用循环来实现;sum=term,即n个term连加,这也要用循环实现。因而计算s的算法是一个二重循环,外层循环(简称外循环)控制项数,内层循环(简称内循环)控制每项i的连乘次数。# include stdio.hmain() int i,j,n; long sum,term; printf(请输入n:n); scanf(%d,&n); for(sum=0,i=1;i=n;i+) term=1; j=1; do term*=i; while(+j=i); sum+=term; /*for结束*/ printf(sum=%ldn,sum);运行结果: 请输入n:5 sum=34135.3 for语句【例5.11】求整数3100中的素数 分析:如果n是一个大于等于2的整数,并且只有1和n本身是它的因子,没有别的正因子,则称n是一个素数质数。即除1和它本身之外不能被其他整数整除。为了检查某数是否是素数,采用的方法是,从i=2起不断加i,逐个相除,只要有一个数能整除,说明该数不是素数。 # include stdio.hmain()int i,n,num; for(n=3,num=0;n=100;n+) i=2; while(ic则结束循环。#include stdio.h#include ctype.hvoid main(void) char c,c1,c2,top; int i; printf(input a character:n); top=isupper(c=getchar()?A:(islower(c)?a:0); if(top) for (c1=top;c1=c;+c1) for(i=1;i=40-2*(c1-top);+i) putchar( ); for(c2=top;c2=top;-c2) printf(%2c,c2);printf(n); 5.5 循环的嵌套【例5.17】用如下格式输出乘法九九表。* 1 2 3 4 5 6 7 8 91 1 2 3 4 5 6 7 8 92 4 6 8 10 12 14 16 183 9 12 15 18 21 24 274 16 20 24 28 32 365 25 30 35 40 456 36 42 48 547 49 56 638 64 729 81分析:从表中可见,整个表分为表头(顶行)和表体(19行)两部分,表体是二维结构,因而输出表体部分要用二重循环。 算法:1输出表头(顶行): 1输出*。 2输出1至9。 3输出换行。2输出表体(1至9行): 1外循环变量i(行号)置初值1。 2如果i=i则输出i*j,否则输出空格。 输出换行。 i=i+1,转2),如果i9,结束循环。# include stdio.hvoid main(void) int i,j; /* output table head */ printf(%4c,*); for(i=1;i=9;+i) printf(%4d,i); printf(“n”); /* output table body */ for(i=1;i=9;+i) printf(%4d,i); for(j=i;j=9;+j) if(j=i) printf(%4d,i*j); else printf(%4c, ); printf(n); /* end of external for */5.5 循环的嵌套多重循环的使用要点: 对于多重循环,特别要注意给与循环有关的变量赋初值的位置。 内、外循环变量不应同名,否则,将造成循环控制混乱,导致死循环或计算结果错误。 应正确书写内、外循环的循环体:需要在内循环中执行的所有语句必须用括起来组成复合语句作为内循环体;属于外循环的语句应放在内循环体之外,外循环体之中。 不应在循环中执行的操作应放在进入最外层循环之前或最外层循环结束之后。5.6 break语句和continue语句5.6.1 break语句5.6.2 continue语句5.6.1 break语句break语句的形式为: break;功能:跳出当前的switch语句或循环语句。break语句对于减少循环次数,加快程序执行起着重要的作用。5.6.1 break语句main() int i; float f,sum; for(i=0,sum=0.0; ;i+) scanf (%f,&f); if (f= =0.0) break; sum+=f; if(i= =0) printf(no data); else printf(average=%fn,sum/i);【例5.18】从键盘上输入任意个数,求其平均值,当输入值为0时,计算结束。5.6.2 continu
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
提示  人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:大学C语言程序设计-任正云-课件PPT
链接地址:https://www.renrendoc.com/p-21836451.html

官方联系方式

2:不支持迅雷下载,请使用浏览器下载   
3:不支持QQ浏览器下载,请用其他浏览器   
4:下载后的文档和图纸-无水印   
5:文档经过压缩,下载后原文更清晰   
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

网站客服QQ:2881952447     

copyright@ 2020-2025  renrendoc.com 人人文库版权所有   联系电话:400-852-1180

备案号:蜀ICP备2022000484号-2       经营许可证: 川B2-20220663       公网安备川公网安备: 51019002004831号

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