C语言算法.docx
- 文档编号:10742930
- 上传时间:2023-02-22
- 格式:DOCX
- 页数:18
- 大小:24.64KB
C语言算法.docx
《C语言算法.docx》由会员分享,可在线阅读,更多相关《C语言算法.docx(18页珍藏版)》请在冰豆网上搜索。
C语言算法
C语言算法总结
据我一年来学习C语言,发现其不过如此。
语言是什么?
是人类思维的表达方式,那C语言是什么,是人类为了让电脑听懂自己的想法,而创造的一个工具。
既然,人与人之间这么难的语言大家都掌握了,那C语言又算什么呢。
毛泽东告诫我们说:
“对于敌人,要在战术上重视它,在战略上藐视它。
”好废话少说,开始讲课。
1.求素数
【思想汇总】求素数是最简单的一个算法,也是最常用的算法,纯数学理论,最简单的方式是先求此数的平方根,再设置一个变量从2到平方根数,判断是否所有的数能否被原数整除。
【算法语句】
k=sqrt(x)
for(i=2;i if(x%i==0)return(0); return (1); 【思想推广】判断素数是一种逐一验证的思想,类似的算法有验证哥德巴赫猜想。 2.牛顿迭代求a的平方根 【思想汇总】迭代公式为xn+1=0.5(xn+a/xn),要求前后两次求出的x的差的绝对值小于10-5。 【算法语句】 floata,x0,x1; scanf(“%f”,&a); x0=a/2;/*先定义两个变量,利用公式求出第一组数*/ x1=(x0+a/x0)/2; do { x0=x1; x1=(x0+a/x0)/2;/*循环N次当满足x0与x1的差小于10-5输出答案 }while(fabs(x1-x0)>=1e-5);*/ x1即为所求。 【思想推广】牛顿迭代法求平方根是一种逼近的数学思想,用途十分广泛,如上机指导实验六第三题,arcsh(x)函数。 3.求最大公约数,最小公倍数 【思想汇总】求此数有三种思想,一是定义法求解,二是相减求等法,三是辗转相除法。 具体算法如下。 【算法语句】 gys(intm,intn) { inti,x; x=m m: n; for(i=x;i>=1;i--) if(m%i==0&&n%i==0)break;/*此为定义法,先找一个相对最小的数x, returni;再定义一个变量从x到1递减,判断是否能同时被两个数整除*/ } gys(intm,intn) { while(m! =n) if(m>n)m=m-n;/*此为相减求等法,大减小,这样逐步相减,当它相等时, elsen=n-m;即为答案*/ returnm; } gys(intm,intn) { intr; while((r=m%n)! =0) {m=n;n=r;}/*辗转相除法是最简单的方法,但要好好理解*/ returnn; } 【思想推广】求公约数和公倍数在最近的考试中不常出现,只需理解其原理即可。 其思想即是熟练掌握公式。 4.数的分解 【思想汇总】其思想较为简单,即除以其权重,把数一个个剥离出来,但其实现方式多样,如硬性分解,循环分解,递归分解等。 【算法语句】 1.硬性分解,所为硬性分解即是已知此数的位数进行的分解,如已知一个5位数的数x,将其分解为ge,shi,bai,qian,wan wan=x/10000; qian=x%10000/1000; bai=x%1000/100; shi=x%100/10; ge=x%10; 2.循环分解,循环分解其优点是无需知道数的位数。 while(n>0) { a[i]=n%10;/*注意: 在用此方法是要将数组位数的足够大,并且i要至 n=n/10;零*/ i++; } 3.递归法利用函数的递归也可快速的进行数的分解,其优点是为数不限,比循环分解还要优越,且代码短小精悍,执行时间短。 printz(longn) { if(n>0) { printz(n/10);/*先返回除最高位的数,所以最后输出是是按照正向输出的 printf(“%ld”,n%10);*/ } } printd(longn) { if(n>0) { printf(“%ld”,n%10);/*先输出个位,再返回除高位,因此这是逆向输出*/ printd(n/10); } } 【思想推广】数的分解形式多样,看个人喜好,可以采取多种方式,最经典的程序莫过于水仙花数,个人比较推荐用递归,代码简单,效率高。 5数的合并(乘权求和) 【思想汇总】数的合并绝大多数都是一种乘权求和的思想,其思想精髓在于每一位xi乘以其权重Ni在对其求和,公式如下∑xi*Ni 【算法语句】 1.将一个八进制的字符串转化为一个十进制的数 main() { char*p,s[6];intn=0; gets(s); for(p=s;*p! =’\0’;p++) n=n*8+*p-‘0’;/*此处即为其算法的核心,每一位上的数乘以权重,再 printf(“%d”,n);相加*/ } 2.十进制转十六进制 c10_16(char*p,intb) { intj; while(b>0) { j=b%16; if(i<10)*p=j+48;/*此处是说将每位上的数加上48转换成数字字符*/ else*p=j+55;/*若数大于10则转化为字母字符*/ b=b/16; p++; } *p=’\0’; } 【思想推广】乘权求和一般用于进制的转换,字符串与整形的转换,补充一个知识点,若遇到字符和数字的转化可用这样几个头文件里包括的函数intatoi(string)(将字符串转化为整形)doubleatof(string)(将字符串转化为浮点型)stringitoa(int)(将整形转化为字符串),在用这些函数时要写#include 6.数组排序 【思想汇总】数组排序是最重要的一个程序,主要有两种方法,冒泡法和选择法,相对而讲,选择法更加优越。 当然还有更好的快速排序法,这里就不介绍了。 【算法语句】 1.选择法 voidsort(inta[],intn) { inti,j,p,t;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 算法