41223230 cp2023

  • Home
    • SMap
    • reveal
    • blog
  • First
  • w1
  • w2~w3
  • w4~w5
  • w6
  • w7
  • w8~9
  • w10~11
  • w12
  • w13
  • w15
  • W16
  • C_EX
  • CEX_T
  • ANSIC
  • ANSIC_T
  • 期末總結
  • Brython
ANSIC << Previous Next >> 期末總結

ANSIC_T

1

#include <stdio.h>

int main() {
    int x;    // 用於存儲總里程的變數,以公里為單位
    float y;  // 用於存儲總耗油量的變數,以升為單位

    // 提示用戶輸入總里程並存入 'x'
    printf("Input total distance in km: ");
    // 檢查 scanf 的返回值,確保成功讀取一個整數
    if (scanf("%d", &x) != 1) {
        fprintf(stderr, "Error: Invalid input for total distance.\n");
        return 1;
    }

    // 提示用戶輸入總耗油量並存入 'y'
    printf("Input total fuel spent in liters: ");
    // 檢查 scanf 的返回值,確保成功讀取一個浮點數
    if (scanf("%f", &y) != 1) {
        fprintf(stderr, "Error: Invalid input for total fuel spent.\n");
        return 1;
    }

    // 計算並打印平均油耗
    printf("Average consumption (km/lt) %.3f ", x / y);
    printf("\n");

    return 0;
}

解釋:

1. `#include <stdio.h>`:包含標準輸入/輸出庫的 `stdio.h` 標頭文件,提供輸入和輸出的相關函式。

2. `int main()`:定義主函式,返回一個整數。

3. `int x;` 和 `float y;`:宣告一個整數變數 `x` 和一個浮點數變數 `y`,用於分別存儲總里程和總耗油量。

4. `printf("Input total distance in km: ");`:提示用戶輸入總里程。

5. `if (scanf("%d", &x) != 1) {...}`:使用 `scanf` 函式讀取用戶輸入的整數值,存儲在 `x` 中。檢查 `scanf` 的返回值,確保成功讀取一個數字,否則輸出錯誤信息並返回1。

6. 類似地,提示用戶輸入總耗油量,並讀取輸入值到變數 `y` 中。

7. `printf("Average consumption (km/lt) %.3f ", x / y);`:計算並輸出平均油耗,使用公式 `x / y`。`%.3f` 用於限制浮點數的小數點後顯示的位數為三位。

8. `printf("\n");`:輸出換行符,使結果更易讀。

9. `return 0;`:主函式正常結束,返回值為0。



2

#include <stdio.h>

int main() {
    float x, y, z, P; // 宣告變數,用於存儲三角形的邊長和周長

    // 提示用戶輸入三個邊長並存入 'x', 'y', 和 'z'
    printf("\nInput the first number: ");
    if (scanf("%f", &x) != 1) {
        fprintf(stderr, "Error: Invalid input for the first number.\n");
        return 1;
    }

    printf("\nInput the second number: ");
    if (scanf("%f", &y) != 1) {
        fprintf(stderr, "Error: Invalid input for the second number.\n");
        return 1;
    }

    printf("\nInput the third number: ");
    if (scanf("%f", &z) != 1) {
        fprintf(stderr, "Error: Invalid input for the third number.\n");
        return 1;
    }

    if (x < (y + z) && y < (x + z) && z < (y + x)) // 檢查是否可以構成三角形
    {
        P = x + y + z; // 計算周長
        printf("\nPerimeter  = %.1f\n", P); // 輸出周長
    } else {
        printf("Not possible to create a triangle..!"); // 如果無法構成三角形,輸出相應的信息
    }

    return 0;
}

解釋:

1. `#include <stdio.h>`:包含標準輸入/輸出庫的 `stdio.h` 標頭文件。

2. `int main()`:定義主函式,返回一個整數。

3. `float x, y, z, P;`:宣告四個浮點數變數,`x`、`y` 和 `z` 用於存儲三角形的三個邊長,`P` 用於存儲三角形的周長。

4. 提示用戶輸入第一個數字,並使用 `scanf` 函式讀取輸入值,存儲在變數 `x` 中。檢查 `scanf` 的返回值,確保成功讀取一個浮點數。

5. 類似地,提示用戶輸入第二個和第三個數字,分別存儲在變數 `y` 和 `z` 中。

6. `if (x < (y + z) && y < (x + z) && z < (y + x))`:檢查三個數是否構成一個三角形。這是三角形存在的條件,即每個邊的長度都小於其他兩個邊的長度之和。

7. 如果條件滿足,則計算三角形的周長 `P`,並使用 `printf` 函式輸出周長。

8. 如果條件不滿足,則輸出相應的信息表示無法構成三角形。

9. `return 0;`:主函式正常結束,返回值為0。

3

#include <stdio.h>

int main() {
    int j, numbers[5], total = 0; // 宣告數組用於存儲 5 個數字和變數用於總和

    // 提示用戶輸入五個數字並存入數組
    for (j = 0; j < 5; j++) {
        printf("\nInput the %s number: ", j == 0 ? "first" : (j == 1 ? "second" : (j == 2 ? "third" : (j == 3 ? "fourth" : "fifth"))));
        if (scanf("%d", &numbers[j]) != 1) {
            fprintf(stderr, "Error: Invalid input for the %s number.\n", j == 0 ? "first" : (j == 1 ? "second" : (j == 2 ? "third" : (j == 3 ? "fourth" : "fifth"))));
            return 1;
        }
    }

    for (j = 0; j < 5; j++) {
        if ((numbers[j] % 2) != 0) // 檢查數字是否為奇數
        {
            total += numbers[j]; // 將奇數添加到總和中
        }
    }

    printf("\nSum of all odd values: %d", total); // 輸出所有奇數的總和
    return 0;
}

解釋:

1. `#include <stdio.h>`:包含標準輸入/輸出庫的 `stdio.h` 標頭文件。

2. `int main()`:定義主函式,返回一個整數。

3. `int j, numbers[5], total = 0;`:宣告一個整數 `j`,一個大小為5的整數數組 `numbers`,和一個用於總和的整數變數 `total`。

4. 使用 `for` 迴圈提示用戶輸入五個數字,並將它們存入 `numbers` 數組。迴圈中的 `printf` 語句根據循環變數 `j` 的值,動態生成提示信息,例如 "first"、"second" 等。同時,使用 `scanf` 函式檢查輸入的有效性。

5. 使用第二個 `for` 迴圈遍歷 `numbers` 數組,檢查每個數字是否為奇數。

6. 如果某個數字是奇數,將其加到 `total` 變數中。

7. `printf("\nSum of all odd values: %d", total);`:輸出所有奇數的總和。

8. `return 0;`:主函式正常結束,返回值為0。

4

#include <stdio.h>
#include <stdlib.h>
#include <limits.h>

int divide_two(int dividend_num, int divisor_num) {
    int sign = (float)dividend_num / divisor_num > 0 ? 1 : -1;
    unsigned int dvd = dividend_num > 0 ? dividend_num : -dividend_num;
    unsigned int dvs = divisor_num > 0 ? divisor_num : -divisor_num;
    unsigned int bit_num[33];
    unsigned int i = 0;
    long long d = dvs;

    bit_num[i] = d;
    while (d <= dvd) {
        bit_num[++i] = d = d << 1;
    }
    i--;

    unsigned int result = 0;
    while (dvd >= dvs) {
        if (dvd >= bit_num[i]) {
            dvd -= bit_num[i];
            result += (1 << i);
        } else {
            i--;
        }
    }

    if (result > INT_MAX && sign > 0) {
        return INT_MAX;
    }
    return (int)result * sign;
}

int main(void) {
    int dividend_num = 15;
    int divisor_num = 3;
    printf("Quotient after dividing %d and %d: %d", dividend_num, divisor_num, divide_two(dividend_num, divisor_num));
    return 0;
}

解釋:

1. `#include <stdio.h>`:包含標準輸入/輸出庫的 `stdio.h` 標頭文件。
2. `#include <stdlib.h>`:包含標準庫的 `stdlib.h` 標頭文件,這裡主要用於 `malloc` 和 `free` 函式。
3. `#include <limits.h>`:包含整數型別的限制信息,例如 `INT_MAX`。
4. `int divide_two(int dividend_num, int divisor_num)`:定義了一個自定義函式 `divide_two`,該函式接受兩個整數參數 `dividend_num` 和 `divisor_num`,並返回一個整數。
5. `int sign = (float)dividend_num / divisor_num > 0 ? 1 : -1;`:確定商的正負號。如果 `(float)dividend_num / divisor_num` 大於 0,則 `sign` 為1,否則為-1。
6. `unsigned int dvd = dividend_num > 0 ? dividend_num : -dividend_num;` 和 `unsigned int dvs = divisor_num > 0 ? divisor_num : -divisor_num;`:將被除數和除數轉換為無符號整數,以確保它們的絕對值在之後的操作中不會出現問題。
7. `unsigned int bit_num[33];`:定義一個大小為33的無符號整數數組,用於存儲除數的倍增值。
8. `unsigned int i = 0;`:初始化循環變數 `i`。
9. `long long d = dvs;`:將 `dvs` 複製到 `d`,並使用 `long long` 類型,以防止在位元左移時溢出。
10. `bit_num[i] = d;`:將 `d` 存儲在 `bit_num` 數組的第一個位置。
11. `while (d <= dvd)`:當 `d` 小於或等於被除數時,執行以下操作。
    - `bit_num[++i] = d = d << 1;`:將 `d` 左移一位,同時將結果存儲在 `bit_num` 數組的下一個位置。這樣就完成了除數的倍增。
12. `i--;`:將 `i` 減1,回到最後一個有效位置。

13. `unsigned int result = 0;`:初始化 `result` 變數,用於存儲商的結果。

14. `while (dvd >= dvs)`:當被除數大於等於除數時,執行以下操作。
    - `if (dvd >= bit_num[i])`:如果被除數大於等於 `bit_num[i]`,則執行以下操作。
        - `dvd -= bit_num[i];`:從被除數中減去 `bit_num[i]`。
        - `result += (1 << i);`:將 `result` 加上 `2^i`,即將對應位置的二進制位設置為1。
    - `else`:如果被除數小於 `bit_num[i]`,則執行以下操作。
        - `i--;`:將 `i` 減1,繼續檢查下一個位置。

15. `if (result > INT_MAX && sign > 0)`:如果商的結果大於整數型別的最大值 `INT_MAX`,並且 `sign` 為正,則執行以下操作。
    - `return INT_MAX

5

#include <stdio.h>

// inline function to check if a given integer is even
inline int is_even(int n) {
    return n % 2 == 0;
}

int main() {
    int num;

    // 檢查 scanf 的返回值,確保成功讀取一個整數
    if (scanf("%d", &num) != 1) {
        fprintf(stderr, "Error: Invalid input. Please enter a valid integer.\n");
        return 1;
    }

    if (is_even(num)) {
        printf("%d is even.\n", num);
    } else {
        printf("%d is odd.\n", num);
    }

    return 0;
}

解釋:

1. `#include <stdio.h>`:包含標準輸入/輸出庫的 `stdio.h` 標頭文件。

2. `inline int is_even(int n)`:定義了一個內聯函式 `is_even`,該函式接受一個整數參數 `n`,並返回一個整數。內聯函式的目的是在編譯時將函式體插入到每次調用該函式的地方,以提高效率。這個函式的實現檢查 `n` 是否為偶數,如果是,返回1(true),否則返回0(false)。

3. `int main()`:定義了程序的主函式。

4. `int num;`:聲明一個整數變數 `num`,用於存儲用戶輸入的數字。

5. `if (scanf("%d", &num) != 1)`:使用 `scanf` 函式檢查是否成功讀取一個整數,如果不成功,輸出錯誤信息並返回1。

6. `if (is_even(num))`:調用 `is_even` 函式檢查輸入的數字是否為偶數。

    - 如果返回值為真(1),則執行 `printf("%d is even.\n", num);`,輸出數字是偶數的信息。
    
    - 如果返回值為假(0),則執行 `printf("%d is odd.\n", num);`,輸出數字是奇數的信息。

7. `return 0;`:返回0,表示程序正常結束。

6

#include <stdio.h>


inline float celsius_To_Fahrenheit(float celsius) {
  return (celsius * 9 / 5) + 32;
}
inline float fahrenheit_To_Celsius(float fahrenheit) {
  return (fahrenheit - 32) * 5 / 9;
}

int main() {
  float celsius = 40;
  float fahrenheit = 89.60;
  printf("%.2f Celsius is equal to %.2f Fahrenheit\n", celsius, celsius_To_Fahrenheit(celsius));
  printf("\n%.2f Fahrenheit is equal to %.2f Celsius\n", fahrenheit,
    fahrenheit_To_Celsius(fahrenheit));
  return 0;
}

解釋:

1. `#include <stdio.h>`:包含標準輸入/輸出庫的 `stdio.h` 標頭文件。

2. `inline float celsius_To_Fahrenheit(float celsius)`:定義了一個內聯函式 `celsius_To_Fahrenheit`,該函式接受一個浮點數參數 `celsius`,並返回一個浮點數。這個函式的目的是將攝氏溫度轉換為華氏溫度,根據轉換公式 `(celsius * 9 / 5) + 32` 進行計算。

3. `inline float fahrenheit_To_Celsius(float fahrenheit)`:定義了一個內聯函式 `fahrenheit_To_Celsius`,該函式接受一個浮點數參數 `fahrenheit`,並返回一個浮點數。這個函式的目的是將華氏溫度轉換為攝氏溫度,根據轉換公式 `(fahrenheit - 32) * 5 / 9` 進行計算。

4. `int main()`:定義了程序的主函式。

5. `float celsius = 40;`:聲明並初始化一個浮點數變數 `celsius`,其值為40,表示攝氏溫度。

6. `float fahrenheit = 89.60;`:聲明並初始化一個浮點數變數 `fahrenheit`,其值為89.60,表示華氏溫度。

7. `printf("%.2f Celsius is equal to %.2f Fahrenheit\n", celsius, celsius_To_Fahrenheit(celsius));`:使用 `printf` 函式輸出轉換後的攝氏溫度對應的華氏溫度。`%.2f` 用於控制浮點數輸出的小數點位數。

8. `printf("\n%.2f Fahrenheit is equal to %.2f Celsius\n", fahrenheit, fahrenheit_To_Celsius(fahrenheit));`:使用 `printf` 函式輸出轉換後的華氏溫度對應的攝氏溫度。同樣,`%.2f` 用於控制浮點數輸出的小數點位數。

9. `return 0;`:返回0,表示程序正常結束。

7

#include <stdio.h>

int main() {
    int a, b;

    // Prompt user for input
    printf("Input two pairs values (integer values):\n");

    // Read two integer values from user and store them in 'a' and 'b'
    if (scanf("%d %d", &a, &b) != 2) {
        fprintf(stderr, "Error: Invalid input. Please enter two integer values.\n");
        return 1;  // Return an error code for invalid input
    }

    // Check if 'a' is not equal to 'b'
    if (a != b) {
        // Check if 'b' is greater than 'a'
        if (b > a) {
            printf("Ascending order\n");  // Print message for ascending order
        } else {
            printf("Descending order\n");  // Print message for descending order
        }
    }

    return 0;  // End of program
}

解釋:

1. `#include <stdio.h>`:包含標準輸入/輸出庫的 `stdio.h` 標頭文件。

2. `int main()`:定義了程序的主函式。

3. `int a, b;`:聲明了兩個整數變數 `a` 和 `b`,用於存儲用戶輸入的整數值。

4. `printf("Input two pairs values (integer values):\n");`:使用 `printf` 函式向用戶提示輸入兩對整數值。

5. `if (scanf("%d %d", &a, &b) != 2) { ... }`:使用 `scanf` 函式從用戶獲取兩個整數值,並將它們存儲在變數 `a` 和 `b` 中。檢查 `scanf` 的返回值,確保成功讀取兩個整數值。如果讀取失敗,輸出錯誤消息並返回錯誤碼。

6. `if (a != b) { ... }`:檢查讀取的兩個整數是否相等。如果它們不相等,執行下面的代碼塊。

7. `if (b > a) { ... } else { ... }`:這是一個嵌套的條件語句。如果 `b` 大於 `a`,則執行第一個代碼塊,否則執行第二個代碼塊。

8. `printf("Ascending order\n");`:如果 `b` 大於 `a`,則輸出 "Ascending order",表示輸入的兩個數字是升序排列的。

9. `printf("Descending order\n");`:如果 `b` 不大於 `a`,則輸出 "Descending order",表示輸入的兩個數字是降序排列的。

10. `return 0;`:正常結束程序,返回0,表示沒有錯誤發生。

8

#include <stdio.h>

int main(void) {
    unsigned char char1, char2, char3, char4, char5, char6, char7, char8;

    // Print table header
    printf("|---------------------------------------------------------------------------------------------------------|\n");
    printf("|extended ASCII table - excluding control characters                                                      |\n");
    printf("|   Ch Dec  Hex  |  Ch Dec  Hex   | Ch Dec  Hex | Ch Dec  Hex  | Ch Dec  Hex  | Ch Dec  Hex | Ch Dec  Hex |\n");
    printf("|----------------|----------------|-------------|--------------|--------------|-------------|-------------|\n");

    // Loop through characters
    for (int i = 0; i < 32; i++) {
        // Calculate characters for different ranges
        char1 = i;
        char2 = i + 32;
        char3 = i + 64;
        char4 = i + 96;
        char5 = i + 128;  // extended ASCII characters
        char6 = i + 160;
        char7 = i + 192;
        char8 = i + 224;

        // Print characters and their decimal and hexadecimal representations
        printf("|  %c %3d %#x ", char2, char2, char2);
        printf("|  %c %3d %#x ", char3, char3, char3);

        // Special case for DEL character
        if (char4 == 127) {
            printf("|%s %3d %#x |", "DEL", char4, char4);
        } else {
            printf("|  %c %3d %#x |", char4, char4, char4);
        }

        // Print extended ASCII characters for the current system.
        printf("  %c %3d %#x |  %c %3d %#x |  %c %3d %#x |  %c %3d %#x |\n",
               char5, char5, char5,
               char6, char6, char6,
               char7, char7, char7,
               char8, char8, char8);
    }

    return 0;  // Indicate successful execution of the program
}

解釋:

1. `unsigned char char1, char2, char3, char4, char5, char6, char7, char8;`:聲明了八個無符號字符變數,用於存儲ASCII字符。

2. `printf("|---------------------------------------------------------------------------------------------------------|\n");`:打印表格的分隔線。

3. `printf("|extended ASCII table - excluding control characters                                                      |\n");`:打印表格的標題。

4. `printf("|   Ch Dec  Hex  |  Ch Dec  Hex   | Ch Dec  Hex | Ch Dec  Hex  | Ch Dec  Hex  | Ch Dec  Hex | Ch Dec  Hex |\n");`:打印表格的列標題。

5. `printf("|----------------|----------------|-------------|--------------|--------------|-------------|-------------|\n");`:打印表格的分隔線。

6. `for (int i = 0; i < 32; i++) { ... }`:這是一個for循環,用於遍歷ASCII字符。

7. `char1 = i; char2 = i + 32; char3 = i + 64; char4 = i + 96; char5 = i + 128; char6 = i + 160; char7 = i + 192; char8 = i + 224;`:這些語句用於計算不同範圍的字符,以便填充表格。

8. `printf("|  %c %3d %#x ", char2, char2, char2);`:打印表格中的ASCII字符、十進制和十六進制表示。

9. `if (char4 == 127) { printf("|%s %3d %#x |", "DEL", char4, char4); } else { printf("|  %c %3d %#x |", char4, char4, char4); }`:這是一個條件語句,用於處理ASCII碼127(DEL字符)的特殊情況。

10. `printf("  %c %3d %#x |  %c %3d %#x |  %c %3d %#x |  %c %3d %#x |\n", char5, char5, char5, char6, char6, char6, char7, char7, char7, char8, char8, char8);`:打印擴展的ASCII字符和其十進制和十六進制表示。

11. `return 0;`:指示程序成功運行結束。

9

#include <stdio.h>

int main() {
    int x; // Declare variable x

    // Print header for the table
    printf("x+1\tx+3\tx+5\tx+7\n\n");
    printf("---------------------------\n");

    // Loop to generate and print table values
    for (x = 1; x <= 15; x += 3)
        printf("%d\t%d\t%d\t%d\n", x, (x + 2), (x + 4), (x + 6));

    return 0; // Indicate successful program execution
}

解釋:

1. `int x;`:聲明了一個整數變數 `x`,用於迴圈中的計算。

2. `printf("x+1\tx+3\tx+5\tx+7\n\n");`:打印表格的標題,列出表格中每一列的標籤。

3. `printf("---------------------------\n");`:打印表格的分隔線。

4. `for (x = 1; x <= 15; x += 3)`:這是一個for迴圈,從 `x` 的初始值1開始,每次迭代增加3,直到 `x` 的值大於15。

5. `printf("%d\t%d\t%d\t%d\n", x, (x + 2), (x + 4), (x + 6));`:在每次迭代中,打印表格的一行,該行包含 `x` 及其後三個數的計算結果。

6. `return 0;`:指示程序成功運行結束。

10

#include <stdio.h>

int main() {
    // 声明变量
    float principal_amt, rate_of_interest, days, interest;
    const int yearInDays = 365; // 用于转换利率的常量

    // 提示用户输入贷款金额
    printf("输入贷款金额 (输入 0 退出): ");
    if (scanf("%f", &principal_amt) != 1) {
        fprintf(stderr, "Error: Invalid input for loan amount.\n");
        return 1;
    }

    // 主循环用于处理贷款
    while ((int)principal_amt != 0) 
    {
        // 提示用户输入利率
        printf("输入利率: ");
        if (scanf("%f", &rate_of_interest) != 1) {
            fprintf(stderr, "Error: Invalid input for interest rate.\n");
            return 1;
        }

        // 提示用户输入贷款期限(天)
        printf("输入贷款期限(天): ");
        if (scanf("%f", &days) != 1) {
            fprintf(stderr, "Error: Invalid input for loan term.\n");
            return 1;
        }

        // 计算利息
        interest = (principal_amt * rate_of_interest * days) / yearInDays;

        // 显示利息金额
        printf("利息金额为 $%.2f\n", interest);

        // 提示用户输入下一个贷款金额
        printf("\n\n输入贷款金额 (输入 0 退出): ");
        if (scanf("%f", &principal_amt) != 1) {
            fprintf(stderr, "Error: Invalid input for loan amount.\n");
            return 1;
        }
    }

    return 0;
}

解釋:

1. `float principal_amt, rate_of_interest, days, interest;`:聲明了四個浮點變數,分別表示貸款金額、利率、貸款期限(以天為單位)和計算的利息。

2. `const int yearInDays = 365;`:定義了一個常量 `yearInDays`,表示一年的天數,用於將利率轉換為每日利率。

3. `printf("输入贷款金额 (输入 0 退出): ");`:提示用戶輸入貸款金額,並要求用戶輸入0以退出程序。

4. `if (scanf("%f", &principal_amt) != 1) { ... }`:使用 `scanf` 函數從用戶輸入中讀取一個浮點數,並將其存儲在 `principal_amt` 中。如果輸入不是有效的浮點數,則輸出錯誤消息並返回1。

5. `while ((int)principal_amt != 0)`:這是一個while循環,當 `principal_amt` 不等於0時,循環將繼續運行。這允許用戶輸入多個貸款金額。

6. `printf("输入利率: ");`:提示用戶輸入利率。

7. `if (scanf("%f", &rate_of_interest) != 1) { ... }`:從用戶輸入中讀取利率,並將其存儲在 `rate_of_interest` 中。如果輸入不是有效的浮點數,則輸出錯誤消息並返回1。

8. `printf("输入贷款期限(天): ");`:提示用戶輸入貸款期限。

9. `if (scanf("%f", &days) != 1) { ... }`:從用戶輸入中讀取貸款期限,並將其存儲在 `days` 中。如果輸入不是有效的浮點數,則輸出錯誤消息並返回1。

10. `interest = (principal_amt * rate_of_interest * days) / yearInDays;`:使用公式計算利息,將其存儲在 `interest` 中。

11. `printf("利息金额为 $%.2f\n", interest);`:顯示計算得到的利息金額。

12. `printf("\n\n输入贷款金额 (输入 0 退出): ");`:提示用戶輸入下一個貸款金額。

13. `if (scanf("%f", &principal_amt) != 1) { ... }`:從用戶輸入中讀取下一個貸款金額。如果輸入不是有效的浮點數,則輸出錯誤消息並返回1。

14. `return 0;`:程序運行成功,返回0。


ANSIC << Previous Next >> 期末總結

Copyright © All rights reserved | This template is made with by Colorlib