C語言知識彙總 21 C語言的加減乘除及取餘

2021-10-24 02:03:41 字數 2591 閱讀 9033

加減乘除是常見的數**算,c語言當然支援,不過,c語言中的運算符號與數學中的略有不同,請見下表。

加法減法

乘法除法

求餘數(取餘)數學+

-×÷無

c語言+-*

/%c語言中的加號、減號與數學中的一樣,乘號、除號不同;另外c語言還多了乙個求餘數的運算子,就是 %。

下面的**演示了如何在c語言中進行加減乘除運算:

#include int main()

輸出結果:

m=112, n=850.000000, p=1.411765, q=4
也可以讓數字直接參與運算:

#include int main()

輸出結果:

m=-88, n=251, p=435.610000

m*2=-176, 6/3=2, m*n=-22088

c語言中的除法運算有點奇怪,不同型別的除數和被除數會導致不同型別的運算結果:

請看下面的**:

#include int main()

執行結果:

p=8.000000, q=8.333333
a 和 b 都是整數,a / b 的結果也是整數,所以賦值給 p 變數的也是乙個整數,這個整數就是 8。

另外需要注意的一點是除數不能為 0,因為任何乙個數字除以 0 都沒有意義。

然而,編譯器對這個錯誤一般無能為力,很多情況下,編譯器在編譯階段根本無法計算出除數的值,不能進行有效**,「除數為 0」這個錯誤只能等到程式執行後才能發現,而程式一旦在執行階段出現任何錯誤,只能有乙個結果,那就是崩潰,並被作業系統終止執行。

請看下面的**:

#include int main()

這段**用到了乙個新的函式,就是 scanf。scanf 和 printf 的功能相反,printf 用來輸出資料,scanf 用來讀取資料。此處,scanf 會從控制台讀取兩個整數,並分別賦值給 a 和 b。

程式開頭定義了兩個 int 型別的變數 a 和 b,程式執行後,從控制台讀取使用者輸入的整數,並分別賦值給 a 和 b,這個時候才能知道 a 和 b 的具體值,才能知道除數 b 是不是 0。像這種情況,b 的值在程式執行期間會改變,跟使用者輸入的資料有關,編譯器根本無法**,所以就沒法及時發現「除數為 0」這個錯誤。

取餘,也就是求餘數,使用的運算子是 %。c語言中的取餘運算只能針對整數,也就是說,% 的兩邊都必須是整數,不能出現小數,否則編譯器會報錯。

另外,餘數可以是正數也可以是負數,由 % 左邊的整數決定:

請看下面的例子:

#include int main()

執行結果:

100%12=4

100%-12=4

-100%12=-4

-100%-12=-4

在 printf 中,% 是格式控制符的開頭,是乙個特殊的字元,不能直接輸出;要想輸出 %,必須在它的前面再加乙個 %,這個時候 % 就變成了普通的字元,而不是用來表示格式控制符。

有時候希望對乙個變數進行某種運算,然後再把運算結果賦值給變數本身,請看下面的例子:

#include int main()

輸出結果:

a=12

a=20

a=200

a = a + 8相當於用原來 a 的值(也即12)加上 8,再把運算結果(也即20)賦值給 a,此時 a 的值就變成了 20。

a = a * b相當於用原來 a 的值(也即20)乘以 b 的值(也即10),再把運算結果(也即200)賦值給 a,此時 a 的值就變成了 200。

以上的操作,可以理解為對變數本身進行某種運算。

在c語言中,對變數本身進行運算可以有簡寫形式。假設用 # 來表示某種運算子,那麼

a = a # b
可以簡寫為:

a #= b
# 表示 +、-、*、/、% 中的任何一種運算子。

上例中a = a + 8可以簡寫為a += 8a = a * b可以簡寫為a *= b

下面的簡寫形式也是正確的:

int a = 10, b = 20;

a += 10; //相當於 a = a + 10;

a *= (b-10); //相當於 a = a * (b-10);

a -= (a+20); //相當於 a = a - (a+20);

注意:a #= b 僅是一種簡寫形式,不會影響程式的執行效率。

21 C語言 位域

如果程式的結構中包含多個開關量,只有 true false 變數,如下 struct status 這種結構需要 8 位元組的記憶體空間,但在實際上,在每個變數中,我們只儲存 0 或 1。在這種情況下,c 語言提供了一種更好的利用記憶體空間的方式。如果您在結構內使用這樣的變數,您可以定義變數的寬度來...

C語言基礎 21 C語言編譯過程及GCC引數簡介

任何c語言的編譯過程可分為以下三部分 在c語言中,以 開頭的語句又叫預編譯指令。預編譯主要做以下兩件事情 1.將 include包含的標頭檔案做簡單的文字替換 2.將 中的注釋刪除。gcc e 引數代表預編譯。以test.c函式為例,內容如下 進行預編譯 如上圖,編譯完成後可生成new.c檔案,開啟...

2 1 C語言中的進製數的表示

在c語言種,乙個數字預設就是十進位制的,表示乙個十進位制數字不需要任何特殊的格式。但是,表示乙個二進位制 八進位制或者十六進製制數字就不一樣了,為了和十進位制數字區分開來,必須採用某種特殊的寫法,具體來說,就是在數字前面加上特定的字元,也就是加字首。1 二進位制 二進位制由 0 和 1 兩個數字組成...