您好,欢迎来到叨叨游戏网。
搜索
您的当前位置:首页C语言常用算法总结怎么写才有效

C语言常用算法总结怎么写才有效

来源:叨叨游戏网

C

一、最大值,最小值问题教材page13/1.6、page36/2.4(2)、(3)、page98例5.1、5.2

二、连乘连加问题page113、114、115page129/6.3page129/6.4、6.5

三、闰年算法page17、page107

四、连续小数相加减page18、page124

五、素数、整除问题page18、page124、page126、page127

六、大小写字母转换、密码问题page51、page87、page/4.9、page104、page67、page128

七、格式化字符提醒起于page76

八、三角形面积问题page86

九、一元二次方程page87、page/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-13

C

一、最大值,最小值问题

教材page13/1.6、page36/2.4(2)、(3)、page98例5.1、5.2

主要思想:替换+中转关联习语:if句

inta,b,c,ma_;多余的一个ma_是承载中转的容器scanf(“%d,%d,%d”,a,b,c);

ma_=a;定初值

if(ma_

Ma_=b;分别取a、b、c相互比较,由于只需输if(ma_

printf(“”);

如果需要依次输出所给的数值,则须在比较大小之后进行替换赋值

inta,b,t;

scanf(“%d,%d”,a,b)

if(a>b)

{此步的依次赋值体现了赋值运算自右向左的结合次序

t=a;先将a的值赋给t,此时a的值空出

a=b;将b的值赋给a,b值空出

b=t;将t中存储的a的值赋给b,此时t仍回复空值

}若混淆其中赋值规律则产生混乱

printf(“”);

二、连乘连加问题

page113、114、115page129/6.3page129/6.4、6.5

主要思想:容器+循环关联习语:while(dowhile)、for、(goto)

inti,sum=0;循环第一步,定初值,sum可视作是承载运算结果的容器,初为空i=1;

while(i<=100)构设循环条件,注意必须是有限循环,否则程序无终止

sum=sum+I;循环第二步,累计结果

i++;循环第三步,循环量自增。这两步保证循环为续,皆不可少

printf(“”);

除此之外,用for句型、dowhile也可就此推出,虽形式不同,但主要三个部分都不可少,而且过程中的分号和大括号划分不同的意群,因此必须注意。

三、闰年算法

page107

主要思想:自上而下细化关联习语:if、else判断句、

if(year%4==0)“==”才是等于号,而“=”号是赋值号

if(year%100==0)分层次的语句

{每一层的大括号都要完美配对

if(year%400==0)

Leap=1;

elseleap=0;

elseleap=1;

elseleap=0;

闰年的有关规定:上机指导page34

闰年算法主要体现了由上而下具体优化的程序设计方法,在表示时要特别注意每一个if都要有其相应的else,可以适当增大不同级别的大括号的缩进以便辨别。

四、连续小数相加减

page124

主要思想:引入可变符号位及可变分母位+循环关联习语:while

ints;

floatn,t,pi;选float是出于其位数容纳更多的考虑,其位数为10^38t=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=pi4;

除去引入的定义符号位的量之外,此类基本是循环的基本应用。

五、素数问题

page126

intm,I,k;

scanf(“%d”,m);

K=sqrt(m);一般的数学函数难找到a^b,故开平方的公式熟记

for(i=2;i<=k;i++)for句型集成了初值、循环条件、自增三步

if(m%i==0)break;所求只需找到可以整除的数即可输出(即break),若无法找到if(i>k)printf(“%d为闰年”,m);可整除的数则到最后一个最接近k的整数并自增1

elseprintf(“%d不是闰年”,m);

本题中的“if(i>k)”最为难理解,满足素数的条件是在0~sqrt(m)之间的所有数都不能整除m,所以在程序中只需有一个i满足可整除m即可输出,至于其后的关于i和k的判断则意在如果在0~k范围内没有数满足条件,则检验k之后自增递出k+1,此时其为素数。

故应判断i与k的大小,若i<=k,则i为真正能够使m被整除的数,此时m不是素数,反之,当i>k时则i是0~k范围内寻求使m被整除的数无果之后输出的程序性数字,此时m为素数(此段理解的课本表述:page126)

六、大小写字母转换、密码问题

page51

主要思想:大小写字母ASCII码表数值差距32关联习语:char、getchar()

charc1,c2;定义的字符常量只能容纳一个字符

c1=’a’;在能够表达的数字范围内,字符常量和整数常量效果相同(page67/3.8)

c2=’b’;

c1=c1-32;大小写字母的ASCII码值差异、常用数值A-65,a-97

c2=c1-32;

printf(“%c%c”,c1,c2);

除此之外,更加繁杂的繁杂的密码转换问题还涉及到getchar()函数,其为单个位取的字符函数,类于循环函数

八、三角形面积问题

page86

主要思想:三角形海式关联习语:include

floata,b,c,s,area;编程步骤第一步,考虑所需用的量

scanf(“%f,%f,%f”,a,b,c);

s=1.0/2(a+b+c);

area=sqrt(s(s-a)(s-b)(s-c);海式,为求解三角形问题提供最可行方案printf();

程序的灵魂在于算法,而算法的脉络则在于其逻辑,按照程序所需的算法列下所需的步骤,具体细化每一步直到能够用C表示出来,之后的工作为定义所需量,开始编程

附:include中所包含的常用函数:1、fabs()绝对值;2、pow(a,b)是a的b次方;

3、sqrt()平方根;4、正弦余弦正切

九、一元二次方程

page87

主要思想:求根公式关联习语:include/if判断句

floata,b,c,disc,_1,_2,p,q;将解的形式划分为只有符号位变化的几部分scanf(“a=%f,b=%f,c=%f”,a,b,c);

disc=bb-4ac;定义每个部分的实际意义

p=-b/(2a);

q=sqrt(disc)/(2a);

_1=p+q;_2=p-q;

printf()

一元二次方程的解法已成惯例,熟记其每个过程有助于增加熟练度,如果题设中没有足够条件其为一元二次方程,则需讨论其解得个数,另需用if判断句,保持思路清晰,语句严谨当可无错。

十、分段一元函数

page100

int_,y;

scanf(“%d”,_);

if(_<0)

Y=-1;

else

if(_==0)y=0;如果写if(_=0)y=0,则不可以,“=”是赋值号,一个变量不可重复赋值

elsey=1;

If、else的语义连贯见page101、102,格式混乱突破了if所构成的无形意群则会发生不可预知的杯具。If句和else句的书写特别需注意的准则:1、每个if都有相应的else;2、else只和最近的if句配对;2内嵌的if句一般写在外层的else句中(典例:page101程序一Line8~10)。十一、位运算

page112/5.7(各十百千外各位的表示方法模板)、page129/6.2

主要思想:各十百千万的各位表示法+ASCII码所代表数符关联习语:char、getchar()、while、if,else

while((c=getchar())!=’ ’)作用同于scanf,getchar()每次从输入中取一个字符量

if(c>=’a’c<=’z’‖c>=’A’c<=’Z’)验证其ASCII码大小,以判断其类型letters++;计数过程

elseIf(c==‘’)

space++;

elseif(c>=’0’c<=’9’)

digit++;

else

other++;

除去各位数的表示方法之外,直接关联ASCII值的操作则多需要验证其ASCII码值所在的区域,这将影响其外在表现。本例中还涉及了逻辑与运算的运算优先级先于逻辑或运算的事实,page365的运算符的结合性足以对许多问题进行支持

十二、公约数公倍数

page129/6.1

主要思想:辗转相除法关联习语:if、while

【附】辗转相除法,又名欧几里德算法(Euclideanalgorithm)乃求两个正整数之最

大公因子的算法。它是已知最古老的算法,其可追溯至30__年前。它首次出现于欧几里德的《几何原本》(第VII卷,命题i和ii)中,而在中国则可以追溯至东汉出现的《九章算术》。它并不需要把二数作质因子分解。事实上能够被C语言作为解题算法的方法具有近似的特点,比如不进行除去基本运算之外的算术逻辑运算,即使计算量庞大但是逻辑清楚等特点,这主要是考虑到

计算机在只运行加法运算时比较简单易处理(反码补码的出现也是以这样的理由)。

if(n

temp=n;

n=m;

m=temp;将m、n按照大小顺序排列,使m小于n,为下一步的求余作铺垫

p=nm;

while(m!=0)

r=n%m;

n=m;

m=r;让人辗转反侧难以入睡的方法的主题内容

printf(“它们的最大公约数为: ”,n);

printf(“它们的最小公倍数为: ”,p/n);

此类采用先前不可知的方法写出的算法最应该熟记并当作模板,其中的大小换位和辗转纠结法的相除过程可以不求理解。

十三、迭代法、二分法

page129-130/6.11-13

想见者详见上机指导page41

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- gamedaodao.net 版权所有 湘ICP备2024080961号-6

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务