Posted on 2008-04-22 13:09
silentneil 閱讀(253)
評論(0) 編輯 收藏 引用
第4章 順序結(jié)構(gòu)程序設(shè)計
4.1 C語句概述
1. C的程序結(jié)構(gòu)
一個C程序由若干個源程序文件組成;一個源程序由預(yù)處理命令、全局變量說明和若干個函數(shù)組成;一個函數(shù)由函數(shù)首部和函數(shù)體組成;一個函數(shù)體由局部變量聲明和執(zhí)行語句組成。
P67,圖4.1。
2. C程序的語句
C程序的語句的語句分為5類:
(1)控制語句
用來控制程序流程的語句。
P68,①~⑨
P68,例。
注意:( )表示其中是一個條件,~表示內(nèi)嵌語句。
(2)函數(shù)調(diào)用語句
由一次函數(shù)調(diào)用加一個分號購成的語句。
P68,例。
注意:函數(shù)有庫函數(shù)與自定義函數(shù)兩種,自定義函數(shù)要先定義后調(diào)用。
(3)表達式語句
由一個表達式加一個分號購成的語句。
P68,例。
注意:表達式語句與表達式的區(qū)別在于有無分號。
(4)空語句
只由一個分號購成的語句。
P68,例。
注意:空語句不做任何事情。
(5)復(fù)合語句
把多個語句用{ }括起來的語句。
P69,例。
注意:復(fù)合語句構(gòu)成一個分程序,內(nèi)可包含數(shù)據(jù)聲明和執(zhí)行語句兩部分。
4.2 賦值語句
賦值語句是表達式語句的一種最常用的形式,與其它高級語言相比,C的賦值語句有其獨特之處:
(1)在C中“=”是一個運算符;
(2)在C中賦值語句可以包括在其它表達式中。
P69,例。
4.3 數(shù)據(jù)輸入輸出的概念及在C語言中的實現(xiàn)
(1)把數(shù)據(jù)從外部設(shè)備送到計算機內(nèi)存稱為輸入,把數(shù)據(jù)從計算機內(nèi)存送到外部設(shè)備稱為輸出。外部設(shè)備有鍵盤、顯示器、磁盤等。
(2)C本身沒有輸入輸出的語句,C的輸入輸出是由一批庫函數(shù)來實現(xiàn)的。這些庫函數(shù)有:scanf、printf、getchar、putchar、gets、puts等,它們放在名為stdio.h的庫函數(shù)文件中。
(3)一般要使用這些庫函數(shù)時,要在程序頭加上
#include <stdio.h> 或 #include “stdio.h”
的預(yù)編譯命令,其作用是把這些庫函數(shù)包含到本程序中來。
P71,例。
4.4 字符數(shù)據(jù)的輸入與輸出
4.4.1 字符輸出函數(shù)putchar
格式:putchar(字符變量);
功能:把字符變量中的字符輸出到顯示器。
注意:putchar函數(shù)一般作為一個語句來使用。
P71,例4.1。見ex4-1.c。
4.4.2 字符輸入函數(shù)getchar
格式:getchar( )
功能:從鍵盤輸入一個字符并通過函數(shù)名返回這個字符。
注意:getchar函數(shù)一般在在表達式中使用。
P72,例4.2。
4.5 格式輸入與輸出
4.5.1 格式輸出函數(shù)printf
1. 一般格式
格式:printf(格式控制,輸出表列);
功能:按照“格式控制”中的格式要求輸出“輸出表列”的值。
P72,例。
(1)“格式控制”是一個用雙撇號括起來的字符串,它包括兩種信息:
①格式說明:由%和格式字符組成,不同的格式字符指明了不同的輸出方式。
②普通字符:即要原樣輸出的字符。
P72,例。
(2)“輸出表列”是要輸出的一些數(shù)據(jù),可以是表達式。
P73,例。
2. 格式字符
(1)d格式符:用來輸出十進制整數(shù)。
可有四種用法:%d,%md,%ld,%-d。
其中:m表示輸出寬度,l表示輸出長整數(shù),-表示輸出左對齊。
P73,例。
(2)o格式符:用來輸出八進制整數(shù)。
同樣可以附加m,l,- 等。
注意:符號位當(dāng)成數(shù)據(jù)輸出,不會輸出負數(shù)。
P74,例。
(3)x格式符:用來輸出十六進制整數(shù)。
同樣可以附加m,l,- 等。
注意:符號位當(dāng)成數(shù)據(jù)輸出,不會輸出負數(shù)。
P74,例。
(4)u格式符:用來輸出無符號數(shù)據(jù)。
同樣可以附加m,l,- 等。
P74,例4.3。
(5)c格式符:用來輸出一個字符。
可以附加m,- 等。
P74,例4.4。
(6)s格式符:用來輸出一個字符串。
除了可以附加m,- 外,還可以寫成 %m.ns。
其中:m.n表示寬度為m,只輸出字符串左邊n個字符。
P75,例4.5。
(7)f格式符:用來小數(shù)形式輸出一個實數(shù)。
除了可以附加m,- 外,還可以寫成 %m.nf。
其中:m.n表示寬度為m,保留n位小數(shù)。
P76,例4.6,例4.7,例4.8。
(8)e格式符:用來指數(shù)形式輸出一個實數(shù)。
除了可以附加m,- 外,還可以寫成 %m.nf。
其中:m.n表示寬度為m,小(尾)數(shù)部分保留n位小數(shù)。
P77,例。
(9)g格式符:用來輸出一個實數(shù),形式自動取小數(shù)和指數(shù)中的較短者。
P77,例。
P77,表4.1。
4.5.2 格式輸入函數(shù)scanf
1. 一般格式
格式:scanf(格式控制,地址表列);
功能:按照“格式控制”中的格式要求輸入數(shù)據(jù)到“地址表列”的相應(yīng)變量中。
(1)“格式控制”是一個用雙撇號括起來的字符串,它包括兩種信息:
①格式說明:由%和格式字符組成,不同的格式字符指明了不同的輸入方式。
②普通字符:即要原樣輸入的字符。
P72,例。
(2)“地址表列”是要輸入的變量的地址,一般用地址運算符&求得。
P79,例4.9。
2. 格式字符
scanf函數(shù)的格式字符與printf函數(shù)類似,但有微小區(qū)別。
P80,表4.3,表4.4。
說明:P80,(1)~(4)。
3. 使用scanf函數(shù)應(yīng)請注意的問題
(1)“格式控制”后面是變量的地址,而不是變量。
P81,例。
(2)如果在“格式控制”中有格式說明符外的其它字符,要原樣輸入。
P81,例。
(3)用%c輸入字符時,空格、回車符等都作為有效字符輸入。
P82,例。
(4)在輸入數(shù)據(jù)時,遇到空格、回車、跳格、限寬、非法等會結(jié)束輸入。
P82,例。
4.6 順序結(jié)構(gòu)程序設(shè)計舉例
P82,例4.10。見ex4-10.c。
P83,例4.11。見ex4-11.c。
P84,例4.12。見ex4-12.c。
第5章 選擇結(jié)構(gòu)程序設(shè)計
5.1 關(guān)系運算符和關(guān)系表達式
5.1.1 關(guān)系運算符及其優(yōu)先次序
(1)運算符:>、>=、<、<=、= =、!=
(2)優(yōu)先級:①>、>=、<、<= ②= =、!=
低于算術(shù)運算,高于賦值運算
(3)結(jié)合方向:從左到右
P88,例。
5.1.2 關(guān)系表達式
用關(guān)系運算符把兩個表達式連接起來的式子稱為關(guān)系表達式。
關(guān)系表達式的值為真(1)或假(0)。
P88,例。
5.2 邏輯運算符和邏輯表達式
5.2.1 邏輯運算符及其優(yōu)先次序
(1)運算符:&&、||、!
(2)優(yōu)先級:①! ②&& ③||
!與單目+、-同級,&&、||低于關(guān)系運算
(3)結(jié)合方向:! 從右到左,&&、|| 從左到右
P89,例。
5.2.2 邏輯表達式
用邏輯運算符把兩個表達式連接起來的式子稱為邏輯表達式。
邏輯表達式的值為真(1)或假(0),判斷時非0是真、0是假。
P89,例。
注意:(1)a&&b&&c的判斷,a為0則表達式為0,a為1、b為0則表達式為0,a為1、b為1、c為0則表達式為0,否則表達式為1。
(2)a||b||c的判斷,a為1則表達式為1,a為0、b為1則表達式為1,a為0、b為0、c為1則表達式為1,否則表達式為0。
P91,例。
5.3 If語句
5.3.1 if語句的三種形式
1. 單分支if語句
格式1:if (表達式) 語句
功能1:如果表達式為真,則執(zhí)行語句。
P91,例。
2. 雙分支if語句
格式2:if (表達式) 語句1
else 語句2
功能2:如果表達式為真,則執(zhí)行語句1,否則執(zhí)行語句2。
P92,例。
3. 多分支if語句
格式3:if (表達式1) 語句1
else if (表達式2) 語句2
… …
else if (表達式n) 語句n
else 語句n+1
功能3:如果直到表達式i為真,則執(zhí)行語句i,否則表達式全為假,則執(zhí)行語句n+1。
P92,例。
注意:(1)每個語句都是以分號結(jié)束的;
(2)if或else后只能一個語句,如有多個語句要用{ }括起來。
P93,例5.1,例5.2。
5.3.2 if語句的嵌套
if語句可以嵌套,原則是else與它最近的if配對,如果在內(nèi)層嵌套中要使用單分支if語句,要用{ }把它括起來。
P94,例,例5.3。
5.3.3 條件運算符
1 運算符:? :
2 優(yōu)先級:低于邏輯運算,高于賦值運算
3 結(jié)合方向:從右向左
(4) 條件表達式:
格式:表達式1? 表達式2: 表達式3
功能:若表達式1為真,則條件表達式取表達式2,否則取表達式3。
P96,例。
注意:表達式2與表達式3二者的類型取高的。P37。
P98,例,例5.4。
5.4 Switch語句
格式:switch (表達式)
{case 常量表達式1:語句1
case 常量表達式2:語句2
… …
case 常量表達式n:語句n
[default:語句n+1]
}
功能:如果表達式的值等于常量表達式i,則執(zhí)行語句i及其后面的語句,否則如果都不等,則執(zhí)行語句n+1。
P99,例。
注意:(1)表達式可以是任何類型的;
(2)常量表達式的值不能相同;
(3)各case和default出現(xiàn)次序無關(guān);
(4)可用break中斷執(zhí)行后續(xù)語句;
(5)多個case可共用一組執(zhí)行語句。
P99,例。
5.5 程序舉例
P100,例5.5。見ex5-5-1.c,ex5-5-2.c。
P101,例5.6。
P103,例5.7。見ex5-7。
第6章 循環(huán)結(jié)構(gòu)程序設(shè)計
6.1 概述
在C語言中,構(gòu)成循環(huán)的語句有4種:
1 用goto和if語句;
2 用while語句;
3 用do-while語句;
4 用for語句。
6.2 goto語句以及用goto語句構(gòu)成循環(huán)
格式:goto 語句標(biāo)號;
功能:無條件轉(zhuǎn)到語句標(biāo)號指定的語句中去執(zhí)行。
注意:(1)語句標(biāo)號應(yīng)是合法的標(biāo)識符,可放在任何語句的前面。
(2)用goto語句構(gòu)成循環(huán)不是一種很好的方法。
P106,例,例6.1。
6.3 while語句
格式:while (表達式)
循環(huán)體;
功能:當(dāng)表達式為真時執(zhí)行循環(huán)體的語句,直到表達式為假時退出循環(huán)。
P107,例6.2。
注意:(1)循環(huán)體只能一個語句,如有多個語句要用{ }括起來。
(2)循環(huán)體內(nèi)應(yīng)有使循環(huán)趨于結(jié)束的語句,否則構(gòu)成死循環(huán)。
(3)循環(huán)體可能一次也沒執(zhí)行到,當(dāng)條件表達式為真時進入循環(huán)體,故也稱當(dāng)型循環(huán)。
6.4 do-while語句
格式:do
循環(huán)體;
while (表達式);
功能:先執(zhí)行一次循環(huán)體,然后當(dāng)表達式為真時再執(zhí)行循環(huán)體,直到表達式為假時退出循環(huán)。
P108,例6.3,例6.4。
注意:(1)循環(huán)體只能一個語句,如有多個語句要用{ }括起來。
(2)循環(huán)體內(nèi)應(yīng)有使循環(huán)趨于結(jié)束的語句,否則構(gòu)成死循環(huán)。
(3)循環(huán)體至少執(zhí)行一次,直到條件表達式為假時退出循環(huán),故也稱直到型循環(huán)。
6.5 for語句
格式:for (初值表達式;條件表達式;修正表達式)
循環(huán)體;
功能:先執(zhí)行一次初值表達式,再執(zhí)行條件表達式,若為真則執(zhí)行循環(huán)體,然后執(zhí)行修正表達式,再次執(zhí)行條件表達式進行判斷,直到條件表達式為假時退出循環(huán)。
P110,例。
注意:(1)循環(huán)體只能一個語句,如有多個語句要用{ }括起來。
(2)可以明顯看出循環(huán)體執(zhí)行的次數(shù),故也稱計數(shù)循環(huán)。
(3)三個表達式在一定的條件下都可省。
P111,說明(1)~(7)。
6.6 循環(huán)的嵌套
四種循環(huán)可以互相嵌套,此時外層循環(huán)的每一取值,內(nèi)層循環(huán)要轉(zhuǎn)一圈。但是循環(huán)嵌套不得交叉進行。
P113,說明(1)~(6)。
6.7 幾種循環(huán)的比較
4 四種循環(huán)可以用來處理同一問題,但一般不用goto循環(huán)。
5 while和do-while循環(huán)在循環(huán)體內(nèi)應(yīng)有使循環(huán)趨于結(jié)束的語句,for可用修正表達式來實現(xiàn)。
6 while和do-while循環(huán)在循環(huán)前應(yīng)有初始化的操作,for可用初值表達式來實現(xiàn)。
7 while和do-while及for循環(huán)可用break語句跳出循環(huán)和用continue語句結(jié)束本次循環(huán),而goto循環(huán)不可以用。
6.8 break語句和continue語句
6.8.1 break語句
格式:break;
功能:退出switch選擇或while、do-while、for循環(huán)結(jié)構(gòu)。
P114,例。
6.8.2 contiune語句
格式:contiune;
功能:本次while、do-while、for循環(huán)提前結(jié)束,進入下次循環(huán)。
P115,例。
P115,例6.5。
6.9 程序舉例
P116,例6.6。見ex6-6。
P116,例6.7。見ex6-7。
P118,例6.8。
P118,例6.9。見ex6-9。
P119,例6.10。見ex6-10。
第7章 數(shù)組
數(shù)組是由相同類型的一組數(shù)據(jù)構(gòu)成的。前面我們所學(xué)的類型都是基本類型,而本章所學(xué)的數(shù)組是一種構(gòu)造類型。
7.1 一維數(shù)組的定義和引用
7.1.1 一維數(shù)組的定義
格式:類型標(biāo)識符 數(shù)組名[常量表達式],…;
其中:數(shù)組名是標(biāo)識符,常量表達式是元素個數(shù)。
功能:定義一維數(shù)組,其數(shù)組名由其“數(shù)組名”指定,元素個數(shù)由“常量表達式”指定,元素類型由“類型標(biāo)識符”指定。
P122,例。
注意:(1)C語言中數(shù)組的下標(biāo)從0開始;
(2)常量表達式中可以有符號常量,但不能含有變量;
(3)數(shù)組一旦定義,系統(tǒng)為它分配一個連續(xù)的存儲空間。
7.1.2 一維數(shù)組元素的引用
格式:數(shù)組名[下標(biāo)表達式]
功能:引用已定義的數(shù)組元素
P123,例,例7.1。
注意:(1)下標(biāo)可以是表達式。
(2)下標(biāo)的取值為0~常量表達式-1,超出范圍可能有不可預(yù)料的后果。
7.1.3 一維數(shù)組的初始化
在定義一維數(shù)組時,可對數(shù)組進行初始化。
方法:在定義數(shù)組時在數(shù)組名后加上={初始值,初始值,…,初始值}
P123,例。
注意:(1)可對部分元素初始化。
(2)數(shù)組有進行初始化時常量表達式可省。
7.1.4 一維數(shù)組程序舉例
P124,例7.2。
P124,例7.3。見ex7-3.c。
7.2 二維數(shù)組的定義和引用
7.2.1 二維數(shù)組的定義
格式:類型標(biāo)識符 數(shù)組名[常量表達式][ 常量表達式],…;
功能:定義二維數(shù)組,其數(shù)組名由其“數(shù)組名”指定,每維下標(biāo)的取值范圍由該維的“常量表達式”指定,元素類型由“類型標(biāo)識符”指定。
P125,例。
注意:(1)多維數(shù)組的定義與二維數(shù)組類似;
(2)二維數(shù)組常用來描述數(shù)學(xué)中的矩陣;
(3)對于一個m×n的二維數(shù)組,二維數(shù)組與一維數(shù)組元素的對應(yīng):
二維中第i,j個元素←→一維中第i×n+j個元素
P126,例。
7.2.2 二維數(shù)組的引用
格式:數(shù)組名[下標(biāo)表達式] [下標(biāo)表達式]
功能:引用已定義的二維數(shù)組元素
P126,例。
注意:設(shè)a是一個m×n二維數(shù)組;則
(1)a[i] (對任意固定的i=0,1,…,m-1)是一個長度為n的一維數(shù)組,它的數(shù)組名就是a[i],每個元素是a[i][j];
(2)a可認(rèn)為是一個長度為m一維數(shù)組,它的數(shù)組名就是a,每個元素是a[i];
(3)由上可知,二維數(shù)組可認(rèn)為是一個元素是一維數(shù)組的一維數(shù)組。
7.2.3 二維數(shù)組的初始化
在定義二維數(shù)組時,也可對數(shù)組進行初始化。
方法:在定義數(shù)組時在數(shù)組名后加上={{初始值,…},{初始值,…},…,{初始值,…}}或者加上={初始值,初始值,…,初始值}
P127,例。
注意:(1)可對部分元素初始化;
(2)二維以上數(shù)組有進行初始化時第一維的常量表達式可省。
P128,例。
7.2.4 二維數(shù)組應(yīng)用舉例
P128,例7.4。
P129,例7.5。見ex7-5.c。
7.3 字符數(shù)組和字符串
7.3.1 字符數(shù)組
字符數(shù)組:元素類型為字符型的數(shù)組稱為字符數(shù)組。
格式:char 數(shù)組名[常量表達式],…;
P130,例。
注意:長度為n的字符數(shù)組可用來存放n個字符。
7.3.2 字符數(shù)組的初始化
與普通數(shù)組一樣,可對字符數(shù)組進行初始化。
方法:在定義數(shù)組時在數(shù)組名后加上={字符,字符,…,字符}
P130,例。
注意:初始化時元素個數(shù)可不寫。
7.3.3 字符數(shù)組的引用
字符數(shù)組的每個元素存放的是一個字符。
格式:數(shù)組名[下標(biāo)表達式]
P131,例7.6,例7.7。
7.3.4 字符串和字符串結(jié)束標(biāo)志
(1)字符串
由若干個字符兩邊用雙撇號括起來的稱字符串。
字符串存放時應(yīng)在尾部加一個\0作為結(jié)束標(biāo)志。
長度為n的字符存儲時占用n+1個字節(jié)的存儲空間。
P131,例。
(2)用字符數(shù)組存放字符串
長度為n的字符數(shù)組可用來存放一個長度為n-1的字符串。
字符數(shù)組可用字符串進行整體初始化,且此時會自動在尾部加一個\0。
P132,例。
7.3.5 字符數(shù)組的輸入與輸出
字符數(shù)組輸入輸出的方法有兩種:
(1)逐個元素用scanf和printf函數(shù)輸入輸出
格式:scanf(“%c”,&數(shù)組元素);
printf (“%c”,數(shù)組元素);
功能:前者從鍵盤上取得一個字符送給相應(yīng)的數(shù)組元素;
后者把數(shù)組元素中的字符輸出到顯示器上。
P131,例7.6。
(2)整個字符數(shù)組用scanf和printf函數(shù)輸入輸出
格式:scanf(“%s”,數(shù)組名);
printf (“%s”,數(shù)組名);
功能:前者從鍵盤上取得一個字符串送給相應(yīng)的數(shù)組;
后者把數(shù)組中的整個字符串輸出到顯示器上。
P133,例。
注意:(1)整個字符數(shù)組中的字符串輸出時,\0本身不輸出, 且輸出不換行;
(2)整個字符數(shù)組中的字符串輸出時,是從首地址逐一輸出的,直到遇到第一個\0為止;
(3)C語言中數(shù)組名表示該數(shù)組的首地址,故整個字符數(shù)組輸入時不能在數(shù)組名前加&;
(4)整個字符數(shù)組輸入時遇空格而停止,且會自動在尾部加一個\0。
P133,例。
7.3.6 字符串處理函數(shù)
1. 字符串輸出函數(shù)puts
格式:puts(字符數(shù)組名);
功能:輸出字符數(shù)組中的字符串。
P135,例。
2. 字符串輸入函數(shù)gets
格式:gets(字符數(shù)組名);
功能:從鍵盤輸入一個字符串到字符數(shù)組中。
P135,例。
注意:(1)gets與puts一次只能輸入輸出一個字符串;
(2)gets輸入時不會遇空格而停止,而是遇換行符而停止,也會在尾部自動加上一個\0;
(3)puts輸出時也是到\0為止,還會把\0轉(zhuǎn)成換行符輸出。
3. 字符串連接函數(shù)strcat
格式:strcat(字符串1, 字符串2);
功能:把字符串2的內(nèi)容連接到字符串1之后,函數(shù)返回字符串1。
注意:連接時把第二個字符串的第一個字符覆蓋到第一個字符串的\0上
P136,例。
4. 字符串拷貝函數(shù)strcpy
格式:strcpy(字符串1,字符串2);
功能:把字符串2的內(nèi)容拷貝到字符串1中,函數(shù)返回字符串1。
注意:(1)拷貝時也是到第一個\0為止,連同\0一起拷貝;
(2)對字符串不可有賦值語句:字符串1=字符串2;
P136,例。
5. 字符串比較函數(shù)strcmp
格式:strcmp(字符串1,字符串2);
功能:比較字符串1與的字符串2內(nèi)容:如果字符串1= =字符串2,則返回0;如果字符串1>字符串2,則返回正整數(shù);如果字符串1<字符串2,則返回負整數(shù)。
注意:比較時是以字符的ASCII值進行的。
P137,例。
6. 測字符串長度函數(shù)strlen
格式:strlen(字符串)
功能:返回字符串的實際字符數(shù)。
注意:(1)測字符串長度包括空格,但不包括\0;
(2)遇到\開頭的特殊字符也當(dāng)一個字符對待。
P138,例。
7. 字符換小寫函數(shù)strlwr
格式:strlwr(字符串)
功能:把字符串中的大寫字母換成小寫字母。
8. 字符換大寫函數(shù)strupr
格式:strupr(字符串)
功能:把字符串中的小寫字母換成大寫字母。
7.3.7 字符數(shù)組應(yīng)用舉例
P138,例7.8。見ex7-8.c。
P140,例7.9。見ex7-9.c。