18.1.1~18.1.2
[TOC]
第四章:C程序控制
for循環語句
for循環語句的標準格式是:
for(表達式1; 表達式2; 表達式3)
語句
其中,表達式1用于對循環控制變量初始化,表達式2是循環繼續條件,表達式3用于對循環控制變量進行增值;
很多情況下,表達式1和表達式3是用逗號運算符分隔的表達式組,組中各個表達式一次從左向右求值;
在for循環語句的初始化和增量部分,只編寫與循環控制變量有關的表達式;
for循環語句的三個表達式可以選擇省略,但分號
;
需保留。
//計算存款利息
#include <stdio.h>
#include <math.h>
int main(void)
{
double principal=1000, amount, rate=0.05;
int year = 1;
printf("%4s%21s\n", "Year", "Amount on deposit"); //制表
for (; year <= 10; year++)
printf("%4d%21.2f\n", year, amount = principal * pow(1.0 + rate, year));
return 0;
}
-
double
為雙精度浮點數類型,變量比float
更大,精度也更高; -
pow(x,y)
函數能夠求得x的y次冪,它接收兩個double
型實參,返回一個double
型結果。使用pow
函數前,需在源程序中包含頭文件math.h
; - 轉換說明符
%21.2f
表明這個變量占用的域寬為21,保留的精度為2; - 若顯示出的數碼個數小于域寬,將會自動向右對齊。在
%
與域寬之間插入減號-
能實現左對齊。
Switch多重選擇語句
switch
多重選擇語句由一系列case
從句和一個可選的default
從句組成,每個case
只能測試一個整型常量表達式。
#include <stdio.h>
int main(void)
{
int grade;
int aCount = 0;
int bCount = 0;
int cCount = 0;
while ((grade = getchar()) != EOF) {
switch (grade) {
case'A':
case'a':
++aCount;
break;
case'B':
case'b':
++bCount;
break;
case'C':
case'c':
++cCount;
break;
case'\n': //對換行或空白符處理
case'\t':
case' ':
break;
default:
printf("Incorrect letter. Enter a new letter/n");
break;
} //end switch
} //end while
printf("A:%d\n", aCount);
printf("B:%d\n", bCount);
printf("C:%d\n", cCount);
return 0;
}
-
getchar
函數表示從鍵盤讀入一個字符,類型為char
的整數;除了使用getchar
從鍵盤錄入字符外,還可使用scanf_s
,通過轉換說明符%c
來輸入字符; -
EOF
意為“End Of File”,為符號常量,windows中通過Ctrl + Z
實現輸入; - 每個case標簽下可有多個操作語句而不需要使用花括號括起;
- 當每次只需要一個字符時,需要對輸入流中的換行或其他空白符進行處理;
- 除了
int
和char
外,C語言中還有short
(-32768 ~ +32768)、long
(-2147483648 ~ +2147483648),int
取值范圍至少與short
相當但不超出long
,數據類型signed char
可表示范圍在-128 ~ +127之間的整數或計算機字符中的任意字符; - 字符常量用單引號
''
括起來的特定字符表示。
do...while循環語句
執行do...while
循環語句時,首先執行循環體,然后再進行循環條件的測試,因此,do...while
循環語句的循環體至少被執行一次。應當使用花括號括起循環體,以避免與while
循環語句的混淆。
//打印1到10
#include <stdio.h>
int main(void)
{
int counter = 1;
do {
printf("%d\n", counter);
} while (++counter <= 10);
return 0;
}
break和continue語句
- 在
while
、for
、do...while
和switch
語句中,執行break
語句將導致程序立即從這些語句中退出,轉去執行緊跟這些語句之后的下一條語句。 - 在
while
、for
、do..while
循環結構中,執行continue
語句會使控制流略過循環體中剩余語句,重新開始新一輪循環。在while
和do...while
循環結構中,執行continue
語句后,將立即開始下一環節循環條件的測試;在for
循環語句中,執行continue
語句后,將立即開始下一輪環節的增量表達式,然后開始循環條件測試。 - 因此使用
continue
語句時,while
與for
循環結構工作方式不同。
性能提示:對于結構化程序設計技術,適當使用
break
與continue
語句有助于程序運行速度更快。
邏輯運算符
- 邏輯與運算符
&&
、邏輯或運算符||
都是二元運算符,從左到右結合;邏輯非!
是一元運算符,從右向左結合。 - 給出目前為止運算符優先級和結合律:
運算符 | 結合律 | 類型 | ||
---|---|---|---|---|
++ (后綴) -- (后綴) |
從右向左 | 后綴類 | ||
+ - ! () ++ (前綴) -- (后綴) |
從右向左 | 一元類 | ||
* / %
|
從右向左 | 乘法類 | ||
+ -
|
從左向右 | 加減類 | ||
< <= > >=
|
從左向右 | 關系類 | ||
&& |
從左向右 | 邏輯與運算符 | ||
` | ` | 從左向右 | 邏輯或運算符 | |
!= ==
|
從左向右 | 相等類 | ||
?: |
從右向左 | 條件類 | ||
= += -= *= /= %=
|
從右向左 | 賦值類 | ||
, |
從左向右 | 逗號運算符 |
區分相等運算符==
和賦值運算符=
在一常量一變量中使用相等運算符如 x == 7
時,習慣寫為 7 == x
,即將常量寫在左邊,有助于避免運行時發生的邏輯錯誤。
錯誤預防提示:程序編寫完成后,用文本搜索器檢索程序中每一個
=
,檢查其是否使用正確。