《c语言常用算法总结》由会员分享,可在线阅读,更多相关《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(maxb) Max=b; 分别取a、 b、c相互比较,由于只需输 if(maxb) 此步的依次赋值体现了赋值运算自右向左的结合次序 t=a; 先将a的值赋给t,此时a的值空出 a=b; 将b的值赋给a,b值空出 b=t; 将t中存储的a的值赋给b,此时t仍回复空值 若混淆其中赋值规律则产生混乱printf(“”);二、连乘连加问题 page113、114、115 page129/6.3 page129/6.4、6.5主要思想:容器+循环 关联习语:while(dowhile)、for、(goto) int i,
4、sum=0; 循环第一步,定初值,sum可视作是承载运算结果的容器,初为空 i=1; while(i1e-6) 选取小微元是为了避免二进制到十进制的转换误差的影响 pi=pi+t; 循环第二步,累计结果 n=n+2; s=-s; t=s/n; 循环第三步,循环量自增,符号位改变 pi=pi*4;除去引入的定义符号位的量之外,此类基本是循环的基本应用。五、素数问题page126 int m,I,k; scanf(“%d”,&m); K=sqrt(m); 一般的数学函数难找到ab,故开平方的公式熟记 for(i=2;ik)printf(“%d 为闰年”,m); 可整除的数则到最后一个最接近k的整数
5、并自增1 else printf(“%d 不是闰年”,m);本题中的 “if(ik)”最为难理解,满足素数的条件是在0sqrt(m)之间的所有数都不能整除m,所以在程序中只需有一个i满足可整除m即可输出,至于其后的关于i和k的判断则意在如果在0k范围内没有数满足条件,则检验k之后自增递出k+1,此时其为素数。故应判断i与k的大小,若ik时则i是0k范围内寻求使m被整除的数无果之后输出的程序性数字,此时m为素数(此段理解的课本表述:page126)六、大小写字母转换、密码问题page51主要思想:大小写字母ASCII码表数值差距32 关联习语: char、getchar() char c1,c2
6、; 定义的字符常量只能容纳一个字符 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 float a,b,c,s,area; 编程步骤第一步,考虑所需用的量 scanf(“%f,%f,%f”,&a,&b,&c);
7、 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判断句 float a,b,c,disc,x1,x2,p,q; 将解的形
8、式划分为只有符号位变化的几部分 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=a&c=A&c=0&c=9) digit+; else other+;除去各位数的表示方法之外,直接关联ASCII值的操作则多需要验证其ASCII码值所在的区域,这将