c语言课件第五章.ppt

上传人:本田雅阁 文档编号:2143509 上传时间:2019-02-21 格式:PPT 页数:42 大小:461.51KB
返回 下载 相关 举报
c语言课件第五章.ppt_第1页
第1页 / 共42页
c语言课件第五章.ppt_第2页
第2页 / 共42页
c语言课件第五章.ppt_第3页
第3页 / 共42页
亲,该文档总共42页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《c语言课件第五章.ppt》由会员分享,可在线阅读,更多相关《c语言课件第五章.ppt(42页珍藏版)》请在三一文库上搜索。

1、共 42 页 第 1 页,第五章,C 语言程序设计,循环结构,共 42 页 第 2 页,本章要点: 建立循环程序设计的基本概念和逻辑思维 掌握循环程序设计的方法,共 42 页 第 3 页,什么是循环? 为什么要使用循环?,?,循环的基本概念,循环是有规律的重复操作。将复杂问题分解为简单的操作过程,程序只对简单过程描述,这些过程的多次重复就可完成对问题的求解。重复的频繁性决定了循环在程序设计中必不可少!,问题1:,问题2:求学生平均成绩 分数相加后除以课数,做99次加法,问题3:找出数x中能同时被3和7整除的数 找数,问题分解 循环控制,共 42 页 第 4 页,if-goto 循环 while

2、循环 for循环 do while循环,先判断后循环,先循环后判断,特点:,难点:,循环嵌套,C提供四种循环控制:,共 42 页 第 5 页,5.1 if-goto 语句循环,一般形式: goto 标号; 标号:语句 其中:标号用标识符表示,即由字母、数字和下划线组成,且首字符必须为字母或下划线。不能用整数作标号。 用途: 1. 与if语句一起构成循环结构。 2. 从循环体中跳到循环体外(一般指最深层)。 3. 改变程序自上而下的执行顺序。,缺点:滥用goto语句,可使程序无规律、可读性差。,共 42 页 第 6 页,#include “stdio.h“ main( ) int i=1,s=0

3、; L1: if(i=100) s=s+i; i+ ; goto L1; printf(“s=%dn“,s); ,零,非零,求和 s=1+2+100,运行结果: S=?,例1,共 42 页 第 7 页,1.while循环语句的形式 while(表达式)语句,先判断条件,后执行语句,表达式,语句,零,非零,2.执行过程,注意: 循环体若包含一个以上语句,应该用花括号括起来(使用复合语句)。 循环体内应注意设置修改循环条件的语句。否则循环无法终止。 如果表达式的值第一次计算就等于0,则循环体一次也不执行。,5.2 while循环语句,共 42 页 第 8 页,求,#include “stdio.h

4、 “ main() int i=1,sum=0; while (i=100) sum=sum+i; i+; printf(“%d“,sum); ,例2,思考:删除i+;后果? 调换i+;与求和语句的后果?,共 42 页 第 9 页,输出华氏-摄氏温度转换表,例3,华氏温度3035之间的每一度都转换 成相应的摄氏温度。 转换公式:C=5*(F-32)/9,#include “stdio.h“ main() int F; float C; F=30; while(F=35) C= 5*(F-32)/9.0; printf(“F=%d C= %f n“, F,C) ; F=F+1; ,共 42 页

5、第 10 页,输出华氏-摄氏温度转换表,运行结果 F C -1.1 -0.6 0.0 0.6 1.1 35 1.7,共 42 页 第 11 页,输入一批正数,输入0时表示输入结束,求这些正数的和。,#include “stdio.h“ main( ) int s=0, x; scanf(“%d“, ,例4,思考:取消循环内的输入语句后果?,共 42 页 第 12 页,1. dowhile循环语句的形式 do 语句 while(表达式);,先执行语句,后判断条件,2. 执行过程,说明: (1)dowhile循环语句首先执行循环体,然后计算表达式并检查循环条件,所以循环体至少执行一次。 (2)退出

6、dowhile循环的条件与退出while循环的条件相同。,5.3 dowhile循环语句,共 42 页 第 13 页,用do-while型循环求:,#include “stdio.h “ main() int i=1, sum=0; do sum=sum+i; i+; while (i=100) ; printf(“%d“,sum); ,例5,共 42 页 第 14 页,用do-while型循环求n! S=123(n-1) n,#include “stdio.h“ main() int i=1,n ; long s=1; scanf(“ %d “, ,例6,共 42 页 第 15 页,用迭代法

7、求a的算数平方根。公式 :xn=0.5*(xn-1+a/xn-1) 确定初值为x0, 取a/2为x0的初值,迭代结束条件:|x1-x0|=10-5.,#include “stdio.h“ #include “math.h“ main() float a,x0,x1; scanf(“%f“, ,例7,共 42 页 第 16 页,注意:当while后的表达式为真时,while语句和 dowhile语句的结果相同,否则不同。,main( ) int i , s=0; scanf(“%d“, 输入:1 打印:55 输入:11 打印:0,main( ) int i , s=0; scanf(“%d“ 输

8、入:1 打印:55 输入:11 打印:11,共 42 页 第 17 页,5.4 for循环语句,1.for循环语句的形式 for(表达式1;表达式2;表达式3)语句,2. 执行过程,说明: (1)计算表达式1; (2)计算表达式2,值非零执行循环体,计算表达式3,重复 (3)表达式1仅被执行一次;表达式2决定了是否继续执行循环;表达式3则不断修改循环控制变量的值。 (4)三个表达式均可省略,分号不能省略。for 循环体可以是复合语句。,共 42 页 第 18 页,3.说明: (1)基本的应用形式: for(循环变量赋初值;循环条件;循环变量增值),求级数12+22+32+前10项之和。 mai

9、n() int i, sum=0; for (i=1;i=10;i+) sum=sum+i*i; printf(“%d“,sum); ,共 42 页 第 19 页,(2)三个表达式均可缺省,但起分割作用的两个分号不可省略。 例如:for( ; ; ) 相当于while (1) 语句,(3)表达式1和表达式3可为逗号表达式。 例: int i,j,sum; for(sum=0, i=0,j=100;i=j;i+,j- ) sum=sum+i+j;,共 42 页 第 20 页,输出100以内所有偶数的和与所有奇数的和。 #include “stdio.h “ main() int i,s1=0,s

10、2=0; for(i=1;i=100;i+) if(i%2=0) s2=s2+i; else s1=s1+i; printf(“s1=%d,s2=%dn“,s1,s2); ,例8,共 42 页 第 21 页,用for循环编写输出华氏-摄氏温度转换表,华氏温度3035之间的每一度都转换 成相应的摄氏温度。 转换公式:C=5*(F-32)/9,#include “stdio.h“ main() int F; float C; ,共 42 页 第 22 页,#include “stdio.h“ main( ) long f,f1,f2; int i; f1=f2=1; printf(“% 8ld%8

11、ld“,f1,f2); for( i=3; i=20 ;i+) f=f1+f2; printf(“%8ld“,f); if(i%5=0) printf(“n“); f1=f2;f2=f; ,例9,用递推法求Fibonacci数列的前20项,并以每行5个输出 。 Fibonacci数列:1,1,2,3,5,8,13,21,34,。递推公式:Fn=1(n=1,n=2),Fn=Fn-1+Fn-2 (n2),运行结果,程序运行演示,共 42 页 第 23 页,5.5 三种循环语句的比较,for语句和while语句先判断条件,后执行语句,故循环体有可能一次也不执行,而dowhile语句的循环体至少执行一

12、次。 必须在while 语句和dowhile语句之前对循环体变量赋初值,而for语句可在表达式1中对循环变量赋初值。 在循环次数已经确定的情况下,习惯用for语句;而对于循环次数不确定只给出循环结束条件的问题,习惯用while语句解决。,共 42 页 第 24 页,1. 定义:在循环体内又包含一个循环结构,称为循环嵌套。三种循环都可以嵌套。下面几种都是合法的嵌套形式:,for( ; ; ) while( ) for循环体嵌套while循环体,for( ; ; ) for( ; ; ) for循环体嵌套for循环,5.6 循环语句的嵌套,共 42 页 第 25 页,do do while( );

13、 while( ); do_while循环体 嵌套do_while循环,while( ) do while( ); while循环体嵌套 do_while循环,while( ) for( ; ; ) while循环体嵌套for循环,do for( ; ; ) while( ); do_while循环体嵌套for循环,共 42 页 第 26 页,2.嵌套结构规则,外循环,内循环,交叉循环,外循环 入口,内循环出口,内循环出口,外循环出口,共 42 页 第 27 页,for语句的循环嵌套,for(i=1;i=2;i+) for(j=1;j=2;j+) printf(“%3d “,i+j); pri

14、ntf(“n “); ,for(i=1;i=2;i+) for(j=1;j=2;j+) printf(“%3d“,i+j); printf(“n“); ,output: 2 3 3 4,output: 2 3 3 4,共 42 页 第 28 页,1 2 3 4 5 6 7 8 9 - 1 2 4 3 6 9 4 8 12 16 5 10 15 20 25 6 12 18 24 30 36 7 14 21 28 35 42 49 8 16 24 32 40 48 56 64 9 18 27 36 45 54 63 72 81 思路:行号为i,列号为j,i=7 j=5 i*j,(1=i=9),(1

15、=j=i),则:第 i 行中一共要输出 i 个乘积,输出下三角形乘法九九表,例10,共 42 页 第 29 页,用for语句实现打印乘法九九表。,#include main ( ) int i, j; for ( i=1; i=9; i+ ) printf (“%4d“,i); printf (“n-n“); for ( i=1; i=9; i+ ) for ( j=1; j=i; j+ ) printf ( (j=i) ? “%4dn“:“%4d“,i*j); ,输出函数printf中使用了“?”操作,含义相当于: if ( j=i ) printf (“%4dn“, i*j ); else

16、 printf (“%4d“, i*j );,思考:如何 打印1*1=1?,共 42 页 第 30 页,for循环嵌套while循环: 输入6名学生5门课程的成绩,分别统计每名学生5门课程的平均成绩。,#include “stdio.h“ main() int i,j; float score,sum;ave; for(i=1;i=6;i+) sum=0; j=1; while(j=5) scanf (“%f“, ,例11,共 42 页 第 31 页,5.7 break和continue语句,1. break 语句 语法: break ; 功能:终止包含该语句的最内层循环。 main( ) i

17、nt n; for(n=100;n=200;n+) if(n%3=0) break ; printf(“%6d“,n); ,2. continue 语句 语法:continue ; 功能:结束循环体的本次执行。 main( ) int n; for(n=100;n=200;n+) if(n%3=0) continue ; printf(“%6d“,n); ,该语句只能出现在for, while或dowhile语句中。,该语句只能出现在switch,for, while或dowhile语句中。,共 42 页 第 32 页,for 循环结构中的break结构,for循环结构中的continue结构

18、,共 42 页 第 33 页,说明: 发生下列情况之一时,循环结束执行: 表达式的值为0; 循环体内遇到break语句; 循环体内遇到goto 语句,且与该goto语句配合 使用的标号所指定的语句在本循环体外;,共 42 页 第 34 页,3. 空语句 形式: ;(只由一个分号构成) 功能: 什么也不做。(可出现在程序中任何语句可以出现的地方) 例10:求级数12+22+32+,前10项之和。 main( ) int i, sum; for(sum=0,i=1;i=10;sum+=i*i, i+) ; printf(“sum=%dn“, sum); ,共 42 页 第 35 页,1. 输入一个

19、整数m,判断是否为素数。 若m不能被2m-1之间的任何一个整数整除,则m为素数。 算法分析:设k=m-1,用2至m-1依次去除m, 若m能被2k之中任何一个整数整除,则不必除下去,肯定不是素数,跳出循环,(i=k+1.在循环之后判别i的值是否大于或等于k+1,若是,则表明未曾被2k之间任一整数整除过,因此输出“是素数”。,编程举例,共 42 页 第 36 页,程序如下: #include “stdio.h“ main( ) int m, i, k; scanf(“%d“, ,共 42 页 第 37 页,2. 编写程序输出图形,讨论 1. 输入m; 2. for ( k=1; k=m; k+)

20、打印 k 个 * ; 换新行; ,细化: 1. 输入m; 2. for ( k=1; k=m; k+) for ( j=1; j=k; j+) printf (“*“); printf(“n“) ; ,* * * * * * * * * *,说明:1. 循环变量可以控制循环次数; 2. 外循环变量可作为内循环次数的控制变量.,共 42 页 第 38 页,#include main ( ) int k, m, j; scanf (“%d“, ,整理得到程序如下:,共 42 页 第 39 页,3. 求sin(x)的近似值(x是弧度)。 sin x=x- x3/3!+x5/5!-x7/ 7!+(-1

21、)n+1x2n-1/(2n-1)! + 分析:本例可作为循环累加问题处理,考虑适当的精度要求。 设i为项数,s为累加和,s=s+级数的下一项 第i项的绝对值:x2i-1/ (2i-1)! 第i项的运算符号(-1)i+1 第i+1项的绝对值等于x2(i+1)-1/(2(i+1)-1)!= x2i+1/(2i+1)! 因此,第i+1项的绝对值等于第i项的绝对值乘x2再除以(2i)*(2i+1) 级数的下一项可用下面表达式实现: -(上一项的值)*x*x/(2+i)*(2*i+1);,共 42 页 第 40 页,程序如下: #include “stdio.h“ main() int i; doubl

22、e x,t,s=0.0; scanf(“%lf“, ,程序运行演示,共 42 页 第 41 页,main() int m,n,max,i; scanf(“%d%d“, ,4.输入两个正整数m和n,求其最小公倍数.,程序运行演示,共 42 页 第 42 页,小 结,1.循环程序设计的要点 循环初值,循环条件,循环体设定 2.C语言循环程序设计的三种结构 for, while, do- while 3.程序设计的一般步骤 分析给定问题的详细步骤,总结出解决问题的一般方法; 画出程序流程图或写出程序草案; 编制程序; 输入程序、进行语法检查; 运行、测试程序(使用多组数据进行测试)。 4. 本章通过例子介绍了递推法、迭代法等基本算法。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1