资源目录
压缩包内文档预览:(预览前20页/共40页)
编号:21836451
类型:共享资源
大小:13.43MB
格式:ZIP
上传时间:2019-09-06
上传人:QQ24****1780
认证信息
个人认证
王**(实名认证)
浙江
IP属地:浙江
25
积分
- 关 键 词:
-
大学
语言程序设计
任正云
课件
ppt
- 资源描述:
-
大学C语言程序设计-任正云-课件PPT,大学,语言程序设计,任正云,课件,ppt
- 内容简介:
-
1,5.1 while语句 5.2 do-while语句 5.3 for语句 5.4 三种循环语句的比较 5.5 循环的嵌套 5.5 break语句和continue语句 5.7 综合实例,第5章 循环结构,2,循环结构又称重复结构,可以完成重复性、规律性的操作。 如求若干数的和、迭代求根等等。 C语言共有三种类型的循环语句: while do-while for,第5章 循环结构,3,While语句的一般格式: while(表达式) 循环体 ,5.1 while语句,流程图:,功能:先判断表达式的值的真假,若为真(非零)时,就执行循环体的语句系列,否则退出循环结构。,说明:所谓循环是指使用一定条件对同一个程序段重复执行若干次。被重复执行的部分(可能由若干语句组成)称为循环体。,4,5.1 while语句,【例5.1】编程实现1+2+3+100。,用传统流程图(图5.2)和N-S结构流图(图5.3)表示算法。,图5.2,图5.3,# include “stdio.h“ main() int i,sum=0; i=1; while(i=100) sum+=i; i+; printf(“%dn“,sum); ,5,5.1 while语句,需要注意的是: 循环体如果包含一个以上的语句,应该用花括号括起来,以复合语句的形式出现。如果不用花括号,则while语句的范围只到while后面第一个分号处。例如本例中while语句若无花括号,则while语句范围只到“sum+=i;”。 在循环体中应该有使循环趋向于结束的语句。如无此语句,循环将永不结束。,6,5.1 while语句,【例5.2】看一个简单的印数程序。 # include “stdio.h“ main() int number=0; while(number=1) number+; printf(“%dn“,number); ,运行结果为: 1 2,7,5.1 while语句,【例5.3】 第二个印数程序。 # include “stdio.h“ main() int number=0; while(number+=1) printf(“*%dn“,number); printf(“*%dn“,number); ,运行结果为: *1 *2 *3,8,5.1 while语句,# include “stdio.h“ main() int number=0; while(number=1) number+; printf(“%dn“,number); ,运行结果为: 1 2,# include “stdio.h“ main() int number=0; while(number+=1) printf(“*%dn“,number); printf(“*%dn“,number); ,运行结果为: *1 *2 *3,9,5.1 while语句,【例5.4】 输入一行字符,按字母、数字和其它分成三类,分别统计各类字符的数目(换行符n不在统计范围内)。,字母的条件: c=a&c= A&c=0&c= 9成立,则c为一个数字。,算法: 将各计数器变量置初值为0。 提示用户输入一行字符。 读入一个字符。 检查c是否为换行符n,如果不是,则检查c符合哪种字 符条件,并将相应计数器变量的值加1,然后转步骤(循 环);如果c是n字符,则结束循环,转步骤。 输出计数结果。,# include “stdio.h“ void main() char c; int alpha,digit,other; alpha=digit=other=0; printf(“input characters end of newline:n“); while(c=getchar()!=n) if (c=a ,10,【例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); ,11,【例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+; ,12,5.2 do-while语句,do-while语句的一般格式是: do 循环体 while ();,功能: 先执行一次循环体,再判断表达式的真假。若表达式为真(非0)则继续执行循环体,一直到表达式为假(0)时退出循环结构。,13,和while语句不同的是:while语句先判断是否成立,然后再执行循环体。而do-while语句是先执行循环体一次,然后再去判断是否成立。,5.2 do-while语句,注意:while后面的分号(;)不能少。,14,【例5.7】用do-while语句实现【例5.1】。 # include “stdio.h“ void main() int i,sum=0; i=1; do sum=sum+i; i+; while(i=100); printf(“%dn“,sum); ,5.2 do-while语句,15,【例5.8】while和do-while循环的比较。 main() (2) main() int sum=0,i; int sum=0,i; scanf(“%d“, ,运行结果如下: 运行结果如下: 1 1 sum=55 sum=55,再运行一次: 再运行一次: 11 11 sum=0 sum=11,16,一、for语句的一般形式: for(;) ,5.3 for语句,注意:三个表达式之间必须用分号;隔开。,17,首先计算。 求的值,若其值为非零,执行,然后转执行,若的值为零,则结束for语句。 求解,转执行。,5.3 for语句,其执行过程如下:,注意: for循环的三个表达式可以是C语言中任何有效的表达式。,18,for语句的三个控制表达式可以灵活应用,由此for语句形式多种多样。 1for语句中的减值 for(counter=100;counter=10;counter-=5) printf(“%d“,counter); 2.为空语句 for( ;i和可以是逗号表达式 for(i=1,sum=0;i=n;sum+=i,i+),5.3 for语句,19,4常用空循环来延长时间 for(t=0;t,5.3 for语句,20,【例5.9】 求自然数列前n 项的和。,5.3 for语句,main() int sum=0,i,n; printf(“please input n: “); scanf(“%d“, ,please input n:0 sum=0,please input n:1 sum=1,please input n:10 sum =55,please input n:100 sum=5050,21,【例5.9】 从键盘上输入10个数,求其平均值。,5.3 for语句,main() int i; float f,sum; for(i=1,sum=0;i11;i+) scanf(“%f“, ,输入如下数据: 89 72 83 96 50 98 78 93.5 91 86 程序运行结果: average=83.650000,22,5.3 for语句,【例5.11】试求2000-2050年间的闰年。,分析:判断一个年份是闰年的方法是:该年份能被4整除,但不能被100整除;或者该年份能被100整除,也能被400整除。,main() int i; for(i=2000;i=2050;i+) if(i%4=0 ,程序运行结果: 2008 2012 2016 2020 2024 2028 2032 2036 2040 2044 2048,23,5.3 for语句,【例5.12】兔子繁殖问题。,设有一对新生的兔子,从第三个月开始,它们每个月都生一对兔子。按照这样的规律,并假设兔子没有死亡,一年后共有多少对兔子。这一有趣的问题是意大利数学家Fibonacci 首次提出的,人们就将这一数学问题抽象成为fibonacci数列。fibonacci数列f(n)是一个算术序列。n 的所有值是正整数序列,这个序列根据下面的算法求得。 1 n=1 f(n)= 1 n=2 f(n-2)+f(n-1) n=3,# include “stdio.h“ main() long int f,f1=1,f2=1; int i,n; printf(“请输入n: “): scanf(“%d“, ,运行结果: 请输入n:10 1 1 2 3 5 8 13 21 34 55,24,5.3 for语句,【例5.12】相传古代印度国王舍罕要褒奖他的聪明能干的宰相达依尔(国际象棋的发明者),问他需要什么,达依尔回答说:“国王只要在国际象棋的棋盘上的第一个格子上放一粒麦子,第二个格子上放上2粒,第三个格子上放上4粒,依次类推,每格是前一格的2倍,一直放到64格,我就感恩不尽了”。国王答应了,结果全印度的粮食用完还都不够。国王很纳闷,怎么也算不清这笔帐。请用C语言编程来算一下。(1m3小麦大约1.42108粒),分析 :需要计算sum=1+2+22+23+24+25+264算出小麦 的颗粒数,# include “stdio.h“ main() 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.84467e19 v=1.29907e11,25,5.4 三种循环语句的比较,1. C语句提供的三种循环控制结构,可以用来处理同一问题。一般情况下可以相互代替。 2. while循环结构,只设置了结束循环的条件。循环体内需要设置打破循环条件而使循环趋向结束的语句。 3. do-while 循环和while 循环相似,但do-while 循环先运行循环体,然后再进行循环结束条件的测试,循环体最少运行一次。 4. 对于已知重复次数的循环,使用for结构更方便、更清晰。而仅知道循环结束的条件,不知道循环次数的用while 循环和do-while 循环更简洁。 5. C语言支持goto语句,但不提倡使用它构造循环结构,以免影响程序的可读性。,26,5.5 循环的嵌套,1.循环嵌套的概念 在一个循环结构中又包含另一个循环结构,称为循环的嵌套。 2.循环嵌套的形式 前面介绍了三种类型的循环,它们自己本身可以嵌套,也可以互相嵌套。,(1) (2) (3) for ( ) while ( ) do . for ( ) while ( ) do . . while( ); ,(4) (5) (6) for ( ) while ( ) for ( ) . while ( ) for ( ) do . . while ( ) ; ,27,5.5 循环的嵌套,3. 注意: (1)外循环执行一次,内循环执行一轮。即只有当内层循环结束时,外层循环才进入下一次循环。 (2) 使用相关语句可以从循环体内转入循环体外,提前结束循环。,28,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.h“ main() int i,j,n; long sum,term; printf(“请输入n:n“); scanf(“%d“, ,运行结果: 请输入n:5 sum=3413,29,5.3 for语句,【例5.11】求整数3100中的素数,分析:如果n是一个大于等于2的整数,并且只有1和n本身 是它的因子,没有别的正因子,则称n是一个素数质数。 即除1和它本身之外不能被其他整数整除。为了检查某数是 否是素数,采用的方法是,从i=2起不断加i,逐个相除,只 要有一个数能整除,说明该数不是素数。,# include “stdio.h“ main() int i,n,num; for(n=3,num=0;n=100;n+) i=2; while(in ,运行结果: 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 71 73 79 83 89 97 素数个数是 24,30,【例5.9】输入一个字母,输出由这个字母决定其高度的字符“金字塔”。例如输入小写字母d,则输出下列左边图形,如果输入大写字母D,则输出右边图形。 a A aba ABA abcba ABCBA abcdcba ABCDCBA,5.3 for语句,分析:输出图形的过程是一个二重循环。外循环控制行数,外循环体每执行一次,输出一行,每一行都分成四部分输出:一行左边的空格、一行的前半段,一行的后半段和一个换行;其中输出一行的左边空格、前半段和后半段分别需要由每次输出一个字符的循环来完成,因此,外循环包含了三个并列的内循环语句。,算法:屏幕宽度一般为80个字符,假定图形输出居屏 幕中间。 输入字符。 如果 是小写字母则置塔顶top为 a,如果c是大写 字母则置塔顶top为A,如果c是非字母字符,则置top为0。 如果top为非0,则输出图形: 1置c1为top(外循环变量初值)。 2如果c1c则输出一行: 21输出一行左边的所有空格,空格数目 为402*(c1top)。 22输出一行的前半段(包括正中的一个字符)。 23输出一行的后半段。 24输出换行。 25 c1=c1+1转32(循环,输出下一行)。 如果c1c则结束循环。,#include “stdio.h“ #include “ctype.h“ void 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=top;-c2) printf(“%2c“,c2); printf(“n“); ,31,5.5 循环的嵌套,【例5.17】用如下格式输出乘法九九表。,* 1 2 3 4 5 6 7 8 9 1 1 2 3 4 5 6 7 8 9 2 4 6 8 10 12 14 16 18 3 9 12 15 18 21 24 27 4 16 20 24 28 32 36 5 25 30 35 40 45 6 36 42 48 54 7 49 56 63 8 64 72 9 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.h“ void 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 */ ,32,5.5 循环的嵌套,多重循环的使用要点: 对于多重循环,特别要注意给与循环有关的变量赋初值的位置。 内、外循环变量不应同名,否则,将造成循环控制混乱,导致死循环或计算结果错误。 应正确书写内、外循环的循环体:需要在内循环中执行的所有语句必须用括起来组成复合语句作为内循环体;属于外循环的语句应放在内循环体之外,外循环体之中。 不应在循环中执行的操作应放在进入最外层循环之前或最外层循环结束之后。,33,5.6 break语句和continue语句,5.6.1 break语句,5.6.2 continue语句,34,5.6.1 break语句,break语句的形式为: break; 功能:跳出当前的switch语句或循环语句。 break语句对于减少循环次数,加快程序执行起着重要的作用。,35,5.6.1 break语句,main() int i; float f,sum; for(i=0,
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。