




免费预览已结束,剩余73页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第三章流程控制,描述算法的最基本成分基本操作基本控制结构本节介绍,如何用C来表示-带控制结构的程序怎样控制流程,3.1顺序结构结构化程序设计中的顺序控制结构表示:算法的某部分若执行,则顺序的一个接一个语句,全部被执行;若不执行,则全部语句一个也不被执行。,顺序控制结构编程举例,例1:任意从键盘输入一个三位整数,要求正确分离它的个位十位和百位数字,并在屏幕上输出。例2:换零钱问题。小明拿1美元买了若干糖果,请输入买糖果花费钱数,求出并输出找回零钱数,比如50cents多少枚,25cents多少枚,10cents多少枚,和1cents多少枚。,流程图说明:,顺序结构课堂练习:输入两个整数,将它们的数值交换并输出。输入一个圆柱体的半径,求出其表面积和体积,并输出。,3.2分支结构,按不同情况对数据进行不同处理或加工的情况。例,3.2.1逻辑值控制,if语句:为描述逻辑控制的分支程序而设计的。分为单分支if语句和双分支if语句。语法if语句if(表达式)语句if(表达式)语句else语句,(1)单分支IF语句,其形式是if(B)S其中:B是一个布尔表达式;S是一个语句。语义:计算B的值,若B为true则执行语句S,否则什么也不执行。,S,N,Y,(2)双分支if语句,其形式是:if(B)S1elseS2其中:B是布尔表达式;S1、S2都是语句。,S1,N,S2,Y,【例3.1】求A、B极大值问题,可以描述成if(ab)max=a;elsemax=b;,N,Y,S2,S1,if(x0)sign=1;elseif(x=0)sign=0;elsesign=-1;,【例3.2】数学中的符号函数,例如:if(ab)if(bc)x=0;elsex=1;如何理解?,两种解释:else属于第一个if:if(ab)if(bc)x=0;elsex=1;else属于第二个if:if(ab)if(bc)x=0;elsex=1;,两义性!,执行若ab且b=0时,执行(8),否则执行(10),(3)打印一个实根,转向(11),(11)结束,流程图,F,T,T,输出一个实根x=-c/b,delta=0,F,T,delta=0,输出一对虚根,T,F,T,F,/*PROGRAMquadraticequation*/#include#includevoidmain()inta,b,c,delta;printf(“输入方程式的三个系数:);scanf(%f%f%f,else/处理a!=0的情况delta=b*b-4*a*c;if(delta0)printf(x1=%f,x2=%fn,(-b+sqrt(delta)/(2*a),(-b-sqrt(delta)/(2*a);elseif(delta=0)printf(x1=x2=%fn,-b/(2*a);elseprintf(x1=%f+%fi,x2=%f-%fin,-b/(2*a),sqrt(-delta)/(2*a),-b/(2*a),sqrt(-delta)/(2*a);,【例3.4】输入成绩,给出其成绩等级要求:60分以下,打印“不及格”;60-69,打印“及格”;70-79,打印“中”;80-89,打印“良”;90-100,打印“优”;其他成绩,打印“数据无效”。,#includevoidmain()intmark;scanf(“%dn”,随堂练习,根据式子画流程图、写程序。y=,3.2.2算数值控制的多分支语句每种形式中的default部分都可以省略。,第一种:设有switch语句:switch(e)casec1:S1break;casec2:S2;break;casec3:S3;break;casec4:S4;break;casec5:S5;break;default:S6,inta,b=4;scanf(%d,第二种:设有switch语句:switch(e)casec1:S1casec2:S2;casec3:S3;casec4:S4;casec5:S5;default:S6,特点:无break语句。,exercise:howmanydaysarethereineverymonthofayear?,.switch(month)case1:case3:case5:case7:case8:case10:case12:days=31;break;case4:case6:case8:case9:case11:days=31;break;case2:if(Isleapyear=1)days=29;elsedays=28;,分支(条件)小结,Ifelseswitchcase允许嵌套的适当使用,分支结构随堂练,输入某年某月,请打印出这个月会有多少天。输入某年某月某日,请输出这是本年的第几天。,作业1.以switch.case结构改写该程序片段,if(a30)m=1;elseif(a40)m=2;elseif(at,1-i;/循环初值S1:P*t-p,打印P,i+1-i;/循环体S2:i=20?/循环控制条件S3:结束说明:若S2成立,则返回S1;否则算法结束,算法3:,使用循环语句必须清楚:(1)初始条件是什么?(2)重复执行部分(“循环体”)是什么?(3)循环控制条件是什么?,例题流程图:,循环结构包括:(1)初始条件(2)结束条件(循环控制)(3)循环体,P=P*t;,P=1;t=2;i=1;,3.3.2三种循环语句,while语句dowhile语句for语句,while语句(先判断)语句形式while(e)S)计算e值;)若e值为真则转向3),否则转向5);)执行语句S;)转向1);)while语句执行结束,接着向下执行其后继语句。循环体S有可能一次也执行不到!,2的幂次方程序源代码:,#includevoidmain()intt,P,i;t=2,P=1,i=1;while(i=20)P=P*t;printf(i=%dP=%dn,i,P);i+;,P=1;t=2;i=1;,P=P*t;,i=i+1;,N,Y,打印i、P值,2的幂次方程序运行屏幕截图,dowhile语句(后判断),语句形式为doSwhile(e);,注意:循环体S起码被执行一次。,比较:while与dowhile语句,while程序片段while(i=20)P=P*t;printf(“%dn”,P);i+;,do.while程序片段doP=P*t;printf(“%dn”,P);i+;while(i=20);,for语句语法形式for(e1;e2;e3)S其中:e1初值表达式e2终值(控制)表达式e3增量(修正)表达式,for循环特点:初值、控制、修正部分全部集中,优点:程序紧凑、好读、易于理解。,for语句main()intt=2,P=1;for(i=1;i=20;i+)P=P*t;printf(“%dn”,P);,while语句main()intt=2,i=1,P=1;while(i=20)P=P*t;printf(“%dn”,P);i+;,比较:while与for语句,for(;)是否合法?相当于什么语句?若省略e1,可否?若省略e2,可否?若省略e3,可否?若省略了e1和e3,可否?e1可以是其他与循环无关的表达式?e1和e3可以是逗号表达式?e2一般是关系表达式或逻辑表达式,但可以是数值表达式或字符表达式?,1)省略了e1和e3,即只给出循环控制条件for(;i=100;)相当于while(i=100)2)e1也可以是其他与循环无关的表达式for(sum=0;i=100;i+)sum=sum+i;3)e1和e3也可以是逗号表达式。for(i=0,j=100;i=1;x-)if(x%17=0)break;printf(x=%dn,x);,找到满足条件的最大数,结束循环,break语句举例,a.语句形式:continue;,b.语句作用:结束本次循环。,(2)continue语句,c.语句执行流程:continue语句可以结束本次循环,即不再执行循环体中continue语句之后的语句,转入下一次循环条件的判断与执行。,求300以内能被17整除的所有整数。,#includevoidmain()intx;for(x=1;x10)gotoPRT;gotoLOOP;PRT:printf(“%d”,t);,补充内容几种常用编程算法的简单介绍,一、打擂法定义:找出当前最大一项作为擂主,若有新值大于它,则替换之。打擂法例子:从键盘输入十个数,找出其中最大值,并输出。,二、迭代法(iterative),定义:利用计算机运算速度快、适合做重复性操作的特点,让计算机对一组指令(或一定步骤)进行重复执行,在每次执行这组指令(或这些步骤)时,都从变量的原值推出它的一个新值。步骤:第一:确定迭代变量第二:建立迭代关系式使用递推或倒推第三:对迭代过程进行控制迭代次数固定或不固定,迭代法举例1:阿米巴分裂,阿米巴用简单分裂的方式繁殖,它每分裂一次要用3分钟。将若干个阿米巴放在一个盛满营养参液的容器内,45分钟后容器内充满了阿米巴。已知容器最多可以装阿米巴220220个。试问,开始的时候往容器内放了多少个阿米巴?,迭代法举例2:Fibonacci序列第1个月有1对小兔子第2个月变成大兔子并怀孕第3个月生下1对小兔子第4个月2对兔子各生下1对小兔子即从第1个月起,兔子数目为1,1,2,3,5,8,13.求20个月后,兔子总数为多少?设f1为前1个月的兔子总数,f2为当前月的兔子总数,f3为后一个月的兔子总数。,练习题,猴子摘桃一个猴子摘了一堆桃子,第一天吃了一半零一个,第二天吃了剩余桃子的一半零一个,如此下去,第九天吃完后只剩一个桃子。编写程序,求最初摘了多少个桃子?假设用day表示天数,d1表示当天的桃子数,d2表示当天剩下的桃子数。,多重循环(或循环嵌套)定义:一个循环的循环体中包含另外一个循环二重循环三重循环多重循环Notice:复合语句的适当使用内外层循环控制变量不要重名嵌套循环采用右缩进格式书写循环嵌套不允许交叉,多重循环例题:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?(每行打印5个数)上机例子程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。,#includevoidmain()inti,j,k,h=0;printf(n);for(i=1;i5;i+)/*以下为三重循环*/for(j=1;j5;j+)for(k=1;kj,打印i*j,j+1-j,ji,ii,i=9,N,结束,Y,程序:/*九九表*/#includevoidmain()inti,j;for(i=1;i10;i+)printf(%4d,i);for(j=1;j=i;j+)printf(%4d,i*j);printf(n);printf(%4c,*);for(i=1;i10;i+)printf(%4d,i);printf(n);,例题【3】打印由数字组成的如下所示金字塔图案。,voidmain()inti,k,j;for(i=1;i=9;i+)/*外循环控制打印行数*/for(k=1;k=10-i;k+)/*每行起始打印位置*/printf();for(j=1;j=a,例题【4】题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。,程序分析:利用while语句,条件为输入的字符不为n.while(c=getchar()!=n),例题【5】求出某年某月某日是这一年的第几天。,#includecase4:main()case6:intyear,month,day,sum=0,leap,i;case9:printf(“请输入年,月,日:”);case2:sum+=28;/二月天数scanf(“%d%d%d”,/大天数,例题【6】百钱买百鸡100文钱买100只鸡公鸡5文/只,母鸡3文/只,3只小鸡/文,问公鸡、母鸡、小鸡各多少只?,答案:0,25,754,18,788,11,8112,4,84,第一种解法三重循环:#includemain()introoster,hen,chick;for(rooster=0;rooster=20;rooster+)for(hen=0;hen=33;hen+)for(chick=0;chick=99;chick=chick+3)if(rooster*15+hen*9+chick=300rooster=20;rooster+)for(hen=0;hen=33;hen+)chick=100-rooster-hen;if(rooster*5+hen*3+chick/3=100,由方程,第三种解法一重循环程序片段unsignedinthen,rooster,chick;for(hen=0;hen=33;hen+)rooster=(100-4*hen)/7;chick=(600-3*hen)/7;if(rooster+hen+chick=100,循环小结,(1)掌握三种循环结构的使用方法(2)清楚三种循环结构的异同之处(3)会用三种循环结构编写简单程序思考:for循环中的各个表达式,可以省略么?循环未完成时就想停止,可能么?循环中可以“嵌套”循环么?,本章小结,(1)三种基本程序控制结构(2)几种循环的比较a.while和for循环是先判断表达式,然后执行语句;而do-while循环是先执行语句,后判断表达式。b.对whi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五贸易委托代理合同
- 二零二五版营业房租赁简单合同范例
- 全新电影拍摄保密协议二零二五年
- 二零二五托老院入住服务协议书
- 营业执照借用协议书
- 二零二五全新减免物业费协议
- 餐饮联营合作协议二零二五年
- 二零二五各国对于电子合同法律规定
- 集体土地的租赁合同
- 协议离婚和起诉哪个好
- 2024年中国资源循环集团有限公司招聘笔试真题
- 行政管理本科毕业论文-数字政府背景下地方政府治理效能研究
- 危货车辆防汛救援应急预案
- 电信运营商网络升级计划
- 2025年全国国家版图知识竞赛(中小学组)题库及答案
- 2025年山东能源集团高校毕业生校园招聘笔试参考题库附带答案详解
- 课件-DeepSeek从入门到精通
- 帝豪EV450维修手册
- 未被列入违法失信名单承诺书
- 外周动脉检测分析术
- ProE5.0全套教程(完整版)
评论
0/150
提交评论