C语言学习教案Review.ppt

上传人:小飞机 文档编号:6503836 上传时间:2023-11-07 格式:PPT 页数:49 大小:338KB
返回 下载 相关 举报
C语言学习教案Review.ppt_第1页
第1页 / 共49页
C语言学习教案Review.ppt_第2页
第2页 / 共49页
C语言学习教案Review.ppt_第3页
第3页 / 共49页
C语言学习教案Review.ppt_第4页
第4页 / 共49页
C语言学习教案Review.ppt_第5页
第5页 / 共49页
点击查看更多>>
资源描述

《C语言学习教案Review.ppt》由会员分享,可在线阅读,更多相关《C语言学习教案Review.ppt(49页珍藏版)》请在三一办公上搜索。

1、嵌套,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(;).,(

2、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=0sum=0+1=1sum=1+2=3sum=3+3=6sum=6+4=10sum=4950+100=5050,累加和累乘,n=1n=1*1=1n=1*2=2n=2*3=6n=6*4=24n=362880*10=3628800,累加和累乘,n!,累加和累乘,/*求n的阶乘n!(n!=1*2*n)*/*文件名:factorial.C*/*程序

3、功能:求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=75cocks=4,hens=18,c

4、hickens=78cocks=8,hens=11,chickens=81cocks=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=

5、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,如果是求指定条件的奇数呢?,如果是求指定

6、条件的偶数呢?,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、递推法(归纳法),累加型

7、算法 若设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:这是个累加型算法的编程题

8、,#include#includemain()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、递推法(归纳法),

9、编程求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、递推法(归

10、纳法),在同一个循环中 先阶乘,后累加,方法2:通过单循环实现,#include main()int i,n;float s,s1;printf(Input n=);scanf(%d,常用算法,2、递推法(归纳法),兔子繁殖问题(斐波那契数列问题)著名意大利数学家斐波那契(Fibonacci)1202年提出一个有趣的问题。某人想知道一年内一对兔子可以生几对兔子。他筑了一道围墙,把一对大兔关在其中。已知每对大兔每个月可以生一对小兔,而每对小兔出生后第三个月即可成为“大兔”再生小兔。问一对小兔一年能繁殖几对小兔?,常用算法,2、递推法(归纳法),分析:表示大兔,表示小兔,常用算法,2、递推法(归纳

11、法),常用算法,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、递推法(归纳法),由分析可以推出,每月新增兔子数F

12、n=1,1,2,3,5,8,13,21,34,(斐波那契数列),常用算法,2、递推法(归纳法),当f1+f2 f时,f1对下次递推已无作用,所以用f1存放当前递推结果是很自然的。下次递推公式为f2+f1 f2,注意,此时f1是上次的递推结果,同样,本次递推后,f2已经无用了,故用f2存放当前递推结果。例如,f1=f2=1f1=f1+f2 f1=1+1=2f2=f2+f1 f2=1+2=3f1=f1+f2 f1=2+3=5,常用算法,2、递推法(归纳法),这样,循环体中可用如下语句进行递推:f1=f1+f2;f2=f2+f1;一次可产生两项。循环次数减少一半。下面是改进后的程序:,常用算法,2、

13、递推法(归纳法),#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

14、+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、迭代法,牛顿迭代法解一元

15、高次方程二分法解一元高次方程,求方程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)x

16、0=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)x

17、1=x;f1=f;else x2=x;f2=f;while(fabs(x1-x2)=1e-6);printf(x=%fn,x);,常用算法,3、迭代法,二分法,算法1,算法2,用从1到n的每一个数去除m和n,最后能同时整除m和n的数即是最大公约数。,用从n到1的每一个数去除m和n,第一个能同时整除m和n的数即是最大公约数。,求任意两个数m、n(mn)的最大公约数。,常用算法,4、求最大公约数,算法3:辗转相除法,常用算法,4、求最大公约数,求28和16的最大公约数。,28%16 余 12,16%12 余 4,12%4 余 0,4为最大公约数。,算法3:辗转相除法,常用算法,4、求最大公约数,辗转相除法,常用算法,4、求最大公约数,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号