C語言程序設計基礎(第二版)課件:數(shù)組-批量數(shù)據(jù)的表示與處理_第1頁
C語言程序設計基礎(第二版)課件:數(shù)組-批量數(shù)據(jù)的表示與處理_第2頁
C語言程序設計基礎(第二版)課件:數(shù)組-批量數(shù)據(jù)的表示與處理_第3頁
C語言程序設計基礎(第二版)課件:數(shù)組-批量數(shù)據(jù)的表示與處理_第4頁
C語言程序設計基礎(第二版)課件:數(shù)組-批量數(shù)據(jù)的表示與處理_第5頁
已閱讀5頁,還剩97頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

數(shù)組——批量數(shù)據(jù)的表示與處理6.1一維數(shù)組6.2二維數(shù)組6.3字符數(shù)組實操訓練課外練習

6.1一維數(shù)組

何謂一維數(shù)組?一維數(shù)組在程序中如何表示與處理?一維數(shù)組可用來表示具有相同類型且具有線性關系的批量數(shù)據(jù)(數(shù)據(jù)集合),如數(shù)學中的一維向量等。一維數(shù)組作為一個數(shù)據(jù)對象在程序中使用,必須先定義,編譯系統(tǒng)按一定的存儲結(jié)構(gòu)存儲后才能使用。

6.1.1一維數(shù)組的定義與存儲結(jié)構(gòu)

一維數(shù)組定義的一般形式為

基類型符數(shù)組名[常量表達式];

其中,基類型符可以是基本類型中任一種類型的關鍵字,如int、char、float、double等,說明了構(gòu)成數(shù)組各元素的數(shù)據(jù)類型。數(shù)組名是數(shù)組引用的標識符,命名規(guī)則同變量。方括號中的常量表達式表示數(shù)組元素的個數(shù),也稱為數(shù)組的長度。常量表達式是只能包含常量和符號常量,不能包含變量的表達式,即表達式具有確定的值。

例如:

定義數(shù)組就定義了數(shù)組的引用符號、元素的類型和元素的個數(shù)及元素的順序關系。數(shù)組元素的序號是從0開始的,所以最大序號應是常量表達式的值減1。如a[5]表示數(shù)組a有5個元素,分別為a[0]、a[1]、a[2]、a[3]、a[4]。

在定義數(shù)組時需注意以下幾點:

(1)常量表達式中可以使用符號常量,但不能出現(xiàn)變量。例如:

(2)數(shù)組長度說明只能用方括號,不能使用其他形式的括號。

(3)在一個定義語句中,可以定義一個數(shù)組,也可定義多個同一類型的數(shù)組,還可以和同一類型的變量一起定義,但各變量和數(shù)組之間要用逗號分隔。例如:

inti,j,k,a[10],b[20];

在程序中定義的數(shù)組,C語言編譯系統(tǒng)會給數(shù)組元素分配一段連續(xù)的存儲空間,每個元素按數(shù)據(jù)類型占用相同的字節(jié)數(shù)。

6.1.2一維數(shù)組的初始化

定義了數(shù)組,并且編譯系統(tǒng)給其分配了存儲空間,但數(shù)組元素還不具有值。數(shù)組的初始化就是給數(shù)組元素提供初值。數(shù)組的初始化有以下幾種情況:

(1)給全部元素賦初值。例如:

inta[5]={5,8,9,12,3};

給數(shù)組元素提供的初值要用花括號括起來,數(shù)據(jù)之間用逗號分隔。編譯時,把數(shù)據(jù)依次賦給數(shù)組元素,即5賦給a[0],8賦給a[1],9賦給a[2],12賦給a[3],3賦給a[4]。

給全部元素賦值時,在數(shù)組定義中,數(shù)組元素的個數(shù)可以缺省,元素個數(shù)默認為數(shù)據(jù)的個數(shù),定義語句可以寫成

inta[]={5,8,9,12,3};

(2)只給部分元素賦初值。例如:

inta[10]={0,1,2,3};

系統(tǒng)將提供的數(shù)據(jù)從a[0]開始,按順序賦給前面的元素,剩余元素無初值,即將0賦給a[0],1賦給a[1],2賦給a[2],3賦給a[3],a[4]~a[9]無初值。

(3)若給全部元素賦相同初值,也只能給元素逐個賦值,不能給數(shù)組整體賦值。

例如:給5個元素全部賦1值,只能寫為

inta[5]={1,1,1,1,1};

而不能寫為

inta[5]=1;

6.1.3一維數(shù)組元素的引用

雖然數(shù)組是作為一個數(shù)據(jù)對象,但只能引用數(shù)組的元素,而不能整體引用。對一個數(shù)組元素的引用相當于對一個變量的引用。

數(shù)組元素引用的一般形式為

數(shù)組名[下標]

其中,下標只能為整型常量或整型表達式,如為小數(shù),則系統(tǒng)自動取整。

例如:a[5]、a[i+j]、a[i++]都是合法的數(shù)組元素引用形式。

注意:引用數(shù)組元素時,其下標表示元素在數(shù)組中的位置信息,而數(shù)組定義時方括號中的整型常量或整型表達式表示的是元素個數(shù)。

例6.1定義數(shù)組,依次給10個元素賦值0~9,并逆序輸出。

編程思路:這是一個數(shù)組元素引用的例子。因為數(shù)組只能按元素引用,所以賦值和輸出都只能逐個元素依次來進行。

分析:從程序可以看出,利用循環(huán)實現(xiàn)了數(shù)組逐個元素賦初值和輸出。數(shù)組的下標變量與循環(huán)的控制變量使用一個變量i,利用循環(huán)規(guī)律能方便地實現(xiàn)數(shù)組元素的引用。

6.1.4一維數(shù)組的應用程序設計

一維數(shù)組的應用程序設計主要涉及具有線性關系的批量數(shù)據(jù)的處理問題,設計的關鍵是把數(shù)組元素的下標變量與循環(huán)控制變量結(jié)合起來,利用循環(huán)規(guī)律來達到按數(shù)組元素逐個進行處理的目的。

例6.2定義一個具有10個元素的一維數(shù)組,輸入元素的值,并輸出其中最大值。

編程思路:利用循環(huán)輸入10個數(shù),依次賦給數(shù)組元素。求10個元素中的最大數(shù),可定義一個存放最大數(shù)的變量max,先將a[0]賦給max(暫設a[0]中的值為最大數(shù)),然后將max與a[1]~a[9]比較,遇到max小于某一元素值,則將該元素值賦給max,作為當前的最大數(shù)。逐個元素比較完,max中的值就是10個元素中的最大數(shù)。

分析:程序中第一個循環(huán)控制變量i初值為0,循環(huán)終值為9,循環(huán)10次,從鍵盤輸入10個整數(shù),依次賦給a[0]~a[9]。第二個循環(huán)控制變量i初值為1,循環(huán)終值為9,循環(huán)9次,從a[1]開始,與max值比較,找出最大元素。在數(shù)組處理循環(huán)中一定要注意下標越界的問題。如果將for(i=1;i<10;i++)改為for(i=1;i<=10;i++),將會出現(xiàn)什么情況?

例6.3編寫程序,實現(xiàn)用數(shù)組來產(chǎn)生Fibonacci數(shù)列。

編程思路:Fibonacci數(shù)列是1,1,2,3,5,8,13,…。用迭代關系式表示的數(shù)列規(guī)律為

F1=1

F2=1

Fn=Fn-2+Fn-1 (n>2)

即從第3項開始,每一項是前兩項之和。

迭代處理是一類常見的數(shù)據(jù)處理問題,利用數(shù)組和循環(huán)結(jié)構(gòu)能有效地實現(xiàn)這類問題的處理。分析:定義數(shù)組時,按Fibonacci數(shù)列的形成規(guī)律,給數(shù)組前兩個元素賦初值1,從第3個元素開始,由循環(huán)根據(jù)迭代公式求出。

例6.4使用冒泡法將10個數(shù)按由小到大的次序排序并輸出。

編程思路:排序問題是數(shù)據(jù)處理的常見問題之一。冒泡法排序是最基本的排序方法。在程序中實現(xiàn)對n個數(shù)排序,應定義一個有n個元素的一維數(shù)組。對數(shù)組元素兩兩進行比較,如果符合序(前一個小于后一個),則不交換;如果不符合序(前一個大于后一個),則進行交換。如此進行n-1次比較,找出最大的數(shù),交換到最后一個元素(a[n-1])中。這樣的比較過程稱為一輪比較。

經(jīng)過第1輪比較,前面n-1個元素若仍是無序狀態(tài),則需要進行第2輪比較。在第2輪中,對n-1個元素進行n-2次比較,可將最大的數(shù)交換到a[n-2]中。如此需要進行n-1輪比較。最后一輪變?yōu)閍[1]與a[2]的比較。最后在數(shù)組中就存放了排好序的數(shù)。冒泡法排序過程如圖6.1所示(圖中雙向箭頭線表示兩數(shù)比較操作)。

圖6.1冒泡法排序過程

從算法分析可知,冒泡法排序要用雙重循環(huán)來實現(xiàn),外循環(huán)控制輪次,內(nèi)循環(huán)實現(xiàn)每一輪中數(shù)組元素的兩兩比較。若n個數(shù)排序,設外循環(huán)控制變量為i,內(nèi)循環(huán)控制變量為j,則其取值范圍分別為0≤i≤n-1和0≤j≤j-i。

分析:程序中用了4個for循環(huán)。第一個for循環(huán)實現(xiàn)輸入10個待排序的數(shù),依次賦給數(shù)組元素。第二個for循環(huán)實現(xiàn)輸出排序前的10個數(shù)。第三個for雙重循環(huán)實現(xiàn)對10個數(shù)排序。外層循環(huán)語句實現(xiàn)排序數(shù)的9輪比較,內(nèi)層循環(huán)語句實現(xiàn)本輪排序數(shù)的兩兩比較,不符合序則交換。最后一個for循環(huán)實現(xiàn)排序后的10個數(shù)的輸出。以上排序方法如要實現(xiàn)數(shù)據(jù)由大到小排列,只需將第三個for循環(huán)中的循環(huán)嵌套比較條件改為a[j]<a[j+1]即可。

例6.5使用選擇法對10個數(shù)按由小到大的順序排序并輸出。

編程思路:選擇法是對冒泡法排序的改進。冒泡法對n個數(shù)排序,相鄰兩數(shù)比較,只要不符合序都要進行交換。在例6.4中,每輪比較找出一個最大數(shù),放在最后一個數(shù)組元素中。這種方式稱為“下沉法”。換一個思路,每輪比較找出一個最小數(shù),放在最前一個數(shù)組元素中,這種方式則稱為“上浮法”。選擇法排序采用“上浮法”。在內(nèi)循環(huán)中,每輪比較中只將最小值元素的下標記錄在一個變量中,每輪比較結(jié)束后只將所記錄的最小值元素與首元素進行一次交換,以減少冒泡法排序中的交換次數(shù),提高排序效率。

分析:輸入與例6.4相同的數(shù),運行結(jié)果也相同。程序中定義變量k,記錄本輪比較最小值元素的下標號。在內(nèi)循環(huán)外,k賦值i,即設a[i]為最小數(shù)元素,也是本輪比較的首元素。在內(nèi)循環(huán)中,a[k]與其后的元素兩兩比較,如有一元素a[j]比a[k]的值小,就將j記錄在k中。結(jié)束內(nèi)循環(huán)時,a[k]是最小數(shù)元素,與a[i]進行一次交換。內(nèi)循環(huán)控制變量j的初值是i+1,表示前i個元素已排好序,本輪只進行第i個元素后的n-i個元素的比較排序。

只需對程序稍作改進,即可實現(xiàn)數(shù)據(jù)由大到小排序的功能,讀者可自行修改驗證。

6.2二維數(shù)組

何謂二維數(shù)組?二維數(shù)組在程序中如何表示與處理?二維數(shù)組可用來表示具有相同類型且具有二維關系的批量數(shù)據(jù)(數(shù)據(jù)集合),如平面表格數(shù)據(jù)、數(shù)學中的矩陣等。同一維數(shù)組一樣,二維數(shù)組也必須先定義,編譯系統(tǒng)按一定的存儲結(jié)構(gòu)存儲后才能使用。

6.2.1二維數(shù)組的定義與存儲結(jié)構(gòu)

二維數(shù)組定義的一般形式為

基類型符數(shù)組名[常量表達式1][常量表達式2]

其中,基類型符和數(shù)組名的表示與作用同一維數(shù)組的定義。數(shù)組名后跟兩個方括號,其中常量表達式1表示二維數(shù)組的行數(shù),常量表達式2表示二維數(shù)組的列數(shù)。例如:

inta[3][4];

定義了一個3行4列的二維數(shù)組a,包含3×4=12個整型數(shù)據(jù)元素,即

a[0][0],a[0][1],a[0][2],a[0][3]

a[1][0],a[1][1],a[1][2],a[1][3]

a[2][0],a[2][1],a[2][2],a[2][3]

二維數(shù)組的行號和列號都是從0開始的,最大行號是常量表達式1的值減1,最大列號是常量表達式2的值減1。

在程序中定義的二維數(shù)組,C語言編譯系統(tǒng)給各元素按所定義的數(shù)據(jù)類型分配一段連續(xù)的存儲空間。與一維數(shù)組不同的是,二維數(shù)組是二維邏輯結(jié)構(gòu),但存儲器是線性存儲結(jié)構(gòu),二維數(shù)組是按行線性存儲的,即按第1行、第2行、第3行、…,直到最后一行的順序存儲。

6.2.2二維數(shù)組的初始化

定義了二維數(shù)組,只說明了二維數(shù)組的符號名稱、所包含元素的個數(shù)及類型,數(shù)組元素不具有值。要使數(shù)組元素具有值,需對二維數(shù)組初始化。二維數(shù)組的初始化也可以分為如下幾種情況。

(1)按行分段給全部元素賦初值。

(2)線性連續(xù)給全部元素賦初值。

(3)按行分段給部分元素賦初值。

(4)線性連續(xù)給部分元素賦初值。

6.2.3二維數(shù)組元素的引用

對二維數(shù)組的數(shù)據(jù)處理中,也只能對其元素進行引用,不能進行整體引用。二維數(shù)組元素引用的一般形式為

數(shù)組名[行下標][列下標]

其中,行下標和列下標只能為整型常量或整型表達式,如為小數(shù),系統(tǒng)自動取整。行下標和列下標分別表示元素在數(shù)組中的行位置和列位置信息。對二維數(shù)組中一個元素的引用也如同對一個變量的引用一樣。

例6.6從鍵盤輸入一個二維數(shù)組各元素的值,并輸出。

編程思路:同一維數(shù)組一樣,二維數(shù)組也只能按元素引用,給數(shù)組元素輸入值和輸出數(shù)組元素值都只能逐個元素依次來進行。

分析:從程序可以看出,利用雙重循環(huán)實現(xiàn)了數(shù)組逐個元素值的輸入和輸出。數(shù)組的行下標變量、列下標變量與內(nèi)外循環(huán)的控制變量結(jié)合,利用雙重循環(huán)能方便地實現(xiàn)數(shù)組元素的引用。

6.2.4二維數(shù)組的應用程序設計

二維數(shù)組的應用程序設計主要涉及行列結(jié)構(gòu)的批量數(shù)據(jù)處理。程序結(jié)構(gòu)采用雙重循環(huán),把二維數(shù)組元素的行列下標變量與外內(nèi)循環(huán)控制變量相結(jié)合,既能反映批量數(shù)據(jù)的邏輯關系,又能達到按數(shù)組元素逐個進行處理的目的。

例6.7編寫程序,求4個同學、3門課程的單科成績的平均分和所有科目總的平均分,并輸出。

編程思路:4個學生、3門課程成績表屬于二維數(shù)組結(jié)構(gòu)數(shù)據(jù)。定義學生數(shù)據(jù)為行、課程成績?yōu)榱械亩S數(shù)組,則求單科成績平均分需按列求和。為求所有科目總的平均分,需將單科平均分保存,可將二維數(shù)組多定義一行,最后一行用于保存單科平均分。

分析:外循環(huán)控制變量i代表第i門課程,內(nèi)循環(huán)控制變量j代表第j個學生。外循環(huán)一次,內(nèi)循環(huán)執(zhí)行一遍,就求出4個學生一門課程的總分。內(nèi)循環(huán)結(jié)束時,求出第i門課程的平均分,存入a[4][i]中。結(jié)束外循環(huán)后,又對數(shù)組第4行元素求和再除以課程門數(shù)得平均分。

例6.8編寫程序,實現(xiàn)求一個3?×?4矩陣的轉(zhuǎn)置矩陣,并輸出轉(zhuǎn)置前后的矩陣。

編程思路:求轉(zhuǎn)置矩陣是將原矩陣的列變成行,行變成列。利用二維數(shù)組可以很容易地實現(xiàn)。定義原矩陣為a,轉(zhuǎn)置矩陣為b,則在雙重循環(huán)中用“b[i][j]=a[j][i];”語句即可實現(xiàn)轉(zhuǎn)置。

分析:程序中用了3個雙重循環(huán)。第1個雙重循環(huán)實現(xiàn)原矩陣輸出;第2個雙重循環(huán)實現(xiàn)求轉(zhuǎn)置矩陣;第3個雙重循環(huán)實現(xiàn)轉(zhuǎn)置矩陣輸出。

例6.9編寫程序,在一個3?×?3矩陣中找出最大的元素,輸出元素值及其所在的行號和列號,并求主對角線元素值之和。

編程思路:定義一個存放最大數(shù)變量max,以及行號、列號存放變量row、column,先將矩陣二維數(shù)組的首元素賦給max,在雙重循環(huán)中,使每一元素與max比較,遇到大于max的元素,則將其值置換到max中,并將行號、列號記錄在row、column中。求對角線元素值之和是行號與列號相等的元素累加。

分析:對角線元素值之和,使用一個單層循環(huán)即可實現(xiàn),放在外循環(huán)中。找最大元素值可在內(nèi)循環(huán)中實現(xiàn)。在內(nèi)循環(huán)外先設定首元素值為最大元素值。實際上,設定比矩陣中最大元素值小的一個數(shù)值即可。

例6.10利用二維數(shù)組打印楊輝三角形。

編程思路:定義一個二維數(shù)組,存放楊輝三角形數(shù)據(jù)。利用楊輝三角形規(guī)律形成數(shù)據(jù),存入二維數(shù)組。楊輝三角形數(shù)組元素形成的算法是,數(shù)組的第0列和對角線元素值為1;其余各行元素是其上一行同列元素和上一行前一列元素之和。下面以5行數(shù)據(jù)為例編寫程序。

分析:程序中第1個單層循環(huán)使第1列和對角線元素為1。第2個雙重循環(huán)生成楊輝三角形的其他元素。第3個雙重循環(huán)輸出生成的楊輝三角形元素值。定義了常量N作數(shù)組行列數(shù),只要修改N的定義值,可生成任意行數(shù)的楊輝三角形。

6.3字符數(shù)組

何謂字符數(shù)組?字符數(shù)組在程序中如何表示與處理?在C語言中只有字符和字符串常量、字符變量,沒有專門的字符串變量。對于一個字符串的存儲和處理是通過字符數(shù)組來實現(xiàn)的,每個數(shù)組元素存放一個字符。用來存放字符串的數(shù)組稱為字符數(shù)組。

6.3.1字符數(shù)組的定義與初始化

字符數(shù)組的定義形式與數(shù)值數(shù)組的定義形式相同,只是基類型說明符用char。例如:

charc[10];

由于字符型和整型可以通用,也可以定義intc[10]來存儲字符串,但這時每個數(shù)組元素在VC中占用4個字節(jié)的內(nèi)存單元,會造成空間的浪費。

字符數(shù)組也可以是二維的。例如:

charc[5][10];

即為二維字符數(shù)組。

字符數(shù)組也允許在定義時,對部分或全部元素進行初始化賦值。字符數(shù)組初始化是給元素提供字符常量。例如:

charc[10]={'c','','p','r','o','g','r','a','m'};

該字符數(shù)組的存儲結(jié)構(gòu)如圖6.2所示。圖6.2字符數(shù)組的存儲結(jié)構(gòu)

因為字符串是按字符數(shù)組存儲的,所以可以用字符串對字符數(shù)組初始化,而且字符數(shù)組定義時,方括號中的長度可以缺省。用字符串初始化的字符數(shù)組可稱為字符串數(shù)組。

例如:

charc[]="Cprogram";

C語言規(guī)定,一個字符串有一個字符串結(jié)束符“\0”。所以,用字符串給字符數(shù)組提供初值,系統(tǒng)自動在字符串最后一個字符后增加一個字節(jié),用于存儲“\0”。如圖6-2的c[9]中即存“\0”。字符數(shù)組與字符串數(shù)組的不同之處是,字符串數(shù)組的存儲字節(jié)數(shù)比實際字符多一個。

也可以定義、初始化二維字符數(shù)組。初始化的方法同數(shù)值數(shù)組,只是提供的數(shù)據(jù)為字符數(shù)據(jù)。例如:定義一個表示5行5列的“*”菱形圖案的二維字符數(shù)組。

charc[5][5]={{'','','*'},{'','*','','*'},{'*','','','','*'},{'','*','','*'},{'','','*'}};

6.3.2字符數(shù)組的引用

C語言中各種類型的數(shù)組都只能按元素來引用。但字符串數(shù)組的輸入/輸出可以是整體方式。字符串數(shù)組使用printf函數(shù)和scanf函數(shù)以及“%s”格式符,可一次性輸入/輸出一個字符數(shù)組中的字符串。例如:

charc[]="CPrograme";

printf("%s",c);

scanf("%s",c);

注意:scanf中使用的是數(shù)組名。這與數(shù)組元素的引用不同,數(shù)組元素引用是地址方式。字符串輸入結(jié)束后,系統(tǒng)也自動加存一個字符串結(jié)束符“\0”

例6.11輸入一個字符串,然后輸出,測試字符串長度。

編程思路:C語言庫函數(shù)中提供了一個測試字符串函數(shù)intstrlen(str)。使用時,在程序開頭要使用預處理命令#include<string.h>。下面采用字符串輸入/輸出方式。

分析:程序中定義的字符數(shù)組要比輸入的字符串長度大,在輸入字符串時,系統(tǒng)自動加字符串結(jié)束符“\0”。輸出時,識別到“\0”就認為字符串結(jié)束,僅輸出有效字符。字符串長度測試函數(shù)也只計數(shù)有效字符。

例6.12編寫程序,輸出一個鉆石圖形。

編程思路:鉆石圖形用“*”表示。定義一個二維字符數(shù)組,存放圖形字符數(shù)據(jù),采用字符數(shù)組元素輸出方式。

6.3.3字符串處理函數(shù)

C語言提供了豐富的字符串處理函數(shù)。按其功能,字符串處理函數(shù)大致可分為字符串的輸入、輸出、連接、比較、轉(zhuǎn)換、復制、搜索等幾類。使用這些函數(shù)可大大減輕編程的負擔。輸入/輸出字符串函數(shù)puts、gets在使用時應包含頭文件“stdio.h”,其他字符串函數(shù)則應包含頭文件“string.h”。詳細情況請查閱書后附錄D。

下面介紹幾個最常用的字符串處理函數(shù)。

1.字符串輸出函數(shù)puts

格式:

puts(字符數(shù)組);

功能:輸出字符數(shù)組中的字符串。

2.字符串輸入函數(shù)gets

格式:

gets(字符數(shù)組);

功能:從鍵盤輸入一個字符串,存入到指定的字符數(shù)組中。當輸入的字符串中含有空格時,空格也作為有效字符,只以回車作為輸入結(jié)束。這是與scanf函數(shù)不同的。

3.字符串連接函數(shù)strcat

格式:

strcat(字符數(shù)組1,字符數(shù)組2);

功能:把字符數(shù)組2中的字符串連接到字符數(shù)組1中字符串的后面,并刪去字符串1后的串結(jié)束標志“\0”,組成新的字符串。本函數(shù)返回值是字符數(shù)組1的首地址。應注意:字符數(shù)組1應定義得足夠長,否則不能全部裝入被連接的字符串。

4.字符串拷貝函數(shù)strcpy

格式:

strcpy(字符數(shù)組1,字符串2);

功能:把字符串2拷貝到字符數(shù)組1中,字符串2可以是字符串,也可以是字符數(shù)組。串結(jié)束標志“\0”也一同拷貝。

在使用函數(shù)strcpy時應注意以下幾點:

(1)字符數(shù)組1必須定義得足夠大,以便容納被復制的字符串。字符數(shù)組1至少不應小于字符串2的長度,否則不能全部裝入所拷貝的字符串。

(2)字符數(shù)組1必須寫成數(shù)組名形式,而字符串2可以是字符數(shù)組,也可以是字符串常量。

(3)有時也可以只復制字符串2中的前若干個字符,其具體使用格式為

strcpy(字符數(shù)組1,字符串2,m)

表示將字符串2中的前m個字符復制到字符數(shù)組1中,取代字符數(shù)組1中的前m個字符。

5.字符串比較函數(shù)strcmp

格式:

strcmp(字符串1,字符串2);

功能:對兩個字符串字母逐個比較,比較對應字符的ASCII碼值,函數(shù)返回比較結(jié)果。

返回值情況如下:

(1)字符串1=字符串2,返回值為0,表示兩字符串每個字符都相同,字符個數(shù)也相同。

(2)字符串1>字符串2,返回大于0的正整數(shù)值,只要遇到串1的一個字符大于串2的字符,就是串1大于串2。

(3)字符串1<字符串2,返回小于0的負整數(shù)值,只要遇到串1的一個字符小于串2的字符,就是串1小于串2。

6.求字符串長度函數(shù)strlen

格式:

strlen(字符數(shù)組名);

功能:測字符串的實際長度(不含字符串結(jié)束標志“\0”)并作為函數(shù)返回值。

7.小寫轉(zhuǎn)大寫函數(shù)strupr

格式:

strupr(字符串);

功能:將字符串中的小寫字母轉(zhuǎn)換為大寫字母,其他字符不轉(zhuǎn)換(包括大寫字母和非字母)。其中“字符串”可以是字符數(shù)組名或字符串常量,函數(shù)的返回值為轉(zhuǎn)換后的字符串

地址。

8.大寫轉(zhuǎn)小寫函數(shù)strlwr

格式:

strlwr(字符串);

功能:將字符串中的大寫字母轉(zhuǎn)換為小寫字母,其他字符不轉(zhuǎn)換(包括小寫字母和非字母)。其中“字符串”可以是字符數(shù)組名或字符串常量,函數(shù)的返回值為轉(zhuǎn)換后的字符串

地址。

6.3.4字符數(shù)組的應用程序設計

字符數(shù)組中字符數(shù)據(jù)的處理程序設計,其思路方法與數(shù)值數(shù)組相同,只是輸入/輸出可有兩種方式:一是字符數(shù)組元素的引用方式,二是串的整體方式。要注意字符數(shù)組賦初值的方式,它是通過字符賦初值的,字符串沒有結(jié)束符“\0”,應按字符元素輸入/輸出。在字符串的處理中,要善于使用串處理庫函數(shù)。

例6.13從鍵盤輸入一串字符,實現(xiàn)其中大小寫字母的轉(zhuǎn)換并輸出。

編程思路:通過字符串輸入給字符數(shù)組提供值,系統(tǒng)自動添加字符串結(jié)束符“\0”,可用字符串方式輸入/輸出。從附錄A可知,字母大小寫的ASCII碼值相差32,將大寫字母的ASCII碼值加32就轉(zhuǎn)換成小寫字母,將小寫字母的ASCII碼值減32就轉(zhuǎn)換成大寫字母。

分析:程序中使用了字符串長度檢測函數(shù),程序頭部有“#include"string.h"”。在字符串大小寫轉(zhuǎn)換的循環(huán)中是以字符數(shù)組元素引用方式進行處理的。

例6.14輸入一行字符,統(tǒng)計其中英文字母、數(shù)字和其他字符的個數(shù)。

編程思路:定義字母、數(shù)字和其他字符的計數(shù)變量letter、num和other,分別進行計數(shù)。

分析:為使判斷字母、數(shù)字和其他字符的表達式簡潔,將字符元素賦給字符變量c。判斷字母的表達式c>='A'&&c<='Z'||(c>='a'&&c<='z'的運算順序應為((c>='A')&&(c<='Z'))||((c>='a')&&(c<='z')))。

實操訓練

實訓任務六學習使用數(shù)組的程序設計方法

實訓項目1設計程序,從鍵盤上輸入一組數(shù),將它們按從小到大排序,再從鍵盤輸入一個數(shù),將它按大小順序插入到排好序的數(shù)組中。要求輸出排序后的數(shù)組和插入數(shù)據(jù)后的數(shù)組。輸入/輸出界面可參照圖6.3所示。圖6.3實訓項目1界面式樣

實訓指導

1.設計程序

(1)定義數(shù)組。考慮在數(shù)組中插入數(shù),所以數(shù)組定義要比排序數(shù)多一個元素。

(2)輸入一組數(shù)并排序。排序程序可參考例6.4或例6.5。

(3)從鍵盤輸入一個數(shù),將該數(shù)按順序插入到排好序的數(shù)組中。

①尋找插入位置。設插入的數(shù)為n,數(shù)組為a[11],則從數(shù)組首元素開始,依次與每一個元素比較,如果遇到n>a[k],k就是要插入的位置??捎胒or循環(huán)來實現(xiàn)。

②挪開插入位置。從數(shù)組尾元素到插入位置元素a[k],依次后移,即a[i+1]=a[i]。可用for循環(huán)來實現(xiàn)。

③插入,即a[k]=n。

2.調(diào)試運行程序

(1)運行程序,輸入一組無序數(shù)據(jù),檢測是否實現(xiàn)從小到大排序;在數(shù)組的不同位置擬定一個插入數(shù)據(jù),檢測插入是否正確。

(2)修改程序,實現(xiàn)從大到小排序,并在數(shù)組中插入一個數(shù),運行程序,檢測結(jié)果是否正確。

實訓項目2設計程序,實現(xiàn)以下功能:

(1)輸入學生成績表,存入二維數(shù)組中,為避免繁瑣的數(shù)據(jù)輸入,可暫設5個學生、4門課成績。

(2)按格式輸出學生成績表。

(3)查詢大于等于90分的學生,按學生和課程序號輸出成績。

(4)查詢60分以下的學生,按學生和課程序號輸出成績。

輸入/輸出界面可參照圖6.4所示。圖6.4實訓項目2界面式樣

實訓指導

1.設計程序

(1)根據(jù)學生數(shù)和課程門數(shù)定義二維數(shù)組。

(2)為保持與成績表一致的形式輸入成績,可用單循環(huán),循環(huán)一次輸入一個學生的各門課成績,循環(huán)體中用格式輸入語句“scanf("%f%f%f%f",&a[i][0].&a[i][0].&a[i][0].&a[i][0])”。

(3)用格式輸出語句輸出成績表表頭,如“printf("學號課程1課程2課程3課程4\n");”。

(4)用雙重循環(huán)和格式輸出語句輸出成績。

(5)查找大于等于90分的學生,用雙重循環(huán)逐個學生每門課成績與90比較,如果大于或等于90,則按該學生序號和課程序號輸出成績。學生序號按數(shù)組行標加1(i+1),課程序號按列標加1(j+1)。

(6)查找低于60分學生的方法同查找大于等于90分的學生。

2.調(diào)試運行程序

(1)按5個學生、4門課成績輸入數(shù)據(jù),測試運行結(jié)果是否滿足要求。

(2)修改程序,添加學生和課程數(shù),測試運行結(jié)果是否滿足要求。

實訓項目3設計程序,輸入一行電文,按下面規(guī)律譯成密碼,并統(tǒng)計電文長度(字符總數(shù))、電文字母數(shù)、電文非字

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論