版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 合作聘請合同范例
- 承包電工合同范例
- 樁基維修合同范例范例
- 小區(qū)消防通道畫線施工方案
- 墊板銷售合同范例
- 廣州集資建房合同范例
- 渠道征地合同范例
- 南陽農(nóng)村建房合同范例
- 內(nèi)科練習(xí)題庫與答案
- 潛山租房合同范例
- 大學(xué)物理實驗智慧樹知到期末考試答案2024年
- 5G網(wǎng)絡(luò)安全風(fēng)險評估與緩解措施
- 2024年四川省普通高中學(xué)業(yè)水平考試(思想政治樣題)
- 中儲糧西安公司社會招聘試題
- 南呂一枝花不伏老課件
- 品質(zhì)部年終總結(jié)報告2022
- 康復(fù)科建設(shè)可行性方案及措施
- 華為手機行業(yè)洞察分析
- 蘇州市2023-2024學(xué)年高二上學(xué)期期末考試英語試卷(含答案)
- JGT366-2012 外墻保溫用錨栓
- 醫(yī)院網(wǎng)絡(luò)安全培訓(xùn)
評論
0/150
提交評論