C语言程序设计 利用数组处理批量数据
1 為什么要用數(shù)組
一組具有同一屬性的數(shù)據(jù),這一組數(shù)據(jù)就稱為一個(gè)數(shù)組(array)。C語言規(guī)定用方括號(hào)中的數(shù)字來表示下標(biāo),如用s[15]表示s15。這樣就把具有同一屬性的若干個(gè)數(shù)據(jù)組織成為一個(gè)整體。
數(shù)據(jù)是有序數(shù)據(jù)的集合。
在C語言程序中常根據(jù)需要定義數(shù)組,并且用循環(huán)對(duì)數(shù)組中的元素進(jìn)行操作。
2 怎么定義和引用一維數(shù)組
2.1 怎么定義一維數(shù)組
在定義數(shù)組時(shí)需要指定這批變量的類型、數(shù)組名稱和數(shù)組中包含多少個(gè)元素(即變量)。例如:
int a[10];
它表示定義了一個(gè)整型數(shù)組,數(shù)組名為a,數(shù)組有10個(gè)元素。
定義一維數(shù)組的方式為:
類型符 數(shù)組名 [常量表達(dá)式];
使用說明:
(1)數(shù)組名的命名規(guī)則和變量名相同,遵循標(biāo)識(shí)符命名規(guī)則。
(2)方括號(hào)中的常量表達(dá)式用來表示元素的個(gè)數(shù),即數(shù)組長度。下標(biāo)從0開始的。
(3)常量表達(dá)式中可以包括常量和符號(hào)變量,不能包含變量。例如:
這是錯(cuò)誤的。
2.2 怎么引用一維數(shù)組的元素
必須先定義數(shù)組,才能引用數(shù)組中的元素。只能一次引用一個(gè)數(shù)組元素而不能一次引用整個(gè)數(shù)組中的全部元素。例如:
t=a[2];正確
printf("%d %d %d\n",a);錯(cuò)誤
引用數(shù)組元素的表示形式:
數(shù)組名 [下標(biāo)]
如:a[5]表示a數(shù)組中序號(hào)為5的元素。
下標(biāo)可以是整型常量,也可以是整型表達(dá)式。例如:
a[2+3],a[2*3],a[7/3] 相當(dāng)于a[5],a[6],a[2]。
例題:
引用數(shù)組元素。利用循環(huán)結(jié)構(gòu)把數(shù)值0~9賦給數(shù)組a[0] ~a[9],然后按逆序輸出各元素的值。
編寫程序:
程序分析:
第一個(gè)for循環(huán)把數(shù)值0~9賦給數(shù)組a[0] ~a[9],當(dāng)?shù)谝淮螆?zhí)行循環(huán)時(shí),i=0,所以a[0]=0,以此類推。
第二個(gè)for循環(huán)按逆序輸出a數(shù)組中的10個(gè)元素,i的初值為9,因此先輸出a[9],然后輸出a[8],一直到a[0]。
2.3 一維數(shù)組的初始化
(1)在定義數(shù)組時(shí)對(duì)全部數(shù)組元素賦初值。例如:
將數(shù)組元素的初值依次放在一對(duì)大括號(hào)內(nèi),按順序賦給相應(yīng)的數(shù)組元素。即a[0]=0,a[1]=1,a[2]=2。
(2)可以只給一部分元素賦值。例如:
定義的數(shù)組a有5個(gè)元素,前面3個(gè)元素賦值,后2個(gè)元素的初值自動(dòng)為0。
(3)在定義數(shù)組時(shí)不指定數(shù)組長度,系統(tǒng)會(huì)根據(jù)數(shù)據(jù)的數(shù)列確定數(shù)組長度。例如:
可以寫成
大括號(hào)里面有5個(gè)數(shù),系統(tǒng)就會(huì)根據(jù)此自動(dòng)定義a數(shù)組的長度為5。
2.4 一維數(shù)組程序舉例
用數(shù)組來處理求斐波那契數(shù)列問題。輸出數(shù)列中前20個(gè)數(shù)。
思路:數(shù)列中的第一個(gè)數(shù)放在數(shù)組第一個(gè)的元素中,數(shù)列中的第二個(gè)數(shù)放在數(shù)組第二個(gè)的元素中…
數(shù)組序號(hào)為i的元素的值是其前兩個(gè)元素值之和。
編寫程序:
冒泡排序
一般形式:對(duì)n個(gè)數(shù)按升序排序。
原則:大的數(shù)字下沉,小的數(shù)字上升。
如果有n個(gè)數(shù),則要進(jìn)行n-1輪比較。在第一輪比較中進(jìn)行n-1次兩兩比較,在第j輪比較中要進(jìn)行n-j次的兩兩比較。
每經(jīng)過一輪比較與交換,最小的數(shù)上升一位,最后升到第一個(gè)數(shù)。
例題:對(duì)9 8 5 4 2 0按升序排序。
分析:
排序結(jié)果:
0 2 4 5 8 9
編寫程序:
小結(jié):數(shù)字大的往下沉,數(shù)字小的往上升。
3 怎么定義和引用二維數(shù)組
3.1 怎么定義二維數(shù)組
定義二維數(shù)組,例如;
定義a為3×4(3行4列)的數(shù)組,b為5×10(5行10列)的數(shù)組。
定義二維數(shù)組的一般形式:
類型名 數(shù)組名[常量表達(dá)式][常量表達(dá)式];
二維數(shù)組中元素排序的順序是按行存放的,在內(nèi)存中先存放第一行的元素,再存放第二行的元素。對(duì)a[3][4]數(shù)組存放順序如下:(邏輯上的概念)
物理層上的概念圖,如下:
3.2 怎么引用二維數(shù)組的元素
二維數(shù)組元素的表示形式為:
數(shù)組名[下標(biāo)][下標(biāo)]
下標(biāo)可以是整型常量,也可以是整型表達(dá)式,如[2*1-1][1+1]
下標(biāo)值不能超過數(shù)組大小的范圍內(nèi)。
3.3 二維數(shù)組的初始化
(1)分行給二維數(shù)組賦初值。如:
第1個(gè)大括號(hào)內(nèi)的數(shù)據(jù)賦給第1行的元素,第2個(gè)大括號(hào)內(nèi)的數(shù)據(jù)賦給第2行的元素…按行賦初值。
(2)可以將所有數(shù)據(jù)寫在一個(gè)大括號(hào)內(nèi),按數(shù)組排列的順序?qū)Ω髟刭x初值。例如:
寫出一大片,容易漏,不易檢查。
(3)對(duì)部分元素賦初值。例如:
(4)給全部元素都賦初值和第二維長度,系統(tǒng)自動(dòng)算出第一維長度。例如:
在定義時(shí)也可以只對(duì)部分元素賦初值而省略第一維的長度,但應(yīng)分行賦初值。例如:
這寫法可以通知系統(tǒng)數(shù)組有3行,數(shù)組各元素為:
3.4 二維數(shù)組程序舉例
將一個(gè)二維數(shù)組a的行和列的元素互換(即行列轉(zhuǎn)置),存到另一個(gè)二維數(shù)組b中,例如:
解題思路:
將a數(shù)組中第i行j列元素賦給b數(shù)組中j行i列元素,例如a[0][0]賦給b[0][0],a[0][1]賦給b[1][0]…
用雙層循環(huán)來處理,外層循環(huán)控制行的變化,內(nèi)循環(huán)控制列的變化。
4 字符數(shù)組
用來存放字符數(shù)據(jù)的數(shù)組是字符數(shù)組。字符數(shù)組中的一個(gè)元素存放一個(gè)字符。
4.1 怎么定義字符數(shù)組及對(duì)其初始化
把“ab c”一個(gè)4個(gè)字符(包括空格)存放在一個(gè)數(shù)組中,可以這樣做:
先定義數(shù)組c,然后用賦值語句將字符賦給字符數(shù)組中的元素。
還可以在定義字符數(shù)組時(shí)對(duì)各元素賦初值,即初始化。如:
把4個(gè)字符分別賦給c[0]~c[3]這4個(gè)元素。
如果初值個(gè)數(shù)小于數(shù)組長度,則將這些字符賦給數(shù)組中前面那些元素,區(qū)域的元素自動(dòng)定為空字符(即’\0’)。例如:
數(shù)組狀態(tài)如下:
系統(tǒng)會(huì)自動(dòng)根據(jù)初值個(gè)數(shù)確定數(shù)組長度。例如:
數(shù)組c的長度自動(dòng)定為4。這方法可以省去算數(shù)組的個(gè)數(shù),比較方便。
4.2 怎么引用字符數(shù)組
可以引用字符數(shù)組中的某個(gè)元素,得到一個(gè)字符。
例題:輸出一個(gè)菱形圖。
編寫程序:
分析:
在定義字符數(shù)組d時(shí)沒有指定行數(shù),是因?yàn)樵谫x初值中已用了5個(gè)大括號(hào),表明賦給5行中的元素,因此在定義字符數(shù)時(shí)不必指定行數(shù),系統(tǒng)會(huì)自頂定義詞數(shù)組為5行5列。
4.3 字符串和字符串結(jié)束標(biāo)志
系統(tǒng)在處理字符串常量時(shí)會(huì)自動(dòng)加一個(gè)\0作為結(jié)束符,在遇到字符\0時(shí),表示字符串結(jié)束。在程序中往往依靠檢測(cè)\0的位置來判定字符串是否結(jié)束。
\0代表ASCII碼為0的字符,ASCII碼為0的字符是一個(gè)“空操作符”,即它什么也不做,只是一個(gè)辨別的標(biāo)志。
例如:
輸出一個(gè)字符串。
系統(tǒng)自動(dòng)在最后一個(gè)字符\n的后面加一個(gè)\0作為字符串標(biāo)志,遇到\0就停止輸出。
用字符常量來使字符數(shù)組初始化。例如:
等價(jià)于
4.4 怎么進(jìn)行字符數(shù)組的輸入輸出
輸入輸出可以有兩種方法。
(1)逐個(gè)字符輸入輸出。用格式聲明%c輸入或輸出一個(gè)字符。
(2)將整個(gè)字符串一次輸入或輸出。用格式聲明%s,意思是對(duì)字符串的輸入輸出。例如:
在內(nèi)存中數(shù)組c的狀態(tài)如下:
使用說明:
(1)輸出字符不包括結(jié)束符\0。
(2)用%s格式符輸出字符串時(shí),printf函數(shù)中輸出項(xiàng)是字符數(shù)組名,不是數(shù)組元素名。
(3)如果數(shù)組長度大于字符串的實(shí)際長度,也只輸出到遇\0結(jié)束。例如:
也只輸出字符串的有效字符“abc”,而不是輸出10個(gè)字符,這就是用字符串結(jié)束標(biāo)志的好處。
(4)如果喲個(gè)字符數(shù)組中包含一個(gè)以上\0,則遇到第一個(gè)\0時(shí)輸出就結(jié)束了。
(5)可以用scanf函數(shù)輸入一個(gè)字符串。例如:
輸入項(xiàng)c是已定義的字符數(shù)組名,輸入的字符串應(yīng)短于已定義的字符數(shù)組的長度。
如果利用一個(gè)scanf函數(shù)輸入多個(gè)字符串,則在輸入時(shí)以空格分隔。例如:
輸入數(shù)據(jù):
Are you ok?
輸入后str1,str2,str3數(shù)組狀態(tài)如下圖。
(6)scanf函數(shù)中的輸入項(xiàng)如果是字符數(shù)組名,不要再加地址符&,因?yàn)樵贑語言中數(shù)組名代表該數(shù)組的起始地址。下面寫法錯(cuò)誤:
(7)如果想知道數(shù)組str在內(nèi)存中的起始地址,可以用以下輸出語句:
用十進(jìn)制數(shù)形式表示的數(shù)組str的起始地址。
(8)如果以下輸出語句:
按數(shù)組字符數(shù)組名str找到str數(shù)組的起始地址,然后逐個(gè)輸出其中的字符,直到遇\0為止。
4.5 字符串處理函數(shù)
4.6 字符數(shù)組應(yīng)用舉例
有3個(gè)字符串,“China”,“Japan”,“India”要求找出其中“最大”者。
“大”者是指ASCII代碼較大的那個(gè)字符。例如:字符‘B’大于字符‘A’,字符‘a(chǎn)’大于字符‘A’。如果是字符串,則沖第一個(gè)字符開始一一進(jìn)行比較,如果第一個(gè)字符相同,就比較下一個(gè)字符,直到出現(xiàn)不同為止。如果字符串中都是英文,按字母表的排序,字母表中位置在后的為大,例如“then”<“they”。
思路:
定義二維字符數(shù)組,大小為3×10,有3行10列,每一列可以容納10個(gè)字符(包括最后的結(jié)束符\0)。二維數(shù)組的情況如下:
編寫程序:
分析:
在使用字符串函數(shù)時(shí)在本程序的開頭要用#include <string.h>。
空格字符參加比較,它“大于”任何字母字符。
5 提高部分
5.1 為什么在定義二維數(shù)組時(shí)采用兩對(duì)雙括號(hào)的形式
定義二維數(shù)組,例如;
定義a為3×4(3行4列)的數(shù)組,b為5×10(5行10列)的數(shù)組。
好處:
是的二維數(shù)組可被看作是一種特殊的一維數(shù)組,a包括3個(gè)元素,每個(gè)元素又是一個(gè)包含4個(gè)元素的一維數(shù)組。上面定義的二維數(shù)可以理解為定義了3個(gè)一維數(shù)組,相當(dāng)于:
a[0]、a[1]、a[2]看作一維數(shù)組名。表示一維數(shù)組a[0]包含4個(gè)元素。
5.2 對(duì)C的字符串函數(shù)的詳細(xì)說明
5.2.1 gets函數(shù)(讀入字符串函數(shù))
作用是從終端輸入一個(gè)字符串到字符數(shù)組。執(zhí)行函數(shù):gets(str)
從鍵盤輸入:abc
將輸入的字符串"abc"送給字符數(shù)組str(注意,送給數(shù)組的共有4個(gè)字符)。
5.2.2 puts函數(shù)(輸出字符串函數(shù))
puts函數(shù)一般形式為:puts(字符數(shù)組);
其作用是將一個(gè)字符串(以’\0‘結(jié)束的字符序列)輸出到終端。
用puts函數(shù)輸出的字符串中可以包含轉(zhuǎn)義字符。例如:
5.2.3 strcat函數(shù)(字符串連接函數(shù))
strcat函數(shù)一般形式為:
strcat(字符數(shù)組1,字符數(shù)組2)
strcat是STRing CATenate(字符串連接)的縮寫。其作用是連接兩個(gè)字符數(shù)組中的字符串,把字符串2接到字符串1的后面,把結(jié)果放在字符數(shù)組1。例如:
說明:
(1)字符數(shù)組1的長度必須足夠大,以便容納連接后的新字符串。
(2)連接前兩個(gè)字符串的后面都有’\0’,連接時(shí)將字符串1后面的’\0’取消了,只在連接后的字符串保留’\0’。
5.2.4 strcpy函數(shù)(字符串復(fù)制函數(shù))
strcpy函數(shù)一般形式:
strcpy(字符串?dāng)?shù)組1,字符串2)
strcpy是STRing CoPY(字符串復(fù)制)的簡(jiǎn)寫。作用是將字符串2復(fù)制到字符數(shù)組1中去。例如:
執(zhí)行后,c的狀態(tài)如下:
說明:
(1)字符數(shù)組1的長度不應(yīng)小于字符串2的長度。
(2)字符數(shù)組1必須寫成數(shù)組名形式(如c1),字符串2可以是字符數(shù)組名,也可以是一個(gè)字符串常量。例如:
(3)不能用賦值語句將一個(gè)字符常量或字符數(shù)組直接給一個(gè)字符數(shù)組。如:
是錯(cuò)誤寫法。
(4)可以用strncpy函數(shù)將字符串2中前面n個(gè)字符復(fù)制到字符數(shù)組1中去。例如:
作用是將str2中最前面2個(gè)字符復(fù)制到str1中,期待str1中原有的最前面2個(gè)字符。但復(fù)制的字符個(gè)數(shù)n不應(yīng)多于str1中原有的字符(不包括\0)。
5.2.5 strcmp函數(shù)(字符串比較函數(shù))
strcmp函數(shù)一般形式為:
strcmp(字符串1,字符串2)
strcmp是STRing CoMPare(字符比較)的縮寫。它的作用是比較字符串1和字符串2。例如:
字符串比較規(guī)則:對(duì)于兩個(gè)字符串自左向右追個(gè)字符相比(按ASCII碼值大小比較),指導(dǎo)出現(xiàn)不同的字符或遇到’\0’為止。如果全部字符相同,則認(rèn)為相等;若出現(xiàn)不同的字符,則以第一個(gè)不相同的字符的比較結(jié)果為準(zhǔn)。
如果參加比較的兩個(gè)字符串有英文字母組成,則按照在英文字典中位置在后面的為“大”。例如:“then”<“they”。
但應(yīng)注意小寫字母比大寫字母“大”。
比較的結(jié)果由函數(shù)值帶回。
(1)如果字符串1=字符串2,則函數(shù)值為0。
(2)如果字符串1>字符串2,則函數(shù)值為一個(gè)正整數(shù)。
(3)如果字符串1<字符串2,則函數(shù)值為一個(gè)負(fù)整數(shù)。
兩個(gè)字符串比較,只能有strcmp函數(shù)。
5.2.6 strlen函數(shù)(測(cè)字符串長度函數(shù))
strlen函數(shù)一般形式:
strlen(字符數(shù)組)
strlen是STRing LENgth(字符串長度)的縮寫,作用是量出字符串長度的函數(shù),函數(shù)值為字符串中的實(shí)際長度(不包括’\0’在內(nèi))。例如:
輸出為3,不是8,也不是4。
5.2.7 strlwr函數(shù)(轉(zhuǎn)換為小寫字符函數(shù))
strlwr函數(shù)的一般形式:
strlwr(字符串)
strlwr是STRing LoWeRcase(字符串小寫)的縮寫。作用是將字符串中大寫字母換成小寫字母。
5.2.8 strupr函數(shù)(轉(zhuǎn)換大寫字符函數(shù))
strupr函數(shù)的一般形式:
strupr(字符串)
strupr是STRing UPpeRcase(字符串大寫)的縮寫。作用是將字符串中小寫字母換成大寫字母。
6 小結(jié)
數(shù)組時(shí)有序數(shù)據(jù)的集合。
定義數(shù)組要特別注意“下標(biāo)越界”問題。
區(qū)別定義數(shù)組和數(shù)組元素的引用形式。
二維數(shù)組的元素的排列次序?yàn)椤鞍葱信帕小薄T趯?duì)二維數(shù)組初始化時(shí),按行賦初值。
字符串是以字符數(shù)組形式存放的。
\0不是字符串的組成部分,是字符串結(jié)束標(biāo)志。
對(duì)字符串的運(yùn)算要通過字符串函數(shù)來進(jìn)行。使用字符串函數(shù)時(shí),必須在本程序的開頭用#include<string.h>。
數(shù)組的名字代表數(shù)組首元素的地址,不是代表數(shù)組中的全部元素的值。
總結(jié)
以上是生活随笔為你收集整理的C语言程序设计 利用数组处理批量数据的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [html] 进入编辑页面时,如何把光
- 下一篇: 获取原始NMEA 0183语句的方法