文档介绍:典型算法
方法一:
t=a; a=b; b=t;
方法二:
t=b ; b=a ; a=t ;
注意区分值传递以及地址传递
void swap(int *a, int *b)
{
int t;
t=*a;
*a=*b;
*b=t;
}
交换变量a,b的值(排序等算法将用到)
累加
数组操作的提示:数组的操作主要是通过对数组元素的操作来实现,数组元素是通过下标访问的,因此数组操作的关键是:分析并找出要操作的数组元素的下标或下标的变化规律(操作中涉及到多个元素),下标不能越界,有n个元素的数组a,有效下标为0~n-1
求1~n个自然数的累加和s
求有n个元素的一维数组a各元素之和
s=0;
for(i=1; i<=n; i++)
s+=i;
s=0;
for(i=0; i<n; i++)
s+=a[i];
求二维数组a各元素之和
求二维数组a周边元素之和
s=0;
for(i=0; i<m; i++)
for(j=0; j<n; j++)
s+=a[i][j];
s=0;
for(i=0; i<n; i++)
s=s+a[0][i]+a[m-1][i];//求第1行和最后一行各元素之和
for(i=1; i<m-2; i++)
s=s+a[i][0]+a[i][n-1];//求第1行和最后一行各元素之和
求二维数组a主对角元素之和
求二维数组a次对角元素之和
s=0;
for(i=0; i<n; i++)
s=s+a[i][i];
s=0;
for(i=0; i<n; i++)
s=s+a[i][n-i-1];
求n!(累积)
f=1;
for(i=1; i<=n; i++)
f=f*i ;
将一维数组的前n项逆置
for(i=0 ; i<n/2 ; i++)
{
t=a[i] ;
a[i]=a[n-i-1] ;
a[n-i-1]=t ;
}
删除数组a[n]中的下标为k的元素
for(i=k ; i<n-1 ; i++)
{
a[i]=a[i+1] ;
}
n=n-1;
将数据d插入到数组a[n]中的下标为k的位置
for(i=n ; i>k ; i--)
{
a[i]=a[i-1] ;
}
a[i]=d;
求自然数m和n的最大公约数(欧几里德算法)
do
{
r=m%n;
m=n;
n=r;
}while(r!=0);
printf("最大公约数为:%d\n",m);
递归方法:
int gcd(int m, int n)
{
int r;
r=m % n;
if(r==0)
return n;
else
return gcd(n,r);
}
求两个数的最小公倍数
方法一:
先求最大公约数,再求最小公倍数
m1=m; n1=n;
do
{
r=m1%n1;
m1=n1;
n1=r;
}while(r!=0);
if(m>n)
d=m;
else
d=n;
while(d%n!=0)
{
d=d+m;
}
printf("%d\n",d);
printf("最