
- C程式設計教程
- C語言 - 首頁
- C語言基礎
- C語言 - 概述
- C語言 - 特性
- C語言 - 歷史
- C語言 - 環境搭建
- C語言 - 程式結構
- C語言 - Hello World
- C語言 - 編譯過程
- C語言 - 註釋
- C語言 - 詞法單元
- C語言 - 關鍵字
- C語言 - 識別符號
- C語言 - 使用者輸入
- C語言 - 基本語法
- C語言 - 資料型別
- C語言 - 變數
- C語言 - 整數提升
- C語言 - 型別轉換
- C語言 - 型別強制轉換
- C語言 - 布林值
- C語言中的常量和字面量
- C語言 - 常量
- C語言 - 字面量
- C語言 - 轉義序列
- C語言 - 格式說明符
- C語言中的運算子
- C語言 - 運算子
- C語言 - 算術運算子
- C語言 - 關係運算符
- C語言 - 邏輯運算子
- C語言 - 位運算子
- C語言 - 賦值運算子
- C語言 - 一元運算子
- C語言 - 自增和自減運算子
- C語言 - 三元運算子
- C語言 - sizeof 運算子
- C語言 - 運算子優先順序
- C語言 - 其他運算子
- C語言中的決策語句
- C語言 - 決策語句
- C語言 - if 語句
- C語言 - if...else 語句
- C語言 - 巢狀 if 語句
- C語言 - switch 語句
- C語言 - 巢狀 switch 語句
- C語言中的迴圈
- C語言 - 迴圈
- C語言 - while 迴圈
- C語言 - for 迴圈
- C語言 - do...while 迴圈
- C語言 - 巢狀迴圈
- C語言 - 無限迴圈
- C語言 - break 語句
- C語言 - continue 語句
- C語言 - goto 語句
- C語言中的函式
- C語言 - 函式
- C語言 - 主函式
- C語言 - 按值呼叫函式
- C語言 - 按引用呼叫函式
- C語言 - 巢狀函式
- C語言 - 可變引數函式
- C語言 - 使用者自定義函式
- C語言 - 回撥函式
- C語言 - return 語句
- C語言 - 遞迴
- C語言中的作用域規則
- C語言 - 作用域規則
- C語言 - 靜態變數
- C語言 - 全域性變數
- C語言中的陣列
- C語言 - 陣列
- C語言 - 陣列的特性
- C語言 - 多維陣列
- C語言 - 將陣列傳遞給函式
- C語言 - 從函式返回陣列
- C語言 - 變長陣列
- C語言中的指標
- C語言 - 指標
- C語言 - 指標和陣列
- C語言 - 指標的應用
- C語言 - 指標運算
- C語言 - 指標陣列
- C語言 - 指向指標的指標
- C語言 - 將指標傳遞給函式
- C語言 - 從函式返回指標
- C語言 - 函式指標
- C語言 - 指向陣列的指標
- C語言 - 指向結構體的指標
- C語言 - 指標鏈
- C語言 - 指標與陣列的比較
- C語言 - 字元指標和函式
- C語言 - NULL 指標
- C語言 - void 指標
- C語言 - 懸空指標
- C語言 - 解引用指標
- C語言 - 近指標、遠指標和巨指標
- C語言 - 指標陣列的初始化
- C語言 - 指標與多維陣列的比較
- C語言中的字串
- C語言 - 字串
- C語言 - 字串陣列
- C語言 - 特殊字元
- C語言中的結構體和聯合體
- C語言 - 結構體
- C語言 - 結構體和函式
- C語言 - 結構體陣列
- C語言 - 自引用結構體
- C語言 - 查詢表
- C語言 - 點 (.) 運算子
- C語言 - 列舉 (enum)
- C語言 - 結構體填充和打包
- C語言 - 巢狀結構體
- C語言 - 匿名結構體和聯合體
- C語言 - 聯合體
- C語言 - 位域
- C語言 - typedef
- C語言中的檔案處理
- C語言 - 輸入輸出
- C語言 - 檔案I/O (檔案處理)
- C語言預處理器
- C語言 - 預處理器
- C語言 - 預處理指令
- C語言 - 預處理器運算子
- C語言 - 宏
- C語言 - 標頭檔案
- C語言中的記憶體管理
- C語言 - 記憶體管理
- C語言 - 記憶體地址
- C語言 - 儲存類
- 其他主題
- C語言 - 錯誤處理
- C語言 - 可變引數
- C語言 - 命令執行
- C語言 - 數學函式
- C語言 - static關鍵字
- C語言 - 隨機數生成
- C語言 - 命令列引數
- C語言程式設計資源
- C語言 - 問答
- C語言 - 快速指南
- C語言 - 速查表
- C語言 - 有用資源
- C語言 - 討論
C語言中的算術運算子
C語言中的算術運算子是一些特殊的預定義符號,用於執行算術運算。我們熟悉基本的算術運算——加法、減法、乘法和除法。C語言是一種計算語言,因此這些運算子對於執行計算機化過程至關重要。
除了上述分別分配給四個符號+、−、*和/的運算之外,C語言還有一個名為模運算子的算術運算子,我們使用%符號。
下表列出了C語言中的算術運算子:
運算子 | 描述 |
---|---|
+ | 將兩個運算元相加。 |
– | 從第一個運算元中減去第二個運算元。 |
* | 將兩個運算元相乘。 |
/ | 將分子除以分母。 |
% | 模運算子,返回整數除法後的餘數。 |
++ | 自增運算子將整數值增加一。 |
-- | 自減運算子將整數值減少一。 |
上表中也列出了++和--運算子。我們將在單獨的章節中學習自增和自減運算子。
示例:C語言中的算術運算子
以下示例演示如何在C程式中使用這些算術運算子:
#include <stdio.h> int main(){ int op1 = 10; int op2 = 3; printf("Operand1: %d Operand2: %d \n\n", op1, op2); printf("Addition of op1 and op2: %d\n", op1 + op2); printf("Subtraction of op2 from op1: %d\n", op1 - op2); printf("Multiplication of op1 and op2: %d\n", op1 * op2); printf("Division of op1 by op2: %d\n", op1/op2); return 0; }
輸出
執行此程式碼時,將產生以下輸出:
Operand1: 10 Operand2: 3 Addition of op1 and op2: 13 Subtraction of op2 from op1: 7 Multiplication of op1 and op2: 30 Division of op1 by op2: 3
C語言中的型別強制轉換
前三個結果符合預期,但除法的結果並非如此。您期望10/3是一個分數(3.333333)。這是因為我們使用%d格式說明符來列印除法的結果嗎?如果我們將程式碼的最後一行更改如下:
printf("Division of op1 by op2: %f\n", op1/op2);
現在除法運算的結果將是“0.000000”,這更令人驚訝。C語言之所以這樣表現,是因為整數與另一個整數相除總是返回一個整數。
要獲得浮點除法,至少一個運算元必須是浮點數,或者您需要使用型別轉換運算子將其中一個整數運算元更改為浮點數。
現在,將給定程式的最後一個printf語句更改如下:
printf("Division of op1 by op2: %f\n", (float)op1/op2);
再次進行此更改後執行程式碼,它將顯示正確的除法結果:
Division of op1 by op2: 3.333333
注意:如果對浮點表示式使用%d格式說明符,它將始終導致“0”。
示例
至少有一個浮點(或雙精度)運算元的算術運算的結果始終是浮點數。請看以下示例:
#include <stdio.h> int main(){ int op1 = 10; float op2 = 2.5; printf("Operand1: %d Operand2: %f\n", op1, op2); printf("Addition of op1 and op2: %f\n", op1 + op2); printf("Subtraction of op2 from op1: %f\n", op1 - op2); printf("Multiplication of op1 and op2: %f\n", op1 * op2); printf("Division of op1 by op2: %f\n", op1/op2); return 0; }
輸出
執行程式碼並檢查其輸出:
Operand1: 10 Operand2: 2.500000 Addition of op1 and op2: 12.500000 Subtraction of op2 from op1: 7.500000 Multiplication of op1 and op2: 25.000000 Division of op1 by op2: 4.000000
使用char資料型別的算術運算
在C語言中,char資料型別是int型別的子集。因此,我們可以對char運算元執行算術運算。
示例
以下示例顯示如何對兩個運算元執行算術運算,其中一個運算元為“char”型別:
#include <stdio.h> int main(){ char op1 = 'F'; int op2 = 3; printf("operand1: %c operand2: %d\n", op1, op2); printf("Addition of op1 and op2: %d\n", op1 + op2); printf("Subtraction of op2 from op1: %d\n", op1 - op2); printf("Multiplication of op1 and op2: %d\n", op1 * op2); printf("Division of op1 by op2: %d\n", op1/op2); return 0; }
輸出
執行程式碼並檢查其輸出:
operand1: F operand2: 3 Addition of op1 and op2: 73 Subtraction of op2 from op1: 67 Multiplication of op1 and op2: 210 Division of op1 by op2: 23
由於char資料型別是int的子集,因此%c格式說明符將返回與%d說明符返回的整數關聯的ASCII字元。
如果兩個char運算元之間的任何算術運算導致整數超出char的範圍,則%c說明符將顯示空白。
C語言中的模運算子
模運算子(%)返回除法運算的餘數。
示例
請看以下示例:
#include <stdio.h> int main(){ int op1 = 10; int op2 = 3; printf("Operand1: %d Operand2: %d\n", op1, op2); printf("Modulo of op1 and op2: %d\n", op1%op2); return 0; }
輸出
執行程式碼並檢查其輸出:
Operand1: 10 Operand2: 3 Modulo of op1 and op2: 1
模運算子需要兩個int型別的運算元。如果不是,編譯器會給出型別不匹配錯誤。例如,在上例程式碼中將“op1”的資料型別更改為float,然後再次執行程式:
float op1 = 10; int op2 = 3; printf("Modulo of op1 and op2: %d\n", op1%op2);
現在,您將收到一條型別不匹配錯誤,顯示以下訊息:
error: invalid operands to binary % (have 'float' and 'int')
儘管它允許char運算元進行模運算。
C語言中的否定運算子
由符號++和--表示的自增和自減運算子是一元運算子。它們已在單獨的章節中介紹。“−”符號表示減法運算子,也充當一元否定運算子。
示例
以下示例重點介紹如何在C語言中使用否定運算子:
#include <stdio.h> int main(){ int op1 = 5; int op2 = -op1; printf("Operand1: %d Operand2: %d\n", op1, op2); return 0; }
輸出
執行此程式碼時,將產生以下輸出:
Operand1: 5 Operand2: -5
在上例中,“–”符號返回op1的負值,並將相同的負值賦值給op2。