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; } }