1.真值的問題:
//c語言對真值的約束很少,這可能帶來一些問題
#include
intmain
(void
)printf
("result is %ld\n"
,sum)
;return0;
}//結果:
//enter an integer to be summed(q to quit):20
//enter next integer(q to quit):12
//enter next integer(q to quit):q
//enter next integer(q to quit):enter next integer(q to quit):...
//(將不斷輸出"enter next integer(q to quit):")
//說明:
每次判定條件時,status=
1會將status賦值為1
,故表示式的值也為1
,於是永遠為true
輸入q後讀取失敗,q會被保留在stdin中,因此下1次讀取時不會要求輸入,並且也會讀取失敗
實際上,本程式中的status=
1應被修改為status==
1進行比較時,如果1方是常量,將常量放在左側有助於編譯器捕獲錯誤,如:
5=canoes;
//語法錯誤
5==canoes;
//判定canoes是否等於5
因為c語言不允許給常量賦值,而:
cnoes=5;
是允許的,但可能是1個邏輯錯誤
2._bool型別:
表示真/假的變數稱為"布林變數"
(boolean variable)
,_bool就是c語言中布林變數的型別名
c99中增加了該資料型別,之前c語言一直使用int型別來表示真/假值
_bool型別變數只能儲存0
(假)/
1(真)
,如果把其他非0值賦給_bool型別變數,該變數會被設為1
c99提供了stdbool.h,該標頭檔案讓bool成為_bool的別名,並把true/false定義為值為1
/0的常量
include該標頭檔案後,寫出的**可與c++完全相容,因為c++把bool/true/false定義為關鍵字
//例項:
#include
intmain
(void
)printf
("result is %ld\n"
,sum)
;return0;
}//結果:
//enter an integer to be summed(q to quit):12
//enter next integer(q to quit):33
//enter next integer(q to quit):q
//result is 45
3.不確定迴圈(indefinite loop)和計數迴圈(counting loop):
//不確定迴圈是指預先不知道要執行多少次的迴圈:
int n=
10,a=0;
while
(a//計數迴圈是指預先就知道要執行多少次的迴圈:
const
int n=12;
int c=1;
while
(count
4.for迴圈的其他用法:
//使用字元計數(假定該系統使用ascii碼):
char ch;
for(ch=
'a';ch<=
'z';ch++
)//結果:
//a is 97
//b is 98
// ...(此處省略)
//y is 121
//z is 122
////可以省略某些表示式(但分號不能省略):
int ans=
2,n;
for(n=
3;ans<=25;
)//結果:
//4//16
//256
////初始化語句不一定是賦值:
int a=0;
for(
printf
("start\n"
);a<
5;a++
)//結果:
//start
//now is 0
//now is 1
//now is 2
//now is 3
//now is 4
////可以使用逗號運算子:
const
int fo=
46,no=20;
//郵費:第1盎司為46美分,之後每盎司為20美分
int o,c;
//重量(單位為盎司),總費用
for(o=
1,c=fo;o<=
16;o++
,c+=no)
//結果:
//1 $0.46
// ...(此處省略)
//16 $3.46
5.如何選擇迴圈/分支:
入口推薦迴圈用得比出口推薦迴圈多,因為:
①一般原則是在執行迴圈前測試條件比較好
②測試放在迴圈開頭,這樣可讀性比較高
③在許多應用中要求如果一開始就不滿足條件,則直接跳過迴圈
for迴圈和while迴圈完全等價,可以依據個人喜好來選擇
一般而言,涉及初始化/更新變數(如索引計數)時,使用for迴圈,否則使用while迴圈
//如果根據普通變數進行選擇,只能使用if..
.else..
.語句如果根據變數是否在某範圍內決定程式流的去向,使用if..
.else..
.語句更方便
不過switch語句的執行效率更高,生成的**更少
6.switch語句中的列舉:
1個switch語句中不能使用多個列舉中的值
#include
enum weekday
;enum boolean
;int
main
(void
)return0;
}//報錯:
//[error] duplicate case value
//[error] previously used here
//[error] duplicate case value
//[error] previously used here
7.switch語句的多重標籤:
switch
(《表示式》
)//如果表示式是值11或值12...,都執行語句1
//例項:
int num=13;
switch
(num)
8.switch語句中的多條命令:
switch
(《表示式》
)
流程控制細節點
列舉陣列的三種遍歷迴圈?有什麼不同?解答 for while do while 只能遍歷索引陣列 foreach 既能遍歷索引陣列 又能遍歷關聯陣列 陣列指標會重置 reset 每次都會從頭遍歷 while list each 組合 既能遍歷索引陣列 又能遍歷關聯陣列 陣列指標不會重置 reset ...
C語言流程控制
1迴圈 for while do while while 邏輯值的表示式 先判斷再執行 迴圈體do while 邏輯值的表示式 先執行再判斷 注 1 表示式為真,繼續迴圈 表示式為假,退出迴圈 2 表示式中值是否初始化。3 結束退出 運算子 8 逗號運算子 表示式1,表示式2,表示式3,表示式n 結...
C語言流程控制
當分支語句過多時,使用if語句會提高 閱讀難度。判斷浮點數大小時需通過區間來進行,浮點數在進行儲存的時候會喪失了一定的精度,而對比浮點數大小的時候比較的是他們二進位制的數值。判斷浮點數是否等於0 define epsinon 0.0000001 int main return 0 先判斷條件再執行循...