信息技术全国联赛C语言教学课件之循环结构.ppt_第1页
信息技术全国联赛C语言教学课件之循环结构.ppt_第2页
信息技术全国联赛C语言教学课件之循环结构.ppt_第3页
信息技术全国联赛C语言教学课件之循环结构.ppt_第4页
信息技术全国联赛C语言教学课件之循环结构.ppt_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第6章循环结构程序设计,主要内容:1、循环结构2、while语句3、do_while语句4、for语句5、循环的嵌套6、goto、break、continue语句重点掌握:循环结构的分析,循环语句的执行过程。,6.1循环结构的组成,循环结构:描述有规律的重复操作问题。组成:要重复执行的操作,重复执行所需的条件。例6.1:求10!.分析:计算1*2*3*10;需重复执行“乘”的操作:用循环结构描述:设k为每次要乘的乘数,p为部分积,则循环执行的条件为:k=10;循环重复执行的操作为:k*p送给p,k加1。,流程图:,一个完整的循环结构一般由四部分组成:循环体、循环控制条件、循环变量的初始化、循环变量的增值其中,循环体是需要重复执行的操作序列;循环控制条件是重复执行循环体所需的条件,即当条件成立时执行循环体,否则结束循环;循环变量是决定循环条件是否成立的变量;循环变量的增值反映了循环变量的改变规律,它使循环变量的值向着使循环结束的方向改变;循环变量的初始化是指在进入循环前,给循环变量赋初值,否则首次进入循环时,无法确定循环控制条件是否成立。,如在本例中,循环体:P=P*K;K=K+1;循环条件:K=10循环变量:K进入循环前给K赋初值:1改变循环变量的值:K+,例6.2从键盘输入20个试验数据(整型),统计正数、负数的个数。分析:重复执行20次,每次对一个数进行处理:输入,判断正、负。设j为已处理实验数据的个数,a,b分别保存正数、负数的个数,则:循环体:输入第j个数,并处理数据(用选择结构),j增1循环条件:j20循环变量的初值:0循环变量增值:1,流程图:,start,j=0,j20,j=j+1,输出a,b,end,a=0;b=0,Y,N,输入x,处理x,循环有两类:1.当型循环:先判断后执行,即以上两例均为当型循环结构。(常用)2.直到型循环:先执行后判断,即(c语言中无直接描述直到型循环的语句,使用时需先转换成当型循环结构,因此不常用,一般在编写菜单程序时使用。本长只作简要介绍)。:,6.2while语句,用于描述“当型”循环结构。例6.3用while语句编写例6.1的程序。main()/*求10!*/intk;longp;p=1;k=1;/*给循环变量赋初值*/while(k=10)/*循环条件放在while语句的括号中*/p=p*k;/*循环体是一个复合语句*/k+;/*循环变量增值语句*/printf(n10!is:%ld,p);思考:若n由键盘输入,如何实现n!?,6.2while语句,While语句的一般格式:while(表达式)/*表达式为循环条件*/循环体语句其中,循环体语句可以是简单语句、复合语句或空语句。如本例中循环体为复合语句p=p*k;k+;分析例6.3,可得while语句的执行过程为:计算while后条件表达式的值。若表达式的值为真,则执行循环体语句,然后转;否则,退出循环,即结束while语句。流程图(见下页),While语句的执行流程图:,Y,N,例6.4用while语句编写例6.2的程序。main()inta,b,j,x;a=b=0;j=0;/*循环变量赋初值*/printf(nenter20integers:);while(j0)a+;elseif(x0)b+;j+;/*循环变量增值*/printf(npositive:%d,negative:%d,a,b);,例6.5输入某班一门课的成绩并计算其平均成绩。(人数不定,当输入成绩为-1时结束)。分析:本例的特点是“循环次数不确定”,而是已知循环结束的条件。循环的组成:循环体:将有效成绩score加入部分和sum;输入下一个成绩score。循环控制条件:score!=-1循环变量:score循环变量的改变:用户输入循环变量的初值:键盘输入,例6.5程序:main()floatscore,sum=0;intn=0;printf(nenterascore(-1forend):);scanf(%f,特点:当第一次输入-1时,循环体执行次数为0。,Break语句:用于结束循环,main()/*例6.5可改用以下程序实现*/floatscore,sum=0;intn=0;while(1)/*无条件循环:表达式永为“真”*/printf(nenterascore(-1forend):);scanf(%f,本例的特点是:虽然“循环次数事先不确定”,但已知“循环结束的条件”,因此采用“结束标志控制法”来控制循环的进行。程序中用-1作为结束标志,当读取到该数时,循环体中的if语句的条件成立,便结束循环。结论:此处break语句作用是提前结束它所在的循环。即在循环条件成立的情况下跳出循环。通常与if语句连用,即当满足某条件时,结束循环。而且break语句只能用在switch和循环语句(while、do_while、for)中。,6.3do_while语句,do_while语句的特点是“先执行循环体,后判断循环条件”,当条件成立时继续执行循环体,条件不成立时结束循环。因此,do_while循环常用来实现类似“直到型”循环的“当型”循环结构。例6.6求自然数n中各位数字之和(n由用户输入)。问题分析:从n的个位开始,重复求每一位数字,并加入和s,直到最高位数字处理完为止。因此,解决问题的关键是:如何求得n中的每一位数字?n的位数事先不确定,如何控制循环次数?具体方法是:用n%10得n的最低位,加入和s;然后n=n/10,即n始终表示由未处理的数字组成的自然数。重复以上过程,直至n等于0时结束。,由此得循环结构的组成要素为:循环体:计算n的个位并加入和s,即s+=n%10循环控制条件:n大于0循环变量:n循环变量增值规律:n=n/10循环变量初值:用户输入,例6.6程序:用while循环main()ints=0,n;printf(ninputanaturalnumber:);scanf(%d,例6.6程序:用do_while循环main()ints=0,n;printf(ninputanaturalnumber:);scanf(%d,结论:两种语句可通用。,Do_while语句的格式及执行过程,Do_while语句的一般格式:do语句while(表达式);其中,表达式是循环控制条件,语句是循环体,可以是简单语句、复合语句或空语句。通常用复合语句,使得结构更清楚。特别注意:该语句最后的“;”,执行过程:注:循环体最少执行一次。,Y,N,Do_while语句的应用,例6.7编写含菜单的程序。设小学生算术练习系统的菜单项包括1.加法、2.减法、3.乘法、4.除法、5.退出。编程实现:进入系统后显示菜单,等待用户选择,然后执行相应的功能(设每个子功能位一个输出语句);执行完后返回主菜单,直至选择退出。分析:循环体:显示菜单,选择,执行子功能。循环条件:ch不等于5循环变量:ch循环变量的改变:用户输入特点:先执行循环体,再进行条件判断。,#includestdio.hmain()charch;do/*显示菜单项*/printf(nexerciseforprimarystudent);printf(n1.add);printf(n2.subtraction);printf(n3.multiplicative);printf(n4.divide);printf(n5.exit);/*输出用户操作提示信息*/printf(npleasechoice(15):);/*接收用户输入并读取多余的回车符*/ch=getchar();getchar();,/*根据用户的选择执行相应的功能*/switch(ch)case1:printf(nadd.);break;case2:printf(nsub.);break;case3:printf(nmultiplicative.);break;case4:printf(ndivide.);break;case5:printf(nend.);break;default:printf(nerror.choiceagain.);while(ch!=5);,6.4for语句,For语句较前两种循环语句更简洁、更灵活,特别是处理循环次数确定的问题。例6.8输出100200之间不能被3整除的数。问题分析:用计算机解决此类问题常采用“穷举法”:将100200之间的数逐个处理一遍(即判断其能否被3整除,若不能,则输出;否则,不需处理)。这也是重复操作问题,需用循环结构实现。,设变量n表示每次待处理的数,对n的处理采用选择结构实现,其中n不能被3整除的条件是“n%3!=0”。则循环结构的组成为:循环体:判断n能否被3整除并进行相应的操作。循环条件:n=200(循环变量:n)循环变量的初值:100循环变量的增值:n+,例6.8,/*等价的while循环*/main()intn;n=100;/*初值100*/while(n=200)if(n%3!=0)printf(%5d,n);n+;/*增值1*/,/*用for循环*/main()intn;/*循环变量*/for(n=100;n=200;n+)if(n%3!=0)/*循环体*/printf(%5d,n);,for语句的格式、执行过程,一般格式:for(表达式1;表达式2;表达式3)循环体语句其中,表达式1为赋初值表达式表达式2为条件表达式表达式3为循环变量增值表达式,流程图:,计算表达式1,计算表达式2,循环体语句,计算表达式3,Y,N,关于for语句的几种用法:,例6.9求n!.(n=10)main()intn,t=1;n=10;for(k=1;k=n;k+)t=t*k;printf(nacumulated:%d,t);红色语句段等价于:for(n=10,k=1;k=n;k+)t*=k;*表达式1可以是都号表达式。,也等价于:n=10;k=1;for(;k=1,而不是k1*/,例6.11判断一个整数n是否为素数。#include“math.h“/*分析:*/main()intn,k,j;printf(“nentern:”);/*输入n*/scanf(%d,Continue语句,例6.12求输入的十个整数中正数的平均值。main()intk,n,a=0;floats=0;printf(“nenter10integers:”);for(k=0;k10;k+)scanf(“%d”,continue作用:结束本次循环体的执行,即跳过循环体中continue语句后面尚未执行的语句。,6.5循环的嵌套,例6.13求1!+2!+3!+n!分析:重复求j!并加入和sum。求j!又是一循环结构。main()intn,j,i;longt,sum=0;printf(nentern:);scanf(%d,例6.13求1!+2!+n!.方法2:不用嵌套的循环。main()intn,j;longt,sum=0;printf(nentern:);scanf(%d,类似的,计算e的近似值:e=(n=10),例6.14、某班期末考试有4门课,输入每人每门课的成绩,并计算每门课最高成绩。(设人数为30)定义数据结构:设score表示一个成绩,k表示第几门课,j表示某一门课中的第几个人,max表示某一门课中的最高成绩。算法分析:采用“自顶向下,逐步细化”的模块化方法,该问题的总体思路是:重复处理每一门课的成绩,采用循环结构。这是第一层循环,循环体为“处理一门课的成绩”,循环的条件是“k=4”,k的初值是“1”,增值规律是“k+”。然后分析循环体如何实现,如何处理一门课的成绩:即第二层循环,循环体为“输入第k门课第j个人的成绩,与该门课已输入成绩中的最大值max比较。循环条件是”j=30“,j的初值是”1“,增值规律是”j+“。注意,处理一门课成绩开始前,应给max赋初值。,#defineN30/*定义符号常量N表示人数30*/main()intk,j;floatscore,max;for(k=1;kmax)max=score;printf(nthemaxofcourseno%dis:%f,k,max);,Question;作为最大值变量,其初值如何设?一般有两种方法:(1)取第一个数据作为最大值(或最小值)变量的初值。这种方法是最常用的,对数据范围已知和未知的情况均适合。编程时,需先给最大(或最小)值变量赋初值,再进入循环处理后面的数据。(2)若已知待处理数据的范围,则最大值变量的初值可以取其范围下界,最小值变量的初值则取其范围的上界。如该例可以用语句“max=0;”赋初值,循环变量j的初值改为“1”。2.若人数不定,需根据实际有效成绩计算,如何实现?,不定方程求解问题(穷举问题),例6.1打印出所有的水仙花数。分析:对所有的3位数逐个判断。(有两种方法)方法1:设a,b,c分别表示一个三位数的百、十、个位,则满足条件a3+b3+c3=100*a+10*b+c的数是水仙花数。该方程的求解方法:首先找出方程中每个变量的取值范围,对所有a,b,c的任意组合都验证一遍,满足上述条件的一组a,b,c即是方程的解。方法2:对每一个三位数n,判断其是否为水仙花数。首先分解出n的三位数字a,b,c,然后判断是否满足条件n=a3+b3+c3,若满足,则n为水仙花数。,main()/*程序(1)*/inta,b,c,n,s;printf(ndaffodilnumber:);for(a=1;a=9;a+)for(b=0;b=9;b+)for(c=0;c=9;c+)n=100*a+10*b+c;s=a*a*a+b*b*b+c*c*c;if(n=s)printf(%d,n);,main()/*程序(2)*/inta,b,c,n,s;printf(ndaffodilnumbe

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论