c语言常用算法总结_第1页
c语言常用算法总结_第2页
c语言常用算法总结_第3页
c语言常用算法总结_第4页
c语言常用算法总结_第5页
全文预览已结束

下载本文档

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

文档简介

1、C语言常用算法模块的总结一、最大值,最小值问题 教材page13/1.6、page36/2.4(2)、(3)、page98例5.1、5.2二、连乘连加问题 page113、114、115 page129/6.3 page129/6.4、6.5三、闰年算法 page17、 page107四、连续小数相加减 page18、 page124五、素数、整除问题 page18、 page124、 page126、 page127六、大小写字母转换、密码问题 page51、 page87、 page89/4.9、 page104、 page67、 page128七、格式化字符提醒 起于page 76八、三

2、角形面积问题 page86九、一元二次方程 page87、 page89/4.8、 page108十、分段一元函数 page100、 page110、 page111/5.5、5.6十一、位运算 page112/5.7、 page129/6.2、6.3十二、公约数公倍数 page129/6.1十三、迭代法、二分法 page129-130/6.11-13C语言常用算法模块的总结一、最大值,最小值问题 教材page13/1.6、page36/2.4(2)、(3)、page98例5.1、5.2 主要思想:替换+中转 关联习语: if句 int a,b,c,max; 多余的一个max是承载中转的容器

3、scanf(“%d,%d,%d”,&a,&b,&c); max=a; 定初值 if(max<b) Max=b; 分别取a、 b、c相互比较,由于只需输 if(max<c) 出最大或者最小值,所以只需将最大值存 Max=c; 储在max中即可 printf(“”);如果需要依次输出所给的数值,则须在比较大小之后进行替换赋值 int a,b,t; scanf(“%d,%d”,&a,&b) if(a>b) 此步的依次赋值体现了赋值运算自右向左的结合次序 t=a; 先将a的值赋给t,此时a的值空出 a=b; 将b的值赋给a,b值空出 b=t;

4、将t中存储的a的值赋给b,此时t仍回复空值 若混淆其中赋值规律则产生混乱printf(“”);二、连乘连加问题 page113、114、115 page129/6.3 page129/6.4、6.5主要思想:容器+循环 关联习语:while(dowhile)、for、(goto) int i,sum=0; 循环第一步,定初值,sum可视作是承载运算结果的容器,初为空 i=1; while(i<=100) 构设循环条件,注意必须是有限循环,否则程序无终止 sum=sum+I; 循环第二步,累计结果 i+; 循环第三步,循环量自增。这两步保证循环为续,皆不可少 printf(“”);除此之外

5、,用for句型、dowhile也可就此推出,虽形式不同,但主要三个部分都不可少,而且过程中的分号和大括号划分不同的意群,因此必须注意。三、闰年算法 page107主要思想: 自上而下细化 关联习语:if、else判断句、 if(year%4=0) “=”才是等于号,而“=”号是赋值号 if(year%100=0) 分层次的语句 每一层的大括号都要完美配对 if(year%400=0) Leap=1; else leap=0; else leap=1; else leap=0;闰年的有关规定:上机指导page34闰年算法主要体现了由上而下具体优化的程序设计方法,在表示时要特别注意每一个if都要有

6、其相应的else,可以适当增大不同级别的大括号的缩进以便辨别。四、连续小数相加减page124主要思想:引入可变符号位及可变分母位+循环 关联习语:while int s; float n,t,pi; 选float是出于其位数容纳更多的考虑,其位数为1038 t=1;pi=0;n=1.0;s=1; 循环第一步,定初值 while(fabs(t)>1e-6) 选取小微元是为了避免二进制到十进制的转换误差的影响 pi=pi+t; 循环第二步,累计结果 n=n+2; s=-s; t=s/n; 循环第三步,循环量自增,符号位改变 pi=pi*4;除去引入的定义符号位的量之外,此类基本是循环的基本

7、应用。五、素数问题page126 int m,I,k; scanf(“%d”,&m); K=sqrt(m); 一般的数学函数难找到ab,故开平方的公式熟记 for(i=2;i<=k;i+) for句型集成了初值、循环条件、自增三步 if(m%i=0)break; 所求只需找到可以整除的数即可输出(即break),若无法找到 if(i>k)printf(“%d 为闰年”,m); 可整除的数则到最后一个最接近k的整数并自增1 else printf(“%d 不是闰年”,m);本题中的 “if(i>k)”最为难理解,满足素数的条件是在0sqrt(m)之间的所有数都不能整除m

8、,所以在程序中只需有一个i满足可整除m即可输出,至于其后的关于i和k的判断则意在如果在0k范围内没有数满足条件,则检验k之后自增递出k+1,此时其为素数。故应判断i与k的大小,若i<=k,则i为真正能够使m被整除的数,此时m不是素数,反之,当i>k时则i是0k范围内寻求使m被整除的数无果之后输出的程序性数字,此时m为素数(此段理解的课本表述:page126)六、大小写字母转换、密码问题page51主要思想:大小写字母ASCII码表数值差距32 关联习语: char、getchar() char c1,c2; 定义的字符常量只能容纳一个字符 c1=a; 在能够表达的数字范围内,字符常

9、量和整数常量效果相同(page67/3.8) c2=b; c1=c1-32; 大小写字母的ASCII码值差异、常用数值A-65,a-97 c2=c1-32; printf(“%c %c”,c1,c2);除此之外,更加繁杂的繁杂的密码转换问题还涉及到 getchar()函数,其为单个位取的字符函数,类于循环函数八、三角形面积问题 page86主要思想:三角形海伦公式 关联习语:#include<math.h> float a,b,c,s,area; 编程步骤第一步,考虑所需用的量 scanf(“%f,%f,%f”,&a,&b,&c); s=1.0/2*(a+b

10、+c); area=sqrt(s*(s-a)*(s-b)*(s-c); 海伦公式,为求解三角形问题提供最可行方案 printf();程序的灵魂在于算法,而算法的脉络则在于其逻辑,按照程序所需的算法列下所需的步骤,具体细化每一步直到能够用C表示出来,之后的工作为定义所需量,开始编程附: #include<math.h>中所包含的常用函数:1、fabs()绝对值;2、pow(a,b)是a的b次方;3、sqrt()平方根;4、正弦余弦正切九、一元二次方程 page87主要思想:求根公式 关联习语:#include<math.h>/if判断句 float a,b,c,disc,

11、x1,x2,p,q; 将解的形式划分为只有符号位变化的几部分 scanf(“a=%f,b=%f,c=%f”,&a,&b,&c); disc=b*b-4*a*c; 定义每个部分的实际意义 p=-b/(2*a); q=sqrt(disc)/(2*a); x1=p+q;x2=p-q; printf()一元二次方程的解法已成惯例,熟记其每个过程有助于增加熟练度,如果题设中没有足够条件限制其为一元二次方程,则需讨论其解得个数,另需用if判断句,保持思路清晰,语句严谨当可无错。十、分段一元函数 page100 int x,y; scanf(“%d”,&x); if(x<

12、;0) Y=-1; elseif(x=0) y=0; 如果写if(x=0) y=0 ,则不可以,“=”是赋值号,一个变量不可重复赋值else y=1;If、else的语义连贯见page101、102,格式混乱突破了if所构成的无形意群则会发生不可预知的杯具。If句和else句的书写特别需注意的准则:1、每个if都有相应的else; 2、else只和最近的if句配对;2内嵌的if句一般写在外层的else句中(典例:page101程序一Line 810)。十一、位运算 page112/5.7(各十百千外各位的表示方法模板)、 page129/6.2主要思想:各十百千万的各位表示法+ASCII码所代

13、表数符 关联习语:char、getchar()、while、if,else while(c=getchar()!=n) 作用同于scanf,getchar()每次从输入中取一个字符量 if(c>=a&&c<=zc>=A&&c<=Z) 验证其ASCII码大小,以判断其类型 letters+; 计数过程 else If(c= ) space+; else if(c>=0&&c<=9) digit+; else other+;除去各位数的表示方法之外,直接关联ASCII值的操作则多需要验证其ASCII码值所在的区域,

14、这将影响其外在表现。本例中还涉及了 逻辑与运算 的运算优先级先于 逻辑或运算 的事实,page365的运算符的结合性足以对许多问题进行支持十二、公约数公倍数 page129/6.1主要思想:辗转相除法 关联习语:if、while【附】辗转相除法, 又名欧几里德算法(Euclidean algorithm)乃求两个正整数之最大公因子的算法。它是已知最古老的算法, 其可追溯至3000年前。它首次出现于欧几里德的几何原本(第VII卷,命题i和ii)中,而在中国则可以追溯至东汉出现的九章算术。它并不需要把二数作质因子分解。事实上能够被C语言作为解题算法的方法具有近似的特点,比如不进行除去基本运算之外的算术逻辑运算,即使计算量庞大但是逻辑清楚等特点,这主要是考虑到计算机在只运行加法运算时比较简单易处理(反码补码的出现也是以这样的理由)。if (n<m) temp=n; n=m; m=temp; 将m、n按照大小顺序排列,使m小于n,

温馨提示

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

评论

0/150

提交评论