【回顧】C程序設(shè)計(jì)第六章筆記
C程序設(shè)計(jì)(譚浩強(qiáng)第五版)第六章筆記

1.為什么采用數(shù)組?
①.因?yàn)槔脭?shù)組可以處理批量數(shù)據(jù)。
②.避免定義很多數(shù)據(jù)的繁瑣。
③.數(shù)組可以反映出這些數(shù)據(jù)間的內(nèi)在聯(lián)系
2.一維數(shù)組
格式:類型說明符? 數(shù)組名[常量表達(dá)式]
例子:int a[10];
注意:
①.數(shù)組元素的下標(biāo)從0開始,用“int a[10];”定義數(shù)組,則最大下標(biāo)值為9,不存在數(shù)組元素a[10]
②.“下標(biāo)”可以是整型常量或整型表達(dá)式。
初始化:
(1) 在定義數(shù)組時對全部數(shù)組元素賦予初值。
比如:int a[10]={0,1,2,3,4,5,6,7,8,9};
說明:將數(shù)組中各元素的初值順序放在一對花括號內(nèi),數(shù)據(jù)間用逗號分隔?;ɡㄌ杻?nèi)的數(shù)據(jù)就稱為“初始化列表”。
(2) 可以只給數(shù)組中的一部分元素賦值。
比如:int a[10]={0,1,2,3,4};
說明:定義a數(shù)組有10個元素,但花括號內(nèi)只提供5個初值,這表示只給前面5個元素賦初值,系統(tǒng)自動給后5個元素賦初值為0。
(3) 給數(shù)組中全部元素賦初值為0。
比如:int a[10]={0, 0, 0, 0, 0, 0, 0, 0, 0, 0};或int a[10]={0}; ? ??
說明:這里未賦值的部分元素自動設(shè)定為0
(4) 在對全部數(shù)組元素賦初值時,由于數(shù)據(jù)的個數(shù)已經(jīng)確定,因此可以不指定數(shù)組長度。
比如:int a[5]={1,2,3,4,5};或int a[ ]={1,2,3,4,5};
說明:如果數(shù)組長度與提供初值的個數(shù)不相同,則方括號中的數(shù)組長度不能省略。
3.二維數(shù)組
把二維數(shù)組寫成行(row)和列(column)的排列形式,可以有助于形象化地理解二維數(shù)組的邏輯結(jié)構(gòu)。
格式:類型說明符? 數(shù)組名[常量表達(dá)式][常量表達(dá)式]
初始化:
(1)分行給二維數(shù)組賦初值。(最清楚直觀)
int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
(2)可以將所有數(shù)據(jù)寫在一個花括號內(nèi),按數(shù)組元素在內(nèi)存中的排列順序?qū)Ω髟刭x初值。
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
(3)可以對部分元素賦初值。
①.int a[3][4]={{1},{5},{9}};
結(jié)構(gòu):
1 0 0 0
5 0 0 0
9 0 0 0
②.int a[3][4]={{1},{0,6},{0,0,11}};
1 0 0 0
0 6 0 0
0 0 11 0
③.int a[3][4]={{1},{5,6}};
1 0 0 0
5 6 0 0
0 0 0 0
④.int a[3][4]={{1},{},{9}};
1 0 0 0
0 0 0 0
9 0 0 0
(4)如果對全部元素都賦初值(即提供全部初始數(shù)據(jù)),則定義數(shù)組時對第1維的長度可以不指定,但第2維的長度不能省。
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};=int a[][4]={1,2,3,4,5,6,7,8,9,10,11,12};
注意:在定義時也可以只對部分元素賦初值而省略第1維的長度,但應(yīng)分行賦初值。
比如:int a[][4]={{0,0,3},{},{0,10}};
3.字符數(shù)組
用來存放字符數(shù)據(jù)的數(shù)組是字符數(shù)組。
字符數(shù)組的初始化:
對字符數(shù)組初始化,最容易理解的方式是用“初始化列表”,把各個字符依次賦給數(shù)組中各元素。
比如:char c[10]={′I′,′ ′ ,′a′,′m′,′ ′,′h′,′a′,′p′,′p′,′y′};
說明:把10個字符依次賦給c[0]~c[9]這10個元素
C語言規(guī)定了一個“字符串結(jié)束標(biāo)志”,以字符′\0′作為結(jié)束標(biāo)志。
字符數(shù)組的輸入輸出:
(1) 逐個字符輸入輸出。用格式符“%c”輸入或輸出一個字符。
(2) 將整個字符串一次輸入或輸出。用“%s”格式符,意思是對字符串(string)的輸入輸出。
使用字符串處理函數(shù):
①.puts(字符數(shù)組),稱作「輸出字符串的函數(shù)」
作用:將一個字符串(以′\0′結(jié)束的字符序列)輸出到終端。
注意:
(1).用puts函數(shù)輸出的字符串中可以包含轉(zhuǎn)義字符。
(2).在用puts輸出時將字符串結(jié)束標(biāo)志′\0′轉(zhuǎn)換成′\n′,即輸出完字符串后換行。
②.gets(字符數(shù)組),稱作「輸入字符串的函數(shù)」
作用:從終端輸入一個字符串到字符數(shù)組,并且得到一個函數(shù)值。該函數(shù)值是字符數(shù)組的起始地址。
注意:用puts和gets函數(shù)只能輸出或輸入一個字符串。
③.strcat(字符數(shù)組1, 字符數(shù)組2),稱作「字符串連接函數(shù)」
作用:作用:把兩個字符數(shù)組中的字符串連接起來,把字符串2接到字符串1的后面,結(jié)果放在字符數(shù)組1中,函數(shù)調(diào)用后得到一個函數(shù)值——字符數(shù)組1的地址。
注意:
(1).字符數(shù)組1必須足夠大,以便容納連接后的新字符串。
(2).連接前兩個字符串的后面都有′\0′,連接時將字符串1后面的′\0′取消,只在新串最后保留′\0′。
④.strcpy(字符數(shù)組1, 字符串2),稱作「字符串復(fù)制函數(shù)」
作用:將字符串2復(fù)制到字符數(shù)組1中去。
注意:
(1).字符數(shù)組1必須定義得足夠大,以便容納被復(fù)制的字符串2。字符數(shù)組1的長度不應(yīng)小于字符串2的長度。
(2).“字符數(shù)組1”必須寫成數(shù)組名形式,“字符串2”可以是字符數(shù)組名,也可以是一個字符串常量。
⑤.strcmp(字符串1, 字符串2),稱作「字符串比較函數(shù)」
作用:比較字符串1和字符串2。
字符串比較的規(guī)則是: 將兩個字符串自左至右逐個字符相比(按ASCII碼值大小比較),直到出現(xiàn)不同的字符或遇到′\0′為止。
(1) 如全部字符相同,則認(rèn)為兩個字符串相等;
(2) 若出現(xiàn)不相同的字符,則以第1對不相同的字符的比較結(jié)果為準(zhǔn)。
規(guī)則:
比較的結(jié)果由函數(shù)值帶回。
(1) 如果字符串1與字符串2相同,則函數(shù)值為0。
(2) 如果字符串1>字符串2,則函數(shù)值為一個正整數(shù)。
(3) 如果字符串1<字符串2,則函數(shù)值為一個負(fù)整數(shù)。
注意:
對兩個字符串比較不能直接用str1>str2進(jìn)行比較,因?yàn)閟tr1和str2代表地址而不代表數(shù)組中全部元素,
而只能用 (strcmp(str1,str2)>0)實(shí)現(xiàn),系統(tǒng)分別找到兩個字符數(shù)組的第一個元素,然后順序比較數(shù)組中各個元素
的值。
⑥.strlen(字符數(shù)組),稱作「測字符串長度的函數(shù)」
作用:測試字符串長度的函數(shù)。函數(shù)的值為字符串中的實(shí)際長度(不包括′\0′在內(nèi))。
轉(zhuǎn)換為大小寫的函數(shù):
⑦.strlwr(字符串),稱作「轉(zhuǎn)換為小寫函數(shù)」
作用:將字符串中大寫字母換成小寫字母。
⑧.strupr(字符串),稱作「轉(zhuǎn)換為大寫函數(shù)」
作用:將字符串中小寫字母換成大寫字母。
綜合①~⑧:
以上介紹了常用的8種字符串處理函數(shù),它們屬于庫函數(shù)。庫函數(shù)并非C語言本身的組成部分,而是C語言編譯系統(tǒng)為方便用戶使用而提供的公共函數(shù)。不同的編譯系統(tǒng)提供的函數(shù)數(shù)量和函數(shù)名、函數(shù)功能都不盡相同,使用時要小心,必要時查一下庫函數(shù)手冊。在使用字符串處理函數(shù)時,應(yīng)當(dāng)在程序文件的開頭用#include <string.h>把string.h文件包含到本文件中。
第六章完!