加減乘除是常見的數**算,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 += 8
,a = 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 兩個數字組成...