1. 程式人生 > >C語言常用基本演算法

C語言常用基本演算法

1.階乘

#include<stdio.h> #include<stdlib.h> int main() {     int i,sum=0,p=1,n;     scanf("%d",&n);     if(n<0)     {         printf("負數沒有階乘\n");         exit(0);     }     for(i=1;i<=n;i++)     {         p=p*i;         sum=sum+p;     }     printf("階乘的和為%d\n",sum); }

2.素數

#include<stdio.h> int main() {     int n,flag=1,i;     scanf("%d",&n);//輸入一個數n,判斷它是否是素數。      for(i=2;i<n/2;i++)      {         if(n%i==0)// 根據素數的定義n依次除以小於它本身大於1的數              flag=0;//一旦有能被整除的數,表明 n不是素數,使得flag=0 。      }     if(flag==0)//根據flag的值判斷n是否是素數          printf("%d不是素數",n);      else         printf("%d是素數",n);  }

3.99乘法表

#include<stdio.h> int main() {     int i,j;     for(i=1;i<10;i++)     {         for(j=1;j<=i;j++)         {             printf("%d*%d=%d  ",i,j,i*j);         }         printf("\n");     } } 4.水仙花數(三位數)

#include<stdio.h> int main() {     int i,m,n,k;     for(i=100;i<1000;i++)     {         m=i/100;         k=i%10;         n=(i-100*m)/10;         if(i==m*m*m+n*n*n+k*k*k)             printf("%d\n",i);     } }

5.完美數(10000以內)

#include<stdio.h> int main() {     int i,j,s;     for(i=1;i<=10000;i++)     {         s=0;         for(j=1;j<i;j++)         {             if(i%j==0)             {                 s=s+j;             }         }         if(s==i)             printf("%d ",i);     } } 6.相親數

#include <stdio.h> #define N 10000 void main() {     int i,j,k;     unsigned s[N];

    for(i=2;i<N;i++)     {         for(j=1,s[i]=0;j<i;j++)         {             if(i%j==0)                 s[i]+=j;         }     }     for(i=2;i<N;i++)     {         j=s[i];         if(j>N)             continue;//         if(i==s[j]&&j>i)         {             printf("%d: ",i);             for(k=1;k<i;k++)                 if(i%k==0)                     printf("%d ",k);                     printf("\n");                     printf("%d: ",j);             for(k=1;k<j;k++)                 if(j%k==0)                     printf("%d ",k);                     printf("\n\n");         }     } } 7.數字反位輸出

#include<stdio.h> int main() {     int t = 0;     int n;     scanf("%d",&n);     while(n!=0)     {         t = t*10+n%10;         n = n/10;     }     printf("%d\n",t); }

8.迴文數判斷

#include<stdio.h> int main() {     int n,m=0,k;     do     {         scanf("%d",&n);         if(n<=0)             printf("資料輸入錯誤,請重新輸入\n");     }while(n<=0);     k=n;     while(k!=0)     {         m=m*10+k%10;         k=k/10;     }     if(n==m)         printf("%d是迴文數\n",n);     else         printf("%d不是迴文數\n",n); } 9.排序(選擇排序,氣泡排序,插入排序)

#include <stdio.h> #include <stdlib.h> #include <string.h> void sort(int a[],int n); void sort1(int a[],int n); void sort2(int a[],int n); int  main() {     int b[]={5,6,9,2,3,4};     int i,n=6;     sort2(b,n);     for(i=0;i<n;i++)     {         printf("%3d",b[i]);     }     return 0; }

//選擇排序 void sort(int a[],int n) {    int t,i,j,k;    for(i=0;i<n-1;i++)    {        k=i;        for(j=i+1;j<n;j++)        {            if(a[j]<a[k])            {                k=j;            }        }        if(k!=i)        {            t=a[i];            a[i]=a[k];            a[k]=t;        }    } }

//氣泡排序 void sort1(int a[],int n) {     int i,j,t;     for(i=0;i<n-1;i++)     {         for(j=0;j<n-1-i;j++)         {             if(a[j+1]<a[j])             {                 t=a[j];                 a[j]=a[j+1];                 a[j+1]=t;             }         }     } }

//插入排序 void sort2(int a[],int n) {     int i,j,x;     for(i=1;i<n;i++)     {         j=i-1;         x=a[i];         while(j>=0&&a[j]>x)         {             a[j+1]=a[j];             j--;         }         a[j+1]=x;     } }