一、c語句概述
1、c語句
用來對數據進行加工(完成操作任務)。是構成程序的基本單位,通常一個c程序由若干個函數(系統、用戶)組成,每一函數由若干條語句組成。每條語句總是以‘;’結束。
2、c語句的分類
(1)簡單語句
【1】表達式語句:由一個表達式后跟“;”組成
1—>賦值語句:賦值表達式加一個“;”,如 s = 3.14.59*r*r ; i ++;(與 i++不同)
2—>函數調用語句:函數調用表達式加一個“;”,如 printf("Hello,world \n") ;
【2】結構控制語句(9種):控制程序流程
1—>選擇語句:if ... else switch
2—>循環語句:for while do ... while
3—>轉向語句:continue break return goto
(2)復合語句:將一組語句包括在一對 { } 中
int i=0,sum=0; while(i<=100) { sum=sum+i; i=i+1; }
說明:<1>復合語句的 { } 之后不加分號
<2>復合語句中可以是簡單語句、復合語句和空語句
(3)空語句:只有一個“ ; ”,什么也不做
for(i=0;i<100;i++) { ; }
(4)賦值語句:賦值表達式后加一個分號
if ((a=b)>0) //賦值表達式 t=a; //賦值語句
注意:<1>賦值表達式可以包含在其它表達式中,而賦值語句不可以
<2>賦值語句只能作為一條單獨的語句,或放在復合語句中
<3>賦值語句用途很廣
【1】另一種形式的賦值語句 <變量><運算符> = <表達式>;即<變量>=<變量><運算符><表達式>;
【2】連續賦值語句
int a , b , c ; a=b=c=1 ;
步驟:連續賦值語句應“從右向左”計算 a=b=c=1 ;等價於: a=(b=(c=1) );
1.把常數 1 賦給變量c,表達式(c=1) 的值為1;
2.把表達式(c=1)賦給變量b,表達式(b=(c=1) )的值為1;
3.將右側表達式的值1賦給a , a =1 。
二、結構控制語句(9種)
1、if 語句
(1)if 語句的三種形式
【1】條件執行 if (e) A
main() { int x , y ; x=20 ; y=10 ; if (x>y) printf(“%d”,x); }
【2】分支選擇 if (e) A else B
當e為真值(非0)時執行A,否則執行B或后續語句
main() { int x , y ; x=20 ; y=10 ; if (x>y) printf(“%d”,x); //A或B都可以是單一語句,也可以是復合語句 else //else部分不能獨立存在,即else前一定有一個“;”,它必定是if語句的一部分 printf(“%d”,y); }
注:在C語言中,表達式e的值為非0 時,系統均按“真值”處理。
【3】else if 語句(階梯式的 if - else 語句)
if (number>500) cost=0.15 ; else if (number>300) cost=0.1 ; else if (number>100) cost=0.075 ; else if (number>50) cost=0.05 ; else cost=0 ;
注:一般else與最近的 if 匹配
(2)if 語句的嵌套
If 語句中又包含一個或多個 if 語句稱為 if 語句的嵌套。 實際上只要將前述 if 語句的形式1和2中的內嵌語句用一個 if 語句代替,即成為 if 語句的嵌套。 嵌套的 if 語句還可以嵌套另一個 if 語句,形成多重嵌套
if 嵌套的幾種變形
if ~ else 配對原則:缺少{ }時,else總是和它上面離它最近的未配對的if 配對。
2、switch語句(多分支選擇語句)
(1)格式
其中:表達式e可以是整型,字符型,枚舉型;常量表達式Ci必須與表達式類型一致(整型與字符型通用)
注意:<1>常量表達式Ci僅起語句標號作用,不作求值判斷
<2>常量表達式的值必須是唯一的,沒有先后次序
<3>多個case語句可共用一組執行語句
(2)執行過程
【1】計算表達式e的值;
【2】若與常量表達式Ci值一致,則從語句i,開始執行;直到遇到break語句或switch語句的“ } ”;
【3】若與任何常量表達式值均不一致時,則執行default語句,或執行后續語句。

#include <stdio.h> void main( ) { int x=1,y=0,a=0,b=0; switch(x) { case 1: switch(y) { case 0: a++; break; case 1: b++; break; } case 2: a++;b++; break; case 3: a++;b++; } printf(“\na=%d,b=%d”,a,b); } // a=2 , b=1
3、循環語句
(1)用 goto 語句和if語句構成循環(不提倡)
【1】goto 語句
goto 語句的一般形式:goto 語句標號
語句標號:用於定義程序中的某個位置,用標識符表示,不能只用數字
例:goto start 4(正確)
goto 20 6(錯誤)
goto 語句的功能是無條件地轉到標號所指的語句
注:濫用 goto 語句會破壞結構化,所以應限制使用 goto
【2】用 goto 語句和if語句構成循環

#include "stdio.h" void main() { int k = 1, s = 0; loop: if (k <= 3) { s = s + k; k++; goto loop; } printf(" s = %d ",s); }
(2)用 while 語句(當型循環——先判斷后執行)
【1】一般形式:while(表達式) 循環體語句;
while循環先判斷表達式,若為真則執行循環體,再判斷表達式,重復上述過程,直到表達式為假時退出循環,循環體有可能一次也不執行。
【2】注意事項
1.若循環體包含一條以上的語句,應以復合語句形式出現,用 { } 括起來
2.循環前,必須給循環控制變量賦初值
3.循環體中,必須有改變循環變量值的語句(使循環趨向結束的語句)
4.循環體可以為空,如:
while( ( c=getchar() ) != 'a'); //等價 c=getchar(); while( c != 'a') c=getchar();
5.下列情況,退出while循環:條件表達式不成立(為零),循環體內遇 break 、goto
6.無限循環 while(1) 循環體 ;
(3)用 do-while 語句(直到型循環——先執行后判斷)
一般形式: do
循環體語句;
while(表達式) ; <—(分號不可省略!!!)
先執行循環體,然后判斷表達式。若為真,則再次執行循環體,否則退出循環。
1. do-while 循環,循環體至少執行一次;
2. while和do-while可以解決同一問題,兩者可以互換。
3. while后的表達式一開始就為假時,兩種循環結果不同。
(4)用 for 語句(多功能)
for 語句是 C 語言中最為靈活,使用最廣泛的循環語句,可完全替代while,do-while語句。
【1】一般形式:
常用形式:for(循環變量賦初值;循環條件;循環變量增值) 循環體語句;
For語句可以轉換成while結構:
表達式1; while(表達式2) { 循環體語句; 表達式3; }
【2】其他形式:
1.省略表達式1:應在for之前為變量賦初值。
k = 1; for ( ;k<=3 ;k++) s = s+k;
2.省略表達式2:循環條件始終為“真”,循環不終止,將成為“死循環”,需要在循環體中引入break語句以退出循環。
3.省略表達式3:應另外設法使程序能夠結束,即循環體內應有使循環條件改變的語句。
for( k = 1; k <= 3;) { s = s+k; k++; }
4.省略表達式1、3:完全等同於while語句。
k=1; for(; k<=3; ) { s = s+k; k++; } //等同於 k=1; while( k<=3) { s = s+k; k++; }
5.三個表達式都省略:無初值,不判斷條件,循環變量 不增值,死循環。
6.表達式1、3可以是與循環無關的表達式,也可以是逗號表達式。 for ( s=0 , i=1 ; i<=100 ; i++ ) s=s+i;
7.表達式2可以是關系、邏輯、算術、字符表達式,非0時,執行循環體,為0時退出循環。
#include <stdio.h> main() { int i,c; for(i=0;(c=getchar())!='\n';i+=c) printf("%d ",i+c); }
for ( k=1; k-4; k++) //僅當k的值等於4時終止循環。k-4是數值表達式。
s=s+k;
4、break 語句和 continue 語句
(1)break 語句
【1】用 break 語句可以結束 switch 結構和三種循環。
【2】break只能終止並跳出最近一層的結構。
【3】break不能用於循環語句和switch語句之外的任何其它語句之中。
(2)continue 語句
用 continue 語句可以結束本次循環,即跳過循環體中尚未執行的語句,進行下一次是否執行循環體的判斷。
(3)break 和 continue 語句的區別
【1】continue 語句只結束本次循環,break語句則是結束整個循環。
【2】continue 語句只用於while,do-while,for循環語句中,break語句還可以用於switch語句中。
三、循環的嵌套
定義:一個循環體內又包含了另一個完整的循環結構,稱為循環的嵌套。 三種循環可以互相嵌套,層數不限。 嵌套循環的執行流程。
1、幾種合法的嵌套形式

while() { ...... while() { ...... } ...... }

do { ...... do { ...... }while(); ...... }while();

for( ; ; ) { ...... for( ; ; ) { ...... } ...... }

for( ; ; ) { ...... while( ) { ...... } ...... }

while() { ...... do { ...... }while(); ...... }
2、循環嵌套的說明
【1】嵌套的循環控制變量不能相同
【2】內循環變化快,外循環變化慢

void main() { int i,j; for(i=1;i<10;i++) printf("%4d",i); printf("\n------------------------------------\n"); for(i=1;i<10;i++) for(j=1;j<10;j++) printf((j==9)?"%4d\n":"%4d",i*j); } //條件運算符: j=9,輸出i*j,再回車換行。 j≠9,只輸出i*j。
【3】正確確定循環體
【4】循環控制變量常用求解的問題掛鈎
注意:循環可以互相嵌套,但不能相互交叉
四、幾種循環的比較
1、不提倡用 goto 構成循環
2、關於循環的控制
3、循環體的執行
【1】先判斷條件,循環體可能一次也不執行——while語句
【2】后判斷條件,循環體至少執行一次——do-while語句
4、for循環功能強,兩個界限不清,使程序設計較隨意
5、都可以用 break 語句終止循環和 用 continue 語句結束本次循環