首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C Primer Plus 學習筆記:第六章 C 控制語句——循環

     編輯:關於C語言

第六章 C 控制語句:循環

6.1 導讀與循環模式

6.1.1 程序註解要點

  • 循環條件 status == 1 使用相等運算符 ==。
  • scanf() 返回成功讀取項目數;非整數輸入返回 0。
  • 標準循環模式:
    get first value
    while (test successful)
      process value
      get next value

6.1.2 C 風格的讀取循環

status = scanf("%ld", &num); while (status == 1) 可簡寫為 while (scanf("%ld", &num) == 1),利用 C 語法特性使代碼更精簡。

6.2 while 語句

一般形式

while (expression)
    statement;

statement 可以是簡單語句或花括號包裹的復合語句。

6.2.1 終止條件

while 是入口條件循環。循環體必須包含改變判斷表達式值的語句,最終使其為假。僅在計算條件時決定是否繼續。

例:跳過輸入直到首個非空白/非數字字符:
while (scanf("%d", &sum) == 1) ;
空語句獨佔一行提示程序員此為有意設計。

6.3 關系運算符與比較

運算符:< <= == >= > !=。
浮點數比較建議僅用 < 和 >,避免捨入誤差導致邏輯相等的數不相等。可用 math.h 中 fabs() 比較絕對差值。

6.3.1 真值規則

  • 真表達式值為 1,假為 0。
  • 所有非零值視為真,只有 0 為假。while (goats != 0) 等價於 while (goats)。
  • 防錯技巧:常量放左側,如 5 == canoes,誤寫 = 會報錯。
  • C99 引入 _Bool 類型,值只能為 1 或 0。

6.3.2 優先級

關系運算符優先級低於算術運算符、高於賦值運算符。
高優先組:< <= > >=(左結合)
低優先組:== !=(左結合)

6.4 for 循環

for (init; condition; update)
    statement;
  • 初始化:循環開始執行一次(可為任意表達式,甚至 printf())。
  • 條件:每次迭代前求值。
  • 更新:每次迭代結束時計算。

複合賦值:x *= 3*y + 12 等價於 x = x * (3*y + 12)。

6.5 逗號運算符

  • 保證左到右求值順序。
  • 作為順序點,左側副作用在右側求值前生效。
  • 亦用作聲明等場合的分隔符。

6.6 do while 循環

do
    statement;
while (expression);
  • 循環體至少執行一次。
  • 屬於語句,需以分號結尾。
  • for/while 可零次執行。

6.7 數組基礎

  • 線性存儲同類型值序列。
  • C 不檢查下標越界(執行速度優先)。
  • 含 \0 的字符數組即字串。
  • 下標又稱索引、偏移量;元素內存連續。
  • C99 允許變量指定大小(VLA),C90 需用 #define 常量。

經典練習題

Q1:for (value=36; value>0; value/=2) printf("%3d", value); 輸出:36 18 9 4 2 1
Q2:若 value 為 double,條件 value>0 在值小於 1 時仍為真,導致無限循環直到浮點下溢為 0;且 %3d 格式錯誤。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved