




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
項(xiàng)目五
數(shù)組《C語言程序設(shè)計(jì)》項(xiàng)目描述習(xí)近平總書記在黨的二十大報(bào)告中強(qiáng)調(diào):“大自然是人類賴以生存發(fā)展的基本條件。尊重自然、順應(yīng)自然、保護(hù)自然,是全面建設(shè)社會(huì)主義現(xiàn)代化國家的內(nèi)在要求。必須牢固樹立和踐行綠水青山就是金山銀山的理念,站在人與自然和諧共生的高度謀劃發(fā)展。”李堯和家人住在新疆吐魯番盆地的東緣,是一個(gè)世界上離沙漠最近的城市,他們一家人深深地感受到了沙漠給自己家園帶來的危害。為了不讓沙漠?dāng)U大化,他從小在家人的帶領(lǐng)下到沙漠邊緣植樹。在河南,李堯有一個(gè)關(guān)系很好的網(wǎng)友馬老師,他們經(jīng)常交流生活、學(xué)習(xí)情況,更是經(jīng)常提起沙漠對(duì)生活的影響。馬老師受其感染,決定在植樹節(jié)帶領(lǐng)學(xué)生舉行植樹PK賽,讓大家了解植樹的意義,學(xué)會(huì)節(jié)約、珍惜生活,做一個(gè)愛林護(hù)林的中學(xué)生,為城市貢獻(xiàn)一抹綠色。在以上案例中,若要分析學(xué)生植樹的PK結(jié)果,需要處理多個(gè)植樹數(shù)據(jù)。在學(xué)習(xí)及生活中,比如成績(jī)統(tǒng)計(jì)、學(xué)習(xí)進(jìn)度分析、體質(zhì)檢測(cè)數(shù)據(jù)處理、數(shù)學(xué)問題、家庭的收入及開銷等,也會(huì)涉及到大量的數(shù)據(jù)處理。若使用前面章節(jié)介紹的循環(huán),數(shù)據(jù)用完就會(huì)直接丟棄,并沒有存儲(chǔ),導(dǎo)致僅能完成簡(jiǎn)單任務(wù),用戶無法再次利用原始數(shù)據(jù)處理問題。其實(shí),在很多任務(wù)中,輸入的數(shù)據(jù)有被存儲(chǔ)的需求,方便進(jìn)一步研究。C語言通過引進(jìn)數(shù)組來實(shí)現(xiàn)多個(gè)數(shù)據(jù)的存儲(chǔ)、查詢和處理。項(xiàng)目目標(biāo)理解一維數(shù)組、二維數(shù)組在內(nèi)存中的存儲(chǔ)情況。掌握一維數(shù)組的定義、引用及初始化。掌握二維數(shù)組的定義、引用及初始化。掌握字符數(shù)組的定義及引用。任務(wù)一班級(jí)植樹數(shù)據(jù)統(tǒng)計(jì)
——一維數(shù)組任務(wù)描述
表5-1是馬老師班級(jí)學(xué)生的植樹情況。請(qǐng)統(tǒng)計(jì)植樹總數(shù),分析哪種樹苗種植最多,哪種樹苗種植最少,對(duì)于學(xué)生比較喜歡的樹苗都分別種植了多少棵(超過種植樹苗平均值的是學(xué)生偏愛的樹苗)。表5-1學(xué)生植樹情況樹苗品種桃樹梨樹杏樹蘋果樹柳樹樹苗數(shù)量2313151020任務(wù)分析
本任務(wù)需要數(shù)據(jù)輸入→數(shù)據(jù)比較求最大值、最小值及求和→求平均→找出數(shù)組中比平均值高的數(shù)據(jù)→結(jié)果輸出。任務(wù)中需要兩次遍歷數(shù)組,所有數(shù)據(jù)必須存儲(chǔ)到一維數(shù)組中,使用簡(jiǎn)單的循環(huán)數(shù)據(jù)會(huì)被覆蓋。單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務(wù)準(zhǔn)備:5.1一維數(shù)組的定義和存儲(chǔ)數(shù)組的概念:
數(shù)組是為了方便處理若干個(gè)數(shù)據(jù),將具有相同類型的若干變量依次存儲(chǔ)的一種形式。單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務(wù)準(zhǔn)備:5.1一維數(shù)組的定義和存儲(chǔ)1.“依次存儲(chǔ)”的含義:例如:inta,b,c;定義的三個(gè)變量在內(nèi)存中存儲(chǔ)位置是隨機(jī)的,沒有任何規(guī)律;而數(shù)組是多個(gè)數(shù)據(jù)的依次存儲(chǔ),是指數(shù)組中多個(gè)數(shù)據(jù)在內(nèi)存中占據(jù)一段連續(xù)的存儲(chǔ)單元,如圖5-1:圖5-1數(shù)組存儲(chǔ)方式2.“依次存儲(chǔ)”的作用:因?yàn)槟艽鎯?chǔ)數(shù)據(jù),所以可以實(shí)現(xiàn)數(shù)據(jù)的多次調(diào)用;因?yàn)檎加羞B續(xù)的存儲(chǔ)單元,所以方便單獨(dú)調(diào)用或批量處理。3.“具有相同類型”的意義:如圖5-1,這是一個(gè)整型數(shù)組,即數(shù)組里面每個(gè)元素都是整型,不能出現(xiàn)其他類型。單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務(wù)準(zhǔn)備:5.1.1一維數(shù)組的定義簡(jiǎn)單變量的定義:類型說明符
變量名;例如:inta,b,c;一維數(shù)組的定義:類型說明符
數(shù)組名[整型常量表達(dá)式];例如:inta[3];請(qǐng)對(duì)比,簡(jiǎn)單變量定義與一維數(shù)組定義的異同。單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務(wù)準(zhǔn)備:5.1.1一維數(shù)組的定義小試牛刀
根據(jù)黨的二十大報(bào)告對(duì)“加強(qiáng)青少年體育工作”作出重要部署,學(xué)校組織了各類體育運(yùn)動(dòng)興趣小組。6月10日,學(xué)校預(yù)備舉行跳水比賽,該比賽中有五個(gè)裁判,按照十分制打分,可以精確到一位小數(shù),若要將五個(gè)裁判的成績(jī)存儲(chǔ)到數(shù)組中,請(qǐng)問如何定義該數(shù)組?并指出其中的數(shù)組類型、數(shù)組名和數(shù)組元素個(gè)數(shù)。單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務(wù)準(zhǔn)備:5.1.1一維數(shù)組的定義敲黑板
數(shù)組定義中的整型常量表達(dá)式可以是一個(gè)整型常數(shù)、一個(gè)值為整型常數(shù)的表達(dá)式,或者是一個(gè)符號(hào)常量,但不能是變量,C語言是不允許對(duì)數(shù)組進(jìn)行動(dòng)態(tài)定義。下面的數(shù)組定義是錯(cuò)誤的:
intn=3;
inta[n];單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務(wù)準(zhǔn)備:5.1.2一維數(shù)組的存儲(chǔ)
簡(jiǎn)單變量在定義后,C編譯系統(tǒng)會(huì)在內(nèi)存中分配一個(gè)空間給這個(gè)變量。例如:floatm;系統(tǒng)會(huì)分配1個(gè)4字節(jié)的位置給變量m,并等待輸入數(shù)值。
數(shù)組在被定義后,C編譯系統(tǒng)在內(nèi)存中為其分配的是一段連續(xù)的存儲(chǔ)空間,數(shù)組名表示內(nèi)存的首地址。例如:floata[3];就相當(dāng)于定義了3個(gè)浮點(diǎn)型變量,因此系統(tǒng)會(huì)分配3個(gè)4字節(jié)的位置給數(shù)組a[3]。如圖5-2所示,數(shù)組名是首地址,每個(gè)數(shù)組元素的位置即可以表示為相對(duì)于首地址的位置偏移量,例如a數(shù)組中第一個(gè)元素相對(duì)于首地址偏移0個(gè)單位,第三個(gè)元素相對(duì)于首地址偏移2個(gè)單位。對(duì)應(yīng)的數(shù)組元素的命名即為a[0]、a[2]。圖5-2數(shù)組元素的偏移量及命名單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務(wù)準(zhǔn)備:5.2一維數(shù)組的引用和初始化
5.2.1一維數(shù)組元素的引用
數(shù)組元素是組成數(shù)組的基本單元。對(duì)于整型、浮點(diǎn)型數(shù)組,C語言只能逐個(gè)引用數(shù)組元素,而不能一次性引用整個(gè)數(shù)組。數(shù)組元素引用的一般格式為:數(shù)組名[下標(biāo)]例如,a[0]是數(shù)組a中的第一個(gè)元素,我們可以將其看做一個(gè)簡(jiǎn)單變量。其下標(biāo)可以是整型常量或整型表達(dá)式。例如下面的賦值表達(dá)式包含了對(duì)數(shù)組元素的引用:a[i]=a[2*2]+a[0]+a[j-1];其中,變量i與j是整型變量。單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務(wù)準(zhǔn)備:5.2.1一維數(shù)組元素的引用敲黑板:數(shù)組元素的命名是依據(jù)數(shù)組元素的存儲(chǔ)位置命名,例如,數(shù)組元素的下標(biāo)是從0開始,表示第一個(gè)數(shù)組元素相對(duì)于首地址的偏移量為0;數(shù)組中最后一個(gè)元素,下標(biāo)比數(shù)組的個(gè)數(shù)少1。例如對(duì)于數(shù)組a[3],最后的元素是a[2]。數(shù)組m[20]中元素下標(biāo)是什么范圍?定義數(shù)組時(shí)用到的“數(shù)組名[整型常量表達(dá)式]”與引用數(shù)組元素時(shí)的“數(shù)組名[下標(biāo)]”形式好似相同,但含義不同。例如:
floatscore[10];
//這里的score[10]表示什么?
t=score[0];
//這里的score[0]表示什么?單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務(wù)準(zhǔn)備:5.2.1一維數(shù)組元素的引用元素的引用下標(biāo)是“整型表達(dá)式”,與定義數(shù)組時(shí)要求中括號(hào)中的數(shù)值是“整型常量表達(dá)式”并不一樣,元素的引用中括號(hào)中的整型表達(dá)式可以是常數(shù),也可以是變量。例如:a[i]、a[i-1]都是合法的,但要求必須是整型,如果出現(xiàn)浮點(diǎn)數(shù)程序就會(huì)報(bào)錯(cuò)。例如:floata[5],i;for(i=0;i<5;i++)scanf("%d",&a[i]);根據(jù)數(shù)組元素的下標(biāo)的特點(diǎn),可以通過控制下標(biāo)的方式對(duì)數(shù)組元素進(jìn)行調(diào)用。由于數(shù)組是多個(gè)數(shù)據(jù)元素的集合,因此一維數(shù)組經(jīng)常和循環(huán)語句搭配使用。單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務(wù)準(zhǔn)備:5.2.1一維數(shù)組元素的引用例5-1輸入十個(gè)整數(shù),再進(jìn)行逆序輸出。請(qǐng)根據(jù)解題思路的提示,完成右邊程序的編寫。表5-3解題思路及程序編寫對(duì)比表解題思路程序編寫#include<stdio.h>main(){第一步:定義一個(gè)含有10個(gè)元素的整型數(shù)組,同時(shí)定義數(shù)組元素下標(biāo)變量。int,i;第二步:為數(shù)組輸入數(shù)值,可以用循環(huán)控制下標(biāo)0-9,從而控制數(shù)組元素a[0]-a[9],每個(gè)元素相當(dāng)于一個(gè)普通變量,因此輸入語句中數(shù)組元素前面也要帶上“&”符號(hào);for(i=0;;i++)scanf("%d",);第三步:輸出數(shù)組中數(shù)值,逆序輸出即從最后一個(gè)元素往前輸出,下標(biāo)的起始值從9開始。for(i=9;;)printf("%5d",);}單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務(wù)準(zhǔn)備:5.2.2一維數(shù)組的初始化數(shù)組定義后,系統(tǒng)給其分配一段連續(xù)的存儲(chǔ)空間,里面并沒有確定的數(shù)值。用戶可以通過如例5-1的方式,為數(shù)組元素逐個(gè)輸入數(shù)值,也可以直接初始化。數(shù)組的初始化可以用“初始化列表”方法實(shí)現(xiàn),列表中的數(shù)據(jù)用逗號(hào)隔開,按照順序放置在一對(duì)花括號(hào)中。給全部元素賦初值。例如:intm[5]={0,2,4,6,8};列出的數(shù)據(jù)會(huì)依次存放到數(shù)組定義的存儲(chǔ)空間中,如圖5-3。圖5-3全部賦值的存儲(chǔ)
在給全部元素賦初值時(shí),由于數(shù)據(jù)的個(gè)數(shù)已經(jīng)確定,因此數(shù)組長(zhǎng)度可以省略不寫。以上定義可以改為:intm[]={0,2,4,6,8};單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務(wù)準(zhǔn)備:5.2.2一維數(shù)組的初始化給部分元素賦初值。例如:intm[5]={0,2};
定義m數(shù)組有5個(gè)元素,系統(tǒng)依然會(huì)分配5個(gè)空間,但花括號(hào)中只提供2個(gè)元素的值,表示只給前面2個(gè)元素賦初值,系統(tǒng)自動(dòng)給后面3個(gè)元素賦初值為0,如圖5-4。圖5-4部分賦值的存儲(chǔ)單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務(wù)準(zhǔn)備:5.2.2一維數(shù)組的初始化敲黑板:
1.若要將數(shù)組中全部元素賦初值為0,不能寫成inta[5];,要寫成intm[5]={0};。因?yàn)榍罢邇H是定義5個(gè)整型存儲(chǔ)空間,并未賦初值,而后者是一種給部分元素賦初值的形式,第一個(gè)元素賦初值為0,系統(tǒng)會(huì)自動(dòng)給后面4個(gè)元素賦初值為0。
2.如果初值的類型與數(shù)組類型不一致,系統(tǒng)會(huì)如何處理?請(qǐng)檢測(cè)下面例子結(jié)果:intm[5]={1.5,2,4,6,8};3.如果賦初值時(shí),{}中的值的個(gè)數(shù)超過數(shù)組的長(zhǎng)度會(huì)怎樣呢?例如:intm[5]={1,2,4,6,8,9};4.請(qǐng)檢測(cè)數(shù)組初始化可否寫成下列樣式:
inta[5];
a[5]={1,2,3};單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務(wù)實(shí)施
任務(wù)描述中需要處理的數(shù)據(jù)個(gè)數(shù)定為數(shù)組元素總個(gè)數(shù)。為了增加程序的普適性,樹苗數(shù)盡量使用輸入語句而非初始化;根據(jù)要求需要計(jì)算數(shù)組中的最大值、最小值、所有數(shù)據(jù)之和,因此最大值、最小值、初值一定是數(shù)組中的元素,一般會(huì)將數(shù)組中第一個(gè)元素a[0]設(shè)為數(shù)組中的最大值、最小值、初值,再通過循環(huán)語句與后面元素比較或者進(jìn)行累加;通過累加求出平均值,再次循環(huán)遍歷數(shù)組元素求出高于平均值的數(shù)值,并輸出。單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務(wù)實(shí)施
請(qǐng)根據(jù)任務(wù)描述補(bǔ)全下面程序并運(yùn)行。
#include<stdio.h>main(){inta[5],max,min,total,i;
;printf("請(qǐng)輸入評(píng)委評(píng)分:\n");for(i=0;i<5;i++)
;
;for(i=1;i<5;i++){if(a[i]>max)max=a[i];
;total+=a[i];}ave=
;printf("學(xué)生比較喜歡的樹苗對(duì)應(yīng)的棵樹分別為:");for(i=0;i<5;i++){printf("%5d",a[i]);}}單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務(wù)拓展
2022年6月29日,國際泳聯(lián)第19屆世界游泳錦標(biāo)賽——跳水項(xiàng)目混合全能比賽中,兩名15歲選手全紅嬋和白鈺鳴組合的國隊(duì),經(jīng)過6輪動(dòng)作比拼,以總分391.40分摘取桂冠,兩位小將以超強(qiáng)的心態(tài),完美的完成了中國在世錦賽第100枚金牌的任務(wù)。每場(chǎng)比賽結(jié)束后,獎(jiǎng)牌榜都會(huì)以各個(gè)國家的金牌數(shù)進(jìn)行排序,我們國家在本次錦標(biāo)賽中獲得了世界第二的優(yōu)異成績(jī),這是我國夢(mèng)之隊(duì)團(tuán)體奮斗的結(jié)果。假如各個(gè)國家獲得的獎(jiǎng)牌數(shù)是6、5、4、2、0,請(qǐng)?jiān)囍磸男〉酱蟮捻樞蚺帕小H蝿?wù)二班級(jí)植樹PK賽
——二維數(shù)組任務(wù)描述
在小馬老師帶領(lǐng)班級(jí)學(xué)生植樹的過程中,又有兩位老師帶領(lǐng)班級(jí)學(xué)生加入,表5-4是各班的植樹情況,請(qǐng)分析哪個(gè)班級(jí)植樹最多,每種樹苗分別種了多少棵?表5-4三個(gè)班級(jí)植樹情況統(tǒng)計(jì)表班級(jí)/樹苗桃樹梨樹杏樹蘋果樹一班23131510二班12181020三班20192119任務(wù)分析不同于上一個(gè)任務(wù)的一行數(shù)據(jù),本任務(wù)出現(xiàn)了三行數(shù)據(jù),而且橫向、縱向都要分析。橫向,可以利用每一行計(jì)算每個(gè)班級(jí)的植樹總數(shù),再分析出植樹優(yōu)勝團(tuán)隊(duì);縱向,可以利用每一列計(jì)算每種樹苗種植了多少棵,分析出哪種樹苗最受歡迎。這種表格數(shù)據(jù)可以借助二維數(shù)組實(shí)現(xiàn)統(tǒng)計(jì)分析。單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務(wù)準(zhǔn)備:5.3二維數(shù)組的定義和初始化
二維數(shù)組常用于存儲(chǔ)矩陣中的各個(gè)元素,把二維數(shù)組也寫成類似矩陣的“行列”排列形式,可以有助于形象化地理解二維數(shù)組的意義。5.3.1二維數(shù)組的定義二維數(shù)組的定義方法和一維數(shù)組相似。例如:floata[2][3];以上定義了一個(gè)float型的二維數(shù)組。“2”是第一維,代表數(shù)組的行數(shù)為2;“3”是第二維,代表數(shù)組的列數(shù)為3,也就是一行有3個(gè)元素;整個(gè)數(shù)組元素個(gè)數(shù)為2×3。二維數(shù)組定義的一般形式為:類型說明符
數(shù)組名[整型常量表達(dá)式1][整型常量表達(dá)式2];單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務(wù)準(zhǔn)備:5.3二維數(shù)組的定義和初始化敲黑板:1.每個(gè)維度分別用一對(duì)方括號(hào)包起來。floata[2,3];的定義方式是錯(cuò)誤的,不能在一對(duì)花括號(hào)內(nèi)寫兩個(gè)數(shù)值。2.二維數(shù)組中定義的“類型說明符”“數(shù)組名”“整型常量表達(dá)式”的規(guī)定與一維數(shù)組相同。單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務(wù)準(zhǔn)備:5.3.2二維數(shù)組的初始化二維數(shù)組也是需要通過“初始化列表”進(jìn)行初始化,如同一維數(shù)組,可以給所有元素賦初值,也可以給部分元素賦初值。1.全部賦值
(1)分行給二維數(shù)組賦初值。例如:intB[3][4]={{0,1,2,3},{4,5,6,7},{8,9,10,11}};這種賦值方法比較直觀,第1個(gè)小花括號(hào)中的數(shù)據(jù)給第1行元素,第2個(gè)花括號(hào)中的數(shù)據(jù)給第2行元素……依次類推。(2)將所有數(shù)據(jù)寫在一個(gè)花括號(hào)內(nèi),例如:intB[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};,因?yàn)樵摂?shù)組定義第二維為“4”,即一行中有4個(gè)元素,所以“0,1,2,3”為第一行,“4,5,6,7”為第二行……依次類推。這種賦值方法容易編寫,但是不如按行賦值方法可讀性強(qiáng)。
當(dāng)給數(shù)組全部元素賦初值時(shí),可省略第一維長(zhǎng)度,但不能省略第二維長(zhǎng)度,也就是行數(shù)可以省略,列數(shù)不能省。上面兩種寫法還可以寫成:intB[][4]={{0,1,2,3},{4,5,6,7},{8,9,10,11}};intB[][4]={0,1,2,3,4,5,6,7,8,9,10,11};單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務(wù)準(zhǔn)備:5.3.2二維數(shù)組的初始化2.部分賦值,未被賦值的元素為0。(1)分行給二維數(shù)組部分元素賦初值。例如intB[3][4]={{0,1},{4},{8,9,10}};表示:0100400089100
例如intB[3][4]={{0,1},{4,5,6}};表示:010045600000例如intB[3][4]={{0,1},{},{8,9}};表示:010000008900分行部分賦值也可以省略第一維長(zhǎng)度,例如:intB[3][4]={{0,1},{4},{8,9,10}};可以寫成intB[][4]={{0,1},{4},{8,9,10}};單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務(wù)準(zhǔn)備:5.3.2二維數(shù)組的初始化(2)將所有數(shù)據(jù)寫在一個(gè)花括號(hào)內(nèi)。例如intB[3][4]={1,2};代表:例如intB[3][4]={{0,1},{4},{8,9,10}};表示:
二維數(shù)組初始化的所有注意事項(xiàng)同一維數(shù)組初始化一樣,具體請(qǐng)參照一維數(shù)組“注意”內(nèi)容。120000000000單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務(wù)準(zhǔn)備:5.4二維數(shù)組的引用和存儲(chǔ)二維數(shù)組元素的表示形式為:數(shù)組名[行標(biāo)][列標(biāo)]5.4.1二維數(shù)組的引用敲黑板:1.如同一維數(shù)組的下標(biāo)一樣,二維數(shù)組的行標(biāo)、列標(biāo)都是整型常量表達(dá)式。2.一維數(shù)組a[5]的元素下標(biāo)的范圍是:與一維數(shù)組對(duì)于下標(biāo)的規(guī)定一樣,二維數(shù)組的行標(biāo)和列標(biāo)也是從0開始,所以元素的行標(biāo)和列標(biāo)是其位置減1。例如:a數(shù)組中第2行第3個(gè)元素應(yīng)表示為a[1][2]。a[2][2]表示a數(shù)組中的第3行第3個(gè)元素。由此可推斷,數(shù)組中最后一個(gè)元素的行標(biāo)、列標(biāo)分別比行與列的實(shí)際長(zhǎng)度少1,例如,數(shù)組B[3][4]行標(biāo)的范圍是0~2,列標(biāo)的范圍是0~3。單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務(wù)準(zhǔn)備:5.4.2二維數(shù)組的存儲(chǔ)二維數(shù)組看成特殊的一維數(shù)組,普通的一維數(shù)組里面的元素全都是數(shù)值,例如:intA[3]={0,1,2};在內(nèi)存中存儲(chǔ)如圖5-5:圖5-5一維數(shù)組而二維數(shù)組里面的元素是一個(gè)數(shù)組,例如:intB[3][4]={{0,1,2,3},{4,5,6,7},{8,9,10,11}};在內(nèi)存中的存儲(chǔ)如圖5-6:圖5-6二維數(shù)組單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務(wù)準(zhǔn)備:5.4.2二維數(shù)組的存儲(chǔ)二維數(shù)組代表矩陣,每個(gè)小括號(hào)的元素即可為1行,所以B[3][4]又可以理解為如圖5-7狀態(tài)。圖5-7二維數(shù)組矩陣可以觀察到每一行又是一個(gè)一維數(shù)組,B[0]可以作為這一行的數(shù)組名,0,1,2,3就是一維數(shù)組元素的下標(biāo),即B[0][0]、B[0][1]、B[0][2]、B[0][3],其他行以此類推,如圖5-8:圖5-8二維數(shù)組的邏輯關(guān)系單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務(wù)準(zhǔn)備:5.4.2二維數(shù)組的存儲(chǔ)上圖是二維數(shù)組的邏輯關(guān)系,實(shí)際上,二維數(shù)組在內(nèi)存中是線性存儲(chǔ)的,并且采用行優(yōu)先的方式存儲(chǔ)二維數(shù)組,即先依次存儲(chǔ)第1行,再存儲(chǔ)第2行……依次類推。例如,inta[2][3];存放順序如圖5-9:圖5-9二維數(shù)組在內(nèi)存中的實(shí)際存放方式單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務(wù)實(shí)施
根據(jù)表5-4中數(shù)據(jù)可以定義為a[3][4];每一行的和可以放在一個(gè)新的一維數(shù)組中,然后在這個(gè)一維數(shù)組中求最大值,即得植樹優(yōu)勝班級(jí);每一列的和也可以放在另一個(gè)一維數(shù)組中,然后統(tǒng)一輸出。單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務(wù)實(shí)施#include<stdio.h>main(){inta[3][4],sum_class[3],sum_tree[4]; inti,j,max,max_class; for(i=0;i<3;i++) {for(j=0;j<4;j++) scanf("%d",&a[i][j]);} for(i=0;i<3;i++) {sum_class[i]=0; for(j=0;j<4;j++) sum_class[i]+=a[i][j];} max=sum_class[0];max_class=0; for(i=1;i<3;i++) if(sum_class[i]>max) { max=sum_class[i];max_class=i; } printf("植樹最多的班級(jí)是%d班,共植樹%d棵\n",max_class+1,max); printf("桃樹\t梨樹\t杏樹\t蘋果樹棵樹分別是:\n"); for(j=0;j<4;j++) { sum_tree[j]=0; for(i=0;i<3;i++) sum_tree[j]+=a[i][j]; printf("%2d\t",sum_tree[j]);
}}任務(wù)三植樹倡議書
——字符數(shù)組及字符串單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務(wù)描述
習(xí)總書記早在2013年就面向世界提出人類命運(yùn)共同體的理念,倡導(dǎo)全民植樹。一天下來,學(xué)生們不僅聽馬老師講述了習(xí)總書記的植樹理念和植樹行為,明白了生態(tài)文明人人有責(zé),也進(jìn)行了植樹活動(dòng)比賽,帶班老師和學(xué)生們都干勁十足。馬老師醞釀了許久的全民植樹想法也實(shí)現(xiàn)了一半。回家后,他將想法和做法分享了國外的網(wǎng)友,并發(fā)了大家一起植樹倡議書,但是倡議書要有字?jǐn)?shù)限制,不能長(zhǎng)篇大論,因此,馬老師計(jì)劃一共使用300個(gè)單詞即可。
請(qǐng)用編程實(shí)現(xiàn)單詞的計(jì)數(shù)(假如單詞之間均有空格)。單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務(wù)分析
在單詞數(shù)量多的情況下,一般使用數(shù)組配合循環(huán)處理,存儲(chǔ)單詞需要的是字符數(shù)組,一個(gè)單詞大約6個(gè)字母左右,最多需要300個(gè)單詞,單詞之間還有空格,可以定義一個(gè)字符數(shù)組a,長(zhǎng)度為2000;我們可以利用單詞之間的空格數(shù)來計(jì)算單詞數(shù)。單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務(wù)準(zhǔn)備:5.5字符數(shù)組的定義和存儲(chǔ)
字符數(shù)組即數(shù)組中的元素為字符型,是一種常用的數(shù)組,其最大用途是可以存放字符串。5.5.1字符數(shù)組的定義字符數(shù)組中的一個(gè)元素存放一個(gè)字符。定義字符數(shù)組的方法和定義數(shù)值型數(shù)組的方法類似。例如:chara[6];charb[2][3];請(qǐng)總結(jié),定義字符數(shù)組的一般形式。還有一種特殊的字符數(shù)組——字符串,即用雙引號(hào)括起的字符序列。例如項(xiàng)目一直接輸出的字符串“Helloworld!”。C語言并沒有單獨(dú)的字符串變量,所以字符串僅能在字符數(shù)組中存儲(chǔ)。字符串與字符數(shù)組最大的差別在于字符串最后系統(tǒng)自動(dòng)添加結(jié)束標(biāo)志'\0'。單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務(wù)準(zhǔn)備:5.5.2字符數(shù)組元素的存儲(chǔ)
前面介紹數(shù)值型數(shù)組:
intm[3];
代表系統(tǒng)為該數(shù)組分配了3個(gè)單元格,因?yàn)槭钦蛿?shù)組,每個(gè)單元格占4個(gè)字節(jié)。字符數(shù)組也是如此。例如:
chara[6];圖5-10字符數(shù)組的存儲(chǔ)系統(tǒng)分配了6個(gè)單元格,每個(gè)單元格僅占一個(gè)字節(jié),一共是6個(gè)字節(jié)長(zhǎng)度。
請(qǐng)測(cè)試:printf("%d",sizeof(a));
printf("%d",sizeof("hello"));
單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務(wù)準(zhǔn)備:5.6字符數(shù)組的初始化和引用
5.6.1字符數(shù)組的初始化對(duì)于字符數(shù)組初始化,可以如同數(shù)值型數(shù)組一樣逐個(gè)元素賦值,也能用字符串整體初始化。1.逐個(gè)字符初始化(1)全部賦值。例如:chara[9]={'C','','p','r','o','g','r','a','m'};把9個(gè)字符分別賦給a[0]到a[8]9個(gè)元素。注意,各個(gè)字符常量需帶單引號(hào)。這里如果給所有元素都賦初值,數(shù)組長(zhǎng)度可以省略不寫,上面定義可以改寫為:chara[]={'C','','p','r','o','g','r','a','m'};系統(tǒng)根據(jù)數(shù)組元素的個(gè)數(shù)自動(dòng)將數(shù)組的長(zhǎng)度定為9,用這種方式可以不必人工數(shù)字符個(gè)數(shù),尤其是賦初值過程中字符個(gè)數(shù)比較多的情況比較方便。圖5-11字符數(shù)組存儲(chǔ)狀態(tài)單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務(wù)準(zhǔn)備:5.6字符數(shù)組的初始化和引用
(2)部分賦值,未被賦值的元素值為ASCII碼為0的字符,即'\0'。例如:chara[10]={'C','','p','r','o','g','r','a','m'};數(shù)組狀態(tài)如圖5-12所示。圖5-12部分賦值時(shí)字符數(shù)組存儲(chǔ)狀態(tài)單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務(wù)準(zhǔn)備:5.6字符數(shù)組的初始化和引用
2.使用字符串整體賦值chara[8]={"hello"};也可以省略花括號(hào):chara[8]="hello";多余的內(nèi)存單元格中也存放'\0',其在內(nèi)存中存儲(chǔ)形式如圖5-13:圖5-13字符串存儲(chǔ)形式也可以省略字符數(shù)組長(zhǎng)度:charb[]="hello";
系統(tǒng)為字符串后面自動(dòng)加'\0',其在內(nèi)存中存儲(chǔ)形式如圖5-14:圖5-14字符數(shù)組長(zhǎng)度缺省時(shí)的存儲(chǔ)形式單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務(wù)準(zhǔn)備:5.6字符數(shù)組的初始化和引用
敲黑板:1.使用字符串整體賦值的方法更加直觀方便,但要注意數(shù)組b的長(zhǎng)度是6,而不是5。2.由于字符串要存放到字符數(shù)組中,因此,前面依然正常進(jìn)行字符數(shù)組定義,不能寫成:chara="hello";這種寫法將字符串"hello"賦給了字符型變量a,而a僅有一個(gè)字節(jié)的位置,無法容納一個(gè)字符串。單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務(wù)準(zhǔn)備:5.6.2字符數(shù)組元素引用
和其他類型的數(shù)組一樣,可以逐個(gè)對(duì)字符數(shù)組元素的引用。由于字符數(shù)組還可以存放字符串?dāng)?shù)據(jù),因此也可以以字符串的形式整體輸入、輸出。1.對(duì)字符數(shù)組元素逐個(gè)引用chara[10];inti;for(i=0;i<10;i++)scanf("%c",&a[i]);for(i=0;i<10;i++)printf("%c",a[i]);2.對(duì)字符串整體的引用chara[10];scanf("%s",a);printf("%s",a);單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務(wù)準(zhǔn)備:5.6.2字符數(shù)組元素引用
敲黑板:1.格式控制符不同,逐個(gè)引用時(shí)格式控制符%c,整體引用時(shí)格式控制符為%s。2.整體輸入時(shí),a前面沒有取地址符。這是因?yàn)閿?shù)組名本身表示數(shù)組在內(nèi)存中的首地址。3.用整體引入的方法一旦輸入空格就代表輸入結(jié)束。例如:scanf("%s",a);從鍵盤輸入:thankyou數(shù)組a接收:thank這是因?yàn)閟canf的用法:遇到空格、回車、TAB鍵代表輸入結(jié)束。4.雖然字符串中系統(tǒng)會(huì)自動(dòng)追加一個(gè)'\0'表示結(jié)束,但輸出字符中不包括該結(jié)束符,且僅輸出結(jié)束符之前的所有元素。例如:charc[10];scanf(“%s”,c);從鍵盤輸入:China運(yùn)行輸出:China單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務(wù)準(zhǔn)備:5.6.2字符數(shù)組元素引用4.雖然字符串中系統(tǒng)會(huì)自動(dòng)追加一個(gè)'\0'表示結(jié)束,但輸出字符中不包括該結(jié)束符,且僅輸出結(jié)束符之前的所有元素。例如:charc[10];scanf(“%s”,c);從鍵盤輸入:China運(yùn)行輸出:China單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務(wù)準(zhǔn)備:5.6.2字符數(shù)組元素引用小試牛刀:
請(qǐng)你定義并初始化一個(gè)字符數(shù)組,并且使用字符串輸出函數(shù)輸出。單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務(wù)準(zhǔn)備:5.7字符串的相關(guān)函數(shù)5.7.1字符串輸入輸出函數(shù)在C函數(shù)庫中提供了一些用來專門處理字符串的函數(shù),使用這些函數(shù)可以極大提高編程效率。字符串處理函數(shù)大致可分為字符串的輸入、輸出、合并、修改、比較、復(fù)制等。在使用輸入/輸出字符串函數(shù)前要引用頭文件<stdio.h>。1.字符串輸入函數(shù)格式:gets(字符數(shù)組名);作用:表示從鍵盤上輸入一個(gè)字符串賦給該數(shù)組,遇到回車表示結(jié)束輸入。例如:chara[20];gets(a);從鍵盤輸入:thankyou↙數(shù)組a接收thankyou請(qǐng)用printf(“%s”,a);觀察并記錄輸出結(jié)果,分析產(chǎn)生區(qū)別的原因單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務(wù)準(zhǔn)備:5.7字符串的相關(guān)函數(shù)2.字符串輸出函數(shù)格式:puts(字符數(shù)組名);或puts(字符串常量);作用:表示從字符數(shù)組或者字符串常量的起始位置開始輸出,一直遇到'\0'。例如:chara[30]="Plantingtrees";puts(a);或puts("Plantingtrees");請(qǐng)對(duì)上面字符串分別用printf("%s",a);和puts(a);輸出。(1)觀察結(jié)果并進(jìn)行總結(jié)區(qū)別。(2)檢測(cè)兩種輸出方法對(duì)以下字符數(shù)組的輸出結(jié)果,并分析原因。chara[5]={'H','a','p','p','y'};單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務(wù)準(zhǔn)備:5.7.2字符串處理函數(shù)除了輸入/輸出字符串函數(shù)之外,其他字符串處理函數(shù)應(yīng)當(dāng)引用頭文件<string.h>。1.求字符串長(zhǎng)度函數(shù)
格式:strlen(a)
作用:求字符串a(chǎn)的長(zhǎng)度,即求第一個(gè)'\0'之前的字符個(gè)數(shù)。
參數(shù)要求:a若是字符數(shù)組,這里僅寫數(shù)組名;若是字符串常量,就要寫串常量時(shí)加上雙引號(hào)。例如:charstr[20]="Iamhappy";
字符數(shù)組str的存儲(chǔ)狀態(tài)如圖5-15所示:圖5-15字符數(shù)組str的存儲(chǔ)狀態(tài)請(qǐng)測(cè)試:
strlen(str)=______________sizeof(str)=______________其中,sizeof()運(yùn)算符是用來計(jì)算()中的標(biāo)識(shí)符代表的實(shí)體分配的內(nèi)存空間的字節(jié)數(shù)。請(qǐng)分析兩個(gè)式子不同的原因。單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務(wù)準(zhǔn)備:5.7.2字符串處理函數(shù)2.字符串復(fù)制函數(shù)格式:strcpy(s1,s2)作用:將字符串s2的內(nèi)容(包括字符串結(jié)束符'\0')依次存放到s1對(duì)應(yīng)的單元格中。參數(shù)要求:s1必須是容量足夠大的字符數(shù)組,至少能容納s2
字符串所有內(nèi)容;s2可以是字符數(shù)組也可以是字符串常量。如同常量賦值a=5,賦值號(hào)左邊一定是變量,不能是常量;字符串復(fù)制函數(shù)也是如此,被復(fù)制的一定是占有內(nèi)存空間的連續(xù)單元格,而不能是字符串常量。例如:chars1[15]="Iamhappy";strcpy(s1,"happy");s1的初始狀態(tài)如圖5-16所示:圖5-16初始狀態(tài)s1的被賦值后的狀態(tài)如圖5-17所示:圖5-17賦值后狀態(tài)請(qǐng)測(cè)試:
puts(s1);_____________strlen(s1);_____________s1[7]=________________單擊此處添加名稱CLICKTOADDCAPTIONTEXT任務(wù)準(zhǔn)備:5.7.2字符串處理函數(shù)3.字符串連接函數(shù)格式:strcat(s1,s2)作用:將字符串s2的內(nèi)容連接到s1后面,構(gòu)成一個(gè)新的字符串。在連接的過程中,字符數(shù)組s1中的字符串結(jié)束符'\0'會(huì)被去掉,被s2字符串的第一個(gè)字符覆蓋。參數(shù)要求:s1必須是容量足夠大的字符數(shù)組,至少能容納字符串s1和s2
所有內(nèi)容;s2可以是字符數(shù)組也可以是字符串常量。這是因?yàn)椋址麛?shù)組s1必須有內(nèi)存空間,方便字符串s2元素的存儲(chǔ)。例如:chars1[15]="Happy",s2[]="birthday";strcat(s1,s2);s1的初始狀態(tài)如圖5-18所示:圖5-18字符數(shù)組s1的初始存儲(chǔ)狀態(tài)執(zhí)行后,s1的狀態(tài)如圖5-19所示:可以看到,"Happy"后的第一個(gè)'\0'被字符串
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 術(shù)后各種引流管護(hù)理
- 涉外秘書簡(jiǎn)歷設(shè)計(jì)
- 工裝室內(nèi)設(shè)計(jì)概念
- 幼兒園大班科學(xué)《各種有趣的蠟燭》課件
- 新生兒消毒培訓(xùn)
- 商務(wù)酒店客房設(shè)計(jì)
- 暑假健康教育家長(zhǎng)會(huì)
- syb廳創(chuàng)業(yè)計(jì)劃書營(yíng)養(yǎng)膳食
- 內(nèi)衣內(nèi)褲投資建設(shè)項(xiàng)目立項(xiàng)報(bào)告
- 統(tǒng)編版語文一年級(jí)上冊(cè)4四季 課件
- 體育產(chǎn)業(yè)概論(第七章奧運(yùn)經(jīng)濟(jì))課件
- 山洪災(zāi)害防治知識(shí)競(jìng)賽(答案)-洪災(zāi)知識(shí)競(jìng)賽
- 肺炎住院病歷及病程記錄教學(xué)文案
- 檢察院書記員考試試題法院書記員考試試題
- 金風(fēng)科技5MW風(fēng)力發(fā)電機(jī)專業(yè)題庫分解
- 排球比賽計(jì)分表2
- 水中樁、水上平臺(tái)施工專項(xiàng)方案
- 儀器設(shè)備管理培訓(xùn)課件(共88頁).ppt
- 食堂食品定點(diǎn)采購詢價(jià)記錄表
- Fuji Flexa程序制作步驟
- 深國交數(shù)學(xué)模擬試題1
評(píng)論
0/150
提交評(píng)論