《C語言程序設(shè)計 》課件-第4章_第1頁
《C語言程序設(shè)計 》課件-第4章_第2頁
《C語言程序設(shè)計 》課件-第4章_第3頁
《C語言程序設(shè)計 》課件-第4章_第4頁
《C語言程序設(shè)計 》課件-第4章_第5頁
已閱讀5頁,還剩83頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

項目四數(shù)組——歌曲比賽評分統(tǒng)計任務(wù)一項目說明任務(wù)二了解一維數(shù)組任務(wù)三一維數(shù)組的定義任務(wù)四一維數(shù)組元素的引用任務(wù)五一維數(shù)組的初始化任務(wù)六一維數(shù)組的簡單應(yīng)用任務(wù)七項目流程圖任務(wù)八項目實現(xiàn)任務(wù)九項目擴展一 任務(wù)十項目擴展二 思考與練習(xí)

任務(wù)一項目說明

下面以一個例子來說明評分規(guī)則。例如,某歌手的得分如表4.1所示。

表中,“評委3”給出的成績?yōu)?.9,是最高分;“評委9”給出的成績?yōu)?.0,是最低分。

該歌手的最后得分為(成績之和-9.9-8.0)/8。

任務(wù)二了解一維數(shù)組

在科學(xué)研究、工程技術(shù)及日常生活中,常常需要處理這樣的數(shù)據(jù),例如,10個評委對歌手的評分,學(xué)生各個科目的成績,商業(yè)部門記錄的每個月份的銷售額,氣象部門記錄的每天的降雨量。每組數(shù)據(jù)都具備這樣的特點:每組都有多個數(shù)據(jù),且每組的各個數(shù)據(jù)類型相同。例如,“10個評委對歌手的評分”就有10個數(shù)據(jù),且這10個數(shù)據(jù)都是表示成績,都是實型。

在程序設(shè)計中,為了處理方便,通常把具有相同類型的若干變量按有序的形式組織起來,這些按序排列的同類數(shù)據(jù)元素的集合稱為數(shù)組。在C語言中,數(shù)組屬于構(gòu)造數(shù)據(jù)類型。一個數(shù)組可以分解為多個數(shù)組元素,這些數(shù)組元素可以是基本數(shù)據(jù)類型或是構(gòu)造類型。因此按數(shù)組元素的類型不同,數(shù)組又可分為數(shù)值數(shù)組、字符數(shù)組、指針數(shù)組、結(jié)構(gòu)數(shù)組等各種類型。本項目介紹數(shù)值數(shù)組,其余的在后續(xù)項目中介紹。

任務(wù)三一維數(shù)組的定義

1.簡例項目中的數(shù)組定義為

floatscore[10];

●score:用戶定義的數(shù)組的名稱;

[10]:數(shù)組的長度,10個評委打分,故score數(shù)組包含10個元素;

float:數(shù)組元素的類型,評委打分都是實型數(shù)據(jù)。

2.相關(guān)知識說明

在C語言中使用數(shù)組必須先定義后使用。一維數(shù)組的定義方式為

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

其中,

類型說明符:任一種基本數(shù)據(jù)類型或構(gòu)造數(shù)據(jù)類型,即數(shù)組元素的類型。

數(shù)組名:用戶定義的數(shù)組標識符。

常量表達式:表示數(shù)組元素的個數(shù),也稱為數(shù)組的長度。

例如,

inta[10]; 聲明數(shù)組a,有10個元素,且10個元素都是int型的。

floatb[10],c[20];聲明數(shù)組b,有10個元素,數(shù)組c,有20個元素,且兩個數(shù)

組的所有元素都是float型的。

charch[20];聲明數(shù)組ch,有20個元素,且20個元素都是char型的。

對于數(shù)組類型說明應(yīng)注意以下幾點:

①數(shù)組的類型實際上是指數(shù)組元素的取值類型。對于同一個數(shù)組,其所有元素的數(shù)據(jù)類型都是相同的。

②數(shù)組名的書寫規(guī)則應(yīng)符合標識符的書寫規(guī)定。

③數(shù)組名不能與其他變量名相同。

④要使用方括號,而不能使用圓括號。

⑤常量表達式必須是整型數(shù)據(jù),而不能是其他類型的數(shù)據(jù)。

⑥數(shù)組的長度只能是常量或常量表達式,而不能是變量或變量表達式,即數(shù)組的長度是固定的。

⑦允許在同一個類型說明中,說明多個數(shù)組和多個變量。

任務(wù)四一維數(shù)組元素的引用

1.簡例

score[0];sum=score[1]+score[2];

if(score[4]>score[5])

max=score[4];

else

max=score[5];

2.相關(guān)知識說明

數(shù)組元素是組成數(shù)組的基本單元。在C語言中只能逐個地使用數(shù)組元素,而不能一次引用整個數(shù)組。

數(shù)組元素也是一種變量,其標識方法為數(shù)組名后跟一個下標。下標表示了元素在數(shù)組中的順序號,并且下標從0開始,最后一個元素的下標為“數(shù)組長度-1”。

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

數(shù)組名[下標]

其中下標只能為整型常量或整型表達式。

我們以項目中聲明的數(shù)組“floatscore[10];”為例,則以下都是合法的數(shù)組元素引用:

下面介紹數(shù)組score在內(nèi)存中是如何存放的,并進一步理解下標的含義。在C編譯系統(tǒng)中,每一個float型變量在內(nèi)存中占4個字節(jié),該數(shù)組包含10個元素,故在內(nèi)存中一共占4×10=40個字節(jié),且這40個字節(jié)是連續(xù)的,如圖4.1所示。

圖4.1數(shù)組在內(nèi)存中的存放

從圖上我們可以看出,數(shù)組下標表示了數(shù)組元素相對于數(shù)組首地址的偏移量,故下標從0開始。一維數(shù)組的數(shù)組元素在內(nèi)存中按順序存放。數(shù)組名代表數(shù)組的首地址,即score的值與score[0]的地址值相同。

任務(wù)五一維數(shù)組的初始化

1.簡例

floatscore[10]={0,1,2,3,4,5,6,7,8,9};

2.相關(guān)知識說明

給數(shù)組賦值的方法除了使用賦值語句,如score[0]=8.9;對數(shù)組元素逐個賦值外,還可采用初始化賦值的方法。數(shù)組初始化賦值是指在數(shù)組定義時給數(shù)組元素賦予初值。數(shù)組初始化是在編譯階段進行的,這樣將減少運行時間,提高效率。

初始化賦值的一般形式為

類型說明符數(shù)組名[常量表達式]={值,值……值};

其中在{}中的各數(shù)據(jù)值即為各元素的初值,各值之間用逗號間隔。

例如,

floatscore[10]={0,1,2,3,4,5,6,7,8,9};

相當(dāng)于

score[0]=0;socre[1]=1;...;socre[9]=9;

C語言對數(shù)組的初始化賦值還有以下幾點規(guī)定:

①可以只給部分元素賦初值。

當(dāng){}中值的個數(shù)少于元素個數(shù)時,只給前面部分元素賦值。

②只能給元素逐個賦值,不能給數(shù)組整體賦值。

③如給全部元素賦值,則在數(shù)組說明中,可以不給出數(shù)組元素的個數(shù)。

任務(wù)六一維數(shù)組的簡單應(yīng)用

下面以幾個簡例來說明一維數(shù)組的基本應(yīng)用,以理解“數(shù)組問題通常用循環(huán)來解決”的規(guī)則,并為項目實現(xiàn)做準備。

【例4-1】從鍵盤輸入10個評委的評分到數(shù)組score。

我們發(fā)現(xiàn)以上10條語句非常相似,只有下標不同,因此可改用循環(huán)的方式實現(xiàn),并用數(shù)組的下標做循環(huán)控制變量。

(2)用循環(huán)的方式輸入各元素。

inti;

for(i=0;i<10;i++)

scanf("%f",&score[i]);

【例4-2】對10個評委的評分求總分。

(1)簡單累加求和。

同樣我們發(fā)現(xiàn)以上10條語句非常相似,只有下標不同,因此也可改用循環(huán)的方式實現(xiàn),并用數(shù)組的下標做循環(huán)控制變量。

(2)用循環(huán)的方式累加求和。

inti;

floatsum=0;

for(i=0;i<10;i++)

sum=sum+score[i];

本例程序中,把a[0]送入max中,然后從a[1]到a[9]逐個與max中的內(nèi)容比較,若比max的值大,則把該變量送入max中,因此max總是在已比較過的變量中為最大者。比較結(jié)束,max為這10個數(shù)據(jù)中的最大值。

【例4-6】對這10個評委的評分按從小到大的順序重新排列。

本例程序采用的是經(jīng)典的冒泡排序法,對數(shù)組元素按從小到大的順序排序。冒泡排序算法如下。

依次比較相鄰的兩個數(shù),將小數(shù)放在前面,大數(shù)放在后面。即在第一趟首先比較第1個和第2個數(shù),將小數(shù)放前,大數(shù)放后。然后比較第2個數(shù)和第3個數(shù),將小數(shù)放前,大數(shù)放后,如此繼續(xù),直至比較最后兩個數(shù),將小數(shù)放前,大數(shù)放后,至此第一趟結(jié)束,將最大的數(shù)放到了最后。在第二趟:仍從第一對數(shù)開始比較(因為可能由于第2個數(shù)和第3個數(shù)的交換,使得第1個數(shù)不再小于第2個數(shù)),將小數(shù)放前,大數(shù)放后,一直比較到倒數(shù)第二個數(shù)(倒數(shù)第一的位置上已經(jīng)是最大的了),第二趟結(jié)束,在倒數(shù)第二的位置上得到一個新的最大數(shù)(其實在整個數(shù)列中是第二大的數(shù))。

本例用二重循環(huán)實現(xiàn),外循環(huán)變量設(shè)為i,內(nèi)循環(huán)變量設(shè)為j。外循環(huán)重復(fù)9次,內(nèi)循環(huán)依次重復(fù)9,8,…,1次。每次進行比較的兩個元素都是與內(nèi)循環(huán)j有關(guān)的,它們可以分別用a[j]和a[j+1]標識,i的值依次為1,2,…,9,對于每一個i,j的值依次為1,2,…,10-i。

任務(wù)七項目流程圖

我們對于項目的實現(xiàn)思路已經(jīng)清晰,下面給出其流程圖,如圖4.2所示。

也可以采用對評分排序然后求中間8個數(shù)據(jù)的平均數(shù)的方法,來計算選手的最后得分。

圖4.2流程圖

任務(wù)八項目實現(xiàn)

本項目——歌曲比賽評分系統(tǒng)的程序代碼如下:完整程序一:

任務(wù)九項目擴展一

1.了解二維數(shù)組前面介紹的數(shù)組只有一個下標,稱為一維數(shù)組。在實際問題中有很多是二維的或多維的,多維數(shù)組元素有多個下標,以標識它在數(shù)組中的位置。本部分只介紹二維數(shù)組,多維數(shù)組可由二維數(shù)組類推而得到。

2.二維數(shù)組的定義

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

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

其中常量表達式1表示第一維下標的長度,常量表達式2表示第二維下標的長度。下面先舉簡單的例子來理解二維數(shù)組的定義。例如,

inta[3][4];

這是一個三行四列的數(shù)組,數(shù)組名為a,其數(shù)組元素的類型為整型,該數(shù)組的元素一共有3×4=12個。

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

二維數(shù)組元素的引用格式是:

數(shù)組名[下標1][下標2];

“下標1”表示第一維的下標,也稱行下標,取值從0開始,到“第一維的長度

-1”結(jié)束。

“下標2”表示第二維的下標,也稱列下標,取值從0開始,到“第二維的長度

-1”結(jié)束。上例中的12個元素可表示為

其中,a[0][0]表示數(shù)組第1行、第1列的元素;

a[0][1]表示數(shù)組第1行、第2列的元素;

a[2][3]表示數(shù)組第3行、第4列的元素。

數(shù)組第一行元素的行下標都為0,第二行的行下標都為1,以此類推;數(shù)組第一列的列下標都為0,第二列的列下標都為1,以此類推。

二維數(shù)組元素在內(nèi)存中按照行優(yōu)先的順序存儲,即首先存儲第一行的元素,然后依次存儲后面各行的元素。

二維數(shù)組可以看做是由一維數(shù)組的嵌套而構(gòu)成的。設(shè)一維數(shù)組的每個元素都又是一個數(shù)組,就組成了二維數(shù)組。換言之,一個二維數(shù)組也可以分解為多個一維數(shù)組。例如,二維數(shù)組a[3][4],可分解為3個一維數(shù)組,其數(shù)組名分別為a[0]、a[1]、a[2]。

對這3個一維數(shù)組不需另作說明即可使用。這3個一維數(shù)組各自都有4個元素,例如,一維數(shù)組a[0]的元素為a[0][0]、a[0][1]、a[0][2]、a[0][3]。

那么,拓展項目中的數(shù)組應(yīng)該如何定義呢?我們假設(shè)有如表4.2所示的一張計分表。

該表一共有50行,分別記錄了50個選手的得分;該表一共有10列,分別記錄了10個評委對各個選手的打分,故數(shù)組應(yīng)定義為

floatscore[50][10];

score[0]是一個一維數(shù)組,記錄了“選手1”的得分。score[0]有10個元素,分別為socre[0][0]、socre[0][1]、socre[0][2]、……、socre[0][9],依次記錄了10個評委給“選手1”的評分。

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

二維數(shù)組初始化是指在類型說明時給各元素賦初值。可以有以下幾種初始化方式。

(1)按行對各元素賦初值,格式如下:

inta[3][4]={{80,75,92,100},{61,65,71,80},{59,63,70,77}};

(2)按數(shù)組元素在內(nèi)存中排列的順序?qū)Ω髟刭x初值,格式如下:

inta[3][4]={80,75,92,100,61,65,71,80,59,63,70,77};

這兩種賦初值的結(jié)果是完全相同的。

(3)給部分元素賦初值,格式如下:

inta[3][4]={{1},{4}};

其余元素默認為0,相當(dāng)于:

inta[3][4]={{1,0,0,0},{4,0,0,0},{0,0,0,0}};

對于二維數(shù)組初始化,如對全部元素賦初值,則第一維的長度可以不給出。例如,

inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};

可以寫為

inta[][4]={1,2,3,4,5,6,7,8,9,10,11,12};

5.拓展后項目的實現(xiàn)

6.二維數(shù)組經(jīng)典案例

任務(wù)十項目擴展二

1.字符數(shù)組的定義形式與前面介紹的數(shù)值數(shù)組相同。例如:

charc[10];

charc[5][10];由于字符型和整型通用,也可以定義為intc[10],但這時每個數(shù)組元素占2個字節(jié)的內(nèi)存單元。

2.字符數(shù)組的初始化

字符數(shù)組也允許在定義時作初始化賦值。例如:

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

可寫為

charc[]={"Cprogram"};

或:

charc[]="Cprogram";

第2、3種寫法一致,都是用字符串來初始化字符數(shù)組。這種方式比用字符逐個賦值要多占一個字節(jié),用于存放字符串結(jié)束標志“\0”。上面的數(shù)組c在內(nèi)存中的實際存放情況為

“\0”是由C編譯系統(tǒng)自動加上的。由于采用了“\0”標志,所以在用字符串賦初值時一般無須指定數(shù)組的長度,而由系統(tǒng)自行處理。

3.字符數(shù)組元素的引用

引用方式和數(shù)值型數(shù)組元素的引用方式相同,如c[0]、c[1]等。

4.字符數(shù)組的輸入輸出

(1)采用格式控制符%c實現(xiàn)輸入輸出,例如:

for(i=0;i<10;i++)

printf("%c",c[i]);

這種方式用得比較少。

(2)采用格式控制符%s實現(xiàn)輸入輸出,例如:

scanf("%s",c);

printf("%s",c);

注意:參數(shù)為字符數(shù)組的名字。另外,當(dāng)用scanf函數(shù)輸入字符串時,字符串中不能含有空格,否則將以空格作為串的結(jié)束符。

例如,當(dāng)輸入的字符串中含有空格時,運行情況為

inputstring:

thisisabook

輸出為this。

(3)采用字符串函數(shù)實現(xiàn)輸入輸出,這將在后面的內(nèi)容中詳細講解。

5.字符串處理函數(shù)

C語言提供了豐富的字符串處理函數(shù),大致可分為字符串的輸入、輸出、合并、修改、比較、轉(zhuǎn)換、復(fù)制、搜索幾類。使用這些函數(shù)可大大減輕編程的負擔(dān)。用于輸入輸出的字符串函數(shù),在使用前應(yīng)包含頭文件"stdio.h",使用其他字符串函數(shù)則應(yīng)包含頭文件"string.h"。

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

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

格式:puts(字符數(shù)組名)

功能:把字符數(shù)組中的字符串輸出到顯示器,即在屏幕上顯示該字符串。

功能:從標準輸入設(shè)備鍵盤上輸入一個字符串,允許輸入空格,以回車鍵作為字符串輸入結(jié)束標志。

【例4-8】

#include"stdio.h"

main()

{

charstr[10];

printf("pleaseinputstring:\n");

gets(str);

puts(str);

}

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

格式:strcat(字符數(shù)組名1,字符數(shù)組名2)

功能:把字符數(shù)組2中的字符串連接到字符數(shù)組1中字符串的后面,并刪去字符串1后的串標志"\0"。本函數(shù)返回值是字符數(shù)組1的首地址。

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

格式:strcpy(字符數(shù)組名1,字符數(shù)組名2)

功能:把字符數(shù)組2中的字符串拷貝到字符數(shù)組1中。串結(jié)束標志"\0"也一同拷貝。

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

格式:strcmp(字符數(shù)組名1,字符數(shù)組名2)

功能:按照ASCII碼順序,依次比較兩個數(shù)組中的字符串,并返回比較結(jié)果。

字符串1=字符串2,返回值=0;

字符串1>字符串2,返回值>0;

字符串1<字符串2,返回值<0。

本函數(shù)也可用于比較兩個字符串常量,或比較數(shù)組和字符串常量。

(6)測字符串長度函數(shù)strlen。

格式:strlen(字符數(shù)組名)

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

思?考?與?練?習(xí)

一、選擇題

1.已知:inta[10];則對a數(shù)組元素的正確引用是()。

A.a(chǎn)[10]

B.a(chǎn)[3.5]

C.a(chǎn)(5)

D.a(chǎn)[10-10]

2.在C語言中,二維數(shù)組元素在內(nèi)存中的存放順序是()。

A.按行存放 B.按列存放

C.由用戶定義 D.由函數(shù)決定

3.已知:inta[][3]={1,2,3,4,5,6,7};

則數(shù)組a的第一維的大小是()。

A.2 B.3

C.4 D.無法確定

4.初始化語句正確的是()。

A.inta[1][4]={1,2,3,4,5};

B.floatx[3][]={{1},{2},{3}};

C.longb[2][3]={{1},{2},{3}};

D.inty[][3]={{1,2},{3},{4}};

5.若要實現(xiàn)如果字符串s1大于字符串s2,則執(zhí)行語句1,應(yīng)當(dāng)使用()。

A.if(s1>s2)語句1

B.if(strcmp(s1,s2))語句1

C.if(strcmp(s2,s1)>0)語句1

D.if(strcmp(s1,s2)>0)語句1

6.已知:charstr1[10],str2[10]=“Hello!”;

則在程序中能夠?qū)⒆址癏ello!”賦給數(shù)組str1的正確語句是()。

A.str1=“Hello!”

B.strcpy(str1,str2)

C.str1=str2 D.strcpy(str2,str1)

7.下面數(shù)組的定義合法的是()。

A.inta[]={0,1,2,3,4,5,6}; .

B.charstr="string";

C.floata[2][]={{1.1,1.2},{1.3,1.4}};

D.charstr[]="string";

8.表達式strcmp("box","boss")的值是一個()。

A.正數(shù) B.0

C.負數(shù) D.不確定

9.下列程序執(zhí)行后的輸出結(jié)果是()。

main(){

inti,j,a[3][3];

for(i=0;i<3;i++)

for(j=0;j<=i;j++)

a[i][j]=i*j;

printf("%d,%d\n",a[1][2],a[2][1]);

}

A.2,2 B.不確定,2

C.2 D.2,0

10.下列程序執(zhí)行后的輸出結(jié)果是()。

main(){

inti,j,s=0,a[3][3]={1,2,3,4,5,6};

for(i=0;i<3;i++)

for(j=0;j<=i;j++)

s+=a[i][j];

printf("%d\n",s);

}

A.18 B.19

C.20 D.21

二、填空題

1.以下程序段的執(zhí)行結(jié)果是________。

main(){

charstr[30];

strcpy(&str[0],"ch");

strcpy(&str[1],"def");

strcpy(&str[2],"abc");

}

2.以下程序段為數(shù)組的所有元素輸入數(shù)據(jù),請?zhí)羁铡?/p>

main(){

inta[10],i;

i=0;

while(i<10)

;

}

3.以下程序段的功能是將數(shù)組str下標值為偶數(shù)的元素從小到大排列,其他元素不變,請?zhí)羁铡?/p>

4.以下程序的執(zhí)行結(jié)果是________。

5.以下程序的執(zhí)行結(jié)果是________。

6.以下程序的功能是:求二維數(shù)組元素的最大值以及最大元素的下標,請?zhí)羁铡?/p>

7.以下程序的功能是:將整數(shù)插入到有序數(shù)組中,并保持數(shù)組從小到大的順序,請?zhí)羁铡?/p>

8.閱讀程序,并分析該程序的功能是________。

9.閱讀程序,并分析該程序的功能是________。

10.以下程序段的執(zhí)行結(jié)果是______________。

溫馨提示

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

評論

0/150

提交評論