C語言程序基(ji)本結(jie)構(gou)詳解
時間:2017-12-29 來源:未知
在C語言(yan)的(de)補習課程中(zhong),有些學生(sheng)對于(yu)C語言(yan)的(de)結構不是很了(le)解(jie),為此為了(le)讓學生(sheng)對于(yu)C語言(yan)有多的(de)認(ren)識,有利(li)于(yu)促進C語言(yan)的(de)學習,本文對C語言(yan)的(de)程序結構進行(xing)了(le)簡單(dan)的(de)分析與解(jie)釋。
程(cheng)序(xu)(xu)結(jie)構(gou):在C語言(yan)程(cheng)序(xu)(xu)中,一(yi)共(gong)有三種程(cheng)序(xu)(xu)結(jie)構(gou):順序(xu)(xu)結(jie)構(gou)、選(xuan)擇結(jie)構(gou)(分支結(jie)構(gou))、循環結(jie)構(gou);另(ling)外會介(jie)紹一(yi)個重要的(de)結(jie)構(gou),函數的(de)介(jie)紹。
一、流程控制
1.順序結構
默認的流程結構,按照書寫順序執行每(mei)一條(tiao)語句
我們開始接(jie)觸的就是順(shun)序結(jie)構(gou):
#include <stdio.h>
int main(int argc, const char *argv[])
{
printf("Hello World!\n");
return 0;
}
如上面(mian)的(de)例子,就是簡單的(de)順序結構。
程序講解:
#include<stdio.h>:標(biao)準I/O頭(tou)文(wen)件,下文(wen)中的printf需要使用這個(ge)文(wen)件
int main():主函數,一個程序的(de)入口。一個程序有且只有一個main()函數
int:代(dai)表(biao)主函數的返回值類(lei)型(xing)是(shi)int型(xing)
printf():格式化輸出,將括號內的內容打(da)印到顯示器上,打(da)印字符串需要用(yong)雙引號""引上
return 0;:配合(he)主(zhu)函數類型使用,一般來說返回(hui)0的程(cheng)序表示程(cheng)序運(yun)行成(cheng)功
打印的結果為(wei):Hello World!
2.選擇結構
對(dui)給定(ding)的條件進(jin)行判斷(duan),再根(gen)據判斷(duan)結果來決定(ding)執行那(nei)一段代(dai)碼
3.循環結構
*在給定條(tiao)件(jian)成立的情況下,反復執(zhi)行(xing)某一段代碼
二、選擇結構--if
1.使(shi)用(yong)方式
1> if(表達式) 語句(ju)1;
* if(i>1) 恭喜你被黑馬(ma)錄取;
2> if(表(biao)達式) 語(yu)句1;else 語(yu)句2;
* if(i>1) 恭(gong)喜你被黑馬錄取;else 希望你再(zai)接再(zai)厲;
3> if(表達(da)式){}
if(表達式){}
else{}
4> if (){}
else if(){}
else{}
選擇結構(gou):C語言(yan)中常用(yong)的選擇結構(gou)主要有以下兩種:
我們引入了一個(ge)bool類型(xing)(xing)(xing)的(de)(de)值(也叫boolean類型(xing)(xing)(xing),布(bu)爾類型(xing)(xing)(xing)),只(zhi)有兩個(ge)值,即真和(he)假(jia)。C語言的(de)(de)判斷(duan)表達式(shi)(shi)終的(de)(de)值就是(shi)一個(ge)bool類型(xing)(xing)(xing),這個(ge)判斷(duan)表達式(shi)(shi)的(de)(de)bool值就決定了選(xuan)擇(ze)結構如何選(xuan)擇(ze),循(xun)環(huan)(huan)結構如何循(xun)環(huan)(huan);
if else:引入關鍵字:if else else if
if (bool值(zhi)) // 如果bool值(zhi)為(wei)真,則(ze)執行(xing)代碼段1,否(fou)則(ze)執行(xing)代碼段2
{
代碼段1
}
else
{
代碼段2
}
if (bool值1) // 如果bool值1為真,則執行(xing)代碼段1,否則判斷bool值2是否為真
{
代碼段1
}
else if (bool值2) // 若bool值2為真則執(zhi)行代碼段2,否則直接執(zhi)行代碼段3
{ // 開頭的if和結(jie)尾(wei)的else都只能有(you)一(yi)個,但是中(zhong)間的else if可以有(you)好多個
代碼段2
}
else
{
代碼段3
}
這段代碼里,就有了選擇(ze)結構,可以(yi)根據不同的(de)(de)判斷(duan),選擇(ze)相應的(de)(de)執行代碼 。
C 語言的編程中 ‘//’ 的含義(yi)是(shi)注釋的意思(si)。
三、選擇結構--switch
1.使(shi)用格式
* switch(表達式) { case 數值1: break; … default: break;}
* 舉例
switch case:引入(ru)關鍵字:switch case break default
switch (變量) // 執(zhi)行到這一(yi)句時(shi),變量的值是已知(zhi)的
{ // switch case語句(ju)執行時,會用該變(bian)量的值(zhi)依次與各個(ge)case后的常(chang)數(shu)去對比,試(shi)圖找(zhao)到第一個(ge)匹配(pei)項,找(zhao)到匹配(pei)的項目后,
case 常數1: // 就去執行該case對應的代(dai)碼段,如果沒找(zhao)到則繼續下一個case,直(zhi)到default
代碼段(duan)1; // 如果前面的case都(dou)未匹配,則default匹配。
break;
case 常數(shu)2:
代碼段2;
break;
……
default:
代碼段n;
break;
}
*break作用:跳出(chu)整個循環;如果不寫break,語句會一(yi)直(zhi)向下執行,直(zhi)到遇到break。
這個就(jiu)是switch case語(yu)句的選擇語(yu)句。
注意:
第(di)一(yi), case中(zhong)必(bi)須(xu)是常數,而且必(bi)須(xu)是整(zheng)形(xing);
第二, 一(yi)般來(lai)說,每個case中代碼段(duan)后都(dou)必須有一(yi)個break;
第三(san),case之后一般都會有default,雖然語(yu)法(fa)上允許沒有default,但(dan)是建議寫(xie)代碼(ma)時(shi)一定要寫(xie)。
關于(yu)兩種(zhong)的(de)比(bi)(bi)較(jiao)(jiao):if else和switch case的(de)區別:if else適(shi)合(he)對比(bi)(bi)條(tiao)(tiao)件(jian)較(jiao)(jiao)復(fu)雜(za),但是分(fen)支比(bi)(bi)較(jiao)(jiao)少的(de)情況,switch case適(shi)合(he)那種(zhong)對比(bi)(bi)條(tiao)(tiao)件(jian)簡單,但是分(fen)支較(jiao)(jiao)多的(de)情況。通常的(de)做法是:在適(shi)合(he)使(shi)用(yong)switch case的(de)情況下(xia)會優先(xian)使(shi)用(yong)switch case,如果(guo)不適(shi)合(he)則使(shi)用(yong)if else。這一點根據自身情況,選擇(ze)合(he)適(shi)的(de)方(fang)法使(shi)用(yong)。
2.if和switch的比較(jiao)
* 很(hen)多情況(kuang)下可以(yi)互換
* if使用方式(shi)較(jiao)為靈活,使用的較(jiao)多;switch適合有某(mou)個值
四、循環結構
1) 循環機構--for
(1) for:
for (循(xun)(xun)環控制變量初始(shi)化; 循(xun)(xun)環終止(zhi)條件(jian); 循(xun)(xun)環控制變量增(zeng)量)
{
循環體
}
#include <stdio.h>
int main(int argc, const char *argv[])
{
int i, sum = 0;
for(i = 0; i<= 100; i++)
{
sum = sum + i;
}
printf("%d\n", sum);
return 0;
}
循(xun)環執行步驟:
第一, 先進行循環控制變量初始化;
第(di)二, 執行循(xun)環終(zhong)止條件,如(ru)果判斷結(jie)果為(wei)真,則(ze)進(jin)入第(di)三步;如(ru)果為(wei)假則(ze)循(xun)環終(zhong)止并退出;
第(di)三,執行循(xun)環體;
第四,執(zhi)行循(xun)環控(kong)制變量增量,轉入第二步;記住他的(de)循(xun)環步驟,編寫程(cheng)序的(de)時候就會很簡單。上面的(de)事例程(cheng)序就是(shi)從從1 加到(dao)100的(de)運算。
注(zhu)意:for循(xun)環()中(zhong)的(de)三部分除了循(xun)環終止條件外(wai),其他(ta)兩(liang)部分都(dou)可以省略(lve),但標準的(de)for循(xun)環中(zhong),應(ying)該把循(xun)環控制變(bian)量的(de)初始化,增量都(dou)放在(zai)()當中(zhong),并且在(zai)循(xun)環體中(zhong)絕對不應(ying)該更改循(xun)環控制變(bian)量,這個在(zai)編程中(zhong)要注(zhu)意。
2)循環結構--while
特點
*只有滿足條(tiao)件(jian)是才會執(zhi)行循環(huan)體(ti)
*特別注意(yi)是否進(jin)入了死循環
(2) while:
循環控(kong)制變量初始化
while(循環終止條件)
{
循環體
循環控制變(bian)量增量
}
#include <stdio.h>
int main(int argc, const char *argv[])
{
int i = 0, sum = 0;
while(i <= 100)
{
sum = sum + i;
i++;
}
printf("%d\n", sum);
return 0;
}
循(xun)環(huan)(huan)執(zhi)(zhi)行(xing)(xing)步驟:第一,先進行(xing)(xing)循(xun)環(huan)(huan)控制變量初始化(在while之前);第二,判(pan)斷循(xun)環(huan)(huan)終止條(tiao)件,如果(guo)判(pan)斷結果(guo)為真,則進入第三步;如果(guo)為假則不執(zhi)(zhi)行(xing)(xing)循(xun)環(huan)(huan)體;第三,執(zhi)(zhi)行(xing)(xing)循(xun)環(huan)(huan)體;第
特點
*只有滿(man)足條件是才會執行循環體
*特別注意是否(fou)進入(ru)了死循環
3) 循環結構--do while
1.特點
* 一定會執(zhi)行一次循環體
2.使用
*對比(bi)while的使用
(3) do while:
循環控制變量(liang)初始化
do
{
循環體
循(xun)環控制(zhi)變量增量
}while (循環(huan)終(zhong)止條件);
#include< stdio.h>
int main(int argc, const char *argv[])
{
int i = 0, sum = 0;
do
{
sum = sum + i;
i++;
}while(i <= 100);
printf("%d\n", sum);
return 0;
}
循(xun)環(huan)(huan)執(zhi)行(xing)(xing)步驟:第一,先進行(xing)(xing)循(xun)環(huan)(huan)控制(zhi)(zhi)變(bian)量(liang)初始化(在do while之前);第二(er)(er),執(zhi)行(xing)(xing)循(xun)環(huan)(huan)體;第三,執(zhi)行(xing)(xing)循(xun)環(huan)(huan)控制(zhi)(zhi)變(bian)量(liang)增量(liang);第四,判斷循(xun)環(huan)(huan)終(zhong)止條件(jian),如果(guo)(guo)判斷結果(guo)(guo)為真,則(ze)返回第二(er)(er)步;如果(guo)(guo)為假則(ze)直接退(tui)出循(xun)環(huan)(huan);
上(shang)面關于(yu)循環(huan)(huan)的(de)例(li)子都是(shi)一(yi)樣(yang)的(de),但(dan)需要(yao)學(xue)會(hui)比較內部(bu)的(de)區別。不管(guan)哪種(zhong)循環(huan)(huan)結構,都不能缺(que)少(shao)循環(huan)(huan)控(kong)制(zhi)條件(jian)(jian)初(chu)始化,終(zhong)止條件(jian)(jian),循環(huan)(huan)控(kong)制(zhi)變量增量,循環(huan)(huan)體(ti)這四部(bu)分;while循環(huan)(huan)是(shi)先(xian)判斷后執行,do while循環(huan)(huan)是(shi)先(xian)執行后判斷,等循環(huan)(huan)一(yi)次之后,其(qi)實都是(shi)一(yi)樣(yang)的(de)。
補充:
1> 死循(xun)環(huan) for(;;); 有時候我們會在子線(xian)程中(zhong)使用(yong)無限循(xun)環(huan),以(yi)達到(dao)不(bu)讓縣城退出的目(mu)的。
2> 注意:for循環體內變量的作用域
3> while循環(huan)和(he)for循環(huan)的比(bi)較(jiao)
* 可以互換
* for循(xun)環(huan)的(de)變量(liang)可以及時回收

