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