第6讲程序结构设计(下)-848805645_第1页
第6讲程序结构设计(下)-848805645_第2页
第6讲程序结构设计(下)-848805645_第3页
第6讲程序结构设计(下)-848805645_第4页
第6讲程序结构设计(下)-848805645_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

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

文档简介

第6讲:程序结构设计(下)

(参考教材的第3章)

yfhuang@

2014-10-29主要内容循环程序设计:3种循环控制语句综合程序设计举例3.4循环程序设计

--基本概念用顺序结构和分支结构能解决所有问题吗?计算机是一个“伟大傻瓜”,特征是不厌其烦地做同样的操作,这是通过循环语句实现的对某些问题,在寻找它的解时需要检查所有的可能的方案,从中找出可行解。这种解决问题的方法称为枚举法或穷举法.该方法就是采用循环来实现。3.4循环程序设计

--基本概念当条件满足循环体

当型循环

循环体

直到条件满足直到型循环3.4循环程序设计C++语言提供了3种循环控制语句:

(1)while语句

(2)do-while语句

(3)for语句循环条件设计:循环次数有限(计数控制)和循环次数未知(事件控制)循环体设计:循环体如果包含一条以上语句时,则应该用花括号括起,构成复合语句在循环体语句中,一定要有改变循环条件的语句,使循环能够终止。否则,将成为死循环。3.5.1

while语句

while语句的一般格式为:

while(表达式)循环体语句while语句的执行流程如图所示:循环体while语句的下一语句表达式0图while语句执行流程示意图非0例:从键盘输入n(n>0)个数,求其和?算法重点循环条件(计数控制循环)循环体构造计数器(i)和累加器(sum)的概念循环条件循环体例:从键盘连续输入字符,直到输入“回车”符为止,统计输入的字符个数算法重点未知循环次数的循环条件(事件控制循环)getchar()/getch()函数使用和区别charc;c=getchar();或c=getch();c=getch();头文件是conio.h。而不是stdio.h

windows平台下ENTER键会产生两个转义字符\r\n,getchar()返回10(即\n),getch返回13(\r)求PI的近似值,见P80-81提问:为什么错?求PI的近似值,见P80-813.5.2do-while语句

do-while语句格式:

do循环体while(<表达式>);

do-while语句的执行流程如图所示:循环语句体do-while语句的下一语句表达式0do-while语句执行流程示意图非03.5.2do-while语句

do-while语句与while语句的区别:do-while语句是在判断条件是否成立之前,先执行循环体语句一次;while语句则是先判断条件是否成立,如果条件成立才执行循环体;while语句的循环体可能一次都不执行;而do-while语句的循环体至少被执行一次,这是while语句和do-while语句的根本区别还不明白?例:从键盘输入n(n>0)个数,求其和?循环条件循环体循环条件循环体3.4.2do-while语句3.5.3for语句

for循环格式:

for(<表达式1>;<表达式2>;<表达式3>)

{循环体语句}for循环的执行流程如图所示:计算表达式1循环语句体计算表达式3for语句的下一语句表达式20用for循环语句编写计算100个6相加的程序3.5.3for语句for语句的功能可用while语句描述如下:表达式1;例如:i=1;while(表达式2)while(i<=50){语句;{sum=sum+i;

表达式3;i++;}}for语句最简单的应用形式:

for(循环变量赋初值;循环条件;循环变量增值){语句}

例如,for(i=1;i<=50;i++)sum=sum+i;

3.5.3for语句1.缺省<表达式1>的情况;inti=1,sum=0;for(;i<=100;i++)sum=sum+6;2.缺省<表达式2>的情况;for(i=1,sum=0;;i++)sum=sum+6;此时循环条件为真,相当while(1)3.缺省<表达式3>的情况;

inti=1,sum=0;for(;i<=100;){sum=sum+6;i++;}缺省也很美生活中的死循环我要回老家,但是我身份证丢了,我买不到票,于是我回不去了。但补办身份证必须回老家补办—于是,我死循环了。委托家人找关系补办了身份证,家人快递给我,收件人是我。结果需要凭身份证取件—于是我又死循环了……

3.5.3循环编程实例输入任意1个大于2的整数,判断该数是否是素数,并输出相应结果分析:根据定义,一个>2的整数n,如果除1和n外不能被任何数整除,则是素数;并规定2是最小素数。为了确定n是否含有因子,只需用2到n(也可用2至sqrt(n))作除数,如均不能整除n,则n是素数,否则,n不是素数算法(1)输入n(2)如果n等于2,则输出“2是一个素数”;否则,如果n>2则找n是否有因子

i从2开始,用i除n,若余数非0且i≤n,则用下一个i重复该过程。当余数为0或i大于等于n时,结束找因子的过程(3)如果结束循环时余数为0,则输出n“不是一个素数“,否则,输出n“是一个素数”算法重点:循环条件和程序效率//妙!妙!输入一批整数,以0为结束,输出其中最大的一个分析:从若干数中找出最大的一个数,最基本算法是“打擂台”。即两两相比,大者留下,小者下台。当所有数比完时,台上留下的数为最大。程序中用一个变量max作为擂台,保存每两个数相比中大的一个数算法:

(1)输入一个数x(2)置最大数max初值为x。

(3)检查x是否等于0,如果x不等于0,则

(3)-1输入下一个数x(3)-2如果max<x,则将max=x(3)-3转步骤(3)(循环);如果x等于0,则结束循环,转步骤(4)(4)输出max算法重点:打擂台算法-求序列数中最大值//max是擂台3.5.4循环嵌套犀利哥故事7—亦喜亦忧话说天仙妹妹来犀利哥家吃晚饭,饭饱回家。月朦胧,夜朦胧,两人依依惜别。分别不久,犀利哥接到电话:天仙妹妹给车撞伤了。犀利哥急忙赶到现场,肇事车辆跑了。幸好有3个目击着。他们向犀利哥描述了车号的一些特征✦甲说:牌照的前两位数字是相同的;✦乙说:牌照的后两位数字是相同的,但与前两位不同;✦丙说:四位的车号刚好是一个整数的平方;请同学们根据以上线索编程找出车号。问题分析:这个故事,抽象为找出一个四位数,满足

(1)前两位数相同;(2)后两位数同,且与前两位不同;(3)该整数是另一个整数的平方;3.5.4循环嵌套3.5.4循环嵌套

在循环体中又包含另一个循环语句,

称为循环嵌套在多重循环中,处于内部的循环称为内循环,处于外部的循环称为外循环C++规定,内循环必须完全嵌套于外循环中,内、外循环不能交叉;且内、外循环的循环控制变量不能重名3.5.4循环嵌套

计算sin(x)=x-x3/3!+x5/5!-x7/7!+……直到最后一项的绝对值小于10-7时,停止计算。x由键盘输入

基本思想:设自变量为x,和为sum,每一项为temp定义常量为eps,其值为:10-7由计算公式可知,第N项为(-1)N+1*x2N-1/2N-1)!第N-1项为(-1)N*x2N-3/(2N-3)!两相之间相差一个因子:-x2/((2N-2)*(2N-3))算法重点:内、外循环条件和循环体的设计3.5.4循环嵌套3.5.4循环嵌套【例】利用多重循环打印九九乘法表。程序如下:

3.5.4continue语句

如在程序中需要提前结束本次循环,进入下一次循环,这就要使用continue

语句continue语句的一般格式是:continue;其作用是结束本次循环,执行下一次循环

continue语句要与循环语句连用,通常不单独使用条件循环语句….Continue…循环语句3.5.5break语句的进一步说明break语句也可用于循环语句。用于强制性中断循环,从循环语句结束循环,转移到循环语句后面的语句去执行例:求100~200间的全部素数,见P82-833.6综合程序设计//IO格式控制头文件3.6综合程序设计例:求Fibonacci数列,1,1,2,3,5,8,....的前40个数,即:F1=1(n=1)F2=1(n=2)..Fn=Fn-1+Fn-2(n≥3)算法:算法重点:递推法,注意变量f1、f2的重用和更新3.6综合程序设计参考课后22题.递推算法:已知第10天为X2=1,则第9天为X1,X1/2-1=X2,即X1=(X2+1)*2。已知了第8天,同理可算出第7天…直到第1天参考课后25题算法重点:穷举法,通过循环列举变量所有取值,打印符合条件的取值情况参考课后20题算法重点:穷举法,中间变量保存和条件输出本讲重点内容1.掌握循环3种控制语句.计数控制和事件控制循环分别更适合使用哪种控制语句2.理解continue和break的区别3.学习采用穷举法来解题4.学习采用递推法来解题6.通过打擂台法来找最大数算法6.如何判断素数的算法,标记变量使用技巧下次课内容:函数参考教材第4章4.1-4.10节,带星号章节不看第5次实验练习本次实验练习必做题2道如下。另有选作题1道。要求在第9周之前提交。提交源代码和运行结果【1】求10到200之间的孪生素数对。孪生素数对指两个素数的值相差2的一对素数,如11与13,17与19,…,等等。【2】犀利哥故事8-筹备彩礼,在第1次实验练习时,我们给犀利哥计算出:养6个月羊无法凑齐彩礼。犀利哥很着急,需要到底多个月能凑齐彩礼?请帮忙编程给出答案。要求在该程序中,必需使用Break语句。选作题(1)某幼儿园按如下方法依次给A、B、C、D、E五个小孩发苹果。将全部苹果的一半再加二分之一个苹果发给第一个小孩;将剩下苹果的三分之一再加三分之一个苹果发给第二个小孩;将剩下苹果的四分之一再加四分之一个苹果发给第三个小孩;将剩下苹果的五分之一再加五分之一个苹果发给第四个小孩;将最后剩下的11个苹果发给第五个小孩。每个小孩得到的苹果数均为整数。编制程序,确定原来共有多少个苹果?每个小孩各得到多少个苹果?(2)定义k(n)=n!(n>=1,n为整数),S(n)=k(1)+k(2)+…+k(n)(n>=1,n为整数),输入n(1<=n<=10),输出相应的S(n)。输入数据不需要考虑判错。测试数据:n=1 答案:1n=4 答案:33n=10 答案:4037913(3)找出1~1000中仅仅包含5个因子(包括1和自身)的所有自然数,输出这些自然数的所有因子。要求:输出要有提示(4)有A,B,C,D,E,F六个小朋友,现将三顶相同的白帽子,三顶相同的黑帽子分给他们,每人一顶。请编写程序计算不同分配方案的个

温馨提示

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

评论

0/150

提交评论