全国计算机二级复习重要C语言程序小算法
1.对某一正数的值保留2位小数,并对第三位进行四舍五入。
double fun(float x)
{
x=(int)(x*100+0.5)/100.0;
}
2.判断一个数是否为素数,是素数则返回1,否则返回0.
方法一:
int sushu(int x)
{ int i;
for(i=2;i<=x/2;i++)
if(x%i==0) return 0;
return 1;
}
方法二:
int sushu(int x)
{
int i;
for(i=2;i<=x-1;i++)
if(x%i==0) return 0;
if(i<=x-1) return 1;
else return 0;
}
方法三:#include
int sushu(int x)
{
int i ;
for (i=2;i<=sqrt(x);i++)
if(x%i==0) return 0;
return 1;
}
3.判断一个数是否为水仙花数,“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。
int shuixianhua(int x)
{
int g,s,b;
g=x%10; s=x/10%10; b=x/100%10;
if(g*g*g+s*s*s+b*b*b==x) return 1;
else return 0;
}
4.判断一个数是否为完数。一个数如果恰好等于它的因子之和,这个数就称为“完
数”。例如6=1+2+3.
int wanshu(int x)
{ int s=1,i;
for(i=2;i if(x%i==0) s+=i; if(s==x) return 1; else return 0; } 5.求两个数的最大公约数和最小公倍数。 gygb(int a,int b,int *pgy,int *pgb) { int r; *pgb=a*b; while( (r=a%b)!=0 ) /*r!=0说明存在公约数*/ { a=b; b=r; } *pgy=b; *pgb/=b; /*传递公约公倍的指针到调用函数,用以存值*/ } 6.判断一个数是否为回文数。 int huiwen(int x) { int y=0,t=x; while(x!=0) { y=y*10+x%10; x/=10; } if(y==t) return 1; else return 0; 7.输出一个数的逆序数。 int x; do { printf(“%d”,x%10); x=x/10; }while(x!=0); 8.输出一维数组中的最大值。 int fmax(int a[],int n) /* 相当于int *a */ { int mi=0,i; for(i=0;i if(a[i]>a[mi]) mi=i; return a[mi]; } 9.一维数组的逆置。 方法一: void f(int a[]) { int b[N],i; for(i=0;i for(i=0;i } 方法二: int i=0,j=N-1,t; while(i { t=a[i]; a[i]=a[j]; a[j]=t; i++; j--; } 方法三: int i=0,t; while(i { t=a[i]; a[i]=a[N-1-i]; a[N-1-i]=t; i++; } 10.一维数组的查找。找到则返回下标,没找到返回-1。(1)顺序查找 int search(int a[],int n,int x) { int i; for(i=0;i if(a[i]==x) return i; return -1; } (2)二分查找 int search(int a[],int n,int x) { int low=0,high=n-1,mid; while(low<=high) { mid=(low+high)/2; if(a[mid] else if(a[mid]>x) high=mid-1; else return mid; } return -1; } 11.一维数组的排序。 (1)交换排序 void sort1(int a[],int n) { int i,j,t; for(i=0;i for(j=i+1;j if(a[j] } (2)选择排序 void sort1(int a[],int n) { int i,j,k,t;