




已阅读5页,还剩44页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
嵌套,if-else的结合: else总是与前面最近的 else if 或 if 相结合,用 表示,则更加明确,嵌套,as: if (a= =b) if (b= =c) printf(“a= =b= =c”); else printf(“a!=b”);,嵌套,#include main() int x = 100, a = 10, b = 20; int v1 = 5, v2 = 0; if (a b) if (b != 15) if (!v1) x = 1; else if(v2) x = 10; x = -1; printf(“x=%d“,x); ,x=-1,嵌套,(1) while() while() . ,(2) do do while( ); . while( );,(3) for( ; ; ) for( ; ; ) . ,(4) while() do while( ); . ,(5) for( ; ; ) while() . ,(6) do for( ; ; ) . while( );,嵌套,for(i=1;i10;i+) for(j=1;j10;j+) printf(j=9)?“%4dn“:“%4d“,i*j);,嵌套,sum = 0 sum = 0 + 1 = 1 sum = 1 + 2 = 3 sum = 3 + 3 = 6 sum = 6 + 4 = 10 sum = 4950 + 100 = 5050,累加和累乘,n = 1 n = 1* 1 = 1 n = 1 * 2 = 2 n = 2 * 3 = 6 n = 6 * 4 = 24 n = 362880 * 10 = 3628800,累加和累乘,n!,累加和累乘,/*求n的阶乘n!(n!=1*2*n)*/ /*文件名:factorial.C*/ /*程序功能:求n!*/ #include main() int i, n; /*定义累乘器fact,并初始化为1*/ long fact = 1; printf(“Input n:“); scanf(“%d“, ,1、穷举法(枚举法) “笨人之法”: 把所有可能的情况一一测试,筛选出符合条件的各种结果进行输出。 【例一】百元买百鸡:用一百元钱买一百只鸡。已知公鸡5元/只,母鸡3元/只,小鸡1元/3只。 分析: 这是个不定方程三元一次方程组问题(三个变量,两个方程) xyz=100 5x3yz/3=100 设公鸡为x只,母鸡为y只,小鸡为z只。,常用算法,cocks=0,hens=25,chickens=75 cocks=4,hens=18,chickens=78 cocks=8,hens=11,chickens=81 cocks=12,hens=4,chickens=84,常用算法,1、穷举法(枚举法),#include main() int x, y, z; for (x = 0; x = 100; x+) for (y = 0; y = 100; y+) for (z = 0; z = 100; z+) if (x + y + z = 100 ,讨论: 此为“最笨”之法要进行101101101= 1030301次(100多百次)运算。,#include main() int x,y,z; for(x = 0; x = 100; x+) for(y = 0; y = 100; y+) z = 100 - x - y; if(5 * x + 3 * y + z / 3.0 = 100 ) printf(“cocks=%d,hens=%d,chickens=%dn“,x,y,z); ,常用算法,1、穷举法(枚举法),【讨论】 令z=100-x-y 只进行101101= 10201 次运算 (前者的1%),取x=19,y=33 只进行2034= 680 次运算(6.7%),常用算法,1、穷举法(枚举法),求100200之间不能被3整除也不能被7整除的数。,分析:求某区间内符合某一要求的数,可用一个变量“穷举”。所以可用一个独立变量x,取值范围100200。,常用算法,1、穷举法(枚举法),for (x = 100; x = 200; x+) if (x % 3 != 0 ,如果是求指定条件的奇数呢?,如果是求指定条件的偶数呢?,x = 101; x = 200; x = x + 2,x = 100; x = 200; x = x + 2,常用算法,1、穷举法(枚举法),常用算法,1、穷举法(枚举法),判断一个数是否素数?,#include #include main() int m,k,i; clrscr(); printf(“x=“); scanf(“%d“, ,把im-1 改为isqrt(m-1),“智人之法” : 通过分析归纳,找出从变量旧值出发求新值的规律。,编程求i =1+2+3+4+99+100 (i=0100),常用算法,2、递推法(归纳法),常用算法,2、递推法(归纳法),【累加型】类型诸如 + 求其前n项之和的编程题。,常用算法,2、递推法(归纳法),累加型算法 若设i为循环变量,s为前n项累加之和,则程序的基本结构为: s=0; for( i=1 ;i=n ;i+ ) s=s+;,常用算法,2、递推法(归纳法),编程求11/2+1/31/4+1/5 +1/991/100,分母为奇数时,相加 分母为偶数时,相减,方法1:从变化规律分析,常用算法,2、递推法(归纳法),#include main() int i; float s = 0; for (i = 1; i = 100; i+) if (i%2) s = s + 1 / i; else s = s - 1 / i; printf(“Sum=%fn“,s); ,运行结果:Sum=1.000000,错在哪里?,常用算法,2、递推法(归纳法),方法2:这是个累加型算法的编程题,#include #include main() int i ; float s = 0; for (i = 1; i = 100; i+) s = s + pow (-1, i + 1) / i ; printf(“Sum=%fn“, s); ,累加型算法 程序基本结构为: s=0; for( i=1;i=n;i+ ) s=s+;,运行结果:Sum=0.688172,常用算法,2、递推法(归纳法),#include main() int i ,k = 1; float s=0; for(i = 1; i = 100; i+) s = s + k / i; k = -k; printf(“Sum=%fn“, s); ,错在哪里? (如何检查程序错误?),运行结果:Sum=1.000000,常用算法,2、递推法(归纳法),编程求n!,分析 i=1 S0= 1=S0 (初值) i=1 S1= 01=S01 i=2 S2=12=S12 i=3 S3=123=S23 i=4 S4=1234=S34 i=n Sn=1 234n=Sn-1n,常用算法,2、递推法(归纳法),常用算法,2、递推法(归纳法),【阶乘型】类型诸如 求其前n项之积的编程题。,阶乘型算法 若设i为循环变量,s为前n项相乘之积,则程序的基本结构为: s = 1; for( i = 1 ; i = n ; i+ ) s = s * ;,常用算法,2、递推法(归纳法),编程求n! =1!+2!+3!+n! (n由键盘输入),外循环为累加型 内循环为阶乘型,方法1:从变化规律分析,常用算法,2、递推法(归纳法),在同一个循环中 先阶乘,后累加,方法2:通过单循环实现,#include main() int i, n ; float s,s1; printf( “Input n=“) ; scanf(“%d“, ,常用算法,2、递推法(归纳法),兔子繁殖问题(斐波那契数列问题) 著名意大利数学家斐波那契(Fibonacci)1202年提出一个有趣的问题。某人想知道一年内一对兔子可以生几对兔子。他筑了一道围墙,把一对大兔关在其中。已知每对大兔每个月可以生一对小兔,而每对小兔出生后第三个月即可成为“大兔”再生小兔。问一对小兔一年能繁殖几对小兔?,常用算法,2、递推法(归纳法),分析:表示大兔,表示小兔,常用算法,2、递推法(归纳法),常用算法,2、递推法(归纳法),由分析可以推出,每月新增兔子数Fn=1,1,2,3,5,8,13,21,34,(斐波那契数列),常用算法,2、递推法(归纳法),#include main ( ) long f, f1, f2; int i; f1 = f2 = 1; printf(“%10ld%10ld“, f1,f2);,/* 产生第3到12项 */ for(i = 3; i = 12; i+) /* 递推出第i项 */ f = f1 + f2; printf(“%10ld“, f); /* 每行输出4个数 */ if ( i%4=0 ) printf(“n“); /* 为下一步递推做准备 */ f1 = f2; f2 = f; ,常用算法,2、递推法(归纳法),由分析可以推出,每月新增兔子数Fn=1,1,2,3,5,8,13,21,34,(斐波那契数列),常用算法,2、递推法(归纳法),当f1+ f2 f时,f1对下次递推已无作用,所以用f1存放当前递推结果是很自然的。下次递推公式为f2+ f1 f2,注意,此时f1是上次的递推结果,同样,本次递推后,f2已经无用了,故用f2存放当前递推结果。 例如,f1=f2=1 f1=f1+f2 f1=1+1=2 f2=f2+f1 f2=1+2=3 f1=f1+f2 f1=2+3=5 ,常用算法,2、递推法(归纳法),这样,循环体中可用如下语句进行递推: f1=f1+f2; f2=f2+f1; 一次可产生两项。循环次数减少一半。下面是改进后的程序:,常用算法,2、递推法(归纳法),#include main ( ) long f, f1, f2; int i; f1 = f2 = 1; printf(“%10ld%10ld“, f1,f2);,/* 产生第3到12项 */ for(i = 2; i = 6; i+) /* 递推出2项 */ f1 = f1 + f2; f2 = f2 + f1; printf (“%10ld%10ld“, f1,f2); /* 每行输出4个数 */ if(i % 2 = 0 ) printf(“n“); ,常用算法,2、递推法(归纳法),a,b,f(x),a+3h,a+h,求定积分,将a-b进行n等分, 区间段为(a-b)/n,而两条直线之间构成 近似梯形,,f(x)在a与b之间的定积 分的值就是各梯形的面 积之和。,求面积公式,=S1+S2+S3+Sn =h/2*(f(a)+f(a+h)+h/2*(f(a+h)+f(a+2h)+ +h/2*(f(a+(n-1)h)+f(b) =h/2(f(a)+2f(a+h)+2f(a+2h)+ +2f(a+(n-1)h)+f(b) =h/2(f(a)+f(b)+2(f(a+h)+f(a+2h)+f(a+(n-1)h) =h(f(a)+f(b)/2+f(a+h)+f(a+2h)+f(a+(n-1)h),常用算法,2、递推法(归纳法),#include main( ) int n, i; float S, h, a, b; scanf(“%f, %f, %d“, ,常用算法,2、递推法(归纳法),常用算法,3、迭代法,牛顿迭代法解一元高次方程 二分法解一元高次方程,求方程f(x)=2x3-4x2+3x-6=0在1.5附近的 一个根。,牛顿迭代法,X2,X3,X1,X,Y,过x1的f(x)切线方程为 Y=X-X1+F(X1)/F(X1) X2=X1-F(X1)/F(X1) Xn=Xn-1-F(Xn-1)/F(Xn-1) 当 XnXn-1 时 Xn为方程F(x)在X1附近 的一个根。,常用算法,3、迭代法,常用算法,3、迭代法,#include #include main( ) float x0, x1, d; x0 = 1.5; d=(2 * x0 - 4) * x0 + 3) * x0 - 6) / (6 * x0 - 8) * x0 + 3); x1 = x0 - d; while(fabs(d) 1e-6) x0 = x1; d = (2 * x0 - 4) * x0 + 3) * x0 - 6) / (6 * x0 - 8) * x0 + 3); x1 = x0 - d; printf(“x1=%fn“,x1); ,牛顿迭代法,任意取两点x1和x2,使 f(x1)和f(x2)符号相反。,x1,x2,x1和x2的中值为x。,x,如f(x)与f(x2)同符号,则 用x代替x2,否则代替x1。,不断逼近,当x1-x2 时,x为f(x)的一个 根。,常用算法,3、迭代法,二分法,#include #include main( ) float x1, x2, x, f1, f2, f; do scanf(“%f%f“,do x = (x1 + x2) / 2; f = (2 * x - 4) * x + 3) * x - 6; if(f * f1 0) x1=x; f1=f; else x2 = x; f2 = f; while(fabs(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版人事部关键岗位保密及离职约束协议
- 2025版企业员工职业健康安全劳动合同
- 2025年度甲级写字楼租赁合同范本
- 2025版区域经销商广告宣传推广合同范本1500字
- 2025版汽车租赁平台会员权益升级合同
- 2025年度房地产无底薪业务员佣金提成及奖金激励合同
- 2025版全框架施工合同补充协议(工程验收)
- 2025年度食堂特色美食供应与营养膳食服务合同
- 2025年度私人地下室租赁协议附赠维修保养服务条款
- 2025对外承包项目借款合同范本:质量保证与售后服务承诺
- 公路养护应急培训课件
- 2024-2025银行信贷员培训计划
- 2.2 养成亲社会行为 课件+内嵌视频 统编版八年级道德与法治上册
- 2025秋数学人教二年级(上) 校园小导游:第1课时 认识东、南、西、北
- 洁净间5s管理制度
- 公交开通活动方案
- CJ/T 541-2019城镇供水管理信息系统基础信息分类与编码规则
- 华为公司流程管理制度
- 传播游戏理论视域下现代文创桌游传播伦理失范与匡正研究
- 2025年家畜饲养员及繁殖学技能资格知识考试题与答案
- 中国都市圈综合竞争力报告2024-上海同济城市规划设计研究院
评论
0/150
提交评论