1. 程式人生 > >《C語言程式設計:現代方法(第2版)(K.N.King 著)》學習筆記四:C語言基本概念(3)

《C語言程式設計:現代方法(第2版)(K.N.King 著)》學習筆記四:C語言基本概念(3)

2.5 讀入輸入

  1. 為了獲取輸入,就要用到 scanf 函式。它是C函式庫中與 printf 相對應的函式。scanf 中的字母 f 和 printf 中的字母 f 含義相同,都是表示“格式化”的意思。scanf 函式和 printf 函式都需要使用格式串format string)來指定輸入或輸出資料的形式。scanf 函式需要知道將獲得的輸入資料的格式,而 printf 函式需要知道輸出資料的顯示格式。
  2. 為了讀入一個 int 型值,可以使用下面的 scanf 函式呼叫:
scanf("%d", &i);
  1. 其中,%d 說明 scanf 函式讀入的是一個整數,而 i 是一個 int 型變數,用來儲存 scanf 函式讀入的輸入。變數 i 前的運算子 &
    現在先這樣解釋:通常是(但不總是)使用 scanf 函式時所必需的。
  2. 讀入一個 float 型值時,需要一個形式略有不同的 scanf 函式呼叫:
scanf("%f", &x);
  1. %f 只用於 float 型變數,因此這裡假設 x 是一個 float 型變數。字串 %f 告訴 scanf 函式去尋找一個 float 格式的輸入值(此數可以含有小數點,但不是必須含有)。

[程式] 計算箱子的空間重量(改進版):dweight2.c

/* Computes the dimensional weight of a
    box from input provided by the user  */
#include <stdio.h> int main(void) { int height, length, width, volume, weight; printf("Enter height of box: "); /* 提示使用者輸入的訊息(提示符)通常不應該以換行符結束,因為 我們希望使用者在同一行輸入。這樣,當用戶敲回車鍵時,游標會自動移動到下一行,因此就不需要程式 通過顯示換行符來終止當前行了。 */ scanf("%d", &height); printf("Enter length of box: "
); scanf("%d", &length); printf("Enter width of box: "); scanf("%d", &width); /* 這段程式碼還有一個問題:如果使用者輸入的不是數值(比如說字母、標點符號),程式就會出現 問題。不過不要擔心,在以後的學習中我們會詳細討論這個問題。*/ volume = height * length * width; weight = (volume + 165) / 166; printf("Volume (cubic inches): %d\n", volume); printf("Dimensional weight (pounds): %d\n", weight); return 0; }

2.6 定義常量的名字

  1. 當程式含有常量時,建議給這些常量命名,因為在後期閱讀程式時也許有些人不會明白某些常量的含義。我們可以採用稱為巨集定義macro definition)的特性給常量命名:
#define INCHES_PER_POUND 166
  1. 這裡的 #define 是預處理指令,類似於前面所講的 #include,因而在此行的結尾也沒有分號。
  2. 當對程式進行編譯時,前處理器會把每一個巨集替換為其表示的值。例如,語句 weight = (volume + INCHES_PER_POUND - 1) / INCHES_PER_POUND; 將變成 weight = (volume + 166 - 1) / 166;
  3. 還可以利用巨集來定義表示式:
#define RECIPROCAL_OF_PI (1.0f / 3.14159f)
  1. 當巨集包含運算子時,必須用括號把表示式括起來。
  2. 注意,巨集的名字只用了大寫字母。這是大多數C程式設計師遵循的規範,但並不是C語言本身的要求,而本書作者則強烈建議讀者不要打破此規範。統一使用大寫字母作為巨集的名字,可以讓你快速辨認出程式中哪些地方使用了巨集。

[程式] 華氏溫度轉換為攝氏溫度:celsius.c

/* Converts a Fahrenheit temperature to Celsius */

#include <stdio.h>

#define FREEZING_PT 32.0f
#define SCALE_FACTOR (5.0f / 9.0f)    /* 如果把 (5.0f / 9.0f) 寫成 (5 / 9),則 SCALE_FACTOR 表示的值為 0,
因為 5 和 9 是兩個 int 值,它們相除的結果會向下取整。5.0f 和 9.0f 是兩個 float 型值,它們相除的結果將會保
留小數部分。*/

int main(void)
{
    float fahrenheit, celsius;

    printf("Enter Fahrenheit temperature: ");
    scanf("%f", &fahrenheit);

    celsius = (fahrenheit - FREEZING_PT) * SCALE_FACTOR;

    printf("Celsius equivalent: %.1f\n", celsius);    // 注意,使用 %.1f 顯示 celsius 的值時,小數點後只顯示一位數字。

    return 0;
}