C语言程序设计PPT课件第6章.ppt

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

《C语言程序设计PPT课件第6章.ppt》由会员分享,可在线阅读,更多相关《C语言程序设计PPT课件第6章.ppt(37页珍藏版)》请在三一文库上搜索。

1、第六章 循环控制,goto语句 while语句 do-while语句 for语句 break语句 continue语句 练习,6.1 概述,循环:反复执行称为“循环体”的程序段。 循环控制常用于数学迭代、对象遍历等问题的求解,几乎所有实用程序都包含循环。 C语言中用如下语句实现循环: 1、用goto语句和if语句构成循环。 2、用while语句。 3、用do-while语句。 4、用for语句。,6.2 goto语句,一般形式: goto 语句标号 作 用: 无条件转向“语句标号”处执行。 “语句标号”是一个标识符,它表示程序指令的地址。 结构化程序设计方法主张限制使用goto语句。 goto

2、语句有两种用途,一是与if语句一起构成循环结构,另一是从循环体中跳转到循环体外。,例6.1 用if语句和goto语句构成循环, 求 。,main() int i,sum=0; i = 1; loop: if (i = 100) /*标号表示程序指令的地址,当i100时,执行加法 */ sum = sum + i; i+; goto loop; /*无条件转向标号loop处的指令 */ printf(“%d“,sum); ,6.3 while语句,一般形式:while (表达式) 语句 作用:实现“当型”循环。 当“表达式”非0(真)时, 执行while语句中的内嵌“语句”。 “语句”是被循环执

3、行的程序,称 为“循环体”。 特点:先判“表达式(条件)”,后执行语句。 循环体如果包含一个以上的语句,应该以复合语句形式出现. 在循环体中应有使循环趋向于结束的语句。,例6.2 流程图:,main() int i,sum=0; /*为循环赋初值 */ i = 1; whie (i = 100) /*“当型”循环*/ sum = sum + i; i+; /* 使循环趋于结束*/ printf(“%d“,sum); ,例6.3从任意 n 个实数中选出最大数和最小数,main() int n , i = 1; float max , min , x ; printf(“input n , x :

4、”); scanf(“%d%f ”, ,例6.4任意输入两个正整数,求它们的最大公约数。,main() long m, n, r, a, b; printf (“input m, n:”); scanf (“%ld%ld”, ,main() long m, n, r, a, b; printf (“input m, n:”); scanf (“%ld%ld”, ,6.4 do-while语句,一般形式: do 语句 while (表达式) 特点:“直到型”循环结构。 先执行一次“语句”,后判“表达式”,当“表达式”非0,再执行“语句”,直到“表达式”为0,循环结束。,例6.5 用do-whil

5、e语句求 。 main() int i,sum=0; i = 1; do sum = sum + i; i+; while (i100”,这两者是等同的。 2、一般情况下,同一个问题,既可以用while循环处理, 也可以用do-while循环处理。,例6.6从键盘上输入一个整数,判断其是几位数。,main() long m, a ; int n=0 ; printf (“请输入一个正整数:”); scanf (“%ld” , ,求e的近似值。,直到某一项的值小于或等于10-7为止。,main() int n; float sum, t, m; n=1; sum=1; m=1; do t = 1

6、/m; sum+=t; n+; m=m*n; while(t1e-7); printf(“e = %f n” , sum); getch(); ,例6.7,6.5 for语句,for语句常用于循环次数已知的循环控制; 也可以用于循环次数不确定而只给出循环结束条件的情况,它完全可以代替while语句。 一般形式: for(表达式1;表达式2;表达式3) 语句 执行过程: (1)求表达式1; (2)求表达式2,若为“真”,执行“语句”; 若为假,转第(5)步。 (3)求表达式3。 (4)转第(2)步。 (5)执行for语句下面的语句。,循环初始条件,判别循环条件,修改循环条件,for (i=1;i

7、=100;i+) sum = sum + i; 这里,循环条件由变量i设定,变量i称为“循环变量”。 这是for语句的典型用法:已知循环次数。(本例100次)。,“表达式1”,循环初始条件(i=1)。,“表达式2”,循环条件(i=100)。,“表达式3”,修改循环条件(i+)。,注:for循环中,表达式1仅求解一次;执行循环体后才求解表达式3。先判断后执行。 例、用for语句,main() int i, sum=0; for(i=1;i=100;i+) sum=sum+i; printf(“%dn“,sum); ,上述for语句也可以用如下while语句表示: i = 1; while (i

8、= 100) sum = sum + i; i+; ,几点说明 for语句中的表达式1:可以给循环变量赋初值,亦可以是与循环变量无关的其它表达式, 甚至表达式1可以省略。若省略,则应在for语句前对循环变量赋初值。注意,表达式1省略时,其后的分号不能省略。此处的分号不是语句的一部分,而是表达式的分隔符。在for语句中的表达式中可以使用逗号表达式,故不用逗号分隔表达式。,例:sum=0; for(i=1;i=100;i+) sum+=i; 或:i=1; for(sum=0;i=100;i+) sum+=i; 或:for(i=1,sum=0;i=100;i+) sum+=i; 或:i=1; sum

9、=0; for( ; i=100;i+) sum+=i;,2. 关于表达式3:可以用来改变循环变量的值, 也可以是与循环变量的无关的其它表达式,甚至可将循环体中的语句放在表达式3的位置上。表达式3也可以省略,程序设计者必 须保证循环能正常结束。 例:i=0; for(sum=0;i100; sum+=i) i+; 或:sum=0; for(i=1;i=100; sum+=i,i+); 或: sum=0; for(i=1; i=100;) sum+=i; i+;,3. 表达式1与表达式3可以同时省略,只有表达 式2,即只给出循环条件。,例、s=1; i=1; for( ; i=10; ) s=s

10、*i; i+; ,s=1; i=1; while(i=10) s*=i; i+; ,在这种情况下,for与while语句完全相同。可见,for语句比while语句功能强大。,4. 关于表达式2:作为循环的判断条件,一 般为关系表达式或逻辑表达式,但亦可以 是数值表达式或字符表达式。 例、sum=0; for(i=1; i=100; i+) sum+=i; 或:sum=0; for(i=100; i; i-) sum+=i;,5. 表达式2也可以省略,此时,系统不再判断循 环条件,认为表达式2的值始终为真。即循环 条件始终成立。循环将出现死循环,程序设 计者必须设法保证循环能正常结束。 例、su

11、m=0; for(i=1; ;i+) sum+=i; 或:sum=0; i=1; for( ; ; ) sum+=i; 此为死循环。,i=1; sum=0; for( ; ; ) sum+=i; i+; if (i100) break; ,例6.8求s=1!+2!+3!+n! , 其中n小于30。,main() long s, t; int i, n; printf(“input n:“); scanf(“%d“, ,例6.9求Fibonacci数列的前40项。每行输出4项。,main() long t1, t2, t3; int i; t1=t2=1; printf(“%10ld%10ld“

12、, t1,t2); for(i=3; i=40; i+) t3=t1+t2; printf(“%10ld“, t3); if(i%4=0) printf(“n“); t1=t2; t2=t3; getch(); ,例6.10求Fibonacci数列的前40项。每行输出4项。,main() long t1, t2; int i; t1=t2=1; for(i=1; i=20; i+) printf(“%10ld%10ld“, t1,t2); if(i%2=0) printf(“n“); t1=t1+t2; t2=t1+t2; getch(); ,6.6 循环的嵌套,循环嵌套:一个循环(称为“外循

13、环”)的循环体内包含另一个循环(称为“内循环”)。内循环中还可以包含循环,形成多层循环。(循环嵌套的层数理论上无限制)。 三种循环(while循环、do-while循环、for循环)可以互相嵌套。 例: (1) (2) while( ) do . . while();,嵌套,while( ) ,do while( ) ,(3) (4) for ( ; ; ) while() (5) (6) for(;) do while();,嵌套,嵌套,嵌套,嵌套,for ( ; ; ) ,do while( ),for ( ; ; ) ,while( ) ,例6.11打印九九乘法表。,main() int

14、 i, j; for(i=1; i=9; i+) for(j=1; j=i; j+) printf(“ %d*%d= %-2d“, i, j, i*j ); printf(“n“); getch(); ,例6.12将1元钱兑换成1分、2分、5分的硬币,若 每种面值的硬币都不得少于一个,问有几 种不同的兑换方法?,main() int i, j, n=0; for(i=1; i0) n+; printf(“n=%dn“, n); getch(); ,6.8 break语句和continue语句,一、break语句 作用:跳出所在的多分支switch语句,跳出所在的while do-while f

15、or循环语句(提前结束循环)。 例、 #define PI 3.14 main() int r; float area; for (r=1;r 100) break; printf(“%d,%6.2fn“,r,area); printf(“%d,%6.2fn“,r,area); ,当r=6时,area100,执行break语句, 提前结束循环,不再计算 r =710的area。,运行结果: 1 3.14 2 12.57 3 28.27 4 50.27 5 78.54 6 113.10 7 153.94 8 201.06 9 254.47 10 314.16,二、continue语句 作用:提前

16、结束本次循环体的执行,接着进行下一次循环条件的判别。 例6.13 把100200之间不能被3整除的数输出。 main () int n; for (n=100; n=200; n+) if (n%3 = 0) continue; printf(“%d“,n); ,当n能被3整除时,执行continue 语句,结束执行本次循环的循环 体,即跳过printf语句。,三、break语句和continue语句的区别 while (表达式1) while (表达式1) if (表达式2) break; if (表达式2) continue; break语句跳出循环 continue语句结束本次 循环体的

17、执行,进入 下一次循环,6.9 程序举例,例6.13 用以下公式 计算的值,直到最后一项的绝对值小于1E-6为止。 算法分析: 1、每项的分母,等于前一项分母加2,用n=n+2实现,n的初值为1。 2、每项的符号交替变化,用 s = -s实现,s的初值为+1(第一项为正)。 3、根据1和2,每一项的值 t = s/n,第一项的值为1。,#include “math.h“ main() int s; float n,t,pi; t = 1; pi = 0; n = 1.0; s = 1; while(fabs(t) = 1E-6) pi = pi + t; n = n + 2; s = -s;

18、t = s/n; pi = pi * 4; printf(“pi=%10.6fn“,pi); 运行结果:pi=3.141594,练习: 1. 猴子吃桃问题。猴子摘了一堆桃,第一天吃了一半,还嫌不过瘾,又吃了一个;第二天又吃了剩下的一半零一个,以后每天如此,到第10天,只剩下一个桃子了。问最初有多少个桃子? 2. 古印度国王要褒奖他的聪明能干的宰相达依尔(国际象棋的发明者)。问他要什么,达依尔回答:“陛下只要在棋盘的第一个格子中放1粒麦子,在第二个格子中放2粒麦子。在第三个格子中放4粒麦子,以后每个格子中的麦粒数都是前一格的2倍。如此放满64格,我就心满意足了。”国王想,这不难办到,但是将全印度

19、的麦子都用完了,还是不够。计算应需多少麦子。1立方米麦子约为1.42108粒,3. 编写程序求出具有下列性质的四位数:前两位数与后两位数相加,所得和的平方刚好等于原来的四位数。例如:3025=(30+25)2 4. 编写程序求出所有的水仙花数。所谓水仙花数是这样的三位数,它的各位数字的立方和就等于该数本身。例如;153=13+53+33 5. 用 公式, 求 的近似值。直到最后一项的绝对值小于10-6为止。 6. 判断一个正整数m是否是素数。 7. 求100200之间的所有素数,要求每行输出8个素数。,8. 用牛顿迭代法求方程2x3-4x2+3x-6=0在1.5附近的根。迭代公式为:,n=0,1,2,3,直到 为止。,9. 用二分法求方程2x3-4x2+3x-6=0在区间 -10,10之间的根。 10. 用迭代法求 ,求平方根的迭代公式为: 要求前后两次求出的x的差的绝对值小于10-5。,11. 编一程序。其功能是对输入表达式中的左、右圆括号能否正确匹配进行检查。假定表达式不存在其它的语法错误,表达式以回车符作为结束标志。 12. 从键盘输入若干行文字,统计输入正文中的行数、单词数和字符个数。这里的单词是指不含空格、换行符和制表符的字符串。以Ctrl+Z作为输入结束标志。,

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

当前位置:首页 > 其他


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