基本程序设计技术PPT课件.ppt
《基本程序设计技术PPT课件.ppt》由会员分享,可在线阅读,更多相关《基本程序设计技术PPT课件.ppt(109页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、关于基本程序设计技术第一张,PPT共一百零九页,创作于2022年6月第四章第四章基本程序设计技术基本程序设计技术第二张,PPT共一百零九页,创作于2022年6月学习程序设计需要注意规律性的东西。学习程序设计需要注意规律性的东西。三种流程模式是重要总结。三种流程模式是重要总结。本章还讨论:本章还讨论:基本输入和输出基本输入和输出递归的程序设计递归的程序设计其他控制结构其他控制结构顺序模式最简单顺序模式最简单选择模式:要确定判断条件及不同情况下的动作选择模式:要确定判断条件及不同情况下的动作开开始始的的难难点点在在实实现现重重复复执执行行的的循循环环。重重复复执执行行比比较较复复杂杂,牵涉问题多,
2、是本章重点牵涉问题多,是本章重点第三张,PPT共一百零九页,创作于2022年6月4.1循环程序设计循环程序设计写循环首先要发现循环。注意计算中的重复性动作,引进循环写循环首先要发现循环。注意计算中的重复性动作,引进循环可能统一描述和处理。可能统一描述和处理。重复动作的常见实例:重复动作的常见实例:一批类似数据做同样加工处理一批类似数据做同样加工处理累积一批可按规律算出的数据(累加等)累积一批可按规律算出的数据(累加等)反复从一个结果算出下一结果(递推)反复从一个结果算出下一结果(递推)若重复次数若重复次数很多很多,就应该考虑用循环,就应该考虑用循环如果重复次数如果重复次数无法确定无法确定,就必
3、须用循环描述,就必须用循环描述第四张,PPT共一百零九页,创作于2022年6月例:求例:求13到到315所有数的平方根之和。所有数的平方根之和。可以一个个地加,但更方便的方法是写循环。可以一个个地加,但更方便的方法是写循环。需要一个变量保存部分和,逐步把各平方根加上去;需要一个变量保存部分和,逐步把各平方根加上去;需要一个变量保存变动轨迹,从初值开始每次修改。需要一个变量保存变动轨迹,从初值开始每次修改。典型典型for循环。假定已有总和变量循环。假定已有总和变量sum和循环变量和循环变量n:for(sum=0.0,n=13;n=13;-n)sum+=sqrt(n);这里的两个循环等效。一般采用
4、向上循环这里的两个循环等效。一般采用向上循环第五张,PPT共一百零九页,创作于2022年6月可以用可以用while语句重写,两种结构功能上等效。语句重写,两种结构功能上等效。例,求例,求 13,315 间每隔间每隔7的各整数的平方根之和。的各整数的平方根之和。一般不用浮点数控制循环一般不用浮点数控制循环,尤其是增量为小数或包含小数时。,尤其是增量为小数或包含小数时。例:求从例:求从0到到100每隔每隔0.2的数的平方根之和:的数的平方根之和:doublesum,x;for(sum=0.0,x=0.2;x=100.0;x+=0.2)sum+=sqrt(x);由于浮点计算误差,不能保证循环由于浮点
5、计算误差,不能保证循环500次。应写:次。应写:intn;doublesum;for(sum=0.0,n=1;n=500;+n)sum+=sqrt(0.2*n);第六张,PPT共一百零九页,创作于2022年6月例例1:打印出打印出 1 到到 200 间的完全平方数。间的完全平方数。方法一方法一:逐个检查,遇平方数打印。:逐个检查,遇平方数打印。重复做,每次检查一个数。循环框架:重复做,每次检查一个数。循环框架:for(n=1;n=200;n+)if(n是完全平方数是完全平方数)打印打印n;需填充:数是否完全平方数,没有直接判断手段。需填充:数是否完全平方数,没有直接判断手段。可以可以顺序检查,
6、顺序检查,是否存在是否存在某数,其平方恰为某数,其平方恰为n。这构成(循环内的)新循环,需要一个新循环变量。这构成(循环内的)新循环,需要一个新循环变量。m可以从可以从1开始,递增,开始,递增,直至直至m*m大于大于n:for(m=1;m*m=n;m+)if(m*m=n)打印打印n;第七张,PPT共一百零九页,创作于2022年6月综合起来可得到完整程序:综合起来可得到完整程序:#includeintmain()intm,n;for(n=1;n=200;n+)for(m=1;m*m=n;m+)if(m*m=n)printf(%d,n);printf(n);/*最后输出一个换行符最后输出一个换行符
7、*/return0;内层循环结束:内层循环结束:1,找到,找到m使使m*m=n(n是完全平方数)是完全平方数)2,试探了所有可能,但都不成功(,试探了所有可能,但都不成功(n不是不是)第八张,PPT共一百零九页,创作于2022年6月方方法法二二:需需要要打打印印的的一一定定是是从从1开开始始连连续续几几个个整整数数的的平平方方,可从可从1开始打印到平方大于开始打印到平方大于200为止。为止。for(n=1;n*n=200;+n)printf(%d,n*n);/*注意打印什么注意打印什么*/还可以考虑利用递推公式:还可以考虑利用递推公式:方方法法一一:产产生生所所有有备备选选数数据据(1到到20
8、0的的整整数数),检检查查排排除除不不合格的。合格的。生成与检查生成与检查是解决问题的常用方法。是解决问题的常用方法。方法二是针对具体问题的特定方法。方法二是针对具体问题的特定方法。第九张,PPT共一百零九页,创作于2022年6月例例 2:写函数判断整数是否为素数(谓词)。写函数判断整数是否为素数(谓词)。类型特征可用类型特征可用intisprime(int),返回,返回0/1值值n是素数则它没有真因子,是素数则它没有真因子,m是是n的因子用的因子用(n%m=0)描描述,若述,若mn就够了。函就够了。函数定义:数定义:intisprime(intn)/*n是否素数是否素数*/intm=2;fo
9、r(;m*m=n;m+)if(n%m=0)return0;return1;/*没有因子,是素数没有因子,是素数*/第十张,PPT共一百零九页,创作于2022年6月从从循循环环中中退退出出:isprime发发现现一一个个因因子子就就可可做做结结论论。return使函数结束,也导致循环结束。使函数结束,也导致循环结束。函函数数不不完完善善,对对1给给出出“是是素素数数”,负负数数也也会会给给出出不不合合理理结果。结果。应该在循环前处理特殊情况:应该在循环前处理特殊情况:if(n=1)return0;负数问题?负数问题?如果需要可以另外考虑处理。如果需要可以另外考虑处理。第十一张,PPT共一百零九页
10、,创作于2022年6月例例3,艰难旅程(浮点误差)。乌龟要去环球。第艰难旅程(浮点误差)。乌龟要去环球。第1秒爬秒爬1米,米,第第2秒爬秒爬1/2米,第米,第3秒爬秒爬1/3米,第米,第4秒爬秒爬1/4米,米,。问一小。问一小时能爬出多远?爬时能爬出多远?爬20米需多少秒?米需多少秒?根据数学,乌龟能完成环球,可以爬得任意远。根据数学,乌龟能完成环球,可以爬得任意远。这里想比较这里想比较float和和double的计算误差情况。的计算误差情况。这里只考虑这里只考虑20米需要多少时间。写出下面函数:米需要多少时间。写出下面函数:longscndsf(floatd)longi;floatx=0.0
11、;for(i=1;xd;+i)x+=1/(float)i;returni-1;第十二张,PPT共一百零九页,创作于2022年6月写下面语句,执行时总也不输出:写下面语句,执行时总也不输出:printf(%lds,%fmn,scndsf(20.),20.);修改为如下语句:修改为如下语句:for(x=10.0;x=1E-6)x1=x2;x2=(2.0*x1+x/(x1*x1)/3.0;returnx2;这这个个程程序序的的一一个个缺缺点点是是同同一一表表达达式式写写了了两两次次。书书上上利利用用C的的特点给了一种简化写法,供参考特点给了一种简化写法,供参考学习了其他结构后有改进的写法学习了其他结
12、构后有改进的写法第十七张,PPT共一百零九页,创作于2022年6月例例5:定义函数,利用公式:定义函数,利用公式求求 近似值。设为近似值。设为doubledsin(doublex)。方法:循环累加,方法:循环累加,n 趋向无穷的过程中项值趋于趋向无穷的过程中项值趋于0,而累加值,而累加值趋向函数值。趋向函数值。需要用循环需要用循环。保存累加和的变量保存累加和的变量sum,循环中求出的项值用,循环中求出的项值用 t 保存。保存。sum=0.0;对对n为为0计算计算t;while(需要继续需要继续)sum=sum+t;计算下一个计算下一个t;循环结束条件:例如用项绝对值小于循环结束条件:例如用项绝
13、对值小于 。第十八张,PPT共一百零九页,创作于2022年6月问题:问题:t 的值如何计算?的值如何计算?第一个第一个 t就是就是 x;分析可以发现项值的递推公式:分析可以发现项值的递推公式:doubledsin(doublex)doubles=0.0,t=x;intn=0;while(t=1E-6|t=-1E-6)s+=t;n=n+1;t=-t*x*x/(2*n)/(2*n+1);returns;第十九张,PPT共一百零九页,创作于2022年6月一些情况一些情况:实参值很小时,循环将很快结束。实参值很小时,循环将很快结束。实参绝对值很大时循环可能做许多次,项的绝对值可能实参绝对值很大时循环可
14、能做许多次,项的绝对值可能达到很大,达到很大,n 值也可能超出整数的表示范围值也可能超出整数的表示范围可考虑用可考虑用fmod把参数归约到把参数归约到0,2 之内之内启示启示:理解问题非常重要。发现了项的递推性质能节省许多计算理解问题非常重要。发现了项的递推性质能节省许多计算(否则就要再写一个嵌套循环完成项的计算)(否则就要再写一个嵌套循环完成项的计算)级数收敛性质能帮人认识情况,改进计算方法级数收敛性质能帮人认识情况,改进计算方法写程序时必须仔细考虑问题本身的性质写程序时必须仔细考虑问题本身的性质第二十张,PPT共一百零九页,创作于2022年6月4.2 循环中的问题循环中的问题从循环中退出从
15、循环中退出有时需要从正在执行的循环中退出。有时需要从正在执行的循环中退出。对对6200的各偶数验证哥德巴赫猜想,利用的各偶数验证哥德巴赫猜想,利用isprime:for(n=6;n=200;n+=2)for(m=3;m=n/2;m+=2)if(isprime(m)&isprime(n-m)printf(%d=%d+%dn,n,m,n-m);问题:有多种分解时将产生多对输出。如对问题:有多种分解时将产生多对输出。如对10:10=3+710=5+5前面写前面写isprime时借助时借助return退退出了循环出了循环第二十一张,PPT共一百零九页,创作于2022年6月希望每个偶数只输出一行。希望每
16、个偶数只输出一行。怎样在发现素数对后停止?增加对循环的控制:把发现素数分解怎样在发现素数对后停止?增加对循环的控制:把发现素数分解作为条件加入。作为条件加入。引入整型变量引入整型变量found,值,值0表示未发现素数对。发现时将表示未发现素数对。发现时将found赋赋1。内循环开始时。内循环开始时found置置0。应修改内层循环条件。应修改内层循环条件。修改后循环是:修改后循环是:for(n=6;n=200;n+=2)for(found=0,m=3;m=n/2&!found;m+=2)if(isprime(m)&isprime(n-m)printf(%d=%d+%dn,n,m,n-m);fou
17、nd=1;这种需求很常见。这种需求很常见。C语言引进了专门的控制语句语言引进了专门的控制语句第二十二张,PPT共一百零九页,创作于2022年6月break语句语句,形式:,形式:break;break只能用在循环语句(及只能用在循环语句(及switch语句)里,使最内层(循语句)里,使最内层(循环可嵌套)循环语句(或环可嵌套)循环语句(或switch)立即停止,执行从被终止循)立即停止,执行从被终止循环(或环(或switch)之后继续。)之后继续。可可用用break解解决决循循环环中中退退出出问问题题,放放在在条条件件下下。完完成成前前例例的程序段:的程序段:for(n=6;n=200;n+=
18、2)for(m=3;m=n/2;m+=2)if(isPrime(m)&isPrime(n-m)printf(%d=%d+%dn,n,m,n-m);break;第二十三张,PPT共一百零九页,创作于2022年6月利用利用break重写前面求立方根的函数:重写前面求立方根的函数:doublecbrt(doublex)doublex1,x2=x;if(x=0.0)return0.0;while(1)x1=x2;x2=(2.0*x1+x/(x1*x1)/3.0;if(fabs(x2-x1)/x1)1E-6)break;returnx2;也可以在也可以在break处直接写处直接写returnx2。第二十
19、四张,PPT共一百零九页,创作于2022年6月循环中的几种变量循环中的几种变量循循环环中中常常出出现现几几类类变变量量,注注意意这这些些有有助助于于对对循循环环的的思思考考和和分分析析。也是写循环程序的经验总结也是写循环程序的经验总结注意:分类不是绝对的,不同类别没有截然界限注意:分类不是绝对的,不同类别没有截然界限1)循环控制变量)循环控制变量(循环变量循环变量):循环前设初值,循环中递增:循环前设初值,循环中递增/递递减,达到减,达到/超过界限时循环结束。它们控制循环的进行超过界限时循环结束。它们控制循环的进行/结束。结束。for中常有这类变量。中常有这类变量。for(n=0;n=0;-n
20、).for(n=2;n52;n+=4).这种循环是固定次数的循环。这种循环可能展开这种循环是固定次数的循环。这种循环可能展开第二十五张,PPT共一百零九页,创作于2022年6月2)累积变量:循环中常用)累积变量:循环中常用+=或或*=等更新。初值常用运等更新。初值常用运算的单位元(加用算的单位元(加用0;乘用;乘用1为初值)。循环结束时变量终值被为初值)。循环结束时变量终值被作为循环计算结果。作为循环计算结果。3)递推变量:前两类变量的推广。几个协同工作的变量,)递推变量:前两类变量的推广。几个协同工作的变量,每次由几个变量推出一个新值,其余依次更新。每次由几个变量推出一个新值,其余依次更新。
21、对变量对变量x1、x2、x3,循环体可能有序列:,循环体可能有序列:x1=x2;x2=x3;x3=.x1.x2.;例如上面例如上面cbrt里的变量里的变量x1和和x2。第二十六张,PPT共一百零九页,创作于2022年6月写循环时要考虑和解决问题列表写循环时要考虑和解决问题列表:循环涉及到哪些变量,需引进哪些临时性变量?循环涉及到哪些变量,需引进哪些临时性变量?循环如何开始?循环开始前给变量什么初值?循环中变量循环如何开始?循环开始前给变量什么初值?循环中变量的值如何改变?的值如何改变?什么情况下继续(或终止)循环?什么情况下继续(或终止)循环?循环终止后如何得到所需结果?循环终止后如何得到所需
22、结果?用哪种结构实现循环,等等。用哪种结构实现循环,等等。工作方式工作方式:分析问题,发掘线索,最终完成程序。:分析问题,发掘线索,最终完成程序。程序设计不是教条,典型问题也无标准答案。并非最简单程序设计不是教条,典型问题也无标准答案。并非最简单的问题总有多种解决方法,往往各有长短。的问题总有多种解决方法,往往各有长短。“正确正确”程序常有优劣之分。程序常有优劣之分。第二十七张,PPT共一百零九页,创作于2022年6月4.3循环与递归循环与递归程序中有循环可能导致很长的计算。程序中有循环可能导致很长的计算。没有循环结构也能描述这类计算。没有循环结构也能描述这类计算。C语言允许递归,可在函语言允
23、许递归,可在函数内调用自身,程序常常更简单清晰。数内调用自身,程序常常更简单清晰。例:定义计算整数阶乘的函数:例:定义计算整数阶乘的函数:12(n-1)n乘的次数依赖于乘的次数依赖于n,定义时不知道,每次用可能不同。,定义时不知道,每次用可能不同。程序的典型情况:计算程序的典型情况:计算“次数次数”依赖某些参数的值。依赖某些参数的值。省略号不科学。严格定义需用递归形式。省略号不科学。严格定义需用递归形式。第二十八张,PPT共一百零九页,创作于2022年6月注意递归定义的形式。这也提出了一种计算方法。注意递归定义的形式。这也提出了一种计算方法。如果语言允许递归定义函数,就可以直接翻译为程序。如果
24、语言允许递归定义函数,就可以直接翻译为程序。C允许递归定义:在函数定义内调用被定义函数本身。允许递归定义:在函数定义内调用被定义函数本身。类型特征可定为:类型特征可定为:intfact(int)阶乘值增长极快(数学),更合适的类型特征:阶乘值增长极快(数学),更合适的类型特征:longfact(long)第二十九张,PPT共一百零九页,创作于2022年6月递归的函数定义:递归的函数定义:longfact(longn)returnn=0?1:n*fact(n-1);也可以用循环定义:也可以用循环定义:longfact1(longn)longi,f=1;for(i=2;i=n;+i)f*=i;re
25、turnf;比递归定义长,需要引进多个局部变量。比递归定义长,需要引进多个局部变量。第三十张,PPT共一百零九页,创作于2022年6月fact实现的计算过程很不实现的计算过程很不简单。简单。计算中计算中fact被递归调用的被递归调用的次数由实参确定。次数由实参确定。考虑负参数值处理。可改考虑负参数值处理。可改为:为:n=1?1:.第三十一张,PPT共一百零九页,创作于2022年6月递归定义导致的计算过程递归定义导致的计算过程参数不同参数不同fact递归调用次数(步数)不同。递归调用次数(步数)不同。定义定义只有一个只有一个语句语句,可能要许多步才能完成。包含递归(和,可能要许多步才能完成。包含
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基本 程序设计 技术 PPT 课件
限制150内