第5章C语言循环结构程序设计

上传人:奇*** 文档编号:251871710 上传时间:2024-11-10 格式:PPT 页数:29 大小:196KB
返回 下载 相关 举报
第5章C语言循环结构程序设计_第1页
第1页 / 共29页
第5章C语言循环结构程序设计_第2页
第2页 / 共29页
第5章C语言循环结构程序设计_第3页
第3页 / 共29页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第5章 C语言循环结构程序设计,下一页,返 回,本章要点,while语句、do-while语句、for语句,continue语句、break语句,循环的嵌套循,循环结构程序设计,学习方法建议,学习本章内容时,应重点掌握三种循环语句的语法格式及执行过程,并在此基础上理解循环嵌套的应用,要多读程序,理解编程思想,并多上机练习。,目 录,5.1 while语句,5.2,do-while语句,5.3,for语句,5.4,循环的嵌套,返 回,上一页,5.5,break语句和continue语句,5.6,循环结构应用举例,5.7,本章小结,5.1 while语句,while语句用来实现“当型”循环结构。其一般形式如下:,while(表达式)语句,while语句的执行过程是:,下一页,返 回,首先计算表达式的值,若结果是“真”(非0)值时,执行while语句中的内嵌语句,即循环体;然后再计算表达式的值,重复上述过程,直到表达式的值为“假”(0)时结束,流程控制转到while语句的下一个语句继续执行,。,while语句中的“表达式”就是循环的条件,其执行流程见图5.1,其特点是:先判断表达式,后执行语句。,表达式,语句,0,非0,图5.1 while语句执行过程,例5.1】求 。,上一页,下一页,返 回,【编程思路】,(1)定义变量i、sum,并分别赋初值为1和0,用i表,示累加数,sum表示累加和。,(2)在while语句中,使sum在原有值的基础上加上,i的值,加完后再使i值自动增1。,(3)用i=100作为循环的条件,若i的值超过100就,停止循环。,(4)最后输出累加和sum。,【程序代码】,#include stdio.h,main(),int i=1,sum=0;,while(i=100),sum=sum+i;i+;,printf(“sum=%dn,sum);,运行结果如下:,上一页,下一页,返 回,【例5.2】求n!,n由键盘输入。,【编程思路】,求阶乘就是求累乘,即求1*2*3*n。这里除用于存放累乘积的变量的应置为1外,其执行过程与累加相同。,【程序代码】,#include stdio.h,main(),int i=1,n,s=1;,printf(Input n:);,scanf(%d,while(i=n),s*=i;,i+;,printf(%d!=%dn,n,s);,运行结果如下:,do-while语句的特点是先执行循环体,然后判断循环条件是否成立。其一般形式为,do,语句,while(表达式);,上一页,下一页,返 回,5.2 do-while语句,do-while语句的执行过程是:,先执行一次循环体语句,然后判断表达式,当表达式的值为非0时,返回重新执行循环体语句,如此反复,直到表达式值等于0为止,此时循环结束。可以用图5.2表示其流程。,语句,0(假),表达式,图5.2 do-while语句执行过程,【例5.3】,用do-while语句改写例5.1的程序。,上一页,下一页,返 回,【程序代码】,#include stdio.h“,main(),int i=1,sum=0;,do,sum=sum+i;,i+;,while(i=100);,printf(“sum=%dn,sum);,运行结果如下:,for语句的一般形式为:,for(表达式1;表达式2;表达式3)语句,For语句的执行过程是:,(1)求解表达式1;,(2)求解表达式2,若其值为真(值为非0),,则执行for语句中指定的内嵌语句,然后执行下面第(3),步。若为假(值为0),则结束循环,转到第(5)步;,(3)求解表达式3。,(4)转回上面第(2)步骤继续执行。,(5)循环结束,执行for语句下面的一条语句。,可以用图5.3来表示for语句的执行过程。,上一页,下一页,返 回,5.3 for语句,非0,求解表达式1,表达式2,语句,求解表达式3,0,图5.3 for语句执行过程,for语句最简单的应用形式也就是最易理解的如下形式:,for(循环变量赋初值;循环条件;循环变量增值)语句,【例5.4】用for语句改写例5.1的程序,【程序代码】,#include stdio.h,main(),int i,sum=0;,for(i=1;i=100;i+),sum+=i;,printf(sum=%dn,sum);,运行结果如下:,上一页,下一页,返 回,说明:,有时根据需要可以将for语句中的部分或所有表达式省略,省略“表达式1”时,应在for语句之前给循环变量赋初值。省略“表达式2”时,在循环体中通常要有能使循环结束的语句,否则就成了无限循环了。省略“表达式3”时,通常在循环体中要有使循环变量增值的语句。不管省略几个表达式,分隔符分号“;”是不能省的。,如例5.4中的代码可以改写成:,int i=1,sum=0;,for(;i=100;i+),sum+=i;,上一页,下一页,返 回,一个循环的循环体内又包含另一个完整的循环结构,称为循环的嵌套。内嵌的循环中还可以嵌套循环,这就是多重循环。各种语言中关于循环的嵌套的概念都是一样的。,三种循环(while循环,do-while循环和for循环)即可以自身嵌套,也可以互相嵌套。,【例5.5】用一元纸币换一分、两分及五分的硬币,要求换到的硬币总数为50枚,问有多少种换法?每种换法中各种硬币分别是多少?,【编程思路】,设x,y,z分别代表五分、二分、及一分的硬币数目。三变量只有两个是独立的,第三个必须满足z=1005*x2*y 及 x+y+z=50的条件。因此可用双重循环解此问题。其中x可由1到20,y可由0到50。,上一页,下一页,返 回,5.4 循环的嵌套,【程序代码】,#include stdio.h,main(),int x,y,z;,printf(FIVEtTWOtONEn);,for(x=0;x=20;x+),for(y=0;y=50;y+),z=100-5*x-2*y;,if(x+y+z=50)printf(%3dt%3dt%3dn,x,y,z);,运行结果如下:,上一页,下一页,返 回,【例5.6】编写程序,输出下列图形,上一页,下一页,返 回,【编程思路】,(1)图形共有5行,定义i表示行数,即外循环的循环控制变量,其值从1到5递增。,(2)每行前空格的数量分别为5、4、3、2、1,如果用i表示行数,则每行前的空格数据与行号i的关系为6-i;,(3)每一行“*”的数量分别为1、3、5、7、9,与行号的关系为2*i-1。,(4)定义变量j、k表示空格数和“*”数,它们作为内循环的循环控制变量。,【程序代码】,#include stdio.h,main(),int i,j,k;,for(i=1;i=5;i+),for(j=1;j=6-i;j+),printf();,for(k=1;k=2*i-1;k+),printf(*);,printf(n);,说明:,本程序用双重循环实现,外循环控制行数,内循环控制每行的内容,每行内容均包括三部分,行前空格、一行*、换行。行前空格和每行的*的输出均用内嵌的循环实现。,上一页,下一页,返 回,break语句的一般形式为:,break;,该语句的功能有两个:,(1)在switch语句的程序段中,遇到break语句,则退出switch语句,执行后继语句。,(2)在循环体中,遇到break语句,则退出包含break语句的那层循环,一般和if语句连用。,【例5.7】判断正整数m是否素数,m由键盘输入。,【编程思路】,判断m是否是素数,可以有三种方法:,(1)用m依次除以2m-1之间的所有数,若都不能除尽,则m是素数,否则就不是素数。,(2)用m依次除以2 之间的所有数,若都不能除尽,则m是素数,否则就不是素数。,上一页,下一页,返 回,5.5 break语句和 continue语句,5.5.1 break语句,(3)用m依次除以m/2之间的所有数,若都不能除尽,则m是素数,否则就不是素数。,本题采用第(2)种方法,其算法是这样的:,将 的值赋给变量k,让m被2到k除,如果m能被2k之中任何一个整数整除,则提前结束循环,此时i必然小于或等于k,如果m不能被2k之间的任一整数整除,则在完成最后一次循环后,i还要加1,因此i=k+1,然后才终止循环。在循环之后判别i的值是否大于等于k+1,若是,则表明未曾被2k之间任一整数整除过,因此输出“是素数”。,【程序代码】,#include,#include,main(),int m,i,k;,scanf(%d,k=sqrt(m);,for(i=2;i=k+1),printf(%d is a prime numbern,m);,else,printf(%d is not a prime numbern,m);,运行结果如下:,上一页,下一页,返 回,5.5.2 continue语句,continue语句的一般形式为:,continue;,该语句只能用在循环体中,执行该语句则结束本次循环,再去判断是否继续下次循环。该语句通常是用于循环体中if语句内,即满足某种条件才结束本次循环。,continue语句和break语句的区别是:continue语句只结束本次循环,而不是终止整个循环的执行。而break语句则是结束整个循环过程,不再判断执行循环的条件是否成立。,【例5.8】把100200之间的不能被3整除的数输出,每行输出10个数。,【编程思路】,(1)定义一个循环控制变量和统计输出数量的变量,。,(2)循环的初值和终值分别取100和200。,(3)用对3取余的运算判断是否能被3整除。,【程序代码】,#include stdio.h,main(),int n,s=0;,for(n=100;n=200;n+),if(n%3=0),continue;,printf(%d,n);,s+;,if(s%10=0)printf(n);,printf(n);,上一页,下一页,返 回,说明:在while语句和do-while语句中,continue语句使得流程直接跳到循环控制条件的测试部分,然后决定循环是否继续进行。在for循环中,遇到continue后,流程跳过循环体中余下的语句,而去对for语句中的“表达式3”求值,然后进行“表达式2”的条件测试,最后根据“表达式2”的值来决定for语句是否执行。,上一页,下一页,返 回,运行结果如下:,5.6 循环结构应用举例,【例5.9】输出九九表,格式如下:,上一页,下一页,返 回,【编程思路】,(1)用双重循环实现,外循环控制行数,内循环控制列数。,(2)定义变量i表示行数,作外循环的循环控制变量,使其从1到9递增。,(3)定义j表示列数,作内循环的循环控制变量,从1到i递增。,【程序代码】,#include,main(),int i,j;,for(i=1;i10;i+),for(j=1;j=1e-6,其中fabs是用来求绝对值的函数,但使用前在代码前要用#include 对math.h头文件进行包含。,上一页,下一页,返 回,【程序代码】,#include stdio.h,#include math.h,main(),int s;,float n,t,pi;,t=1;pi=0;n=1;s=1;,while(fabs(t)=1e-6),pi=pi+t;,n=n+2;,s=-s;,t=s/n;,pi=pi*4;,printf(pi=%10.6fn,pi);,运行结果如下:,上一页,下一页,返 回,【例5.11】求100200间的全部素数,每行输出10个。,【编程思路】,(1)定义一个循环控制变量m其取值从101到200,循环增量为2,因为此范围内的素数一定为奇数,定义一个统计素数个数的变量n,初值为0,通过对10取余运算可控制每行输出10个。,(2)用每个循环变量除以2到该变量的平方根之间的每一个数,若都除不尽,则该变量所存
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 各类标准


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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