2022年C语言常用代码 .pdf





《2022年C语言常用代码 .pdf》由会员分享,可在线阅读,更多相关《2022年C语言常用代码 .pdf(28页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、#include using namespace std;void fullxunhuan(int*a,int n)int t=0;int m1,m2;if(n%2!=0)n+;for(int i=0;in%2;i+)for(m1=i,m2=n-i-1;m1i;m2-)am1m2=t%n+1;t+;for(;m1i;m1-)am1m2=t%n+1;t+;for(;m2n-i-1;m2+)am1m2=t%n+1;t+;void print(int*a,int n)for(int i=0;in;i+)for(int j=0;jn;j+)coutaijt;coutn;void main()int*a
2、;int n;cout 请输入 Nn;a=new int*n;/申请一个N 行 N 列的数组for(int i1=0;i1n;i1+)ai1=new intn;for(int i=0;in;i+)/给数组初始化 for(int j=0;jn;j+)aij=0;fullxunhuan(a,n);print(a,n);名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 28 页 -ACM 小组内部预定函数数学问题:1.精度计算大数阶乘2.精度计算乘法(大数乘小数)3.精度计算乘法(大数乘大数)4.精度计算加法5.精度计算减法6.任意进制转换7.最大公约数、最小公倍数8.组合序列9.快速傅
3、立叶变换(FFT)10.Ronberg算法计算积分11.行列式计算12.求排列组合数字符串处理:1.字符串替换2.字符串查找3.字符串截取计算几何:1.叉乘法求任意多边形面积2.求三角形面积3.两矢量间角度4.两点距离(2D、3D)5.射向法判断点是否在多边形内部6.判断点是否在线段上7.判断两线段是否相交8.判断线段与直线是否相交9.点到线段最短距离10.求两直线的交点11.判断一个封闭图形是凹集还是凸集12.Graham扫描法寻找凸包数论:1.x的二进制长度2.返回 x 的二进制表示中从低到高的第i 位3.模取幂运算4.求解模线性方程5.求解模线性方程组(中国余数定理)6.筛法素数产生器7
4、.判断一个数是否素数图论:1.Prim 算法求最小生成树2.Dijkstra 算法求单源最短路径3.Bellman-ford 算法求单源最短路径4.Floyd 算法求每对节点间最短路径排序/查找:1.快速排序2.希尔排序3.选择法排序4.二分查找数据结构:1.顺序队列2.顺序栈3.链表4.链栈5.二叉树一、数学问题1.精度计算大数阶乘语法:int result=factorial(int n);参数:n:n 的阶乘返回值:阶乘结果的位数注意:本程序直接输出n!的结果,需要返回结果请保留 long a 需要 math.h 源程序:int factorial(int n)long a10000;i
5、nt i,j,l,c,m=0,w;a0=1;for(i=1;i=n;i+)c=0;for(j=0;j0)m+;am=c;w=m*4+log10(am)+1;printf(n%ld,am);for(i=m-1;i=0;i-)printf(%4.4ld,ai);return w;2.精度计算乘法(大数乘小数)语法:mult(char c,char t,int m);参数:c:被乘数,用字符串表示,位数不限t:结果,用字符串表示m:乘数,限定10 以内返回值:null 注意:需要string.h 源程序:void mult(char c,char t,int m)int i,l,k,flag,add
6、=0;char s100;l=strlen(c);for(i=0;il;i+)sl-i-1=ci-0;for(i=0;i=10)si=k%10;add=k/10;flag=1;else si=k;flag=0;add=0;if(flag)l=i+1;si=add;else l=i;for(i=0;il;i+)tl-1-i=si+0;tl=0;3.精度计算乘法(大数乘大数)语法:mult(char a,char b,char s);参数:a:被乘数,用字符串表示,位数不限b:乘数,用字符串表示,位数不限t:结果,用字符串表示返回值:null 注意:空间复杂度为o(n2)需要string.h 源程
7、序:void mult(char a,char b,char s)int i,j,k=0,alen,blen,sum=0,res6565=0,flag=0;char result65;alen=strlen(a);blen=strlen(b);for(i=0;ialen;i+)for(j=0;j=0;i-)for(j=blen-1;j=0;j-)sum=sum+resi+blen-j-1j;resultk=sum%10;k=k+1;sum=sum/10;for(i=blen-2;i=0;i-)for(j=0;j=i;j+)sum=sum+resi-jj;resultk=sum%10;k=k+1
8、;sum=sum/10;if(sum!=0)resultk=sum;k=k+1;for(i=0;i=0;i-)si=resultk-1-i;sk=0;while(1)if(strlen(s)!=strlen(a)&s0=0)strcpy(s,s+1);名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 28 页 -else break;4.精度计算加法语法:add(char a,char b,char s);参数:a:被乘数,用字符串表示,位数不限b:乘数,用字符串表示,位数不限t:结果,用字符串表示返回值:null 注意:空间复杂度为o(n2)需要string.h 源程序:void
9、 add(char a,char b,char back)int i,j,k,up,x,y,z,l;char*c;if(strlen(a)strlen(b)l=strlen(a)+2;else l=strlen(b)+2;c=(char*)malloc(l*sizeof(char);i=strlen(a)-1;j=strlen(b)-1;k=0;up=0;while(i=0|j=0)if(i0)x=0;else x=ai;if(j9)up=1;z%=10;else up=0;ck+=z+0;i-;j-;if(up)ck+=1;i=0;ck=0;for(k-=1;k=0;k-)backi+=ck
10、;backi=0;5.精度计算减法语法:sub(char s1,char s2,char t);参数:s1:被减数,用字符串表示,位数不限s2:减数,用字符串表示,位数不限t:结果,用字符串表示返回值:null 注意:默认 s1=s2,程序未处理负数情况需要string.h 源程序:void sub(char s1,char s2,char t)int i,l2,l1,k;l2=strlen(s2);l1=strlen(s1);tl1=0;l1-;for(i=l2-1;i=0;i-,l1-)if(s1l1-s2i=0)tl1=s1l1-s2i+0;else tl1=10+s1l1-s2i+0;
11、s1l1-1=s1l1-1-1;k=l1;while(s1k=0)tl1=s1l1;l1-;loop:if(t0=0)l1=strlen(s1);for(i=0;il1-1;i+)ti=ti+1;tl1-1=0;goto loop;if(strlen(t)=0)t0=0;t1=0;名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 28 页 -6.任意进制转换语 法:conversion(char s1,char s2,long d1,long d2);参数:s:原进制数字,用字符串表示s2:转换结果,用字符串表示d1:原进制数d2:需要转换到的进制数返回值:null 注意:高于 9
12、 的位数用大写A Z表示,216 位进制通过验证源程序:void conversion(char s,char s2,long d1,long d2)long i,j,t,num;char c;num=0;for(i=0;si!=0;i+)if(si=0)t=si-0;else t=si-A+10;num=num*d1+t;i=0;while(1)t=num%d2;if(t=9)s2i=t+0;else s2i=t+A-10;num/=d2;if(num=0)break;i+;for(j=0;ji/2;j+)c=s2j;s2j=si-j;s2i-j=c;s2i+1=0;7.最大公约数、最小公倍
13、数语法:resulet=hcf(int a,int b)、result=lcd(int a,int b)参数:a:int a,求最大公约数或最小公倍数b:int b,求最大公约数或最小公倍数返回值:返回最大公约数(hcf)或最小公倍数(lcd)注意:lcd 需要连同hcf 使用源程序:int hcf(int a,int b)int r=0;while(b!=0)r=a%b;a=b;b=r;return(a);lcd(int u,int v,int h)return(u*v/h);8.组合序列语法:m_of_n(int m,int n1,int m1,int*a,int head)参数:m:组合
14、数 C 的上参数n1:组合数 C 的下参数m1:组合数 C 的上参数,递归之用*a:1n 的整数序列数组head:头指针返回值:null 注意:*a 需要自行产生初始调用时,m=m1、head=0 调 用 例 子:求C(m,n)序 列:m_of_n(m,n,m,a,0);源程序:void m_of_n(int m,int n1,int m1,int*a,int head)名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 28 页 -int i,t;if(m1n1)return;if(m1=n1)for(i=0;im;i+)coutai;/输出序列coutn;return;m_of_
15、n(m,n1-1,m1,a,head);/递归调用t=ahead;ahead=an1-1+head;an1-1+head=t;m_of_n(m,n1-1,m1-1,a,head+1);/再次递归调用t=ahead;ahead=an1-1+head;an1-1+head=t;9.快速傅立叶变换(FFT)语 法:kkfft(double pr,double pi,int n,int k,double fr,double fi,int l,int il);参数:prn:输入的实部pin:数入的虚部n,k:满足 n=2k frn:输出的实部fin:输出的虚部l:逻辑开关,0 FFT,1 ifFT il
16、:逻辑开关,0 输出按实部/虚部;1 输出按模/幅角返回值:null 注意:需要 math.h 源程序:void kkfft(pr,pi,n,k,fr,fi,l,il)int n,k,l,il;double pr,pi,fr,fi;int it,m,is,i,j,nv,l0;double p,q,s,vr,vi,poddr,poddi;for(it=0;it=n-1;it+)m=it;is=0;for(i=0;i=k-1;i+)j=m/2;is=2*is+(m-2*j);m=j;frit=pris;fiit=piis;pr0=1.0;pi0=0.0;p=6.283185306/(1.0*n);
17、pr1=cos(p);pi1=-sin(p);if(l!=0)pi1=-pi1;for(i=2;i=n-1;i+)p=pri-1*pr1;q=pii-1*pi1;s=(pri-1+pii-1)*(pr1+pi1);pri=p-q;pii=s-p-q;for(it=0;it=0;l0-)m=m/2;nv=2*nv;for(it=0;it=(m-1)*nv;it=it+nv)for(j=0;j=(nv/2)-1;j+)p=prm*j*frit+j+nv/2;q=pim*j*fiit+j+nv/2;s=prm*j+pim*j;s=s*(frit+j+nv/2+fiit+j+nv/2);poddr=p
18、-q;poddi=s-p-q;frit+j+nv/2=frit+j-poddr;fiit+j+nv/2=fiit+j-poddi;frit+j=frit+j+poddr;fiit+j=fiit+j+poddi;名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 28 页 -if(l!=0)for(i=0;i=n-1;i+)fri=fri/(1.0*n);fii=fii/(1.0*n);if(il!=0)for(i=0;i=n-1;i+)pri=sqrt(fri*fri+fii*fii);if(fabs(fri)0)pii=90.0;else pii=-90.0;else pii=at
19、an(fii/fri)*360.0/6.283185306;return;10.Ronberg算法计算积分语法:result=integral(double a,double b);参数:a:积分上限b:积分下限function f:积分函数返回值:f 在(a,b)之间的积分值注意:function f(x)需要自行修改,程序中用的是 sina(x)/x 需要 math.h 默认精度要求是1e-5 源程序:double f(double x)return sin(x)/x;/在这里插入被积函数 double integral(double a,double b)double h=b-a;dou
20、ble t1=(1+f(b)*h/2.0;int k=1;double r1,r2,s1,s2,c1,c2,t2;loop:double s=0.0;double x=a+h/2.0;while(x1e-5)r1=r2;c1=c2;k+;h/=2.0;t1=t2;s1=s2;goto loop;return r2;名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 28 页 -11.行列式计算语法:result=js(int s,int n)参数:s:行列式存储数组n:行列式维数,递归用返回值:行列式值注意:函数中常数N 为行列式维度,需自行定义源程序:int js(s,n)int
21、sN,n;int z,j,k,r,total=0;int bNN;/*bNN用于存放,在矩阵sNN 中元素 s0的余子式*/if(n2)for(z=0;zn;z+)for(j=0;jn-1;j+)for(k=0;k=z)bjk=sj+1k+1;else bjk=sj+1k;if(z%2=0)r=s0z*js(b,n-1);/*递归调用*/else r=(-1)*s0z*js(b,n-1);total=total+r;else if(n=2)total=s00*s11-s01*s10;return total;12.求排列组合数语法:result=P(long n,long m);/result
22、=long C(long n,long m);参数:m:排列组合的上系数n:排列组合的下系数返回值:排列组合数注意:符合数学规则:m n 源程序:long P(long n,long m)long p=1;while(m!=0)p*=n;n-;m-;return p;long C(long n,long m)long i,c=1;i=m;while(i!=0)c*=n;n-;i-;while(m!=0)c/=m;m-;return c;二、字符串处理1.字符串替换语法:replace(char str,char key,char swap);参数:str:在此源字符串进行替换操作key:被替换
23、的字符串,不能为空串swap:替换的字符串,可以为空串,为空串表示在源字符中删除key 返回值:null 注意:默认 str长度小于1000,如否,重新设定设定 tmp 大小需要string.h 源程序:void replace(char str,char key,char swap)int l1,l2,l3,i,j,flag;char tmp1000;l1=strlen(str);l2=strlen(key);l3=strlen(swap);for(i=0;i=l1-l2;i+)名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 28 页 -flag=1;for(j=0;jl2;j
24、+)if(stri+j!=keyj)flag=0;break;if(flag)strcpy(tmp,str);strcpy(&tmpi,swap);strcpy(&tmpi+l3,&stri+l2);strcpy(str,tmp);i+=l3-1;l1=strlen(str);2.字符串查找语法:result=strfind(char str,char key);参数:str:在此源字符串进行查找操作key:被查找的字符串,不能为空串返回值:如果查找成功,返回 key在 str中第一次出现的位置,否则返回-1 注意:需要string.h 源程序:int strfind(char str,cha
25、r key)int l1,l2,i,j,flag;l1=strlen(str);l2=strlen(key);for(i=0;i=l1-l2;i+)flag=1;for(j=0;jl)return 0;for(i=start;istart+len;i+)strbackk+=stri;strbackk=0;return 1;三、计算几何1.叉乘法求任意多边形面积语 法:result=polygonarea(Point*polygon,int N);参数:*polygon:多变形顶点数组N:多边形顶点数目返回值:多边形面积注意:支持任意多边形,凹、凸皆可多边形顶点输入时按顺时针顺序排列源程序:ty
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年C语言常用代码 2022 语言 常用 代码

限制150内