C語言經典例題(26-50)

C語言經典例題(26-50)

寫在前面

你好,我是禪墨!

本文來自老珍藏!

前天發了一篇,反響挺不錯的!今天繼續!

正文開始

26.利用遞歸方法求5!

#include <stdio.h>
 
int main()
{
    int i;
    int fact(int);
    for(i=0;i<6;i++){
        printf("%d!=%d\n",i,fact(i));
    }
}
int fact(int j)
{
    int sum;
    if(j==0){
        sum=1;
    } else {
        sum=j*fact(j-1);
    }
    return sum;
}

#輸出
0!=1
1!=1
2!=2
3!=6
4!=24
5!=120

27.利用遞歸函數調用方式,將所輸入的5個字符,以相反順序打印出來。

#include <stdio.h>
 
int main()
{
    int i=5;
    void palin(int n);
    printf("請輸入5個字符\40:\40");
    palin(i);
    printf("\n");
}
void palin(n)
int n;
{
    char next;
    if(n<=1) {
        next=getchar();
        printf("相反順序輸出結果\40:\40");
        putchar(next);
    } else {
        next=getchar();
        palin(n-1);
        putchar(next);
    }
}

#輸出
請輸入5個字符 : abcde
相反順序輸出結果 : edcba

28.有5個人坐在一起,問第五個人多少歲?他說比第4個人大2歲。問第4個人歲數,他說比第3個人大2歲。問第三個人,又說比第2人大兩歲。問第2個人,說比第一個人大兩歲。最後問第一個人,他說是10歲。請問第五個人多大?

#include <stdio.h>
 
int age(n)
int n;
{
    int c;
    if(n==1) c=10;
    else c=age(n-1)+2;
    return(c);
}
int main()
{
    printf("%d\n",age(5));
}

#輸出結果爲:
18

29.給一個不多於5位的正整數,要求:一、求它是幾位數,二、逆序打印出各位數字。

#include <stdio.h>
 
int main( )
{
    long a,b,c,d,e,x;
    printf("請輸入 5 位數字:");
    scanf("%ld",&x);
    a=x/10000;        /*分解出萬位*/
    b=x%10000/1000;   /*分解出千位*/
    c=x%1000/100;     /*分解出百位*/
    d=x%100/10;       /*分解出十位*/
    e=x%10;           /*分解出個位*/
    if (a!=0){
        printf("爲 5 位數,逆序爲: %ld %ld %ld %ld %ld\n",e,d,c,b,a);
    } else if(b!=0) {
         printf("爲 4 位數,逆序爲: %ld %ld %ld %ld\n",e,d,c,b);
    } else if(c!=0) {
         printf("爲 3 位數,逆序爲:%ld %ld %ld\n",e,d,c);
    } else if(d!=0) {
         printf("爲 2 位數,逆序爲: %ld %ld\n",e,d);
    } else if(e!=0) {
         printf("爲 1 位數,逆序爲:%ld\n",e);
    }
}

#輸出結果爲:

請輸入 5 位數字:123455 位數,逆序爲: 5 4 3 2 1

30.(迴文數)一個5位數,判斷它是不是迴文數。即12321是迴文數,個位與萬位相同,十位與千位相同。

#include <stdio.h>
 
int main( )
{
    long ge,shi,qian,wan,x;
    printf("請輸入 5 位數字:");
    scanf("%ld",&x);
    wan=x/10000;        /*分解出萬位*/
    qian=x%10000/1000;  /*分解出千位*/
    shi=x%100/10;       /*分解出十位*/
    ge=x%10;            /*分解出個位*/
    if (ge==wan&&shi==qian) { /*個位等於萬位並且十位等於千位*/
        printf("這是迴文數\n");
    } else {
        printf("這不是迴文數\n");
    }
}

#輸出結果爲:

請輸入 5 位數字:12321
這是迴文數

31.請輸入星期幾的第一個字母來判斷一下是星期幾,如果第一個字母一樣,則繼續判斷第二個字母。

#include<stdio.h>
 
int main()
{
    char i,j;
    printf("請輸入第一個字母:\n");
    scanf("%c",&i);
    getchar();//scanf("%c",&j);的問題,第二次是讀入的一個換行符,而不是輸入的字符,因此需要加一個getchar() 吃掉換行符
    switch(i)
    {
        case 'm':
            printf("monday\n");
            break;
        case 'w':
            printf("wednesday\n");
            break;
        case 'f':
            printf("friday\n");
            break;
        case 't':
            printf("請輸入下一個字母\n");
            scanf("%c",&j);
            if (j=='u') {printf("tuesday\n");break;}
            if (j=='h') {printf("thursday\n");break;}
        case 's':
            printf("請輸入下一個字母\n");
            scanf("%c",&j);
            if (j=='a') {printf("saturday\n");break;}
            if (j=='u') {printf("sunday\n"); break;}
        default :
            printf("error\n"); break;
    }
    return 0;
}

#輸出結果爲:

請輸入第一個字母:
s
請輸入下一個字母
a
saturday

32.刪除一個字符串中的指定字母,如:字符串 “aca”,刪除其中的 a 字母。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
 
// 刪除字符串中指定字母函數
char* deleteCharacters(char * str, char * charSet)
{
    int hash [256];
    if(NULL == charSet)
        return str;
    for(int i = 0; i < 256; i++)
        hash[i] = 0;
    for(int i = 0; i < strlen(charSet); i++)
        hash[charSet[i]] = 1;
    int currentIndex = 0;
    for(int i = 0; i < strlen(str); i++)
    {
        if(!hash[str[i]])
            str[currentIndex++] = str[i];
    }
    str[currentIndex] = '\0';
    return str;
}
 
int main()
{
    char s[2] = "a";     // 要刪除的字母
    char s2[5] = "aca";  // 目標字符串
    printf("%s\n", deleteCharacters(s2, s));
    return 0;
}

#輸出結果爲:

c

33.判斷一個數字是否爲質數

#include<stdio.h>
#include<math.h>
#define MAX 1000
 
 
int prime[MAX];
 
int isPrimeNaive(int n)
{
    if(n <= 1)
        return 0;
    for(int i = 2; i < n; i++)
        if(n % i == 0)
            return 0;
    return 1;
}
 
int isPrime(int n)
{
    if(n<= 1)
        return 0;
    if(n == 2)
        return 1;
    if(n%2 == 0)
        return 0;
    int limit = (int)sqrt((double)n);
    for(int i = 3; i <= limit; i=i+2)
    {
        if(n % i == 0)
            return 0;
    }
    return 1;
}
 
void sieve()
{
    prime[0] = 0;
    prime[1] = 0;
    for(int i = 2; i < MAX; i++)
        prime[i] = 1;
    int limit = (int)sqrt((double)MAX);
    for(int i = 2; i <= limit; i++)
    {
        if(prime[i])
            for(int j = i*i; j <= MAX; j+=i)
                prime[j] = 0;
    }
}
 
int isPrimeSieve(int n)
{
    if(prime[n])
        return 1;
    else
        return 0;
}
 
int main()
{
    sieve();
    printf("N=%d %d\n", 1, isPrime(1));
    printf("N=%d %d\n", 2, isPrime(2));
    printf("N=%d %d\n", 3, isPrime(3));
    printf("N=%d %d\n", 4, isPrime(4));
    printf("N=%d %d\n", 7, isPrime(7));
    printf("N=%d %d\n", 9, isPrime(9));
    printf("N=%d %d\n", 13, isPrime(13));
    printf("N=%d %d\n", 17, isPrime(17));
    printf("N=%d %d\n", 100, isPrime(100));
    printf("N=%d %d\n", 23, isPrime(23));
    printf("N=%d %d\n", 1, isPrime(1));
    return 0;
}

#以上實例輸出結果爲(末尾數字 1 表示是質數,0 表示不是質數):

N=1 0
N=2 1
N=3 1
N=4 0
N=7 1
N=9 0
N=13 1
N=17 1
N=100 0
N=23 1
N=1 0

34.練習函數調用。

#include <stdio.h>
void hello_world(void)
{
    printf("Hello, world!\n");
}
void three_hellos(void)
{
    int counter;
    for (counter = 1; counter <= 3; counter++)
        hello_world();/*調用此函數*/
}
int main(void)
{
    three_hellos();/*調用此函數*/
}

#輸出結果爲:

Hello, world!
Hello, world!
Hello, world!

35.字符串反轉,如將字符串 “www.runoob.com” 反轉爲 “moc.boonur.www”。

#include <stdio.h>
 
 
void reverse(char* s)
{
    // 獲取字符串長度
    int len = 0;
    char* p = s;
    while (*p != 0)
    {
        len++;
        p++;
    }
    
    // 交換 ...
    int i = 0;
    char c;
    while (i <= len / 2 - 1)
    {
        c = *(s + i);
        *(s + i) = *(s + len - 1 - i);
        *(s + len - 1 - i) = c;
        i++;
    }
}
 
int main()
{
    char s[] = "www.runoob.com";
    printf("'%s' =>\n", s);
    reverse(s);           // 反轉字符串
    printf("'%s'\n", s);
    return 0;
}

#以上實例輸出結果爲:

'www.runoob.com' =>
'moc.boonur.www'

36.求100之內的素數。

#include<stdio.h>
#include<math.h>
int main()
{
    int i,j,k,n=0;
    for(i=2;i<=100;i++)
    {
        k=(int)sqrt(i);
        for(j=2;j<=k;j++)
            if(i%j==0) break;
        if(j>k)
        {
            printf("%d ",i);
            n++;
            if(n%5==0)
                printf("\n");
        }
    }
    return 0;
}

#以上實例輸出結果爲:

2 3 5 7 11 
13 17 19 23 29 
31 37 41 43 47 
53 59 61 67 71 
73 79 83 89 97 

37.對10個數進行排序。

#include<stdio.h>
#define N 10
int main()
{
    int i,j,a[N],temp;
    printf("請輸入 10 個數字:\n");
    for(i=0;i<N;i++)
        scanf("%d",&a[i]);
    for(i=0;i<N-1;i++)
    {
        int min=i;
        for(j=i+1;j<N;j++)
            if(a[min]>a[j]) min=j;
        if(min!=i)
        {
            temp=a[min];
            a[min]=a[i];
            a[i]=temp;
        }
    }
    printf("排序結果是:\n");
    for(i=0;i<N;i++)
        printf("%d ",a[i]);
    printf("\n");
    return 0;
}

#以上實例輸出結果爲:

請輸入 10 個數字:
23 2 27 98 234 1 4 90 88 34
排序結果是:
1 2 4 23 27 34 88 90 98 234 

38.求一個3*3矩陣對角線元素之和

#include<stdio.h>
#define N 3
int main()
{
    int i,j,a[N][N],sum=0;
    printf("請輸入矩陣(3*3):\n");
    for(i=0;i<N;i++)
        for(j=0;j<N;j++)
            scanf("%d",&a[i][j]);
    for(i=0;i<N;i++)
        sum+=a[i][i];
    printf("對角線之和爲:%d\n",sum);
    return 0;
}

#以上實例輸出結果爲:

請輸入矩陣(3*3)1 2 3
4 5 6
7 8 9
對角線之和爲:15

39.有一個已經排好序的數組。現輸入一個數,要求按原來的規律將它插入數組中

#include<stdio.h>
int main()
{
    int a[11]={1,4,6,9,13,16,19,28,40,100};
    int temp1,temp2,number,end,i,j;
    printf("原始數組是:\n");
    for(i=0;i<10;i++)
        printf("%4d",a[i]);
    printf("\n插入一個新的數字: ");
    scanf("%d",&number);
    end=a[9];
    if(number>end)
        a[10]=number;
    else
    {
        for(i=0;i<10;i++)
        {
            if(a[i]>number)
            {
                temp1=a[i];
                a[i]=number;
                for(j=i+1;j<11;j++)
                {
                    temp2=a[j];
                    a[j]=temp1;
                    temp1=temp2;
                }
                break;
            }
        }
    }
    for(i=0;i<11;i++)
        printf("%4d",a[i]);
    printf("\n");
    return 0;
}

#以上實例輸出結果爲:

原始數組是:
   1   4   6   9  13  16  19  28  40 100
插入一個新的數字: 10
   1   4   6   9  10  13  16  19  28  40 100

40.將一個數組逆序輸出。

#include<stdio.h>
#define N 10
int main()
{
    int a[N]={0,1,2,3,4,5,6,7,8,9};
    int i,t;
    printf("原始數組是:\n");
    for(i=0;i<N;i++)
        printf("%d ",a[i]);
    for(i=0;i<N/2;i++)
    {
        t=a[i];
        a[i]=a[N-1-i];
        a[N-1-i]=t;
    }
    printf("\n排序後的數組:\n");
    for(i=0;i<N;i++)
        printf("%d ",a[i]);
    printf("\n");
    return 0;
}

#以上實例輸出結果爲:

原始數組是:
0 1 2 3 4 5 6 7 8 9 
排序後的數組:
9 8 7 6 5 4 3 2 1 0 

41.學習static定義靜態變量的用法。

#include<stdio.h>
int main()
{
    void fun();
    for(int i=0;i<3;i++)
        fun();
    return 0;
}
void fun()
{
    int i=0;
    static int static_i=0;
    printf("i=%d\n",i);
    printf("static_i=%d\n",static_i);
    i++;
    static_i++;
}

#以上實例輸出結果爲:

i=0
static_i=0
i=0
static_i=1
i=0
static_i=2

42.學習使用auto定義變量的用法。

#include <stdio.h>
int main()
{
    int i,num;
    num=2;
    for(i=0;i<3;i++)
    {
        printf("num 變量爲 %d \n",num);
        num++;
        {
            auto int num=1;
            printf("內置模塊 num 變量爲 %d \n",num);
            num++;
        }
    }
    return 0;
}

#以上實例輸出結果爲:

num 變量爲 2 
內置模塊 num 變量爲 1 
num 變量爲 3 
內置模塊 num 變量爲 1 
num 變量爲 4 
內置模塊 num 變量爲 1 

43.學習使用static的另一用法。

#include <stdio.h>
int main()
{
    int i,num;
    num=2;
    for(i=0;i<3;i++)
    {
        printf("num 變量爲 %d \n",num);
        num++;
        {
            static int num=1;
            printf("內置模塊 num 變量爲 %d\n",num);
            num++;
        }
    }
    return 0;
}

#以上實例輸出結果爲:

num 變量爲 2 
內置模塊 num 變量爲 1
num 變量爲 3 
內置模塊 num 變量爲 2
num 變量爲 4 
內置模塊 num 變量爲 3

44.學習使用external的用法。

#include <stdio.h>
int a,b,c;
void add()
{
    int a;
    a=3;
    c=a+b;
}
int main()
{
    a=b=4;
    add();
    printf("c 的值爲 %d\n",c);
    return 0;
}

#以上實例輸出結果爲:

c 的值爲 7

45.學習使用register定義變量的方法。

#include <stdio.h>
int main()
{
    register int i;
    int tmp=0;
    for(i=1;i<=100;i++)
        tmp+=i;
    printf("總和爲 %d\n",tmp);
    return 0;
}

#以上實例輸出結果爲:

總和爲 5050

46.宏#define命令練習。

#include<stdio.h>
#define TRUE 1
#define FALSE 0
#define SQ(x) (x)*(x)
int main()
{
    int num;
    int again=1;
    printf("如果值小於 50 程序將終止。\n");
    while(again)
    {
        printf("\n請輸入數字:");
        scanf("%d",&num);
        printf("該數字的平方爲 %d \n",SQ(num));
        if(num>=50)
            again=TRUE;
        else
            again=FALSE;
    }
    return 0;
}
以上實例輸出結果爲:

如果值小於 50 程序將終止。

請輸入數字:100
該數字的平方爲 10000 

請輸入數字:5
該數字的平方爲 25 

47.宏#define命令練習2。

#include<stdio.h>
#define exchange(a,b) { int t;t=a;a=b;b=t;}//注意放在一行裏
int main()
{
    int x=10;
    int y=20;
    printf("x=%d; y=%d\n",x,y);
    exchange(x,y);
    printf("x=%d; y=%d\n",x,y);
    return 0;
}

#以上實例輸出結果爲:

x=10; y=20
x=20; y=10

48.宏#define命令練習3。

#define LAG >
#define SMA <
#define EQ ==
#include <stdio.h>
int main()
{
    int i,j;
    printf("請輸入兩個數字:\n");
    scanf("%d %d",&i,&j);
    if(i LAG j)
        printf("%d 大於 %d \n",i,j);
    else if(i EQ j)
        printf("%d 等於 %d \n",i,j);
    else if(i SMA j)
        printf("%d 小於 %d \n",i,j);
    else
        printf("沒有值。\n");
    return 0;
}

#以上實例輸出結果爲:

請輸入兩個數字:
1 2
1 小於 2 

49.#if #ifdef和#ifndef的綜合應用。

#include<stdio.h>
#define MAX
#define MAXIMUM(x,y)(x>y)?x:y
#define MINIMUM(x,y) (x>y)?y:x
int main()
{
    int a=10,b=20;
#ifdef MAX
    printf("更大的數字是 %d\n",MAXIMUM(a,b));
#else
    printf("更小的數字是 %d\n",MINIMUM(a,b));
#endif
#ifndef MIN
    printf("更小的數字是 %d\n",MINIMUM(a,b));
#else
    printf("更大的數字是 %d\n",MAXIMUM(a,b));
#endif
#undef MAX
#ifdef MAX
    printf("更大的數字是 %d\n",MAXIMUM(a,b));
#else
    printf("更小的數字是 %d\n",MINIMUM(a,b));
#endif
#define MIN
#ifndef MIN
    printf("更小的數字是 %d\n",MINIMUM(a,b));
#else
    printf("更大的數字是 %d\n",MAXIMUM(a,b));
#endif
    return 0;
}

#以上實例輸出結果爲:

更大的數字是 20
更小的數字是 10
更小的數字是 10
更大的數字是 20

50.#include 的應用練習

#include "test.h"  
#include <stdio.h>

int main()
{
    int i=10;
    int j=20;
    if(i LAG j)
        printf("%d 大於 %d \n",i,j);
    else if(i EQ j)
        printf("%d 等於 %d \n",i,j);
    else if(i SMA j)
        printf("%d 小於 %d \n",i,j);
    else
        printf("沒有值。\n");
    return 0;
}

#以上實例輸出結果爲:

10 小於 20 

寫在後面

好了,今天就先分享到這裏了。

喜歡的關注,點個贊!

微信公衆號:興趣路人甲

這裏是引用

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章