《由淺入深學(xué)C語(yǔ)言基礎(chǔ)、進(jìn)階與必做430題》課后習(xí)題參考答案

第1章 第一個(gè)C程序
第2章 C語(yǔ)言基礎(chǔ)
第3章 變量和數(shù)據(jù)類型
第4章 順序結(jié)構(gòu)程序設(shè)計(jì)
第5章 條件結(jié)構(gòu)程序設(shè)計(jì)
第6章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)
第7章 數(shù)組
第8章 指針
第9章 函數(shù)
第10章 結(jié)構(gòu)型、共用型、枚舉型及用戶自定義型數(shù)據(jù)
第12章 文件
第14章 預(yù)處理宏命令

第1章 第一個(gè)C程序

習(xí)題答案

一、選擇題

  1. C

二、填空題

  1. 補(bǔ)全下面的程序,讓其完整。
    #include<stdio.h>
    void main() 
    {
        int a=1;
        printf("%d\n", a);
    }
    

三、編程題

  1. 參照例題,編寫一個(gè)程序輸出如下所示的一個(gè)倒三角形。
    *********************
      *****************
        *************
          *********
            *****
              *
    
    #include<stdio.h>
    
    void main() 
    {
        printf("*********************\n");
        printf("  *****************  \n");
        printf("    *************    \n");
        printf("      *********      \n");
        printf("        *****        \n");
        printf("          *          \n");
    }
    
  2. 從鍵盤輸入一個(gè)數(shù),輸出該數(shù)的相反數(shù)。
    #include<stdio.h>
    
    void main() 
    {
        int x = 0;
        scanf("%d", &x);
        if (x < 0)
        {
            x = -x;
        }
        printf("%d\n", x);
    }
    
  3. 編寫一個(gè)程序,實(shí)現(xiàn)兩個(gè)數(shù)相加并將結(jié)果輸出至屏幕。
    #include<stdio.h>
    
    void main() 
    {
        int x, y, z;
        scanf("%d%d", &x, &y);
        z = x + y;
        printf("%d\n", z);
    }
    
  4. 從鍵盤輸入一個(gè)數(shù),判斷其是否能被 3 和 5 整除,若能整除則輸出“yes”,否則輸出“no”。
    #include<stdio.h>
    
    void main() 
    {
        int x = 0;
        scanf("%d", &x);
        if (x % 3 == 0 && x % 5 == 0)
        {
            printf("yes\n");
        }
        else
        {
            printf("no\n");
        }
    }
    
  5. 從鍵盤輸入一個(gè)數(shù),通過 printf() 函數(shù)輸出該數(shù)的 2 倍數(shù)。
    #include<stdio.h>
    
    void main() 
    {
        int x = 0;
        scanf("%d", &x);
        printf("%d\n", 2 * x);
    }
    
  6. 從鍵盤輸入兩個(gè)數(shù),求這兩個(gè)數(shù)的乘積并輸出至屏幕。
    #include<stdio.h>
    
    void main() 
    {
        int x, y, z;
        scanf("%d%d", &x, &y);
        z = x * y;
        printf("%d\n", z);
    }
    
  7. 編寫一個(gè)程序,判斷一個(gè)數(shù)是否為偶數(shù)。
    #include<stdio.h>
    
    void main() 
    {
        int x = 0;
        scanf("%d", &x);
        if (x % 2 == 0)
        {
            printf("該數(shù)是偶數(shù)\n");
        }
        else
        {
            printf("該數(shù)是奇數(shù)\n");
        }
    }
    

第2章 C語(yǔ)言基礎(chǔ)

C語(yǔ)言特點(diǎn)

  1. 簡(jiǎn)單、方便靈活
    • 9中控制語(yǔ)句
    • 32個(gè)關(guān)鍵字
  2. 運(yùn)算符種類豐富
    • 34種運(yùn)算符
  3. 數(shù)據(jù)結(jié)構(gòu)類型豐富
    • 7種類型
  4. 繪圖功能強(qiáng)大
  5. 結(jié)構(gòu)式語(yǔ)言
  6. 對(duì)語(yǔ)法限制不嚴(yán)格
  7. 生成代碼質(zhì)量高、執(zhí)行效率高
  8. 可移植性好

C程序編譯執(zhí)行過程

  1. 編輯
  2. 編譯
    1. 詞法分析
    2. 語(yǔ)法分析
    3. 語(yǔ)義分析
    4. 中間代碼生成
    5. 中間代碼優(yōu)化
    6. 目標(biāo)代碼生成
  3. 鏈接
  4. 執(zhí)行

習(xí)題答案

一、填空題

  1. 5,6
  2. 4,4
  3. 4,3
  4. 9

二、編程題

  1. 求1~100的和。
    #include<stdio.h>
    
    void main() 
    {
        int sum = 0;
        sum = (float)(1 + 100) / 2 * 100;
        printf("%d\n", sum);
    }
    
  2. 從鍵盤輸入兩個(gè)數(shù),求出這兩個(gè)數(shù)中的小者并將結(jié)果輸出,要求比較操作單獨(dú)編寫一個(gè)函數(shù)。
    #include<stdio.h>
    
    int min(int x, int y) {
        int z;
        if (x > y) {
            z = y;
        }
        else {
            z = x;
        }
        return z;
    }
    
    void main() 
    {
        int x, y;
        int z = 0;
        scanf("%d%d", &x, &y);
        z = min(x, y);
        printf("%d\n", z);
    }
    
  3. 從鍵盤輸入兩個(gè)數(shù),將這兩個(gè)數(shù)交換后輸出。
    #include<stdio.h>
    
    void main() 
    {
        int x, y;
        int z = 0;
        scanf("%d%d", &x, &y);
        z = x;
        x = y;
        y = z;
        printf("%d %d\n", x, y);
    }
    
  4. 從鍵盤輸入一個(gè)數(shù),編寫程序輸出該數(shù)的絕對(duì)值至屏幕。
    #include<stdio.h>
    #include<math.h>
    
    void main() 
    {
        int x;
        scanf("%d", &x);
        printf("%d\n", (int)fabs(x));
    }
    
  5. 編寫程序,從鍵盤輸入兩個(gè)數(shù),求出其中的大者。
    #include<stdio.h>
    
    void main() 
    {
        int x, y;
        int max;
        scanf("%d%d", &x, &y);
        if (x > y)
        {
            max = x;
        } 
        else
        {
            max = y;
        }
        printf("%d\n", max);
    }
    
  6. 編寫程序,求 1~100 中的素?cái)?shù)。
    #include<stdio.h>
    
    void main() 
    {
        for (int i = 1; i < 100; i++)
        {
            int count = 0;
            for (int j = 1; j <= i; j++) {
                if (i % j == 0)
                {
                    count++;
                }
            }
            if (count < 3)
            {
                printf("%d\n", i);
            }
        }
    }
    
  7. 編寫程序,從鍵盤輸入一個(gè)數(shù)并求其階乘值。
    #include<stdio.h>
    
    void main() 
    {
        int x = 0;
        int y = 1;
        scanf("%d", &x);
        for (; x >= 1; x--)
        {
            y *= x;
        }
        printf("%d\n", y);
    }
    
  8. 編寫程序,求 1~100 中所有奇數(shù)的和。
    #include<stdio.h>
    
    void main() 
    {
        int x = 0;
        for (int i = 1; i <= 100; i++)
        {
            if (i % 2 != 0)
            {
                x += i;
            }
        }
        printf("%d\n", x);
    }
    
  9. 編寫程序,要求從鍵盤鍵入n, 求 1/3+2/4+3/5+...+n-2/n的值。
    #include<stdio.h>
    
    void main() 
    {
        int n = 0;
        double sum = 0;
        scanf("%d", &n);
    
        for (int i = 3; i <= n; i++)
        {
            sum += (double)(i - 2) / i;
        }
    
        printf("%lf\n", sum);
    }
    

第3章 變量和數(shù)據(jù)類型

C語(yǔ)言的基本數(shù)據(jù)類型

  • 基本類型
    • 整型
      • 短整型(short)
      • 整型(int)
      • 長(zhǎng)整型(long)
    • 浮點(diǎn)型
      • 單精度浮點(diǎn)(float)
      • 雙精度浮點(diǎn)(double)
    • 字符型(char)
  • 構(gòu)造類型
    • 數(shù)組
    • 結(jié)構(gòu)體(struct)
    • 共用體(union)
    • 枚舉類型(enum)
  • 指針類型
  • 空類型(void)

習(xí)題答案

一、選擇題

  1. B
  2. B
  3. B

二、填空題

  1. (1)10 (2)10 (3)20 (4)0 (5)100
  2. z=0,t=1074087854
    • 備注:一定要用正確的格式控制符輸出對(duì)應(yīng)的數(shù)據(jù)類型,否則會(huì)輸出一個(gè)垃圾值,這是一個(gè)悲傷的故事。。。
  3. 34,40,30,39
  4. 97,98
  5. 7,7
  6. 32,45
  7. 5,14
  8. 6,6
  9. 4,5,5,5
  10. 11,8
  11. 57,9
  12. 2,1,c,g

三、編程題

  1. 從鍵盤輸入 3 個(gè)數(shù),判斷其是否能構(gòu)成直角三角形,若能則輸出該直角三角形的面積,否則輸出不能構(gòu)成三角形的提示信息。
    #include<stdio.h>
    
    void main() 
    {
        double a, b, c; // 三角形的三條邊
        double area = 0;    // 三角形的面積
    
        printf("請(qǐng)輸入三角形的三邊的邊長(zhǎng):");
        scanf("%lf%lf%lf", &a, &b, &c);
    
        // 判斷是否能構(gòu)成直角三角形
        if (a * a + b * b == c * c)
        {
            area = 1.0 / 2 * a * b;
            printf("直角三角形的面積是:%lf\n", area);
        }
        else if (a * a + c * c == b * b)
        {
            area = 1.0 / 2 * a * c;
            printf("直角三角形的面積是:%lf\n", area);
        }
        else if (b * b + c * c == a * a)
        {
            area = 1.0 / 2 * b * c;
            printf("直角三角形的面積是:%lf\n", area);
        }
        else
        {
            printf("不能構(gòu)成直角三角形\n");
        }
    }
    
  2. 編寫一個(gè)程序,輸入一個(gè)華氏溫度,按照公式 C=5/9*(F-32) 輸出攝氏溫度。
    #include<stdio.h>
    
    void main() 
    {
        double f = 0;
        double c = 0;
    
        printf("請(qǐng)輸入華氏溫度值:");
        scanf("%lf", &f);
    
        c = (double)5 / 9 * (f - 32);
        printf("對(duì)應(yīng)的攝氏溫度是:%lf\n", c);
    }
    
  3. 輸入一個(gè)年份,判斷該年是否為閏年,若為閏年則輸出“yes”,否則輸出“no”。
    #include<stdio.h>
    
    void main() 
    {
        int year = 0;
        scanf("%d", &year);
    
        if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) {
            printf("yes\n");
        }
        else
        {
            printf("no\n");
        }
    }
    
  4. 從鍵盤輸入一個(gè)學(xué)生的5門科目成績(jī),計(jì)算其平均值并輸出。
    #include<stdio.h>
    
    void main() 
    {
        int score1 = 0;
        int score2 = 0;
        int score3 = 0;
        int score4 = 0;
        int score5 = 0;
        double average = 0;
    
        printf("請(qǐng)輸入5門課程的成績(jī):");
        scanf("%d%d%d%d%d", &score1, &score2, &score3, &score4, &score5);
    
        average = (double)(score1 + score2 + score3 + score4 + score5) / 5;
    
        printf("平均成績(jī)是:%.2lf\n", average);
    }
    
  5. 從鍵盤輸入3個(gè)數(shù),輸出其中的最大者。
    #include<stdio.h>
    
    void main() 
    {
        int a = 0, b = 0, c = 0;
        int max = 0;
    
        printf("請(qǐng)輸入3個(gè)整數(shù):");
        scanf("%d%d%d", &a, &b, &c);
    
        max = a;
        if (max < b)
        {
            max = b;
        }
        if (max < c)
        {
            max = c;
        }
    
        printf("最大者是:%d\n", max);
    }
    
  6. 從鍵盤輸入3個(gè)數(shù),將其從小到大排序后輸出。
    #include<stdio.h>
    #define ARR_LEN 3
    
    void main() 
    {
        int arr[ARR_LEN] = { 0 };
        int temp = 0;
    
        // 讀入三個(gè)數(shù)
        for (int i = 0; i < ARR_LEN; i++)
        {
            printf("請(qǐng)輸入第%d個(gè)數(shù)的值:", i + 1);
            scanf("%d", &arr[i]);
        }
    
        // 排序
        for (int i = 0; i < ARR_LEN - 1; i++)
        {
            for (int j = 0; j < ARR_LEN - 1 - i; j++)
            {
                if (arr[j] > arr[j + 1])
                {
                    temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
    
        // 輸出結(jié)果
        for (int i = 0; i < ARR_LEN; i++)
        {
            printf("arr[%d] = %d\n", i, arr[i]);
        }
    }
    
  7. 編寫程序,輸出1~1000之間的偶數(shù)。
    #include<stdio.h>
    #define ARR_LEN 3
    
    void main() 
    {
        for (int i = 1; i <= 1000; i++)
        {
            if (i % 2 == 0)
            {
                printf("%4d  ", i);
            }
            // 十個(gè)數(shù)字一行
            if (i % 20 == 0)
            {
                printf("\n");
            }
        }
    }
    
  8. 從鍵盤輸入一串字符,輸出至屏幕。
    #include<stdio.h>
    #define ARR_LEN 3
    
    void main() 
    {
        char arr[100] = "\0";
        scanf("%s", arr);
        printf("%s\n", arr);
    }
    
  9. 編寫一個(gè)程序,輸入半徑,求圓的面積和體積。
    #include<stdio.h>
    #define PI 3.14
    
    void main() 
    {
        double r = 0;
        printf("請(qǐng)輸入圓的半徑:");
        scanf("%lf", &r);
    
        printf("圓的周長(zhǎng):%.2lf\n", 2 * PI * r);
        printf("圓的面積:%.2lf\n", PI * r * r);
    }
    
  10. 從鍵盤輸入兩個(gè)數(shù),對(duì)其進(jìn)行加減乘除操作并將結(jié)果輸出至屏幕。
    #include<stdio.h>
    
    void main() 
    {
        int a = 0;
        int b = 0;
        
        printf("請(qǐng)輸入兩個(gè)整數(shù):");
        scanf("%d%d", &a, &b);
    
        printf("%d + %d = %d\n", a, b, a + b);
        printf("%d - %d = %d\n", a, b, a - b);
        printf("%d * %d = %d\n", a, b, a * b);
        printf("%d / %d = %d\n", a, b, a / b);
    }
    

第4章 順序結(jié)構(gòu)程序設(shè)計(jì)

常用輸入輸出函數(shù)

  • scanf()
  • printf()
  • getchar():用戶輸入的數(shù)據(jù)會(huì)被放入鍵盤緩沖區(qū),當(dāng)按下回車鍵時(shí),系統(tǒng)就會(huì)從緩沖區(qū)中每次讀入一個(gè)字符。
  • putchar()

習(xí)題答案

一、選擇題

  1. A
  2. C
  3. C
  4. B
  5. B
  6. D
  7. A
  8. A
  9. B
  10. C 注意:printf()函數(shù)中的表達(dá)式時(shí)按照從右往左的順序進(jìn)行計(jì)算的。

二、填空題

  1. 0,3
  2. 10
  3. 0
  4. 如下:
    x=35,y=32
    x=#,y= 
    c=104,d=115
    m=0,n=0
    
  5. 5,1
  6. a
  7. 456,78
  8. 80
  9. h,104
  10. a,g
  11. 12,7
  12. a=5,b=5
  13. a,,
  14. e
  15. a,g

三、編程題

  1. 計(jì)算一元二次方程的 x2+4x+1=0 的根,結(jié)果保留兩位小數(shù)。
    #include<stdio.h>
    #include<math.h>
    
    void main() 
    {
        double x1, x2;
    
        x1 = (-4 - sqrt(4 * 4 - 4 * 1 * 1)) / (2 * 1);
        x2 = (-4 + sqrt(4 * 4 - 4 * 1 * 1)) / (2 * 1);
    
        printf("x1 = %.2lf, x2 = %.2lf\n", x1, x2);
    }
    
  2. 已知三角形的三邊,計(jì)算三角形的面積,結(jié)果保留3位小數(shù)。
    #include<stdio.h>
    #include<math.h>
    
    void main() 
    {
        float a = 0.0f;
        float b = 0.0f;
        float c = 0.0f;
        float s = 0.0f;
        float area = 0.0f;
    
        printf("請(qǐng)輸入三角形的三邊:");
        scanf("%f%f%f", &a, &b, &c);
    
        s = (float)1 / 2 * (a + b + c);
        area = (float)sqrt(s * (s-a) * (s - b) * (s - c));
    
        printf("面積位:%.2f\n", area);
    }
    
  3. 已知一個(gè)圓的周長(zhǎng),編寫一個(gè)程序求其面積。要求從鍵盤輸入圓的周長(zhǎng),將計(jì)算得出的面積輸出至屏幕。
    #include<stdio.h>
    #include<math.h>
    
    void main() 
    {
        double length = 0.0;
        double r = 0.0;
        double area = 0.0;
    
        printf("請(qǐng)輸入圓的周長(zhǎng):");
        scanf("%lf", &length);
    
        r = length / 2 / 3.14;
        area = 3.14 * r * r;
    
        printf("面積位:%lf\n", area);
    }
    
  4. 編寫一個(gè)程序,從鍵盤輸入一個(gè)字符,實(shí)現(xiàn)輸出臨近該字符的5個(gè)字符(包括該字符,并以該字符為中心)。
    #include<stdio.h>
    
    void main() 
    {
        char c = '\0';
        c = getchar();
        printf("%c%c%c%c%c\n", c -2, c - 1, c, c + 1, c + 2);
    }
    
  5. 編寫一個(gè)程序,從鍵盤輸入一個(gè)梯形的上底、下底和高,求其面積并將結(jié)果輸出至屏幕。
    #include<stdio.h>
    
    void main() 
    {
        double top_len = 0.0;
        double bottom_len = 0.0;
        double height = 0.0;
        double area = 0.0;
    
        printf("請(qǐng)輸入梯形的上底下底和高:");
        scanf("%lf%lf%lf", &top_len, &bottom_len, &height);
    
        area = (double)1 / 2 * (top_len + bottom_len) * height;
    
        printf("面積為:%.2lf\n", area);
    }
    
  6. 從鍵盤輸入一串字符,從該字符串中統(tǒng)計(jì)字符a的個(gè)數(shù)。
    #include<stdio.h>
    
    void main() 
    {
        int count = 0;
        char c = '\0';
    
        while ((c = getchar()) != '\n') 
        {
            if (c == 'a')
            {
                count++;
            }
        }
    
        printf("字母a出現(xiàn)的次數(shù)為:%d\n", count);
    }
    
  7. 從鍵盤輸入3個(gè)數(shù),編寫一個(gè)程序計(jì)算其總和及平均值。
    #include<stdio.h>
    
    void main() 
    {
        int a = 0;
        int b = 0;
        int c = 0;
        int sum = 0;
        float average = 0.0f;
    
        printf("請(qǐng)輸入三個(gè)整數(shù):");
        scanf("%d%d%d", &a, &b, &c);
    
        sum = a + b + c;
        average = (float)sum / 3;
    
        printf("總和是:%d, 平均值是:%.2f\n", sum , average);
    }
    
  8. 編寫程序?qū)r(shí)間轉(zhuǎn)化為秒后輸出,例如8時(shí)20分45秒轉(zhuǎn)化過程為83600+2060+45。
    #include<stdio.h>
    
    void main() 
    {
        int hour = 0;
        int minute = 0;
        int second = 0;
        int result = 0;
    
        printf("請(qǐng)輸入時(shí)分秒:");
        scanf("%d%d%d", &hour, &minute, &second);
    
        result = hour * 3600 + minute * 60 + second;
    
        printf("等價(jià)于%d秒\n", result);
    }
    
  9. 從鍵盤輸入兩個(gè)數(shù),交換兩個(gè)數(shù)的值,再輸出至屏幕。
    #include<stdio.h>
    
    void main() 
    {
        int a = 0;
        int b = 0;
        int temp = 0;
    
        printf("請(qǐng)輸入兩個(gè)整數(shù):");
        scanf("%d%d", &a, &b);
    
        printf("交換之前的值是:a=%d, b=%d\n", a, b);
    
        temp = a;
        a = b;
        b = temp;
    
        printf("交換后的值是:a=%d, b=%d\n", a, b);
    }
    
  10. 現(xiàn)有函數(shù) y=5x+3,從鍵盤輸入一個(gè)數(shù),輸出對(duì)應(yīng)的 y 值。
    #include<stdio.h>
    
    void main() 
    {
        int x = 0;
        int y = 0;
    
        printf("請(qǐng)輸入x的值:");
        scanf("%d", &x);
    
        y = 5 * x + 3;
    
        printf("y的值是:%d\n", y);
    }
    
  11. 從鍵盤輸入一個(gè)小寫字母,要求將其轉(zhuǎn)換為大寫字母后輸出。
    #include<stdio.h>
    
    void main() 
    {
        char c = '\0';
    
        c = getchar();
    
        if ('a' <= c && c <= 'z')
        {
            c -= 32;
            printf("對(duì)應(yīng)的大寫字母為:%c\n", c);
        }
        else
        {
            printf("輸入不合法\n");
        }
    }
    

第5章 條件結(jié)構(gòu)程序設(shè)計(jì)

分類

  • if-else
  • switch-case

習(xí)題答案

一、選擇題

  1. D
  2. C
  3. C
  4. D
  5. C
  6. D
  7. D
  8. B
  9. B
  10. B
  11. A
  12. B
  13. B
  14. A
  15. C

二、填空題

  1. second
  2. 2,3,2
  3. 1,2
  4. 2
  5. 0,1,1
  6. &x, x > 0, %d, y
  7. a, 1 <= a && a <= 7, case 5, else
  8. 20,30
  9. zerofive
  10. 0
  11. 9或3
  12. 1,1,1
  13. 5
  14. 5
  15. 11
  16. 5
  17. 1
  18. 7
  19. $$16

三、編程題

  1. 輸入三個(gè)數(shù),輸出其中的最大數(shù)和最小數(shù)。
    #include<stdio.h>
    
    void main() 
    {
        int a = 0;
        int b = 0;
        int c = 0;
        int max = 0;
        int min = 0;
    
        printf("請(qǐng)輸入三個(gè)整數(shù):");
        scanf("%d%d%d", &a, &b, &c);
    
        // 計(jì)算最大數(shù)
        max = a;
        if (max < b)
        {
            max = b;
        }
        if (max < c)
        {
            max = c;
        }
    
        // 計(jì)算最小數(shù)
        min = a;
        if (min > b)
        {
            min = b;
        }
        if (min > c)
        {
            min = c;
        }
    
        // 輸出最大數(shù)和最小數(shù)
        printf("最大數(shù)是:%d\n最小數(shù)是:%d\n", max, min);
    }
    
  2. 用*號(hào)輸出字母C的團(tuán)。
    #include<stdio.h>
    
    void main() 
    {
        printf("*****\n");
        printf("*\n");
        printf("*\n");
        printf("*\n");
        printf("*****\n");
    }
    
  3. 某班進(jìn)行學(xué)習(xí)成績(jī)?cè)u(píng)估,若學(xué)習(xí)成績(jī)大于或等于90分的同學(xué)用A表示,60~89分之間的同學(xué)用B表示,60分以下的同學(xué)用C表示。利用條件運(yùn)算符的嵌套來完成此題。
    #include<stdio.h>
    
    void main() 
    {
        int score = 0;
        
        printf("請(qǐng)輸入成績(jī):");
        scanf("%d", &score);
    
        if (score >= 90)
        {
            printf("A");
        }
        else if (score >= 60)
        {
            printf("B");
        }
        else
        {
            printf("C");
        }
    }
    
  4. 輸入一個(gè)年份,判斷該年是否為閏年。
    #include<stdio.h>
    
    void main() 
    {
        int year = 0;
    
        printf("請(qǐng)輸入年份:");
        scanf("%d", &year);
    
        if ((year % 400 == 0) || (year % 4 == 0 && year % 100 != 0))
        {
            printf("%d年是閏年\n", year);
        }
        else
        {
            printf("%d年不是閏年\n", year);
        }
    }
    
  5. 輸入某年某月某日,判斷并輸出這一天是這一年的第幾天。
    #include<stdio.h>
    #include<stdbool.h>
    
    void main() 
    {
        int year = 0;
        int month = 0;
        int day = 0;
        int sum = 0;
        bool flag = false;
    
        printf("請(qǐng)輸入年月日:");
        scanf("%d%d%d", &year, &month, &day);
    
        switch (month)
        {
        case 1:
            sum = 0;
            break;
        case 2:
            sum = 31;
            break;
        case 3:
            sum = 50;
            break;
        case 4:
            sum = 90;
            break;
        case 5:
            sum = 120;
            break;
        case 6:
            sum = 151;
            break;
        case 7:
            sum = 181;
            break;
        case 8:
            sum = 212;
            break;
        case 9:
            sum = 243;
            break;
        case 10:
            sum = 273;
            break;
        case 11:
            sum = 304;
            break;
        case 12:
            sum = 334;
            break;
        default:
            break;
        }
    
        sum += day;
    
        if ((year % 400 == 0) || (year % 4 == 0 && year % 100 != 0))
        {
            flag = true;
        }
    
        if (flag && month > 2)
        {
            sum += 1;
        }
    
        printf("對(duì)應(yīng)的天數(shù)是:%d\n", sum);
    }
    
  6. 輸入一個(gè)數(shù),判斷其為奇數(shù)還是偶數(shù)。
    #include<stdio.h>
    
    int main()
    {
        int a = 0;
    
        printf("請(qǐng)輸入一個(gè)整數(shù):");
        scanf("%d", &a);
    
        // 判斷是否是偶數(shù)
        if (a % 2 == 0)
        {
            printf("%d 是偶數(shù)\n", a);
        }
        else
        {
            printf("%d 是奇數(shù)\n", a);
        }
        return 0;
    }
    
  7. 從鍵盤輸入兩個(gè)數(shù),調(diào)換這兩個(gè)數(shù)的值。
    #include<stdio.h>
    
    int main()
    {
        int a = 0;
        int b = 0;
        int temp = 0;
    
        // 從鍵盤輸入兩個(gè)整數(shù)
        printf("請(qǐng)輸入兩個(gè)整數(shù):");
        scanf("%d%d", &a, &b);
    
        // 輸出交換前的值
        printf("交換前:a=%d, b=%d\n", a, b);
    
        // 交換這兩個(gè)數(shù)
        temp = a;
        a = b;
        b = temp;
    
        // 輸出交換后的結(jié)果
        printf("交換后:a=%d, b=%d\n", a, b);
        return 0;
    }
    
  8. 輸入一個(gè)不超過5位的數(shù)字,求:(1)求其是幾位數(shù);(2)分別輸出這幾位數(shù)字;(3)把這幾位數(shù)分別加1再輸出。
    #include<stdio.h>
    
    int main()
    {
        long a = 0; // 輸入的數(shù)字
        int count = 0; // 數(shù)字的位數(shù)
        long temp = 0;  // 用于保存輸入的數(shù)字的副本
        int i = 0; // 循環(huán)變量
    
        // 輸入一個(gè)不超過5位的數(shù)字
        printf("請(qǐng)輸入一個(gè)不超過5位的整數(shù):");
        scanf("%ld", &a);
    
        // 求該數(shù)是幾位數(shù)并輸出至屏幕
        if (a > 9999)
        {
            count = 5;
        }
        else if (a > 999)
        {
            count = 4;
        }
        else if (a > 99)
        {
            count = 3;
        }
        else if (a > 9)
        {
            count = 2;
        }
        else
        {
            count = 1;
        }
        printf("該數(shù)是%d位數(shù)\n", count);
    
        // 分別輸出各個(gè)位的數(shù)字
        printf("\n該數(shù)的各個(gè)位的數(shù)字是:\n");
        i = count;
        temp = a;
        while (i)
        {
            printf("%d 位數(shù)字是:%d\n", i, temp % 10);
            temp /= 10;
            i--;
        }
        // 各個(gè)位的數(shù)字加1后輸出
        printf("\n該數(shù)的各個(gè)位的數(shù)字加1是:\n");
        i = count;
        temp = a;
        while (i)
        {
            printf("%d 位數(shù)字是:%d\n", i, temp % 10 + 1);
            temp /= 10;
            i--;
        }
    
        return 0;
    }
    
  9. 編寫一個(gè)程序輸入一個(gè)學(xué)生三次的成績(jī),并判斷該學(xué)生三次是否都及格。若不及格則輸出“有不及格科目”,若都及格則輸出三次的平均成績(jī)。
    #include<stdio.h>
    
    int main()
    {
        int a = 0;
        int b = 0;
        int c = 0;
        float average = 0.0f;
    
        // 輸入三門成績(jī)
        printf("請(qǐng)輸入三門課程的成績(jī):");
        scanf("%d%d%d", &a, &b, &c);
    
        // 判斷是否存在不及格的科目
        if (a >= 60 && b >= 60 && c >= 60)
        {
            average = (float)(a + b + c) / 3;
            printf("三門課程的平均分是:%.2f\n", average);
        }
        else
        {
            printf("存在不及格的科目\n");
        }
    
        return 0;
    }
    
  10. 輸出特殊圖案,把下面代碼在C環(huán)境中運(yùn)行看看,Very Beautiful!
    #include<stdio.h>
    
    int main()
    {
        char a = 176, b = 219;
    
        printf("%c%c%c%c%c\n", b, a, a, a, b);
        printf("%c%c%c%c%c\n", a, b, a, b, a);
        printf("%c%c%c%c%c\n", a, a, b, a, a);
        printf("%c%c%c%c%c\n", a, b, a, b, a);
        printf("%c%c%c%c%c\n", b, a, a, a, b);
        return 0;
    }
    

第6章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)

分類

  • for
  • while
  • do-while

習(xí)題答案

一、選擇題

  1. B
  2. B
  3. D
  4. B
  5. B
  6. B
  7. A
  8. B
  9. B
  10. A

二、填空題

  1. 12
  2. main, int, %d
  3. 4,8
  4. 0,3
  5. x >= 0, max < x, %d, %d
  6. 7
  7. 3
  8. 運(yùn)行結(jié)果是:
    *****
    ****
    ***
    **
    *
    
  9. ***27
  10. 1
  11. 6
  12. 1,2
  13. 4
  14. 18
  15. 1.283333
  16. 27
  17. 運(yùn)行結(jié)果為:
    #
    ##
    ###
    
  18. 24

三、編程題

  1. 編寫一個(gè)程序,求出1000以內(nèi)的完全數(shù)。
    #include<stdio.h>
    
    int main()
    {
        int sum = 0; // 存放因子之和
    
        for (int i = 1; i < 1000; i++)
        {
            sum = 0;
            for (int j = 1; j < i; j++)
            {
                if (i % j == 0)
                {
                    sum += j;
                }
            }
            if (sum == i)
            {
                printf("%3d\n", i);
            }
        }
        return 0;
    }
    
  2. 百馬百擔(dān)問題:現(xiàn)有100匹馬,100擔(dān)貨,大馬駝3擔(dān),中馬駝2擔(dān),兩匹小馬駝1擔(dān),問大馬、中馬、小馬各應(yīng)需多少匹。
    #include<stdio.h>
    
    int main()
    {
        for (int i = 0; i <= 33; i++)
        {
            for (int j = 0; j <= 50; j++)
            {
                for (int k = 0; k <= 200; k += 2)
                {
                    if ((i + j + k == 100) && (3 * i + 2 * j + k / 2 == 100))
                    {
                        printf("需大馬%d匹、中馬%d匹、小馬%d匹\n", i, j, k);
                    }
                }
            }
        }
        return 0;
    }
    
  3. 編寫程序求出0~200中能被4整除余3的數(shù)。
    #include<stdio.h>
    
    int main()
    {
        for (int i = 0; i <= 200; i++)
        {
            if (i % 4 == 3)
            {
                printf("%d\n", i);
            }
        }
        return 0;
    }
    
  4. 從鍵盤輸入一個(gè)數(shù)n,求其階乘n!。
    #include<stdio.h>
    
    int main()
    {
        int num = 0;
        int sum = 1;
    
        printf("請(qǐng)輸入一個(gè)整數(shù):");
        scanf("%d", &num);
    
        for (int i = num; i > 1; i--)
        {
            sum *= i;
        }
    
        printf("%d! = %d\n", num, sum);
        return 0;
    }
    
  5. 現(xiàn)有100元,用來買7元、8元、9元的商品,問將100元花完總共有多少種方式。
    #include<stdio.h>
    
    int main()
    {
        int count = 0;
    
        for (int i = 0; i <= 14; i++)
        {
            for (int j = 0; j < 12; j++)
            {
                for (int k = 0; k < 11; k++)
                {
                    if (7 * i + 8 * j + 9 * k == 100)
                    {
                        printf("7元商品%d件、8元商品%d件、9元商品%d件\n", i, j, k);
                        count++;
                    }
                }
            }
        }
        printf("總共有%d種花法\n", count);
        return 0;
    }
    
  6. 猜數(shù)游戲:游戲中隨機(jī)產(chǎn)生一個(gè)1~100之間的數(shù),請(qǐng)用戶猜數(shù)。若10次之內(nèi)猜中則提示成功,若10次之內(nèi)沒有猜中則提示失敗。
    #include<stdio.h>
    #include<stdlib.h>
    #include<time.h>
    #include<stdbool.h>
    
    int main()
    {
        int guess = 0;
        bool flag = false;
        int num = 0;    // 用戶輸入的數(shù)字
    
        srand((unsigned)time(NULL));
        guess = rand() % 101;
    
        for (int i = 0; i < 10; i++)
        {
            printf("猜第 %d 次:", i + 1);
            scanf("%d", &num);
    
            if (num == guess)
            {
                flag = true;
                break;
            }
            else
            {
                printf("哎呀,猜錯(cuò)了,再猜一次吧!\n");
            }
        }
    
        if (flag)
        {
            printf("恭喜您猜對(duì)啦\n");
        }
        else
        {
            printf("您已經(jīng)猜了10次,都沒有猜對(duì)哦\n");
        }
        return 0;
    }
    
  7. 求出100~400中滿足條件的所有數(shù),要求三個(gè)數(shù)字之積為24,三個(gè)數(shù)字之和為12。
    #include<stdio.h>
    
    int main()
    {
        
        for (int i = 100; i <= 400; i++)
        {
            // 計(jì)算各個(gè)位數(shù)字之和
            int sum = i % 10 + i % 100 / 10 + i / 100;
    
            // 計(jì)算各個(gè)位數(shù)字之積
            int temp = (i % 10) * (i % 100 / 10) * (i / 100);
    
            // 判斷是否是要找的數(shù)字
            if (temp == 24 && sum == 12)
            {
                printf("%d\n", i);
            }
        }
        return 0;
    }
    
  8. 從鍵盤輸入20個(gè)數(shù),求出其中正數(shù)的個(gè)數(shù)及其平均值。
    #include<stdio.h>
    
    int main()
    {
        int num = 0; // 每次輸入的數(shù)字
        int count = 0; // 正數(shù)的個(gè)數(shù)
        int sum = 0; // 所有正數(shù)的和
    
        // 輸入20個(gè)數(shù)字
        for (int i = 0; i < 20; i++)
        {
            printf("請(qǐng)輸入第 %d 個(gè)數(shù)字:", i+1);
            scanf("%d", &num);
    
            if (num > 0)
            {
                count++;
                sum += num;
            }
        }
    
        // 求平均數(shù)并輸出
        printf("正數(shù)的個(gè)數(shù)是 %d 個(gè),其平均值是 %.2f\n", count, (float)sum / count);
        return 0;
    }
    
  9. 編寫一個(gè)程序,打印出所有的水仙花數(shù)。
    #include<stdio.h>
    
    int main()
    {
        int a = 0; // 保存?zhèn)€位數(shù)
        int b = 0; // 保存十位數(shù)
        int c = 0; // 保存百位數(shù)
        int d = 0; // 保存各個(gè)位的平方之和
    
        for (int i = 100; i < 1000; i++)
        {
            a = i % 10;
            b = i % 100 / 10;
            c = i / 100;
            d = a * a * a + b * b * b + c * c * c;
            if (d == i)
            {
                printf("%d\n", i);
            }
        }
        return 0;
    }
    
  10. 輸入一串字符,統(tǒng)計(jì)其中的字母、空格、數(shù)字及其他字符的個(gè)數(shù)。
    #include<stdio.h>
    #define STR_LEN 100
    
    int main()
    {
        char str[STR_LEN] = { '\0' };
        int alpha = 0;
        int blank = 0;
        int digit = 0;
        int other = 0;
    
        // 輸入一串字符
        printf("請(qǐng)輸入一個(gè)字符串:\n");
        gets_s(str, STR_LEN);
    
        // 計(jì)算每種類型的字符的個(gè)數(shù)
        for (int i = 0; i < STR_LEN && str[i] != '\0'; i++)
        {
            if (('a' <= str[i] && str[i] <= 'z') || ('A' <= str[i] && str[i] <= 'Z'))
            {
                alpha++;
            }
            else if ('0' <= str[i] && str[i] <= '9')
            {
                digit++;
            }
            else if (str[i] == ' ')
            {
                blank++;
            }
            else
            {
                other++;
            }
        }
    
        // 輸出統(tǒng)計(jì)的結(jié)果
        printf("字母有 %d 個(gè)\n空格有 %d 個(gè)\n數(shù)字有 %d 個(gè)\n其他有 %d 個(gè)\n", alpha, blank, digit, other);
        return 0;
    }
    
  11. 編寫程序,從鍵盤輸入一個(gè)數(shù),判斷是否為素?cái)?shù)并輸出相應(yīng)的信息至屏幕。
    #include<stdio.h>
    #include<stdbool.h>
    
    int main()
    {
        int num = 0;
        bool flag = true;
    
        printf("請(qǐng)輸入一個(gè)整數(shù):");
        scanf("%d", &num);
    
        for (int i = 2; i < num / 2; i++)
        {
            if (num % i == 0)
            {
                flag = false;
            }
        }
    
        if (flag)
        {
            printf("%d是素?cái)?shù)\n", num);
        }
        else
        {
            printf("%d不是素?cái)?shù)\n", num);
        }
        return 0;
    }
    
  12. 編寫程序,打印九九乘法表。
    #include<stdio.h>
    
    int main()
    {
        for (int i = 1; i <= 9; i++)
        {
            for (int j = 1; j <= i; j++)
            {
                printf("%d*%d=%-2d\t", i, j, i * j);
            }
            printf("\n");
        }
        return 0;
    }
    

第7章 數(shù)組

習(xí)題答案

一、選擇題

  1. A
  2. B
  3. C
  4. A
  5. A
  6. B
  7. B
  8. C
  9. A

二、填空題

  1. abcdef
  2. 10101010101010101010
  3. min > a[i], k = i, a[k]
  4. gets(s[i]), strcpy(c, s[i])
  5. 運(yùn)行結(jié)果如下:
    1234
    5678
    9000
    
  6. 6
  7. aceg
  8. 1471013
  9. 02345078
  10. 1-11-11
  11. Hello world!
  12. 80
  13. 運(yùn)行結(jié)果如下:
    第1個(gè)元素為1
    第2個(gè)元素為2
    第3個(gè)元素為3
    第4個(gè)元素為4
    第5個(gè)元素為5
    第6個(gè)元素為6
    第7個(gè)元素為7
    第8個(gè)元素為8
    第9個(gè)元素為9
    第10個(gè)元素為10
    

三、編程題

  1. 設(shè)有以下10個(gè)數(shù)(4,2,7,8,9,10,11,24,5,6),編寫程序用選擇排序法使這10個(gè)數(shù)按升序排序,并輸出排序后的結(jié)果。
    #include<stdio.h>
    
    int main()
    {
        int num[10] = { 4, 2, 7, 8, 9, 10, 11, 24, 5, 6 };
        int k = 0;
        int temp = 0;
    
        for (int i = 0; i < 9; i++)
        {
            k = i;
            for (int j = i + 1; j < 10; j++)
            {
                if (num[i] > num[j])
                {
                    k = j;
                }
            }
            if (k != i)
            {
                temp = num[i];
                num[i] = num[k];
                num[k] = temp;
            }
        }
    
        for (int i = 0; i < 10; i++)
        {
            printf("%3d", num[i]);
        }
        printf("\n");
    
        return 0;
    }
    
  2. 從鍵盤輸入30個(gè)整數(shù),統(tǒng)計(jì)并輸出這些數(shù)字中正數(shù)的個(gè)數(shù)。
    #include<stdio.h>
    #define STR_LEN 30
    
    int main()
    {
        int num[STR_LEN] = { 0 };
        int count = 0;
    
        // 從鍵盤輸入數(shù)據(jù)
        for (int i = 0; i < STR_LEN; i++)
        {
            scanf("%d", &num[i]);
        }
    
        for (int i = 0; i < STR_LEN; i++)
        {
            if (num[i] > 0)
            {
                count++;
            }
        }
    
        printf("正數(shù)的個(gè)數(shù)是%d\n", count);
        return 0;
    }
    
  3. 從鍵盤輸入一個(gè)字符串,編寫一個(gè)程序?qū)崿F(xiàn)從鍵盤輸入一個(gè)數(shù),可刪除字符串該位置上的字符并輸出改變后的字符串。
    #include<stdio.h>
    #define STR_LEN 100
    
    int main()
    {
        char str[STR_LEN] = { '\0 ' };
        int position = 0;
    
        printf("請(qǐng)輸入一個(gè)字符串:\n");
        gets(str, STR_LEN);
    
        printf("請(qǐng)輸入一個(gè)整數(shù):\n");
        scanf("%d", &position);
    
        // 刪除制定位置的字符
        for (int i = position - 1; i < STR_LEN - 1; i++)
        {
            str[i] = str[i + 1];
        }
    
        // 輸出結(jié)果
        puts(str);
        return 0;
    }
    
  4. 編寫一個(gè)程序,實(shí)現(xiàn)從鍵盤輸入10個(gè)整數(shù),將其逆序輸出。
    #include<stdio.h>
    #define ARR_LEN 10
    
    int main()
    {
        int num[ARR_LEN] = { 0 };
    
        // 從鍵盤輸入ARR_LEN個(gè)數(shù)字
        for (int i = 0; i < ARR_LEN; i++)
        {
            printf("請(qǐng)輸入第%d個(gè)數(shù)字:", i + 1);
            scanf("%d", &num[i]);
        }
    
        // 逆序輸出
        for (int i = ARR_LEN - 1; i >= 0; i--)
        {
            printf("%d  ", num[i]);
        }
        printf("\n");
        return 0;
    }
    
  5. 現(xiàn)有一個(gè)長(zhǎng)度為4X5的二維數(shù)組,要求將該數(shù)組的行和列元素互換,保存至另外一個(gè)數(shù)組中,并輸出交換后的結(jié)果。
    #include<stdio.h>
    
    int main()
    {
        int num[4][5] = {
            {1, 2, 3, 4, 5},
            {6, 7, 8, 9, 10},
            {11, 12, 13, 14, 15},
            {16, 17, 18, 19, 20}
        };
        int result[5][4] = { 0 };
    
        // 行列元素互換保存到另一個(gè)數(shù)組里
        for (int i = 0; i < 4; i++)
        {
            for (int j = 0; j < 5; j++)
            {
                result[j][i] = num[i][j];
            }
        }
    
        // 輸出結(jié)果
        for (int i = 0; i < 5; i++)
        {
            for (int j = 0; j < 4; j++)
            {
                printf("%4d", result[i][j]);
            }
            printf("\n");
        }
        printf("\n");
    
        return 0;
    }
    
  6. 編寫一個(gè)程序,實(shí)現(xiàn)兩個(gè)字符串的合并。
    #include<stdio.h>
    
    int main()
    {
        char str1[50] = "hello world!";
        char str2[50] = " hello code!";
        char result[100] = "";
        int i = 0;
    
        for (int j = 0; str1[j] != '\0'; i++, j++)
        {
            result[i] = str1[j];
        }
        for (int j = 0; str2[j] != '\0'; i++, j++)
        {
            result[i] = str2[j];
        }
        result[i] = '\0';
    
        puts(result);
        return 0;
    }
    
  7. 編寫一個(gè)程序,將字符串倒序并輸出至屏幕。
    #include<stdio.h>
    #include<string.h>
    
    int main()
    {
        char str[100] = "";
    
        // 從鍵盤輸入字符串
        gets(str, 100);
    
        // 倒序輸出
        for (int i = strlen(str) - 1; i >= 0; i--)
        {
            putchar(str[i]);
        }
        putchar('\n');
    
        return 0;
    }
    
  8. 從鍵盤輸入10個(gè)數(shù)據(jù),利用冒泡排序法對(duì)其從小到大排序后輸出至屏幕。
    #include<stdio.h>
    
    int main()
    {
        int num[10] = { 0 };
        int temp = 0;
    
        // 從鍵盤輸入10個(gè)整數(shù)
        for (int i = 0; i < 10; i++)
        {
            printf("請(qǐng)輸入第%d個(gè)整數(shù):", i + 1);
            scanf("%d", &num[i]);
        }
    
        // 冒泡排序(從小到大)
        for (int i = 0; i < 10; i++)
        {
            for (int j = 0; j < 9 - i; j++)
            {
                if (num[j] > num[j + 1])
                {
                    temp = num[j];
                    num[j] = num[j + 1];
                    num[j + 1] = temp;
                }
            }
        }
    
        // 輸出至屏幕
        for (int i = 0; i < 10; i++)
        {
            printf("%d  ", num[i]);
        }
        printf("\n");
    
        return 0;
    }
    
  9. 從鍵盤輸入一串字符,以#為結(jié)束標(biāo)志,統(tǒng)計(jì)其中字符的個(gè)數(shù)。
    #include<stdio.h>
    
    int main()
    {
        char str[100] = "";
        int count = 0;
    
        // 從鍵盤輸入一個(gè)字符串
        printf("請(qǐng)輸入一個(gè)字符串:\n");
        gets(str, 100);
    
        // 統(tǒng)計(jì)#前面的字符的個(gè)數(shù)
        for (int i = 0; str[i] != '#' && str[i] != '\0'; i++)
        {
            count++;
        }
    
        // 輸出結(jié)果
        printf("字符個(gè)數(shù)為:%d\n", count);
        return 0;
    }
    
  10. 現(xiàn)有一個(gè)字符串,刪除特定位置上的字符串,輸出至屏幕。
    #include<stdio.h>
    #include<string.h>
    
    int main()
    {
        char str[100] = "Hello World! Hello Beijing!";
        int position = 3;
        char *p = NULL;
    
        p = str;
        strcpy((p + 2), (p + 3));
    
        printf("%s\n", str);
    
        return 0;
    }
    

第8章 指針

習(xí)題答案

一、選擇題

  1. C
  2. D
  3. B
  4. D
  5. C
  6. B
  7. B
  8. B
  9. B
  10. B
  11. B
  12. C
  13. B
  14. B
  15. A

二、填空題

  1. 3
  2. a,b
  3. Hello, happy
  4. abcdshkg
  5. s, %s, *p++
  6. 1 2 3 4 5 6
  7. 4
  8. He
  9. 1 4 7 10 13 16 19 22
  10. 7
  11. 6,8,9
  12. 45
  13. C LanguageP
  14. 5,6

三、編程題

  1. 編寫一個(gè)函數(shù),實(shí)現(xiàn)字符串的復(fù)制功能。
    #include<stdio.h>
    #define ARR_LEN 100
    
    int main()
    {
        char str1[ARR_LEN] = "hello world!";
        char str2[ARR_LEN] = "hello c program.";
        char *p1 = NULL;
        char *p2 = NULL;
    
        p1 = str1;
        p2 = str2;
    
        while (*p2)
        {
            *p1 = *p2;
            p1++;
            p2++;
        }
        *p1 = '\0';
    
        printf("str1 = %s\n", str1);
    
        return 0;
    }
    
  2. 從鍵盤輸入5個(gè)字符串,對(duì)這5個(gè)字符串從小到大排列并輸出排列結(jié)果。
    #include<stdio.h>
    #include<string.h>
    #define STR_LEN 100
    
    int main()
    {
        char s[5][STR_LEN] = { '\0' };
        char *str[5] = { NULL };
        char *p = NULL;
    
        // 從鍵盤輸入5個(gè)字符串
        for (int i = 0; i < 5; i++)
        {
            gets(s[i], STR_LEN);
            str[i] = s[i];
        }
    
        // 排序
        for (int i = 0; i < 4; i++)
        {
            for (int j = i + 1; j < 5; j++)
            {
                if (strcmp(str[i], str[j]) > 0)
                {
                    p = str[i];
                    str[i] = str[j];
                    str[j] = p;
                }
            }
        }
    
        // 輸出排序后的結(jié)果
        for (int i = 0; i < 5; i++)
        {
            puts(str[i]);
        }
        
        return 0;
    }
    
  3. 編寫一個(gè)函數(shù),通過指針實(shí)現(xiàn)兩個(gè)數(shù)的交換。
    #include<stdio.h>
    
    void swap(int *pa, int *pb)
    {
        int temp = 0;
        temp = *pa;
        *pa = *pb;
        *pb = temp;
    }
    
    int main()
    {
        int a = 3;
        int b = 5;
        int *pa = &a;
        int *pb = &b;
        void(*pswap)() = swap;
    
        // 交換之前
        printf("交換之前 a=%d, b=%d\n", a, b);
    
        // 交換
        pswap(pa, pb);
    
        // 交換之后
        printf("交換之后 a=%d, b=%d\n", a, b);
    
        return 0;
    }
    
  4. 從鍵盤輸入一個(gè)字符串,分別統(tǒng)計(jì)字符串中字母、數(shù)字及其他字符的個(gè)數(shù)并輸出。
    #include<stdio.h>
    
    int main()
    {
        char str[100] = { '\0' };
        char *p = str;
        int alpha = 0;
        int digit = 0;
        int other = 0;
    
        // 從鍵盤上輸入一個(gè)字符串
        gets(p, 100);
    
        // 統(tǒng)計(jì)字符個(gè)數(shù)
        while (*p)
        {
            if ('0' <= *p && *p <= '9')
            {
                digit++;
            }
            else if (('a' <= *p && *p <= 'z') || ('A' <= *p && *p <= 'Z'))
            {
                alpha++;
            }
            else
            {
                other++;
            }
            p++;
        }
    
        // 輸出統(tǒng)計(jì)結(jié)果
        printf("字母有%d個(gè),數(shù)字有%d個(gè),其他有%d個(gè)\n", alpha, digit, other);
    
        return 0;
    }
    
  5. 從鍵盤輸入一個(gè)字符串和一個(gè)數(shù)字n,要求從字符串第n個(gè)字符開始至字符串的末尾重新組成一個(gè)字符串輸出。
    #include<stdio.h>
    
    int main()
    {
        char str[100] = { '\0' };
        char str2[100] = { '\0' };
        char *p = NULL;
        char *p2 = NULL;
        int n = 0;
    
        // 從鍵盤上輸入一個(gè)字符串
        gets(str, 100);
        scanf("%d", &n);
    
        p = str;
        p += n - 1;
        p2 = str2;
        while (*p2++ = *p++)
        {
            ;
        }
        
        // 輸出結(jié)果
        puts(str2);
    
        return 0;
    }
    
  6. 編寫一個(gè)程序,要求利用指針求任意數(shù)據(jù)的絕對(duì)值。
    #include<stdio.h>
    
    int main()
    {
        int num = 0;
        int *p = NULL;
    
        // 從鍵盤輸入一個(gè)整數(shù)
        printf("請(qǐng)輸入一個(gè)整數(shù):");
        scanf("%d", &num);
    
        // 求num的絕對(duì)值
        p = #
        if (*p < 0)
        {
            *p = -*p;
        }
    
        // 輸出num的絕對(duì)值
        printf("%d\n", *p);
    
        return 0;
    }
    
  7. 從鍵盤輸入10個(gè)數(shù)至數(shù)組中,然后將其中的元素進(jìn)行逆序存放后輸出。
    #include<stdio.h>
    #define ARR_LEN 10
    
    int main()
    {
        int num[ARR_LEN] = { 0 };
        int num_other[ARR_LEN] = { 0 };
        int *p1 = NULL;
        int *p2 = NULL;
    
        // 從鍵盤輸入ARR_LEN個(gè)數(shù)字
        for (int i = 0; i < ARR_LEN; i++)
        {
            printf("請(qǐng)輸入第 %2d 個(gè)數(shù):", i + 1);
            scanf("%d", &num[i]);
        }
    
        // 逆序存入另一個(gè)數(shù)組
        p1 = num;
        p2 = num_other;
    
        for (int i = 0; i < ARR_LEN; i++)
        {
            *(p2 + ARR_LEN - 1 - i) = *(p1 + i);
        }
    
        // 輸出逆序后的數(shù)組
        for (int i = 0; i < ARR_LEN; i++)
        {
            printf("%d ", *(p2 + i));
        }
    
        return 0;
    }
    
  8. 從鍵盤輸入一個(gè)字符串,將其逆序輸出。
    #include<stdio.h>
    #include<string.h>
    #define ARR_LEN 100
    
    int main()
    {
        char str[ARR_LEN] = { '\0' };
        char *p = NULL;
    
        // 從鍵盤輸入一個(gè)字符串
        gets(str, ARR_LEN);
    
        // 逆序輸出
        p = str;
        p += strlen(str) - 1;
        for (int i = 0; i < strlen(str); i++)
        {
            putchar(*p);
            p--;
        }
    
        return 0;
    }
    
  9. 從鍵盤輸入兩個(gè)字符串s1和s2,將s2連接至s1后輸出。
    #include<stdio.h>
    #include<string.h>
    #define ARR_LEN 100
    
    int main()
    {
        char s1[ARR_LEN] = { '\0' };
        char s2[ARR_LEN] = { '\0' };
        char *p1 = NULL;
        char *p2 = NULL;
    
        // 從鍵盤輸入連個(gè)字符串
        gets(s1, ARR_LEN);
        gets(s2, ARR_LEN);
    
        // 連接字符串
        p1 = s1;
        p2 = s2;
        while (*p1)
        {
            p1++;
        }
        while (*p1 = *p2)
        {
            p1++;
            p2++;
        }
        *p1 = '\0';
    
        // 輸出連接后的字符串
        puts(s1);
    
        return 0;
    }
    
  10. 從鍵盤輸入兩個(gè)字符串,編寫一個(gè)程序拍段兩個(gè)字符串是否相等。
    #include<stdio.h>
    #include<stdbool.h>
    #define ARR_LEN 100
    
    int main()
    {
        char s1[ARR_LEN] = { '\0' };
        char s2[ARR_LEN] = { '\0' };
        char *p1 = NULL;
        char *p2 = NULL;
    
        // 從鍵盤輸入兩個(gè)字符串
        gets(s1, ARR_LEN);
        gets(s2, ARR_LEN);
    
        // 比較字符串
        p1 = s1;
        p2 = s2;
        while (true)
        {
            if (*p1 > *p2)
            {
                printf("s1 > s2\n");
                break;
            }
            else if (*p1 < *p2)
            {
                printf("s1 < s2\n");
            }
            else
            {
                p1++;
                p2++;
                continue;
            }
        }
    
        return 0;
    }
    

第9章 函數(shù)

習(xí)題答案

一、選擇題

  1. B
  2. B
  3. D
  4. A
  5. D
  6. B
  7. A

二、填空題

  1. 10
  2. 10,20
  3. 運(yùn)行結(jié)果如下:
    1, 2, 3, 4, 
    6, 7, 8, 9, 6, 7, 8, 9, 
    
  4. 246
  5. 1,2
  6. 1346869105
  7. 10,20,30,40
  8. 6,1
  9. -5,5
  10. 7,3,11
  11. 8
  12. 3,9
  13. 5,5
  14. 23456
  15. gggggggh

三、編程題

  1. 編寫一個(gè)函數(shù),從鍵盤輸入一個(gè)字符串,將其反序輸出。
    #include <stdio.h>
    #include<string.h>
    
    int reverse(char str[])
    {
        int len = strlen(str);
        for (int i = len - 1; i >= 0; i--)
        {
            printf("%c", str[i]);
        }
        printf("\n");
    }
    
    int main()
    {
        char str[100] = "";
        printf("請(qǐng)輸入一個(gè)字符串:\n");
        gets(str, 100);
        reverse(str);
        return 0;
    }
    
  2. 從鍵盤輸入一個(gè)數(shù)n,求1+2+3+...+n的值,要求用遞歸的方式求解。
#include<stdio.h>

int iterate(int n)
{
    if (n == 1)
    {
        return 1;
    }
    else
    {
        return n + iterate(n - 1);
    }
}

int main()
{
    int n = 0;
    
    printf("請(qǐng)輸入一個(gè)整數(shù):");
    scanf("%d", &n);
    
    printf("值為:%d\n", iterate(n));
    
    return 0;
}
  1. 從鍵盤輸入一個(gè)字符串,要求從該字符串的第n個(gè)位置開始至末位組成一個(gè)新的字符串并將結(jié)果輸出至屏幕。
    #include<stdio.h>
    
    int main()
    {
        char str[100] = "";
        int n = 0;
        char *p = NULL;
        
        scanf("%s", str);
        scanf("%d", &n);
        
        p = str;
        p += n - 1;
        printf("%s\n", p);
        
        return 0;
    }
    
  2. 從鍵盤輸入一個(gè)字符串,統(tǒng)計(jì)其中字母的個(gè)數(shù)。
    #include<stdio.h>
    
    int count(char *p)
    {
        int n = 0;
        while (*p)
        {
            if (('a' <= *p && *p <= 'z') || ('A' <= *p && *p <= 'Z'))
            {
                n++;
            }
            p++;
        }
        return n;
    }
    
    int main()
    {
        char str[100] = "";
        
        gets(str);
        
        printf("%d\n", count(str));
        
        return 0;
    }
    
    
  3. 編寫一個(gè)函數(shù),判斷一個(gè)數(shù)是否為素?cái)?shù)。
    #include<stdio.h>
    #include<stdbool.h>
    
    bool sushu(char num)
    {
        bool flag = true;
        
        for (int i = 2; i <= num / 2; i++)
        {
            if (num % 2 == 0)
            {
                flag = false;
            }
        }
        return flag;
    }
    
    int main()
    {
        int n = 0;
        
        printf("請(qǐng)輸入一個(gè)整數(shù):");
        scanf("%d", &n);
        
        printf("%d %s是素?cái)?shù)\n", n, sushu(n) ? "" : "不");
        
        return 0;
    }
    
  4. 從鍵盤輸入多個(gè)字符串,編寫一個(gè)函數(shù)對(duì)這些字符串從大到小排序,并輸出排序結(jié)果。
    #include<stdio.h>
    #include<string.h>
    
    void sort(char *p[])
    {
        char *temp = NULL;
        
        for (int i = 0; i < 4; i++)
        {
            for (int j = i + 1; j < 5; j++)
            {
                if (strcmp(p[i], p[j]) < 0)
                {
                    temp = p[i];
                    p[i] = p[j];
                    p[j] = temp;
                }
            }
        }
        
        for (int i = 0; i < 5; i++)
        {
            printf("%s\n", p[i]);
        }
    }
    
    int main()
    {
        char str[5][100] = { "" };
        char *p[5] = { NULL };
        
        for (int i = 0; i < 5; i++)
        {
            gets(str[i]);
            p[i] = str[i];
        }
        
        sort(p);
        
        return 0;
    }
    
  5. 編寫一個(gè)程序,求1!+2!+3!+4!的值。
    #include<stdio.h>
    
    int sum(int n)
    {
        int a = 1;
        int sum = 0;
        
        for (int i = 1; i <= n; i++)
        {
            a *= i;
            sum += a;
        }
        
        return sum;
    }
    
    int main()
    {
        int n = 4;
        
        printf("%d\n", sum(n));
    
        return 0;
    }
    
  6. 編寫一個(gè)函數(shù),判斷一個(gè)字母是否為小寫字母,若為小寫字母則轉(zhuǎn)化成大寫字母后輸出。
    #include<stdio.h>
    
    char touppercase(char c)
    {
        if ('a' <= c && c <= 'z')
        {
            c -= 32;
        }
        
        return c;
    }
    
    int main()
    {
        char c = 'a';
        
        printf("%c\n", touppercase(c));
    
        return 0;
    }
    
  7. 編寫一個(gè)函數(shù),將字符串逆序輸出至屏幕。
    #include<stdio.h>
    #include<string.h>
    
    void fun(char *p)
    {
        for (int i = (int)strlen(p) - 1; i >= 0; i--)
        {
            printf("%c", *(p + i));
        }
        printf("\n");
    }
    
    int main()
    {
        char str[100] = "Hello World!";
        
        fun(str);
        
        return 0;
    }
    
  8. 編寫一個(gè)函數(shù),實(shí)現(xiàn)字符串的連接功能。
    #include<stdio.h>
    #include<string.h>
    
    void fun(char *str1, char *str2)
    {
        char *temp = NULL;
        temp = str1;
        
        while (*str1)
        {
            str1++;
        }
        while ((*str1 = *str2))
        {
            str1++;
            str2++;
        }
        *str1 = '\0';
        
        printf("%s\n", temp);
    }
    
    int main()
    {
        char str1[100] = "Hello World!";
        char str2[100] = " Hello C!";
        
        fun(str1, str2);
        
        return 0;
    }
    

第10章 結(jié)構(gòu)型、共用型、枚舉型及用戶自定義型數(shù)據(jù)

結(jié)構(gòu)體類型

  • 定義
    struct 結(jié)構(gòu)體名
    {
        結(jié)構(gòu)體成員
    };
    
  • 引用
    結(jié)構(gòu)體變量名.成員名;
    

結(jié)構(gòu)指針

  • 定義
    struct 結(jié)構(gòu)體類型 *指針名;
    
  • 引用
    (*指針名).成員名;
    指針名->成員名;
    

共用體

  • 定義
    union 共用體名
    {
        成員表
    };
    

枚舉型

  • 定義
    enum 枚舉類型名 {枚舉元素表};
    

用戶自定義類型

  • 定義
    typedef 類型名 標(biāo)識(shí)名;
    

習(xí)題答案

一、填空題

  1. D
  2. C
  3. D
  4. A
  5. A
  6. B
  7. A
  8. B
  9. B
  10. 262

二、填空題

  1. 9
  2. 8
  3. abcdef
  4. 3,8
  5. 17
  6. 16
  7. W
  8. 5,6,0
  9. 1,3,5,7,9,11,13,15,17,19,
  10. 8
  11. 0,1,2,3
  12. 4
  13. yangwu,90
  14. 運(yùn)行結(jié)果如下:
    5,89.5
    8,91.7
    
  15. 20,Marry10,Marry

三、編程題

  1. 編寫一個(gè)程序,用來記錄一個(gè)學(xué)生的信息。
    #include <stdio.h>
    
    int main()
    {
        struct student
        {
            char name[10];  // 姓名
            int num;    // 學(xué)號(hào)
            int age;    // 年齡
            char sex;   // 性別
            int score;  // 成績(jī)
        };
        struct student stu;
    
        printf("請(qǐng)輸入學(xué)生的信息:");
        scanf("%s %d %d %c %d", stu.name, &stu.num, &stu.age, &stu.sex, &stu.score);
    
        printf("%s, %d, %d, %c, %d\n", stu.name, stu.num, stu.age, stu.sex, stu.score);
    
        return 0;
    }
    
  2. 現(xiàn)有5名學(xué)生,要求編寫程序從鍵盤輸入這5名學(xué)生的信息,其中包括學(xué)號(hào)、姓名、性別、成績(jī)等信息,再將其輸出。
    #include <stdio.h>
    
    int main()
    {
        struct student
        {
            char name[10];  // 姓名
            int num;    // 學(xué)號(hào)
            int age;    // 年齡
            char sex;   // 性別
            int score;  // 成績(jī)
        };
        struct student stu[5];
    
        printf("請(qǐng)輸入學(xué)生的信息:\n");
        for (int i = 0; i < 5; i++)
        {
            printf("str[%d] -> ", i);
            scanf("%s %d %d %c %d", stu[i].name, &stu[i].num, &stu[i].age, &stu[i].sex, &stu[i].score);
        }
    
        for (int i = 0; i < 5; i++)
        {
            printf("str[%d] -> ", i);
            printf("%s, %d, %d, %c, %d\n", stu[i].name, stu[i].num, stu[i].age, stu[i].sex, stu[i].score);
        }
    
        return 0;
    }
    
  3. 編寫程序,利用結(jié)構(gòu)體輸入若干個(gè)學(xué)生的信息,將其寫至文件中。
    #include <stdio.h>
    
    int main()
    {
        struct student
        {
            char name[10];  // 姓名
            int num;    // 學(xué)號(hào)
            int age;    // 年齡
            char sex;   // 性別
            int score;  // 成績(jī)
        };
        struct student stu[5];
        FILE *fp = NULL;
    
        printf("請(qǐng)輸入學(xué)生的信息:\n");
        for (int i = 0; i < 5; i++)
        {
            printf("str[%d] -> ", i);
            scanf("%s %d %d %c %d", stu[i].name, &stu[i].num, &stu[i].age, &stu[i].sex, &stu[i].score);
        }
        fp = fopen("students.txt", "w");
        fwrite(stu, sizeof(struct student), 5, fp);
        fclose(fp);
        return 0;
    }
    
  4. 創(chuàng)建一個(gè)鏈表,輸入若干個(gè)學(xué)生的信息,其中包括學(xué)號(hào)、姓名、成績(jī),將結(jié)果輸出至屏幕。
    #include <stdio.h>
    #include <stdlib.h>
    
    struct student
    {
        int num; // 學(xué)號(hào)
        char name[20]; // 姓名
        int score; // 成績(jī)
        struct student *next;
    };
    
    int main()
    {
        int n = 0; // 學(xué)生的數(shù)量
        struct student *head = NULL;
        struct student *tail = NULL;
        struct student *temp = NULL;
        
        printf("請(qǐng)輸入學(xué)生的數(shù)量:");
        scanf("%d", &n);
        
        for (int i = 0; i < n; i++)
        {
            temp = malloc(sizeof(struct student));
            
            printf("請(qǐng)輸入第 %d 個(gè)學(xué)生的信息:\n", i + 1);
            scanf("%d%s%d", &temp->num, temp->name, &temp->score);
            
            if (i == 0)
            {
                head = temp;
                tail = temp;
                tail->next = NULL;
            }
            else
            {
                temp->next = NULL;
                tail->next = temp;
                tail = temp;
            }
        }
        
        temp = head;
        while (temp)
        {
            printf("%d, %s, %d\n", temp->num, temp->name, temp->score);
            temp = temp->next;
        }
        
        return 0;
    }
    
  5. 編寫一個(gè)函數(shù),在鏈表的任意位置上插入一個(gè)結(jié)點(diǎn)。
    /* 在第4題基礎(chǔ)上增加了插入功能 */
    #include <stdio.h>
    #include <stdlib.h>
    
    struct student
    {
        int num; // 學(xué)號(hào)
        char name[20]; // 姓名
        int score; // 成績(jī)
        struct student *next;
    };
    
    void print_stu(struct student *stu)
    {
        struct student *temp = NULL;
        temp = stu;
        while (temp)
        {
            printf("%d, %s, %d\n", temp->num, temp->name, temp->score);
            temp = temp->next;
        }
    }
    
    int main()
    {
        int n = 0; // 學(xué)生的數(shù)量
        int p = 1; // 在某一位置之后插入節(jié)點(diǎn)(編號(hào)從1開始)
        int i = 0; // 計(jì)數(shù)器
        struct student *head = NULL;
        struct student *tail = NULL;
        struct student *temp = NULL;
        struct student *temp2 = NULL;
        
        printf("請(qǐng)輸入學(xué)生的數(shù)量:");
        scanf("%d", &n);
        
        for (int i = 0; i < n; i++)
        {
            temp = malloc(sizeof(struct student));
            
            printf("請(qǐng)輸入第 %d 個(gè)學(xué)生的信息:\n", i + 1);
            scanf("%d%s%d", &temp->num, temp->name, &temp->score);
            
            if (i == 0)
            {
                head = temp;
                tail = temp;
                tail->next = NULL;
            }
            else
            {
                temp->next = NULL;
                tail->next = temp;
                tail = temp;
            }
        }
        
        print_stu(head);
        
        // 在第p個(gè)位置之后插入節(jié)點(diǎn)
        printf("\n請(qǐng)輸入位置:");
        scanf("%d", &p);
        
        i = 1;
        temp = head;
        
        while (temp)
        {
            if (i == p)
            {
                temp2 = malloc(sizeof(struct student));
                printf("請(qǐng)輸入學(xué)生的信息:\n");
                scanf("%d%s%d", &temp2->num, temp2->name, &temp2->score);
                temp2->next = temp->next;
                temp->next = temp2;
                break;
            }
            temp = temp->next;
            i++;
        }
        
        print_stu(head);
    
        return 0;
    }
    
  6. 編寫一個(gè)程序,打印出5名學(xué)生的信息至屏幕,要求輸出單獨(dú)編寫成一個(gè)函數(shù)。
    #include <stdio.h>
    
    struct student
    {
        char name[10];  // 姓名
        int num;    // 學(xué)號(hào)
        int age;    // 年齡
        char sex;   // 性別
        int score;  // 成績(jī)
    };
    
    void print_stu(struct student stu)
    {
        printf("%s, %d, %d, %c, %d\n", stu.name, stu.num, stu.age, stu.sex, stu.score);
    }
    
    int main()
    {
        struct student stu[5];
    
        printf("請(qǐng)輸入學(xué)生的信息:\n");
        for (int i = 0; i < 5; i++)
        {
            printf("str[%d] -> ", i);
            scanf("%s %d %d %c %d", stu[i].name, &stu[i].num, &stu[i].age, &stu[i].sex, &stu[i].score);
        }
    
        for (int i = 0; i < 5; i++)
        {
            printf("str[%d] -> ", i);
            print_stu(stu[i]);
        }
    
        return 0;
    }
    

第12章 文件

文件

  • 文件指針
    FILE *指針名;
    
  • 打開文件
    fopen(文件名, 打開方式);
    
  • 關(guān)閉文件
    fclose(文件指針名);
    
  • 文件讀寫函數(shù)
    fputc();
    fgetc();
    fread();
    fwrite();
    fprintf();
    fscanf();
    
  • 文件定位函數(shù)
    feof();
    rewind();
    fseek();
    ftell();
    
  • 出錯(cuò)檢查函數(shù)
    ferror();
    clearerr();
    

習(xí)題答案

一、選擇題

  1. C
  2. C
  3. D
  4. A
  5. D
  6. C
  7. C
  8. B

二、填空題

  1. ajig
  2. abcd
  3. abcdef
  4. Hello 15
  5. Beijing shanghai tianjin
  6. 0123456789
  7. 7
  8. 運(yùn)行結(jié)果如下:
    Lili,89
    Wangming,90
    Yanghua,78
    Zhangxiao,88
    
  9. abcsade
  10. aajkcnal

三、編程題

  1. 編寫程序,將磁盤文件中的內(nèi)容顯示在屏幕上。
    #include <stdio.h>
    
    int main()
    {
        FILE *fp = NULL;
        fp = fopen("test.txt", "r");
        if (fp == NULL)
        {
            printf("打開文件失敗\n");
            return 1;
        }
        while (!feof(fp))
        {
            putchar(fgetc(fp));
        }
        printf("\n");
    
        fclose(fp);
        return 0;
    }
    
  2. 編寫一個(gè)程序,由鍵盤輸入5個(gè)學(xué)生的信息,并將數(shù)據(jù)保存在名為student.txt的文本文件中。
    #include <stdio.h>
    
    struct student
    {
        char name[20];
        int score;
    };
    
    int main()
    {
        struct student stu[5];
        FILE *fp = NULL;
        fp = fopen("student.txt", "w");
        if (fp == NULL)
        {
            printf("打開文件失敗\n");
            return 1;
        }
    
        // 從鍵盤上輸入5個(gè)學(xué)生的信息
        for (int i = 0; i < 5; i++)
        {
            scanf("%s%d", &stu[i].name, &stu[i].score);
        }
    
        // 將信息寫入文件中
        for (int i = 0; i < 5; i++)
        {
            fwrite(&stu[i], sizeof (struct student), 1, fp);
        }
    
        fclose(fp);
        return 0;
    }
    
  3. 編寫一個(gè)程序,實(shí)現(xiàn)文件的復(fù)制功能。
    #include <stdio.h>
    
    int main()
    {
        FILE *fp1 = NULL;
        FILE *fp2 = NULL;
    
        fp1 = fopen("student.txt", "r");
        fp2 = fopen("studentcopy.txt", "w");
        if (fp1 == NULL)
        {
            printf("打開 student.txt 失敗\n");
            return 1;
        }
        if (fp2 == NULL)
        {
            printf("打開 studentcopy.txt 失敗\n");
            return 1;
        }
    
        while (!feof(fp1))
        {
            fputc(fgetc(fp1), fp2);
        }
    
        fclose(fp1);
        fclose(fp2);
        return 0;
    }
    
  4. 編寫程序,實(shí)現(xiàn)兩個(gè)文件的合并,即將兩個(gè)文件中的內(nèi)容復(fù)制到其中一個(gè)文件中。
    #include <stdio.h>
    
    int main()
    {
        FILE *fp1 = NULL;
        FILE *fp2 = NULL;
    
        fp1 = fopen("student.txt", "r");
        fp2 = fopen("studentcopy.txt", "a");
        if (fp1 == NULL)
        {
            printf("打開 student.txt 失敗\n");
            return 1;
        }
        if (fp2 == NULL)
        {
            printf("打開 studentcopy.txt 失敗\n");
            return 1;
        }
    
        while (!feof(fp1))
        {
            fputc(fgetc(fp1), fp2);
        }
    
        fclose(fp1);
        fclose(fp2);
        return 0;
    }
    
  5. 編寫程序,從文件中隔一個(gè)字符進(jìn)行讀取,例如文件中內(nèi)容為“jajasiddeb”,則輸出jjsdc至屏幕上。
    #include <stdio.h>
    
    int main()
    {
        FILE *fp1 = NULL;
    
        fp1 = fopen("test.txt", "r");
        if (fp1 == NULL)
        {
            printf("打開 test.txt 失敗\n");
            return 1;
        }
    
        while (!feof(fp1))
        {
            putchar(fgetc(fp1));
            fgetc(fp1);
        }
        putchar('\n');
    
        fclose(fp1);
        return 0;
    }
    

第14章 預(yù)處理宏命令

  • 不帶參數(shù)的宏
    #define 用戶標(biāo)識(shí)符 字符串
    #undef 用戶標(biāo)識(shí)符
    
  • 帶參數(shù)的宏
    #define 宏名 字符串
    
  • 帶參數(shù)的宏和函數(shù)的關(guān)系
    • 函數(shù)調(diào)用參數(shù)傳遞的過程中會(huì)產(chǎn)生一個(gè)中間值,而帶參數(shù)的宏只是進(jìn)行字符串的替換,不會(huì)產(chǎn)生中間值。
    • 函數(shù)中實(shí)參要與形參的類型一致,而宏定義不要求一致。
    • 函數(shù)只能返回一個(gè)值,而宏定義可以返回多個(gè)值。

文件包含

#define <文件名稱>
或 
#include "文件名稱"

條件編譯

#ifdef 標(biāo)識(shí)符
    程序1
#else
    程序2
#endif

不同存儲(chǔ)類型的變量

  • 自動(dòng)類型變量
    [auto] 類型 變量名;
    
  • 靜態(tài)變量
    static 類型 變量名;
    
  • 寄存變量
    rigister 類型 變量名;
    
  • 外部變量
    extern 類型 變量名;
    

習(xí)題答案

一、選擇題

  1. B
  2. B
  3. A
  4. A
  5. A
  6. A
  7. C
  8. B
  9. C
  10. B
  11. A
  12. B

二、填空題

  1. 28
  2. 4
  3. 4,17
  4. 52
  5. 29
  6. 4
  7. 5,0
  8. 95 24
  9. 20,-16
  10. 4
  11. 5,49
  12. 3,3,5
  13. acjaahnldne

三、編程題

  1. 編寫函數(shù)求出1~100中的素?cái)?shù)。
    #include <stdio.h>
    #include <stdbool.h>
    
    int main()
    {
        bool flag = true;
    
        for (int i = 1; i <= 100; i++)
        {
            flag = true;
            for (int j = 2; j <= i / 2; j++)
            {
                if (i % j == 0)
                {
                    flag = false;
                }
            }
    
            if (flag)
            {
                printf("%d\n", i);
            }
        }
        return 0;
    }
    
  2. 利用帶參數(shù)的宏,從三個(gè)數(shù)中找出最大值。
    #include <stdio.h>
    #define MIN(x, y, z) x < y ? (x < z ? x : z) : (y < z ? y : z)
    #define MAX(x, y, z) x > y ? (x > z ? x : z) : (y > z ? y : z)
    
    int main()
    {
        int a = 34;
        int b = 23;
        int c = 54;
    
        printf("min = %d, max = %d\n", MIN(a, b, c), MAX(a, b, c));
    
        return 0;
    }
    
  3. 從鍵盤輸入一個(gè)數(shù),利用宏求出其平方值及其平方根。
    #include <stdio.h>
    #include <math.h>
    
    #define H(x) (x)*(x)
    #define S(x) sqrt(x)
    
    int main()
    {
        double num = 0;
    
        printf("請(qǐng)輸入一個(gè)整數(shù):");
        scanf("%lf", &num);
    
        printf("%lf, %lf\n", H(num), S(num));
    
        return 0;
    }
    
  4. 從鍵盤輸入一個(gè)圓錐的半徑和高度,通過宏定義求出圓錐體積。
    #include <stdio.h>
    
    #define PI 3.14
    #define S(r, h) PI*(r)*(r)*(h)/3.0
    
    int main()
    {
        double r = 0.0;
        double h = 0.0;
    
        printf("請(qǐng)輸入圓錐的半徑和高度:");
        scanf("%lf%lf", &r, &h);
    
        printf("圓錐的表面積是:%lf\n", S(r, h));
        return 0;
    }
    
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • C語(yǔ)言的學(xué)習(xí)要從基礎(chǔ)開始,這里是100個(gè)經(jīng)典的算法-1C語(yǔ)言的學(xué)習(xí)要從基礎(chǔ)開始,這里是100個(gè)經(jīng)典的 算法 題目:...
    Poison_19ce閱讀 1,317評(píng)論 0 0
  • 數(shù)組在程序設(shè)計(jì)中,為了處理方便, 把具有相同類型的若干變量按有序的形式組織起來。這些按序排列的同類數(shù)據(jù)元素的集合稱...
    朱森閱讀 4,285評(píng)論 2 13
  • 前言:指針是 C語(yǔ)言一個(gè)重要概念,也是C 語(yǔ)言的一個(gè)重要特色。使程序簡(jiǎn)潔、緊湊、高效。指針乃是C之精華。 數(shù)據(jù)在內(nèi)...
    瀟湘候晨雪閱讀 857評(píng)論 0 0
  • 指針是C語(yǔ)言中廣泛使用的一種數(shù)據(jù)類型。 運(yùn)用指針編程是C語(yǔ)言最主要的風(fēng)格之一。利用指針變量可以表示各種數(shù)據(jù)結(jié)構(gòu); ...
    朱森閱讀 3,619評(píng)論 3 44
  • //出自51博客:www.Amanda0928.51.com 第一章 一、選擇題 1.B; (typedef ,t...
    Damongggggg閱讀 11,425評(píng)論 0 1

友情鏈接更多精彩內(nèi)容