C 語言基礎教程(我的C之旅開始了)[八]

來源:互聯網
上載者:User

19. 基礎資料型別 (Elementary Data Type):複數類型和虛數類型

C99 新增了 複數類型_Complex)和 虛數類型_Imaginary)。簡單來說,C99 提供了三種複數類型: float _Complexdouble _Complex,和 long double _Complex。對於 float _Complex 類型的變數來說,它包含兩個 float 類型的值,一個用於表示複數的 實部real part),另一個用於表示 虛部imaginary part)。類似地,
double _Complex 包含兩個 double 類型的值。以此類推。C99 也提供了三種虛數類型: float _Imaginarydouble _Imaginary,以及 long double _Imaginary。虛數類型只有虛部,沒有實部。包含標準標頭檔 complex.h 後,我們就可以用 complex 來代表 _Complex,用
imaginary 來代表 _Imaginary,以及用 I 來代表虛數單位 i,也就是 -1 的平方根。例如: #include <complex.h >
double _Complex x = 5.2; /* 實部等於 5.2,虛部為 0 */
double complex y = 5.0 * I; /* 實部為 0,虛部為 5.0 */
double complex z = 5.2 – 5.0 * I; /* 實部為 5.2,虛部為 5.0 */ 注意_Complex 類型對於 獨立式環境freestanding environment)來說是 可選的。可選的意思是,不強制必須支援這種類型。而所謂 獨立式環境,是指 C 程式可以在沒有作業系統的情況下運行。 _Imaginary 類型在任何環境下都是可選的。目前的編譯器對這兩種類型的支援都不太好,故而我在此就不對這兩種類型進行更深入的討論了。 至此,基礎資料型別 (Elementary Data Type)就全部討論完了。


20. 逸出字元使用執行個體

下面這個例子示範了 \a\b\t\r,以及 \n 的作用。其中 \b\t\r 的概念可以追溯到電腦仍然使用打字機作為輸出裝置的時候,所以對於現代的一些電腦來說,它們可能不起作用。在某些麥金托什機(Macintosh)上,它們的作用就和我們下面所說的不一樣。首先請認真看一下以下程式,然後編譯運行一下,看看運行結果和您想象的是否一樣,然後再看後面的詳細解說。/* esc_sq.c -- 使用逸出字元 */ #include <stdio.h> int main(void){ float height; printf("\aPlease enter your height: _____ cm\b\b\b\b\b\b\b\b"); scanf("%f", &height); printf("\tYour height is %.2f.\rOh!\n", height); return 0;}第一個 printf 通常會引起一聲鳴響\a),同時顯示以下提示Please enter your height: _____ cm其中活躍位置(游標)在底線的開端。活躍位置之所以會位於底線的開端,是因為那八個 \b 把活躍位置後退了八個位置。順帶一題,底線 _____ 由五個 _ 構成。注意:一般來說,\b 不會擦除前面輸出的字元,但是在某些系統,\b 卻會擦除前面輸出的字元,導致顯示結果為 Please enter your height: 。\a 產生的效果取決於硬體。一般來說,輸出 \a 會產生鳴響。但是在某些系統,輸出 \a 不會產生任何效果,或者僅僅顯示一個特殊字元。 輸入一個數後(比如輸入 180.5),螢幕的顯示會變成Please enter your height: 180.5 cm
我們輸入的數字取代了原來的底線。接著我們需要按斷行符號確定我們的輸入。按下斷行符號鍵後,
活躍位置會移動到下一行的開端。
第二個 printf 運行結束後,螢幕顯示如下: Please enter your height: 180.5 cm Oh! Your height is 180.50.這是因為 \t 使活躍位置向後移動了若干個位置(通常是八個),然後輸出
Your height is 180.50. 。接著 \r 使活躍位置返回當前行的開端,然後輸出 Oh!
最後 \n 引起換行。
 
 加法運算子使它左右兩邊的值相加。例如: printf("%d", 9 + 11); 輸出結果為 20。加法運算子的運算元可以是常量,也可以是變數。例如: var = var_1 + var_2; 這個語句先把 var_1 的值和 var_2 的值相加,然後把相加的結果賦值給 var。  2. 減法運算子(Subtraction Operator): – 減法運算子導致左邊的運算元減去右邊的運算元。例如: var = 100 – 40; 100 – 40 的值是 60,然後這個 60 被賦值給 var。 加法運算子減法運算子被稱為二目運算子binary operator),因為它們需要兩個運算元。  3. 正負運算子(Sign Operator): – 和 + 例如: var_1 = -5;var_2 = -var_1;var = +5 var_1 的值是 -5,var_2 的值是 5,var 的值是 5。 正負運算子被稱為單目運算子unary operator),因為它們只需要一個運算元。

 

23. 乘法運算子和除法運算子

1. 乘法運算子(Multiplication Operator):* * 是乘法運算子。以下語句: meter = 100 * cm;常量 100 和變數 cm 相乘,乘積被賦值給變數 meter。2. 除法運算子(Division Operator):/ C 使用 / 作為除法運算子。/ 左邊的運算元除以右邊的運算元。也就是說,/ 左邊是被除數,右邊是除數。例如: var = 6/2;6 除以 2 得 3,然後 3 被賦值給變數 var。 整數相除和浮點數相除有所不同。浮點數相除得到浮點數,整數相除得到整數。C 語言規定,整數相除產生的小數部分一律被拋棄,這就是所謂的截斷(truncation)。例如:7/4 的結果是 1,而不是 1.75,也不是 2。 下面我們來看一個小程式。 /* divide.c */
#include <stdio.h> int main(void)
{
printf("integer division: 7/4 is %d \n", 7/4);
printf("floating division: 7./4. is %f \n", 7./4.);
printf("mixed division: 7./4 is %f \n", 7./4); return 0;
}輸出為: integer division: 7/4 is 1
floating division: 7./4. is 1.750000
mixed division: 7./4 is 1.750000最後一個 printf 中,我們用浮點數除以整數,得到的結果和第二個 printf 一樣。這是因為 C 自動把這兩個運算元的類型轉換成了同一種類型。本例中,整數 4 被轉換成了浮點類型,然後再和浮點數 7. 相除。 C99 之前,正整數和負整數相除,如果產生小數部分,則相除的結果是不確定的。例如:7/-4 的結果可能是 -2,也可能是 -1。C99 規定,正整數和負整數相除,產生的小數部分一律被拋棄。也就是說,C99 中,7/-4 的結果是確定的,一定是 -1。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.