1. 程式人生 > >C語言經典最基礎演算法題(從小白到大神)

C語言經典最基礎演算法題(從小白到大神)

我會把我學習C語言碰到的經典的演算法題目全都歸類到這個帖子中,希望對和我一樣學習程式設計的小白有幫助!但求精簡,以最少的時間入門C語言。
1.輸入n個數,輸出其中最大的一個數。

#include <stdio.h>
int main()
{
    int n,i,s=0;  //s為最大的數
    int a[100];    //儲存的陣列
    printf("請輸入你要比較的個數:");
    scanf("%d", &n);
    for(i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
        if(s<a[i]) s=a[i];
    }
    printf("最大值是:%d\n",s);
}

2.計算多項式1-1/2+1/3-1/4+.....+1/99-1/100的值。
#include<stdio.h>
int main()
{
    double a=2, b=1, sign=1;
    while(a<=100)
    {
        sign = -sign;
        b = sign/a + b;
        a = a + 1;
        
    }
    printf("sum = %lf\n",b);
    return 0;
}

3.輸入a,b,c三個值,輸出其中最大值。
//方法1
#include <stdio.h>
int main()
{
    int max(int x, int y);
    int a, b, c, d, e;
    scanf("%d, %d, %d", &a, &b, &c);
    d = max( a, b );
    e = max( d, c );
    printf("max = %d\n", e);
}

int max(int x, int y)
{
    int z;
    if(x>y) z = x;
    else z = y;
    return(z);
}

//方法2
#include <stdio.h>
int main()
{
    int a,b,c,max;
    printf("please input a,b,c:\n");
    scanf("%d,%d,%d",&a,&b,&c);
    max = a;
    if(max<b) max = b;
    if(max<c) max = c;
    printf("The largest number is %d\n",max);
    return 0;
}

4.有一個函式:x < 1, y = x; 1 <=  x  < 10 , 2x - 1;  x >= 10 , 3x-11.

#include <stdio.h>
int main()
{
    double x,y;
    scanf("%lf",&x);
    if(x<1) y=x;
    else if(x>=10) y=3*x-11;
    else y=2*x-1;
    printf("最終的值為%lf\n",y);
    return 0;
}

5.求1!+2!+3!+......+20!的值。
#include<stdio.h>
int main()
{
    double s=0,t=1;
    int n;
    for (n=1; n<=20; n++) {
        t = t*n;
        s = s + t;
    }
    printf("1!+2!+3!+....+20!=%0.16e\n",s);  //%0.16e指的是以科學計數法的形式輸出10的若干次方,非自然指數
    return 0;
}

6.請輸出如下圖案:

   *

  ***

 *****

*******

 *****

  ***

   *

#include <stdio.h>
int main()
{
    int i,j,k;
    for (i=0;i<=3;i++)
    {
        for (j=0;j<=2-i;j++)
        printf(" ");
        for (k=0;k<=2*i;k++)
            printf("*");
        printf("\n");
    }
    for (i=0;i<=2;i++)
    {
        for (j=0;j<=i;j++)
        printf(" ");
        for (k=0;k<=4-2*i;k++)
            printf("*");
        printf("\n");
    }
    return 0;
}


7.輸入有三個字串,要求找出其中最大的字串。

#include <stdio.h>
#include <string.h>
int main()
{
    char str[3][20];
    char string[20];
    int i;
    for(i=0;i<3;i++)
        gets(str[i]);
    if(strcmp(str[0],str[1])>0)
        strcpy(string, str[0]);
    else
        strcpy(string, str[1]);
    if(strcmp(str[2],string)>0)
        strcpy(string, str[2]);
    printf("\n最大的字串是:%s\n",string);
    return 0;
}

8.用遞迴方法求n!

#include<stdio.h>
int main()
{
    int fac(int n);
    int n,y;
    printf("輸入一個整數階乘:");
    scanf("%d",&n);
    y = fac(n);
    printf("%d!=%d\n",n,y);
    return 0;
}

int fac(int n)
{
    int f;
    if(n<0)
        printf("n<0,資料錯誤");
    else if(n == 0||n == 1)
        f = 1;
    else f = fac(n-1)*n;
    return(f);
}

9.用指標方法對10個整數按由大到小的順序排列。

#include <stdio.h>
int main()
{
    void sort(int x[],int n);
    int *p,a[10],i;
    p=a;
    printf("請輸入十個整數:\n");
    for(i=0;i<10;i++)
        scanf("%d",p++);
    p=a;
    sort(p,10);
    for(p=a,i=0;i<10;i++)
    {
        printf("%5d",*p);
        p++;
    }
    printf("\n");
    return 0;
}

void sort(int x[],int n)
{
    int i,j,k,t;
    for(i=0;i<n-1;i++)
    {
        k=i;
        for(j=i+1;j<n;j++)
            if(x[j]>x[k]) k=j;
               if(k!=i)
               {t=x[i];x[i]=x[k];x[k]=t;}
    }
}