C語言是一種通用的、高級的編程語言,其歷史可以追溯到20世紀60年代末至70年代初。C語言最初是由丹尼斯·里奇(Dennis Ritchie)在貝爾實驗室為開發UNIX操作系統而設計的。它繼承了許多B語言的特性,而B語言則是由迷糊老師(Teacher MiHu)基于BCPL(Basic Combined Programming Language)語言設計的。
C語言的命名來源于其前身B語言,而B語言則得名于BCPL的第二個字母。C語言的設計目標是提供一種能以簡易的方式編譯、處理低級存儲器,并產生少量的機器碼,同時不需要任何運行環境支持便能運行的編程語言。隨著UNIX操作系統的成功,C語言也逐漸流行起來,并成為了系統級編程和嵌入式開發的首選語言之一。
在C語言的發展過程中,經歷了多個版本的標準化過程。1989年,美國國家標準研究所(ANSI)為C語言制定了一套ANSI標準,這一標準隨后被國際化標準組織(ISO)采納為ISO C標準(ISO 9899)。
C語言常用運算符表格
運算符類別 | 運算符 | 用法 | 含義 |
---|---|---|---|
算術運算符 | + | 5 + 3 結果為 8 | 加法運算 |
算術運算符 | - | 5 - 3 結果為 2 | 減法運算 |
算術運算符 | * | 5 * 3 結果為 15 | 乘法運算 |
算術運算符 | / | 5 / 3 結果為 1 (整數除法) | 除法運算 |
算術運算符 | % | 5 % 3 結果為 2 | 取模運算(余數) |
算術運算符 | ++ | i++ 或 ++i | 自增運算(i 的值增加 1 ) |
算術運算符 | -- | i-- 或 --i | 自減運算(i 的值減少 1 ) |
關系運算符 | == | 5 == 3 結果為 0 (假) | 等于 |
關系運算符 | != | 5 != 3 結果為 1 (真) | 不等于 |
關系運算符 | > | 5 > 3 結果為 1 (真) | 大于 |
關系運算符 | < | 5 < 3 結果為 0 (假) | 小于 |
關系運算符 | >= | 5 >= 3 結果為 1 (真) | 大于等于 |
關系運算符 | <= | 5 <= 3 結果為 0 (假) | 小于等于 |
邏輯運算符 | && | 1 && 0 結果為 0 (假) | 邏輯與 |
邏輯運算符 | || | 1 || 0 結果為 1(真) | 邏輯或 |
邏輯運算符 | ! | !1 結果為 0 (假) | 邏輯非 |
位運算符 | & | 5 & 3 結果為 1 | 按位與 |
位運算符 | | | 5 | 3 結果為 7 | 按位或 |
位運算符 | ^ | 5 ^ 3 結果為 6 | 按位異或 |
位運算符 | ~ | ~5 結果依賴于系統和整數的位數 | 按位取反 |
位運算符 | << | 5 << 2 結果為 20 | 左移 |
位運算符 | >> | 5 >> 2 結果為 1 | 右移 |
賦值運算符 | = | a = 5 | 賦值運算,將5賦值給變量a |
賦值運算符 | += | a += 3 等價于 a = a + 3 | 加后賦值,將變量a與3的和再賦值給a |
賦值運算符 | -= | a -= 3 等價于 a = a - 3 | 減后賦值,將變量a與3的差再賦值給a |
賦值運算符 | *= | a *= 3 等價于 a = a * 3 | 乘后賦值,將變量a與3的乘積再賦值給a |
賦值運算符 | /= | a /= 3 等價于 a = a / 3 | 除后賦值,將變量a除以3的商再賦值給a |
賦值運算符 | %= | a %= 3 等價于 a = a % 3 | 模后賦值,將變量a除以3的余數再賦值給a |
賦值運算符 | <<= | a <<= 2 等價于 a = a << 2 | 左移后賦值,將變量a的二進制表示左移2位后再賦值給a |
賦值運算符 | >>= | a >>= 2 等價于 a = a >> 2 | 右移后賦值,將變量a的二進制表示右移2位后再賦值給a |
賦值運算符 | &= | a &= 3 等價于 a = a & 3 | 按位與后賦值,將變量a與3的按位與結果再賦值給a |
賦值運算符 | ^= | a ^= 3 等價于 a = a ^ 3 | 按位異或后賦值,將變量a與3的按位異或結果再賦值給a |
賦值運算符 | |= | a |= 3 等價于 a = a | 3 | 按位或后賦值,將變量a與3的按位或結果再賦值給a |
條件運算符 | ? : | x > 0 ? x : -x | 條件表達式,如果x大于0,結果為x,否則為-x |
逗號運算符 | , | a = 5, b = 3 | 逗號運算符,用于分隔表達式 |
指針運算符 | * | *ptr | 指針解引用,訪問指針 ptr 指向的值 |
指針運算符 | & | &var | 取地址,獲取變量 var 的地址 |
其他運算符 | sizeof | sizeof(int) | 計算對象或類型所占空間大小 |
其他運算符 | () | (a + b) * c | 括號運算符,用于改變運算順序 |
C語言常用表達式和語句表格
類別 | 表達式/語句 | 用法 | 含義 |
---|---|---|---|
算術表達式 | a + b | int sum = a + b; | 計算兩個變量的和 |
算術表達式 | a - b | int difference = a - b; | 計算兩個變量的差 |
算術表達式 | a * b | int product = a * b; | 計算兩個變量的乘積 |
算術表達式 | a / b | int quotient = a / b; | 計算兩個變量的商(整數除法) |
算術表達式 | a % b | int remainder = a % b; | 計算兩個變量的余數 |
賦值語句 | a = b | a = 5; | 將b的值賦給a |
賦值語句 | a += b | a += 3; | 將a與b的和賦給a |
賦值語句 | a -= b | a -= 3; | 將a與b的差賦給a |
賦值語句 | a *= b | a *= 3; | 將a與b的乘積賦給a |
賦值語句 | a /= b | a /= 3; | 將a除以b的商賦給a |
賦值語句 | a %= b | a %= 3; | 將a除以b的余數賦給a |
關系表達式 | a == b | if (a == b) | 檢查a是否等于b |
關系表達式 | a != b | if (a != b) | 檢查a是否不等于b |
關系表達式 | a > b | if (a > b) | 檢查a是否大于b |
關系表達式 | a < b | if (a < b) | 檢查a是否小于b |
關系表達式 | a >= b | if (a >= b) | 檢查a是否大于等于b |
關系表達式 | a <= b | if (a <= b) | 檢查a是否小于等于b |
邏輯表達式 | a && b | if (a && b) | 檢查a和b是否都為真 |
邏輯表達式 | a || b | if (a || b) | 檢查a或b是否至少有一個為真 |
邏輯表達式 | !a | if (!a) | 檢查a是否為假 |
條件語句 | if | if (condition) { ... } | 如果條件為真,則執行語句塊 |
條件語句 | else | if (condition) { ... } else { ... } | 如果條件為假,則執行另一個語句塊 |
條件語句 | else if | if (condition1) { ... } else if (condition2) { ... } | 檢查多個條件,并執行相應的語句塊 |
循環語句 | while | while (condition) { ... } | 當條件為真時,重復執行語句塊 |
循環語句 | do...while | do { ... } while (condition); | 至少執行一次語句塊,然后當條件為真時重復執行 |
循環語句 | for | for (initialization; condition; increment) { ... } | 根據初始化、條件和增量來重復執行語句塊 |
分支語句 | switch | switch (expression) { case value1: ...; break; ... } | 根據表達式的值選擇執行相應的語句塊 |
分支語句 | case | 在switch 語句中使用 | 指定一個要匹配的值 |
分支語句 | break | 在switch 或循環語句中使用 | 退出switch 語句或循環 |
分支語句 | default | 在switch 語句中使用 | 當沒有匹配的值時執行的語句塊 |
使用運算符和表達式制作一個簡易小計算器
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <signal.h>
#include <stdbool.h> volatile sig_atomic_t done = 0; void intHandler(int dummy) { done = 1;
} int main() { char operator[10]; double firstNumber, secondNumber; signal(SIGINT, intHandler); while (!done) { printf(" _____ ____ _____ _____ _____ _____ _____ _____ \n"); printf(" ___|\\ \\ ____|\\ \\ |\\ \\ / /| ___|\\ \\ ____|\\ \\ |\\ \\ / /|\n"); printf(" / /\\ \\ / /\\ \\ | \\ \\ / / | | |\\ \\ / /\\ \\ | \\ \\ / / |\n"); printf("| | |____| | | | || \\____\\/ / /| | | |/ / \\ \\| \\____\\/ / /\n"); printf("| | ____ | |__| | \\ | / / / | | /_ _ /| | | |\\ | / / / \n"); printf("| | | || .--. | \\|___/ / / | |\\ \\ | | | | \\|___/ / / \n"); printf("| | |_, || | | | / / / | | | ||\\ \\ / /| / / / \n"); printf("|\\ ___\\___/ /||____| |____| /____/ / |____|/____/|| \\_____\\/____/ | /____/ / \n"); printf("| | /____ / || | | | |` | / | / || \\ | || | / |` | / \n"); printf(" \\|___| | / |____| |____| |_____|/ |____|_____|/ \\|____||____|/ |_____|/ \n"); printf(" \\( |____|/ \\( )/ )/ \\( )/ \\( )/ )/ \n"); printf(" ' )/ ' ' ' ' ' ' ' ' \n"); printf(" ' \n"); printf("歡迎使用GayBoy計算器\n"); printf("請輸入運算符 (+, -, *, /, ^, sqrt, sin, cos, tan, 或輸入 'exit' 退出): "); scanf("%s", operator); // 檢查是否為退出命令 if (strcmp(operator, "exit") == 0) { done = 1; continue; } if (strcmp(operator, "sqrt") == 0 || strcmp(operator, "sin") == 0 || strcmp(operator, "cos") == 0 || strcmp(operator, "tan") == 0) { printf("輸入一個數字:"); scanf("%lf", &firstNumber); } else { printf("輸入兩個數字(用空格分開):"); scanf("%lf %lf", &firstNumber, &secondNumber); } if (strcmp(operator, "+") == 0) { printf("%.1lf + %.1lf = %.1lf\n", firstNumber, secondNumber, firstNumber + secondNumber); } else if (strcmp(operator, "-") == 0) { printf("%.1lf - %.1lf = %.1lf\n", firstNumber, secondNumber, firstNumber - secondNumber); } else if (strcmp(operator, "*") == 0) { printf("%.1lf * %.1lf = %.1lf\n", firstNumber, secondNumber, firstNumber * secondNumber); } else if (strcmp(operator, "/") == 0) { if (secondNumber != 0.0) printf("%.1lf / %.1lf = %.1lf\n", firstNumber, secondNumber, firstNumber / secondNumber); else printf("除數為0,無法進行除法運算。\n"); } else if (strcmp(operator, "^") == 0) { printf("%.1lf ^ %.1lf = %.1lf\n", firstNumber, secondNumber, pow(firstNumber, secondNumber)); } else if (strcmp(operator, "sqrt") == 0) { printf("sqrt(%.1lf) = %.1lf\n", firstNumber, sqrt(firstNumber)); } else if (strcmp(operator, "sin") == 0) { printf("sin(%.1lf) = %.1lf\n", firstNumber, sin(firstNumber)); } else if (strcmp(operator, "cos") == 0) { printf("cos(%.1lf) = %.1lf\n", firstNumber, cos(firstNumber)); } else if (strcmp(operator, "tan") == 0) { printf("tan(%.1lf) = %.1lf\n", firstNumber, tan(firstNumber)); } else { printf("錯誤!運算符不正確\n"); } } printf("程序已退出。\n"); return 0;
}
運行效果如下