入門:關(guān)系運算符詳解與常見坑)
C語言零基礎(chǔ)入門關(guān)系運算符到底是什么一篇講透這次我們直接進入 C 語言里最基礎(chǔ)、也最容易出問題的一組運算符——關(guān)系運算符。它不復(fù)雜卻決定了你能不能寫好if判斷、能不能控制while循環(huán)、能不能正確地比較兩個值。很多 C 語言基礎(chǔ)沒打牢的同學(xué)后面寫程序一卡就是半天轉(zhuǎn)頭一看問題往往就出在和寫混了、浮點數(shù)直接相等比較、連續(xù)比較的寫法不符合預(yù)期這類細節(jié)上。所以這篇文章不繞彎子直接把關(guān)系運算符的定義、優(yōu)先級、返回值、常見坑和實戰(zhàn)寫法全部拆開講。對于零基礎(chǔ)讀者我要先明確一件事關(guān)系運算符的計算結(jié)果不是“真”或“假”這種抽象概念而是整數(shù) 1 或 0。這個特性決定了它在分支、循環(huán)和賦值場景里到底是怎么工作的。讀完這篇文章你會拿到一套可以直接在自己電腦上運行的代碼能夠一步步驗證六個關(guān)系運算符的行為還能學(xué)會把判斷邏輯封裝成函數(shù)用循環(huán)處理批量數(shù)據(jù)。文章內(nèi)容圍繞 C 語言程序設(shè)計中的運算符基礎(chǔ)展開適合剛學(xué)完變量、輸入輸出正準(zhǔn)備進入流程控制階段的學(xué)習(xí)者。1. 關(guān)系運算符核心能力速覽在深入代碼之前先把關(guān)系運算符的完整信息整理成一張表。零基礎(chǔ)讀者看這張表能快速知道“它是什么、結(jié)果是什么、用在哪兒”。老讀者也可以把它當(dāng)作復(fù)習(xí)提綱。運算符含義示例運算結(jié)果大于5 31真小于5 30假大于等于5 51真小于等于3 51真等于5 30假!不等于5 ! 31真能力項說明運算結(jié)果關(guān)系表達式返回int類型真為 1假為 0優(yōu)先級級別低于算術(shù)運算符高于賦值運算符結(jié)合方向自左向右主要用途if條件、while循環(huán)、for循環(huán)、三目運算符、條件賦值易錯點與混淆浮點數(shù)直接比較連續(xù)比較寫法錯誤是否需要額外庫否C 語言關(guān)鍵字和運算符原生支持編譯器要求支持 C89/C99 及以上即可通用性極強這張表里最值得記住的一句話是關(guān)系表達式的結(jié)果不是一個“符號”而是一個可以參與運算的整數(shù)值。后續(xù)你會發(fā)現(xiàn)1和0不僅能決定條件真假還能直接參與賦值、算術(shù)運算甚至函數(shù)參數(shù)傳遞。2. 關(guān)系運算符的作用與使用邊界2.1 它能解決什么問題關(guān)系運算符的核心作用是“比較兩個值的大小或是否相等”它的結(jié)果用于控制程序的執(zhí)行流向。舉一個最常見的行為錄入一個學(xué)生成績判斷是否及格。程序需要根據(jù)分數(shù)的不同輸出不同結(jié)論這本質(zhì)上是把一個變量和常量做大小比較int score 68; if (score 60) { printf(成績合格\n); }這里的score 60就是一個關(guān)系表達式。score被讀取出來與60比較如果條件成立整個表達式返回 1if語句判斷為真執(zhí)行下面的代碼塊。這個流程是 C 語言程序設(shè)計的基石幾乎所有帶邏輯的程序都離不開它。2.2 使用邊界它不適合做什么關(guān)系運算符不是萬能的零基礎(chǔ)階段就要建立邊界意識。第一個邊界不要用直接比較浮點數(shù)。浮點數(shù)在計算機內(nèi)部是近似存儲的0.1 0.2的結(jié)果并不嚴(yán)格等于0.3。直接比較很可能得到“假”這不是運算符的問題而是浮點數(shù)表示方式的固有限制。比較浮點數(shù)應(yīng)該使用“差值絕對值小于某個極小量”的方式。第二個邊界不要把關(guān)系表達式和賦值表達式混在一起。if (a 5)在語法上完全合法但它不是比較a是否等于5而是把5賦給a然后判斷a是否為非零值。這個寫法是 C 語言初學(xué)者最經(jīng)典的 bug后面會詳細展開。第三個邊界連續(xù)比較要拆開寫。數(shù)學(xué)里a b c是有意義的但 C 語言里不是。C 語言會先計算a b得到一個 0 或 1再拿這個 0 或 1 與c比較結(jié)果往往和數(shù)學(xué)含義完全不同。3. C 語言零基礎(chǔ)環(huán)境準(zhǔn)備寫 C 代碼不需要很復(fù)雜的開發(fā)工具但至少要有“編譯器 代碼編輯器”兩個組件。編譯器負責(zé)把.c源碼變成可執(zhí)行文件編輯器負責(zé)寫代碼。零基礎(chǔ)建議按下面的方案準(zhǔn)備。3.1 Windows 環(huán)境Windows 上最穩(wěn)妥的方案是安裝 MinGW-w64它提供gcc編譯器。安裝完成后用 VS Code 寫代碼、用終端編譯運行或者直接用 Dev-C 這種集成環(huán)境都可以。安裝 MinGW-w64 后打開命令提示符或 PowerShell輸入下面的命令驗證編譯器是否可用gcc --version如果終端輸出類似gcc (MinGW-W64) 12.2.0的版本信息說明編譯器已經(jīng)安裝成功。3.2 Linux 環(huán)境Linux 大多數(shù)發(fā)行版默認帶有或可以快速安裝 gcc。Ubuntu 和 Debian 使用 aptsudo apt update sudo apt install gcc安裝完成后同樣使用gcc --version驗證。3.3 macOS 環(huán)境macOS 上建議直接安裝 Xcode Command Line Tools。打開終端執(zhí)行xcode-select --install安裝完成后系統(tǒng)會自帶clang編譯器。clang的用法與gcc基本一致后面文章中的命令可以直接替換為clang。3.4 編輯器選擇編輯器沒有強制要求。零基礎(chǔ)階段推薦用 VS Code它有代碼高亮、括號匹配和終端集成對初學(xué)者足夠友好。不要在這個階段追求復(fù)雜 IDE也不要因為糾結(jié)工具而拖延寫代碼。能打開文件、能寫代碼、能調(diào)用終端編譯就完全合格了。4. 編寫、編譯與運行第一個關(guān)系運算符程序環(huán)境準(zhǔn)備好之后直接進入實操。創(chuàng)建一個目錄c_learn在這個目錄下新建文件relation.c寫入下面這段完整代碼#include stdio.h int main() { int a 5; int b 10; printf(a b %d\n, a b); printf(a b %d\n, a b); printf(a 5 %d\n, a 5); printf(b 5 %d\n, b 5); printf(a b %d\n, a b); printf(a ! b %d\n, a ! b); return 0; }用 GCC 編譯。在終端進入c_learn目錄后執(zhí)行g(shù)cc relation.c -o relation這一步會生成一個名為relation的可執(zhí)行文件。如果沒有任何輸出說明編譯通過。如果語法有錯誤編譯器會指出具體行號和問題描述這時照著提示修改即可。運行程序./relationWindows 上運行relation.exe程序輸出如下a b 1 a b 0 a 5 1 b 5 0 a b 0 a ! b 1我來解釋第一行a b 1。a是 5b是 105 10在數(shù)學(xué)上不成立但為什么輸出的是1這里就回到了前面的結(jié)論關(guān)系表達式的結(jié)果是整數(shù)成立時是 1不成立時是 0。所以5 10不成立時輸出 0。但第一行輸出的是a b 1仔細看代碼printf輸出的內(nèi)容是a b %d\n%d對應(yīng)的是a b這個表達式的值。5 10的結(jié)果是 0為什么第一行顯示 1請再仔細讀一遍代碼printf(a b %d\n, a b);這里a b的值是5 10結(jié)果為0所以第一行實際輸出應(yīng)該是a b 0。前面那段輸出示例有誤現(xiàn)在修正。為了確認重新編譯運行一次才是正確做法。真正正確的結(jié)果如下a b 0 a b 1 a 5 1 b 5 0 a b 0 a ! b 1繼續(xù)看每一行。a b是5 10成立結(jié)果是 1。a 5是5 5大于等于包含相等成立結(jié)果是 1。b 5是10 5不成立結(jié)果是 0。a b是判斷相等5 不等于 10結(jié)果是 0。a ! b判斷不相等5 確實不等于 10結(jié)果是 1。這段代碼雖然短但把六個關(guān)系運算符全部驗證了一遍。輸出中的%d專門用來打印整數(shù)正好匹配關(guān)系表達式返回的int值。5. 關(guān)系運算符功能測試與效果驗證5.1 單個運算符逐一驗證下面這段代碼把六個運算符拆開每個都輸出成獨立一行。零基礎(chǔ)讀者可以逐行核對理解每個運算符的行為#include stdio.h int main() { int x 7; int y 7; printf(x y - %d\n, x y); printf(x y - %d\n, x y); printf(x y - %d\n, x y); printf(x y - %d\n, x y); printf(x y - %d\n, x y); printf(x ! y - %d\n, x ! y); return 0; }編譯運行結(jié)果x y - 0 x y - 0 x y - 1 x y - 1 x y - 1 x ! y - 0x和y都是 7所以大于和小于都不成立結(jié)果都是 0。大于等于和小于等于都包含相等情況結(jié)果為 1。等于成立結(jié)果為 1。不等于不成立結(jié)果為 0。這個例子專門展示“相等邊界”下的運算符行為非常典型。5.2 關(guān)系表達式參與整數(shù)運算關(guān)系表達式的結(jié)果是整數(shù)所以它可以跟算術(shù)運算符混用。下面這種寫法在程序設(shè)計中偶爾會出現(xiàn)理解它有助于加深印象#include stdio.h int main() { int a 3; int b 5; int result1 (a b) 10; int result2 (a b) 10; printf((a b) 10 %d\n, result1); printf((a b) 10 %d\n, result2); return 0; }運行結(jié)果(a b) 10 10 (a b) 10 11a b不成立值為 0所以0 10等于 10。a b成立值為 1所以1 10等于 11。這個例子直觀地說明關(guān)系表達式不是“神秘開關(guān)”而是一個可以參與數(shù)值計算的 int 值。當(dāng)然實際項目里幾乎不會有人寫(a b) 10這種代碼但理解這一點有利于看懂復(fù)雜表達式也更容易理解為什么if (a b)能成立——因為條件本質(zhì)上是非零值判斷。5.3 在 if 分支中使用關(guān)系運算符關(guān)系運算符最常見的場景是控制流程??聪旅娴某煽兣袛喑绦?include stdio.h int main() { int score; printf(請輸入成績); scanf(%d, score); if (score 60) { printf(及格\n); } else { printf(不及格\n); } return 0; }運行時輸入 75程序輸出“及格”輸入 58程序輸出“不及格”。這里score 60返回 1 時if進入第一個分支返回 0 時進入else分支。注意%d要求輸入整數(shù)如果輸入非數(shù)字scanf會失敗后續(xù)行為不可預(yù)測這是另一個初學(xué)者容易踩的坑可以放到后面排查清單里。5.4 在 while 循環(huán)中使用關(guān)系運算符關(guān)系運算符也常用于控制循環(huán)。下面的程序從 10 倒數(shù)到 1#include stdio.h int main() { int i 10; while (i 0) { printf(i %d\n, i); i--; } return 0; }i 0成立時返回 1循環(huán)繼續(xù)當(dāng)i減到 0 時0 0不成立返回 0循環(huán)結(jié)束。如果循環(huán)體里忘記寫i--i永遠大于 0程序就會無限循環(huán)終端會不斷刷屏這時可以按Ctrl C終止程序。5.5 關(guān)系表達式作為賦值結(jié)果因為關(guān)系表達式是 int 值所以可以直接把它賦值給變量例如#include stdio.h int main() { int a 10; int b 20; int flag (a b); // flag 得到 1 printf(flag %d\n, flag); return 0; }輸出flag 1這種寫法一般在需要記錄比較結(jié)果時使用。比如一個程序里要多次判斷同一個條件與其每次重復(fù)寫a b不如用一個變量保存結(jié)果提高可讀性也避免重復(fù)計算。6. 把關(guān)系判斷封裝成函數(shù)實現(xiàn)批量條件判斷學(xué)到這一步可以更進一步把關(guān)系判斷邏輯封裝成函數(shù)。這樣程序結(jié)構(gòu)更清晰也方便在多個地方復(fù)用同一套判斷規(guī)則。6.1 判斷成績是否及格先寫一個最簡單的函數(shù)參數(shù)是分數(shù)返回值是 1 或 0#include stdio.h int is_pass(int score) { return score 60; } int main() { int s1 85; int s2 47; printf(分數(shù) %d 是否及格%d\n, s1, is_pass(s1)); printf(分數(shù) %d 是否及格%d\n, s2, is_pass(s2)); return 0; }is_pass函數(shù)內(nèi)部的return score 60;直接把關(guān)系表達式作為返回值。調(diào)用時is_pass(85)返回 1is_pass(47)返回 0。這種設(shè)計比在main里寫一堆if更簡潔也更容易測試。6.2 批量判斷數(shù)組中的元素使用循環(huán)結(jié)合函數(shù)對數(shù)組里的每個元素做判斷這是批量任務(wù)的常見模型#include stdio.h int is_above_average(int value, int average) { return value average; } int main() { int scores[5] {68, 92, 55, 74, 40}; int avg 60; int i; for (i 0; i 5; i) { printf(分數(shù) %d 高于平均線%d\n, scores[i], is_above_average(scores[i], avg)); } return 0; }輸出分數(shù) 68 高于平均線1 分數(shù) 92 高于平均線1 分數(shù) 55 高于平均線0 分數(shù) 74 高于平均線1 分數(shù) 40 高于平均線0這個例子展示了關(guān)系運算符在數(shù)據(jù)處理場景下的用法固定判斷規(guī)則、批量輸入、逐個輸出結(jié)果。實際項目中類似邏輯會被大量使用比如批量檢查配置文件、批量校驗用戶輸入、批量統(tǒng)計超時任務(wù)等。6.3 關(guān)系運算符在輸入合法性校驗中的應(yīng)用在程序設(shè)計中關(guān)系運算符常用于檢查用戶輸入是否在合法范圍內(nèi)#include stdio.h int valid_age(int age) { return age 0 age 150; } int main() { int age; printf(請輸入年齡); scanf(%d, age); if (valid_age(age)) { printf(年齡合法\n); } else { printf(年齡不合法\n); } return 0; }這里使用了和分別判斷下限和上限再用邏輯與把兩個條件組合起來。屬于邏輯運算符是關(guān)系運算符的下一階段內(nèi)容但通過這個例子可以看出關(guān)系運算符是整個條件判斷鏈條的第一環(huán)。6.4 封裝比較函數(shù)時的注意事項封裝函數(shù)時要明確函數(shù)的輸入、輸出和邊界行為。例如is_pass函數(shù)當(dāng)分數(shù)剛好是 60 時score 60返回 1代表及格。如果業(yè)務(wù)要求“大于 60 才及格”就應(yīng)該改用score 60。兩種需求只有一字之差但結(jié)果完全不同。這就是關(guān)系運算符使用中最常見的邊界問題。7. 資源占用與代碼效率觀察初學(xué)者通常不關(guān)心資源占用但 C 語言程序設(shè)計對性能的敏感度很高。這里給出幾個與關(guān)系運算符相關(guān)的觀察維度。7.1 關(guān)系表達式編譯后極快現(xiàn)代 CPU 對比較指令有硬件級支持一個關(guān)系運算符經(jīng)過編譯后往往對應(yīng)一條比較指令例如cmp再配合一條跳轉(zhuǎn)或設(shè)置指令。這意味著a b這樣的表達式執(zhí)行代價極低。程序性能瓶頸通常不在單個比較而在循環(huán)次數(shù)和算法復(fù)雜度。寫代碼時不需要為了“省一次比較”而犧牲可讀性。7.2 避免重復(fù)計算相同的比較觀察這段代碼if (score 60 score 60) { // ... }score 60被計算了兩次。雖然這條語句本身開銷很小但如果比較的內(nèi)容是復(fù)雜函數(shù)調(diào)用結(jié)果就會產(chǎn)生額外開銷。更合理的寫法是提前用變量保存結(jié)果int pass (score 60); if (pass) { // ... }在復(fù)雜項目中這種習(xí)慣能減少重復(fù)執(zhí)行也讓代碼更清晰。7.3 善用括號提升可讀性避免優(yōu)先級問題關(guān)系運算符的優(yōu)先級低于算術(shù)運算符。也就是說int result a b c;在 C 語言中會被解析為int result (a b) c;因為的優(yōu)先級比高。這個行為符合數(shù)學(xué)直覺但零基礎(chǔ)階段不要依賴這種隱式規(guī)則。更穩(wěn)妥的寫法是把意圖用括號顯式寫出來int result (a b) c;花括號、小括號多打幾個不會影響性能但能顯著降低理解成本也避免閱讀者產(chǎn)生歧義。7.4 觀察程序運行過程中的輸出在教學(xué)階段“性能觀察”更多是觀察程序行為和變量變化。可以用printf在循環(huán)中打印中間值從而確認關(guān)系表達式是否按預(yù)期工作。例如#include stdio.h int main() { int i; for (i 0; i 5; i) { printf(i %d, i 2 的結(jié)果 %d\n, i, i 2); } return 0; }輸出i 0, i 2 的結(jié)果 0 i 1, i 2 的結(jié)果 0 i 2, i 2 的結(jié)果 0 i 3, i 2 的結(jié)果 1 i 4, i 2 的結(jié)果 1這種輸出能直觀看出關(guān)系表達式在不同輸入下的返回值變化也是后續(xù)調(diào)試程序時最常用的手段。8. 常見問題與排查方法問題現(xiàn)象可能原因排查方式解決方案明明相等if卻進入不了分支把寫成了變成賦值語句檢查條件語句中的運算符相等比較必須使用浮點數(shù)比較結(jié)果不正確浮點數(shù)精度問題打印變量原始值和差值使用fabs(a - b) 1e-6做近似比較a b c結(jié)果不符合數(shù)學(xué)預(yù)期C 語言按左結(jié)合逐次比較先算a b得 0 或 1再與c比較分步打印中間表達式拆成a b b cscanf輸入后程序行為異常用戶輸入了非數(shù)字字符scanf失敗檢查scanf返回值并打印變量校驗輸入格式處理失敗分支編譯時報錯lvalue required把常量或表達式當(dāng)賦值目標(biāo)查看報錯行號檢查是否誤用為程序死循環(huán)刷屏循環(huán)條件永遠成立沒有修改條件變量查看循環(huán)體是否更新變量在循環(huán)體內(nèi)改變計數(shù)器狀態(tài)關(guān)系表達式在printf中輸出異常格式說明符與表達式類型不匹配檢查%d與參數(shù)是否對應(yīng)統(tǒng)一使用%d輸出 int 結(jié)果用char比較漢字或中文標(biāo)點異常中文字符多字節(jié)存儲單個char無法容納打印字符十六進制值分析使用字符串比較函數(shù)或?qū)捵址旅姘褞讉€重點問題展開說明。8.1 誤寫與這是 C 語言零基礎(chǔ)入門階段最經(jīng)典的錯誤。看這段代碼#include stdio.h int main() { int num 5; if (num 10) { printf(num 是 10\n); } else { printf(num 不是 10\n); } return 0; }這個程序無論num之前是多少都會輸出“num 是 10”。原因在于if (num 10)不是比較而是賦值。它把10賦給num然后檢查num是否為非零值10非零所以條件成立。這種錯誤很難用肉眼發(fā)現(xiàn)因為編譯器通常不會把它當(dāng)作語法錯誤。規(guī)避方法有兩個一是寫條件時先寫常量再寫變量使用if (10 num)的寫法這樣如果不小心寫成了10 num編譯器會立刻報錯二是靠良好習(xí)慣每次寫完條件后檢查一遍運算符。8.2 浮點數(shù)比較問題用比較浮點數(shù)會出問題。演示如下#include stdio.h int main() { float a 0.1; float b 0.2; float c a b; if (c 0.3) { printf(相等\n); } else { printf(不相等\n); printf(c %.10f\n, c); } return 0; }多數(shù)情況下輸出是“不相等”c的實際值接近0.3000000119而不是精確的0.3。正確做法是比較差值的絕對值#include stdio.h #include math.h int main() { float a 0.1; float b 0.2; float c a b; if (fabs(c - 0.3) 0.000001) { printf(近似相等\n); } else { printf(不相等\n); } return 0; }注意使用fabs時需要引入math.h編譯時在 Linux/macOS 下要鏈接數(shù)學(xué)庫gcc float_compare.c -o float_compare -lm8.3 連續(xù)比較的誤解數(shù)學(xué)中的a b c在 C 語言中不是三元比較而是先算a b得到一個 0 或 1再拿這個值和c比較。例如3 5 2先算3 5得 1再算1 2得 1最終結(jié)果為真這顯然不符合數(shù)學(xué)含義。要表示“b 在 a 和 c 之間”必須寫成a b b c。8.4 編譯器報錯時的排查思路新手遇到編譯報錯最容易慌。其實編譯器已經(jīng)給出了絕大多數(shù)信息。典型報錯lvalue required as left operand of assignment說明賦值號左邊不是可修改的變量常見原因是把寫成了??吹筋愃频膱箦e先定位到具體行號檢查該行所有賦值和比較操作。如果編譯器沒有輸出任何錯誤但程序行為不對優(yōu)先用printf打印關(guān)鍵變量的值和關(guān)系表達式的結(jié)果縮小問題范圍。9. 零基礎(chǔ)實戰(zhàn)練習(xí)建議學(xué)運算符必須配合練習(xí)。下面幾道練習(xí)都圍繞關(guān)系運算符設(shè)計難度遞增適合零基礎(chǔ)讀者動手驗證。9.1 練習(xí)一判斷閏年閏年的規(guī)則是能被 4 整除且不能被 100 整除或者能被 400 整除。只使用關(guān)系運算符和算術(shù)運算符實現(xiàn)判斷#include stdio.h int main() { int year; printf(請輸入年份); scanf(%d, year); if ((year % 4 0 year % 100 ! 0) || year % 400 0) { printf(%d 年是閏年\n, year); } else { printf(%d 年不是閏年\n, year); } return 0; }運行示例請輸入年份2024 2024 年是閏年這道題用到了、!、邏輯與、邏輯或||是關(guān)系運算符的典型綜合練習(xí)。9.2 練習(xí)二比較三個數(shù)的大小輸入三個整數(shù)輸出最大值。用關(guān)系運算符完成#include stdio.h int main() { int a, b, c; printf(請輸入三個整數(shù)); scanf(%d %d %d, a, b, c); int max a; if (b max) { max b; } if (c max) { max c; } printf(最大值是%d\n, max); return 0; }這種寫法把max初始化為a然后依次用比較并更新。它避免了復(fù)雜的嵌套if邏輯清晰是關(guān)系表達式在實際算法中的常見用法。9.3 練習(xí)三字符分類輸入一個字符判斷它是數(shù)字字符、大寫字母、小寫字母還是其他字符。這里會用到字符與 ASCII 碼的比較#include stdio.h int main() { char ch; printf(請輸入一個字符); scanf( %c, ch); if (ch 0 ch 9) { printf(數(shù)字字符\n); } else if (ch A ch Z) { printf(大寫字母\n); } else if (ch a ch z) { printf(小寫字母\n); } else { printf(其他字符\n); } return 0; }字符在 C 語言中本質(zhì)上是整數(shù)值所以可以直接用關(guān)系運算符比較。ch 0實際上是在比較ch的 ASCII 碼是否在數(shù)字字符區(qū)間。注意scanf( %c, ch)中%c前加了一個空格用來跳過用戶輸入后殘留的換行符這是常見細節(jié)。9.4 練習(xí)建議與代碼規(guī)范每道練習(xí)都建議按“寫代碼 - 編譯 - 運行 - 改 bug”的流程完成。不要只看不敲C 語言是動手學(xué)科。寫代碼時注意縮進一致、變量名有意義、注釋適當(dāng)??梢园堰@幾個練習(xí)的代碼保存成獨立文件例如leap_year.c、max_number.c、char_type.c后續(xù)學(xué)習(xí)循環(huán)、數(shù)組、函數(shù)時這些代碼還能繼續(xù)改造。10. 總結(jié)與下一步關(guān)系運算符是 C 語言分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)的地基。它的核心知識點有三塊一是六種運算符各自的含義二是關(guān)系表達式返回 int 類型的 1 或 0三是優(yōu)先級規(guī)律——低于算術(shù)運算符、高于賦值運算符。把這三點掌握好if、while、for里的條件判斷就不會出大問題。第一次學(xué)習(xí)建議先用最簡單的程序驗證、、、、、!的返回值再嘗試在if和while中使用它們最后通過封裝函數(shù)和批量判斷來加深理解。最容易踩的坑是兩個和混淆以及浮點數(shù)直接比較。前者會造成程序邏輯完全錯亂后者會讓正確的數(shù)學(xué)等式在程序中不成立。接下來的學(xué)習(xí)路線可以這樣展開先學(xué)邏輯運算符、||、!把多個關(guān)系表達式組合起來然后進入if-else的分支嵌套和switch語句再往后就是while、do-while、for循環(huán)的深入應(yīng)用。關(guān)系運算符貫穿這些內(nèi)容始終每學(xué)一個新語法都可以回來對照這篇基礎(chǔ)文章看看條件判斷如何與新語法配合。把這篇內(nèi)容保存好當(dāng)作 C 語言基礎(chǔ)入門的關(guān)系運算符速查手冊。寫代碼時遇到拿不準(zhǔn)優(yōu)先級的地方不要硬記加一對括號跑一遍程序親眼看到輸出結(jié)果比什么都可靠。等到你能不看參考獨立寫出判斷閏年、比較三個數(shù)大小、統(tǒng)計數(shù)組超過平均線元素個數(shù)這些程序時關(guān)系運算符這一關(guān)就算真正過了。