C语言实用模板程序新手必看Word格式文档下载.docx
《C语言实用模板程序新手必看Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《C语言实用模板程序新手必看Word格式文档下载.docx(39页珍藏版)》请在冰豆网上搜索。
printf("
greatestcommondivisoris%d\n"
m);
return0;
}
封装函数
intgcd(intm,intn)
returnm;
调用函数
intgcd(intm,intn);
gcd(intm,intn);
方法二:
更相减损法
两个数,用较大的数减去较小的数,所得差与较小的数记为新的两个数,再重复之前的过程,直到两个数相等,这时这两个数就是最大公约数。
intm,n;
while(m!
=n)
if(m>
n)m-=n;
elsen-=m;
gcd(m,n));
2
求两个数最小公倍数
两个数,从较大的数开始,依次找能同时整除这两个数的整数,这个整数就是这两个数的最小公倍数。
intm,n,i;
for(i=(m>
n?
m:
;
i++)
if(i%m==0&
&
i%n==0)
leasecommonmultipleis%d"
i);
break;
intlcm(intm,intn)
inti;
returni;
intlcm(intm,intn);
lcm(m,n));
3
判断素数
从2开始到所求整数的开方依次求余,如果有能整除所求整数的整数,则所求整数为合数,反之为素数。
math.h>
intnum;
inti,k,flag=1;
%d"
num);
k=sqrt(num);
for(i=2;
i<
=k;
if(num%i==0)printf("
%disn'
taprimenumber!
"
num);
flag=0;
if(flag)printf("
%disaprimenumber!
intsushu(intnum)
inti,k;
if(num%i==0)return0;
return1;
intsushu(intnum);
if(sushu(num)==0)printf("
elseprintf("
4
冒泡排序(升序)
N个数,每次比较相邻的两个数,如果前面的数大就相互交换,这样小的数就会像气泡一样往前冒。
一趟排序完成后最后一个数最大。
共进行N-1趟排序。
#defineN10
intnum[N];
inti,j;
intt;
for(i=0;
N;
num[i]);
N-1;
for(j=0;
j<
N-1-i;
j++)
if(num[j]>
num[j+1])
{t=num[j];
num[j]=num[j+1];
num[j+1]=t;
%d"
num[i]);
voidmaopao(intnum[N])
voidmaopao(intnum[N]);
maopao(num);
5
选择排序(升序)
N个数,每次从剩下的数中选择最小的数(记住它的下标)与这组数中最前面的数交换,数的个数依次减少。
一趟排序完成后最前面的数最小。
inti,j,k;
k=i;
for(j=i+1;
if(num[k]>
num[j])k=j;
if(k!
=i){t=num[k];
num[k]=num[i];
num[i]=t;
voidxuanze(intnum[N])
voidxuanze(intnum[N]);
xuanze(num);
6
折半查找(升序)
N个按照从小到大排列好顺序的数,再从中寻找一个数,不是依次扫描每个数,而是先把这组数的中间元素拿出来与所找的数比较,如果中间数小于所找的数,则在这组数的后半段寻找;
如果中间数大于所找的数,则在这组数的前半段寻找。
找到了,输出这个数的下标,如果找不到,输出Notfound!
。
inta[N],low=0,high=N-1,mid,i,key,flag=0;
a[i]);
key);
while(low<
=high)
mid=(low+high)/2;
if(a[mid]==key)
Found!
Theindexif%d"
mid);
flag=1;
elseif(a[mid]>
key)high=mid-1;
elselow=mid+1;
if(!
flag)printf("
Notfound!
);
intzheban(inta[N],key)
intlow=0,high=N-1,mid;
returnmid;
return-1;
intzheban(inta[N],key);
zheban(a,key);
7
找最大数
(1)两个数找最大
比较两个数,输出较大者。
intx,y,z;
x,&
y);
z=x>
y?
x:
y;
z);
intmax(intx,inty)
intz;
returnz;
intmax(intx,inty);
max(x,y));
(2)数组中找最大
①一维数组
让一个变量等于数组中第一个元素,从第二数开始依次进行比较,碰到更大的数则更改变量的值,直到全部比较完毕。
inti,max;
max=num[0];
for(i=1;
if(max<
num[i])max=num[i];
max);
intmax(intnum[N])
intmax=num[0];
returnmax;
intmax(intnum[N]);
max(num));
②二维数组
让一个变量等于数组中第一个元素,从第一个数开始依次进行比较,碰到更大的数则更改变量的值,直到全部比较完毕。
#defineM5
intnum[N][M];
intmax;
M;
num[i][j]);
max=num[0][0];
max);
intmax(intnum[N][M])
intmax=num[0][0];
intmax(intnum[N][M]);
8
数组的行列转置
交换对应行列和列行的元素,注意只交换一半即可,否则相当于没有交换。
#defineN5
inta[N][N];
inti,j,t;
a[i][j]);
t=a[i][j];
a[i][j]=a[j][i];
a[j][i]=t;
a[i][j]);
\n"
voidzhuanzhi(inta[][N])
voidzhuanzhi(inta[][N]);
zhuanzhi(a);
9
大整数
(1)大整数的输入
用字符类型输入。
string.h>
charch[101];
%s"
ch);
//或gets(ch);
voidInput_Big_Num(charch[101])
voidInput_Big_Num(charch[101]);
Input_Big_Num(ch);
(2)大整数的处理
①将大整数个位到最高位放在下标从0开始的整形数
intdata[100];
intlen,i;
len=strlen(ch);
len;
data[i]=ch[len-i-1]-'
0'
intChuli_Big_Num(charch[101],intdata[100])
data[i]=ch1[len-i-1]-'
returnlen-1;
charch[101]={'
\0'
};
intdata[100]={0};
intChuli_Big_Num(charch[101],intdata[100]);
Chuli_Big_Num(ch,data);
②将大整数最高位到个位放在下标从0开始的整形数
data[i]=ch[i]-'
intChuli2_Big_Num(charch[101],intdata[100])
data[i]=ch1[i]-'
intChuli2_Big_Num(charch[101],intdata[100]);
(3)大整数的输出
for(i=len-1;
i>
=0;
i--)
data[i]);
voidOutput_Big_Num(intdata[100],intweishu)
for(i=weishu-1;
intweishu;
voidOutput_Big_Num(intdata[100],intweishu);
weishu=Chuli_Big_Num(ch,data);
Output_Big_Num(data,weishu);
re