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