C语言第3章人民邮电出版社张小东.ppt

上传人:za****8 文档编号:3107220 上传时间:2019-12-05 格式:PPT 页数:48 大小:796KB
返回 下载 相关 举报
C语言第3章人民邮电出版社张小东.ppt_第1页
第1页 / 共48页
C语言第3章人民邮电出版社张小东.ppt_第2页
第2页 / 共48页
C语言第3章人民邮电出版社张小东.ppt_第3页
第3页 / 共48页
点击查看更多>>
资源描述
第三章 循环结构与应用,循环结构是程序中一种很重要的结构。它会根据条件反复执行某程序段,当然不能无限的执行下去,在给定条件不成立时,循环就会停止。给定的条件称为循环条件,反复执行的程序段称为循环体。,语言提供了多种循环语句,可以组成各种不同形式的循环结构: (1) for循环语句; (2) while循环语句; (3) do-while循环语句;,3.1 循环的概述,for一般形式为:,for(设置初始值;循环条件判断;设置循环增减量) 语句1; 语句2; 语句n; ,3.2 for循环,for语句的执行流程:,图3-1 for语句执行流程图,例3-1 使用for循环求整数1加到100的值。,图3-3 高斯级数运算的流程图,#include void main(void) int nSum;/* 用于保存计算和*/ int i; /* 循环控制变量,也是参与运算的操作数*/ nSum=0; for(i=1;i101;i+) nSum+=i; printf(“1+2+3+99+100=%dn“,nSum); ,程序清单3-1 progression.c,双目复合赋值运算符,复合赋值表达式的一般形式为: 表达式1 Op= 表达式2 Op表示参与构成复合赋值运算符的双目运算符,它和下面的赋值表达式等价: 表达式1 = (表达式1) Op (表达式2) 例如:x+=y-3等价于x=x+(y-3),而不是x=x+y-3。,注意:,+i和i+等价于i=i+1,但是,这两个表达式在参与其他运算的时候是有区别的。在和其他运算结合在一起时,+i表示i自增1后再参与其它运算,而i+表示i参与运算后,i的值再自增1。同理,-i是i自减1后再参与其它运算,而i-是i参与运算后,i的值再自减1。例如下面的程序段: int x=0,int i=1; x=i+; printf(“x=%d,i=%d”,x,i); 输出的结果为x=1,i=2。,例3-2 使用逗号运算符在for循环中初始化变量。,#include void main (void) int nSum; /* 用于保存计算和*/ int i; /* 循环控制变量,也是参与运算的操作数*/ /*在循环开始时,初始化变量nSum*/ for(i=1,nSum=0;i101;i+) nSum+=i; /*求和*/ printf(“1+2+3+99+100=%dn“,nSum); ,程序清单3-2 progression-1.c,例3-3 很多web网站限制登陆次数,如果输入的密码在指定次数内错误,就拒绝登陆。实现一个程序,模拟验证密码的过程,判断用户输入密码的次数,若3次输入密码错误,则结束输入。,图3-5 控制密码输入次数程序流程图,#include “stdio.h“ void main (void) int nPwd=0; /* 用于保存输入的密码*/ int i; /*循环控制变量*/ int nFlag=1; /*密码匹配成功的标志*/ /* 默认设定密码为87569,可以根据需要进行设定*/ for(i=0;(nFlag=(87569 != nPwd) ,程序清单3-3 checklogon.c,#include void main (void) int i; for(i=0;i10;printf(“%d “,i),i+) /*在“设置循环增减量”部分使用逗号运算符,调用printf函数输出*/ ,例3-4 使用循环输出0-9这10个数字。,程序清单3-4 aotherfor.c,while(条件判断) 语句1; 语句2; 语句n; ,3.3 while循环,while一般形式为:,图3-8 while循环执行过程,例3-5 使用while循环接收键盘输入,若输入字符为q或者Q,则停止循环执行。,图3-9 while循环处理键盘输入的流程图,#include void main (void) char cStr; /* 用于保存输入的字符*/ cStr=0; while(cStr !=q) ,程序清单3-5checkcharactor.c,例3-6 用while循环实现从1加到100的计算。,#include void main (void) int nSum; /* 用于保存计算和*/ int i; /* 循环控制变量,也是参与运算的操作数*/ nSum=0; i=1; /*初始化循环控制变量*/ while(i101) nSum+=i; i+; /*改变循环控制变量的值*/ printf(“1+2+3+99+100=%dn“,nSum); ,程序清单3-6 progression-2.c,do 语句1; 语句2; 语句n; while(条件判断);,3.4 do while循环,do while一般形式为:,图3-11 do while循环执行过程,例3-7 使用do while循环实现1到100的计算。,图3-12 do while循环实现高斯级数计算的流程图,#include void main (void) int nSum; /* 用于保存计算和*/ int i; /* 循环控制变量,也是参与运算的操作数*/ nSum=0; i=1; /*初始化循环控制变量*/ do nSum+=i; i+; /*改变循环控制变量的值*/ while(i101); printf(“1+2+3+99+100=%dn“,nSum); ,程序清单3-7 progression-3.c,一个循环体内又包含另一个完整的循环结构,称为循环的嵌套。内嵌的循环中还可以嵌套循环,这就是多层循环。,3.5 循环的嵌套,(1) for(;) (2) for(;) for(;) while() (3) while() (4) do do while() while(); while(); (5) while() (6) do do for(;) while(); while();,首先看九九乘法表的内容,如下所示: 1*1=1 2*1=2 2*2=4 3*1=3 3*2=6 3*3=9 8*1=8 8*2=16 8*3=24 8*4=32 8*5= 40 8*6=48 8*7=56 8*8=64 9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81,例3-8 在屏幕上输出九九乘法表。,图3-14 九九乘法表的程序流程图,#include void main (void) int nRow; /*行数的循环控制变量*/ int nCol; /* 列数循环控制变量*/ for(nRow=1;nRow10;nRow+) /* 外层循环控制行数*/ for(nCol=1;nCol=nRow;nCol+) /* 内层循环控制列数*/ printf(“%d*%d=%d “,nRow,nCol,nRow*nCol); printf(“n“); /*输出一行后换行*/ ,程序清单3-8 multiplication-table.c,当确定要使用循环时,该使用哪个呢? (1)首先确定需要的循环是先进行条件判断,后执行 循环;还是先执行循环,然后判断条件。 (2)在for循环和while循环的选择上,如果涉及到初始 化一些变量或者更新一些操作,那么使用for循环比较 合适,否则使用while循环。,3.6 循环语句的选择,三种循环特性列表,beak语句,break语句的一般形式为: break;,例3-11 循环接收有效的学生成绩数据,如果数据大于100或小于0,则结束过程,输出总成绩和平均分。,图3-19 例3-11程序实现的流程图,#include void main (void) float fScore; /* 用于保存输入的成绩*/ float fMin=0.0f; float fMax=100.0f; float fTotal=0.0f; /* 保存总成绩*/ int nCount=0; /* 对输入的成绩个数进行计数*/ while(scanf(“%f“, ,程序清单3-11 break.c,注意: (1)break语句不能用于循环语句和switch语句之外的任何其他语句中。 (2)在嵌套循环中,break语句只能终止它所在的循环的执行。,本例中break语句的作用就是结束循环的执行,强制退出循环, 程序继续执行循环后的程序语句。,continue语句,continue的作用与break语句相似,也有结束循环的作用,但是continue语句是结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行下一次是否执行循环的判定。,continue语句的一般形式为: continue;,#include void main (void) float fScore; /* 用于保存输入的成绩*/ float fMin=0.0f,fMax=100.0f; float fTotal=0.0f; /* 保存总成绩*/ int nCount=0; /* 对输入的成绩个数进行计数*/ while(scanf(“%f“, ,程序清单3-12 continue.c,将程序清单3-11进行一下简单的修改,将break语句替换成continue语句。请读者分析程序执行的结果,体会这两种跳出循环体语句的作用和对程序流程的影响。,注意: break语句则是结束整个循环过程,不再判断执行循环的条件是否成立。 continue语句只结束本次循环,而不是终止整个循环的执行。,goto语句,goto语句为无条件转向语句,一般形式为: goto 语句标号;,语句标号用标识符表示,即由字母、数字和下划线组成,且第一个字符必须为字母或下划线,不能用整数来做标号。语句标号加在跳转的目的语句之前,并用冒号(:)与后面的语句分隔。例如, goto lable_123; 是合法的,而 goto 25; 是不合法的。,3.7 程序举例,例:下面对计算器做如下功能的扩充: (1) 增加菜单循环执行的功能; (2) 实现三角函数正弦函数的功能(sin函数); (3) 实现三角函数余弦函数的功能(cos函数)。,3.7.1 计算器,菜单反复执行功能 既然是要菜单反复 执行,它必然是个重复 性的工作,自然就可以 使用这章讲解的循环语 句来实现。在此采用 while循环语句实现该功 能。,图3-22 重复使用菜单功能的流程图,#include #include void main() int nFun=1; while(nFun!=9) system(“cls“);/clrscr(); printf(“ -n“); /* 构造功能菜单 */ printf(“ 加法运算-1n“); printf(“ 减法运算-2n“); printf(“ 除法运算-3n“); printf(“ 乘法运算-4n“); printf(“ 退出-9n“); printf(“ -n“); printf(“ 请输入功能选择: “); /* 在屏幕上显示提示信息 */ scanf(“%d“, ,程序清单3-13 AppCalc.c,(2) 三角函数sin函数和cos函数的实现 在高等数学中实现sin函数和cos函数的方法不止一种。 在这里,采用的是泰勒(Taylor)公式进行实现。 首先分别看下它们的泰勒展开式的形式:,图3-23 sin函数的实现流程图,#include #include #include void main(void) int nFun=1; double dSin=0.0,dCos=0.0, dTemp=1.0, dArc=0.0; /*变量声明初始化*/ int k=0; double pi=3.1415926,dMin=0.000001,dDegree=0.0; while(nFun!=9) system(“cls“); /clrscr(); printf(“ -n“);/* 构造功能菜单 */ printf(“ 加法运算-1n“); printf(“ 减法运算-2n“); printf(“ 除法运算-3n“); printf(“ 乘法运算-4n“); printf(“ sinx运算-5n“); printf(“ cosx运算-6n“); printf(“ 退出-9n“); printf(“ -n“); printf(“ 请输入功能选择: “); /* 在屏幕上显示提示信息 */ scanf(“%d“, switch(nFun),这里只给出sin函数和cos函数实现的程序片段,如程序清单3-15 AppCalc.c所 。,case 1 /*省略加法运算过程 */ break; case 2: /*省略减法运算过程 */ break; case 3: /*省略乘法运算过程 */ break; case 4: /*省略除法运算过程 */ break; case 5: /*sinx运算过程 */ dSin=0.0; dTemp=1.0; dArc=0.0; k=0; dDegree=0; printf(“ 请输入弧度:“); scanf(“%lf“,case 6: /*cosx运算过程 */ dCos=0.0; /*变量初始化*/ dTemp=1.0; /*变量初始化*/ dArc=0.0; /*变量初始化*/ k=0; dDegree=0; printf(“ 请输入弧度:“); scanf(“%lf“, ,在第1章,学生成绩档案管理系统已经具备了数据的输入和成绩分类分析的功能。不过,它只能进行单独的一次数据处理。学习过循环结构以后,结合本章的知识点,增加系统重复处理数据的能力,既检验对知识的实际应用能力,又把系统的功能进一步充实。下面对学生成绩档案管理系统做如下功能的扩充: (1) 实现可控的数据处理; (2) 对多次输入的三门成绩(C语言、英语和高数)进行 分类求和。,3.7.2 学生成绩档案管理系统,图3-25 循环统计学生总成绩的流程图,#include void main(void) float fMin=0.0f, fMax=100.0f; /* 保存总成绩*/ float fTotalc=0.0f,fTotale=0.0f,fTotalm=0.0f; float fClanguege=0.0,fEnglish=0.0,fMath=0.0; int nCount=0; /*对输入的成绩个数进行计数*/ do printf(“ -n“); fClanguege=0.0; fEnglish=0.0; fMath=0.0; printf(“ 请输入C 语言、英语和高数成绩,用逗号分隔:“); scanf(“%f,%f,%f“, /* 若输入的成绩不是合法数字,则结束本次循环*/ ,程序清单3-16 AppStud.c,if (fMath fMax | fMath 0) printf(“ C 语言的总成绩为 %0.1fn“,fTotalc); printf(“ 英语的总成绩为 %0.1fn“,fTotale); printf(“ 高数的总成绩为 %0.1fn“,fTotalm); else printf(“ 无效的成绩数据输入n!“); ,(1) 三种循环语句的基本语法 : for语句、while语句和do while语句 (2) 复合赋值运算符 (3) 逻辑运算的“短路”现象 (1) 如何跳离循环结构: break语句、continue语句和goto语句 (2) 无限循环的用途 (3) 循环语句的选择,3.8 本章小结,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


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

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


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