數(shù)據(jù)的組織結(jié)構(gòu)(一)_第1頁
數(shù)據(jù)的組織結(jié)構(gòu)(一)_第2頁
數(shù)據(jù)的組織結(jié)構(gòu)(一)_第3頁
數(shù)據(jù)的組織結(jié)構(gòu)(一)_第4頁
數(shù)據(jù)的組織結(jié)構(gòu)(一)_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第4章數(shù)據(jù)的組織結(jié)構(gòu)(一)

4.3字符串的組織

4.2利用一維數(shù)組組織數(shù)據(jù)的應(yīng)用實(shí)例

4.1數(shù)組類型

4.4常用的字符串標(biāo)準(zhǔn)函數(shù)及應(yīng)用實(shí)例

4.5二維數(shù)組

?數(shù)據(jù)的組織結(jié)構(gòu)(一)全文共36頁,當(dāng)前為第1頁。課前復(fù)習(xí)前三章數(shù)據(jù)類型----數(shù)據(jù)結(jié)構(gòu)的一種方式

學(xué)習(xí)新的數(shù)據(jù)的組織形式----數(shù)據(jù)結(jié)構(gòu)的另一種方式?數(shù)據(jù)的組織結(jié)構(gòu)(一)全文共36頁,當(dāng)前為第2頁。4.1數(shù)組類型數(shù)組類型的應(yīng)用背景(1)同時(shí)存在若干個(gè)用來描述同一性質(zhì)且不同個(gè)體的數(shù)據(jù)。(2)只有將這些數(shù)據(jù)組織在一起形成批量數(shù)據(jù),共同參與處理,很多操作才具有實(shí)際意義。例如:在某個(gè)部門中,需要由全體職工推選一名辦公室主任。假設(shè)有10名候選人準(zhǔn)備參與競選。希望編寫一個(gè)程序,統(tǒng)計(jì)每個(gè)候選人的得票數(shù)量及選舉結(jié)果。?數(shù)據(jù)的組織結(jié)構(gòu)(一)全文共36頁,當(dāng)前為第3頁。一維數(shù)組類型的定義

定義格式:<元素類型><數(shù)組變量名>[<元素?cái)?shù)量>];例如:intvote[10];C語言規(guī)定:數(shù)組的下標(biāo)從0開始,因此,表示這10個(gè)數(shù)據(jù)的下標(biāo)為0~9

變量一經(jīng)定義,系統(tǒng)就要為它分配相應(yīng)的存儲(chǔ)空間。在C程序中,系統(tǒng)將會(huì)為每個(gè)數(shù)組型變量分配一片連續(xù)的存儲(chǔ)空間,所需要分配的存儲(chǔ)空間總數(shù)將取決于包含的元素個(gè)數(shù)和每個(gè)元素需要的存儲(chǔ)空間。

?數(shù)據(jù)的組織結(jié)構(gòu)(一)全文共36頁,當(dāng)前為第4頁。

一維數(shù)組的初始化基本格式為:<元素類型><數(shù)組變量名>[<元素?cái)?shù)量>]={<元素初值1>,<元素初值2>,......,<元素初值n>};例如:floatscore[5]={9.2,9.1,8.7,9.1,8.5};

?數(shù)據(jù)的組織結(jié)構(gòu)(一)全文共36頁,當(dāng)前為第5頁。說明:1)為數(shù)組型變量中的每一個(gè)元素都提供了一個(gè)初始值。此時(shí),可以省略方括號內(nèi)的數(shù)組元素?cái)?shù)量。系統(tǒng)將根據(jù)花括號中包含的初值數(shù)目推測出數(shù)組含有的元素?cái)?shù)量。

floatscore[]={9.2,9.1,8.7,9.1,8.5};2)對數(shù)組型變量的前面若干個(gè)元素賦予初值。此時(shí)可以使用下面這種書寫形式:

intletter[26]={10,9,8,7};它的執(zhí)行結(jié)果是:將10、9、8、7分別賦予letter數(shù)組中下標(biāo)為0、1、2、3的元素,后面的所有元素賦予初值0。3)將數(shù)組型變量中的每一個(gè)元素賦予初值0。此時(shí),可以使用下面這種簡化的書寫形式:

intvote[10]={0};?數(shù)據(jù)的組織結(jié)構(gòu)(一)全文共36頁,當(dāng)前為第6頁。一維數(shù)組元素的引用及基本操作數(shù)組元素的引用<數(shù)組變量名>[<下標(biāo)表達(dá)式>]數(shù)組的賦值利用賦值語句為數(shù)組賦值for(i=0;i<10;i++){vote[i]=0;}調(diào)用標(biāo)準(zhǔn)輸入函數(shù)為數(shù)組賦值for(i=0;i<13;i++){scanf(“%f”,&score[i]);}數(shù)組的輸出

for(i=0;i<10;i++){printf(“%5d”,vote[i]);}?數(shù)據(jù)的組織結(jié)構(gòu)(一)全文共36頁,當(dāng)前為第7頁。9、我們的市場行為主要的導(dǎo)向因素,第一個(gè)是市場需求的導(dǎo)向,第二個(gè)是技術(shù)進(jìn)步的導(dǎo)向,第三大導(dǎo)向是競爭對手的行為導(dǎo)向。6月-236月-23Wednesday,June14,202310、市場銷售中最重要的字就是“問”。11:03:4011:03:4011:036/14/202311:03:40AM11、現(xiàn)今,每個(gè)人都在談?wù)撝鴦?chuàng)意,坦白講,我害怕我們會(huì)假創(chuàng)意之名犯下一切過失。6月-2311:03:4011:03Jun-2314-Jun-2312、在購買時(shí),你可以用任何語言;但在銷售時(shí),你必須使用購買者的語言。11:03:4011:03:4011:03Wednesday,June14,202313、Hewhoseizetherightmoment,istherightman.誰把握機(jī)遇,誰就心想事成。6月-236月-2311:03:4011:03:40June14,202314、市場營銷觀念:目標(biāo)市場,顧客需求,協(xié)調(diào)市場營銷,通過滿足消費(fèi)者需求來創(chuàng)造利潤。14六月202311:03:40上午11:03:406月-2315、我就像一個(gè)廚師,喜歡品嘗食物。如果不好吃,我就不要它。六月2311:03上午6月-2311:03June14,202316、我總是站在顧客的角度看待即將推出的產(chǎn)品或服務(wù),因?yàn)槲揖褪穷櫩汀?023/6/1411:03:4011:03:4014June202317、利人為利已的根基,市場營銷上老是為自己著想,而不顧及到他人,他人也不會(huì)顧及你。11:03:40上午11:03上午11:03:406月-23數(shù)據(jù)的組織結(jié)構(gòu)(一)全文共36頁,當(dāng)前為第8頁。按照條件對數(shù)據(jù)進(jìn)行篩選

在遇到的許多問題中,經(jīng)常需要從眾多的數(shù)據(jù)中挑選出來滿足一定條件的數(shù)據(jù),這就是數(shù)據(jù)的篩選操作。在C程序中,參與篩選操作的批量數(shù)據(jù)可以采用一個(gè)一維數(shù)組型變量組織,篩選的條件用邏輯表達(dá)式表示。

4.2利用一維數(shù)組組織數(shù)據(jù)的應(yīng)用實(shí)例?數(shù)據(jù)的組織結(jié)構(gòu)(一)全文共36頁,當(dāng)前為第9頁。例1:在某個(gè)公司中,計(jì)劃由職工們推選一名辦公室主任。假設(shè)有10名候選人準(zhǔn)備參與競選。希望編寫一個(gè)程序,輸入一組選舉人的投票信息,統(tǒng)計(jì)每個(gè)候選人的得票數(shù)目及選舉結(jié)果。

問題分析用一維數(shù)組記錄每位候選人的得票數(shù)量。投票通過循環(huán)輸入介于1~10之間的整型數(shù)值來模擬的。例如,輸入3代表某個(gè)職工選舉編碼為3的候選人。

找出最多的得票數(shù)量之后,從所有的候選人中篩選出得票數(shù)量與最高得票數(shù)量相同的人。?數(shù)據(jù)的組織結(jié)構(gòu)(一)全文共36頁,當(dāng)前為第10頁。算法描述

?數(shù)據(jù)的組織結(jié)構(gòu)(一)全文共36頁,當(dāng)前為第11頁。#include<stdio.h>#defineNUM10 /*候選人人數(shù)*/main(){intvote[NUM]={0}; intcode,i,winner;/*職工投票*/printf("\nEnteryourselection<0end>:\n");do{scanf("%d",&code);if(code<0||code>NUM){ /*檢驗(yàn)輸入的編碼是否有效*/ printf("\nInvalidvote.");}else{if(code!=0) vote[code-1]=vote[code-1]+1; /*累加票數(shù)*/}}while(code!=0);程序代碼?數(shù)據(jù)的組織結(jié)構(gòu)(一)全文共36頁,當(dāng)前為第12頁。/*輸出選票*/printf("\nTheamountofvotesis:");for(i=0;i<NUM;i++){printf("%4d",vote[i]);}/*計(jì)算最高得票數(shù)量*/winner=0;for(i=1;i<NUM;i++){if(vote[i]>vote[winner]) winner=i;}/*輸出得票最高的所有候選人*/printf("\nThewinner:");for(i=winner;i<NUM;i++){if(vote[i]==vote[winner]) printf("%3d",i+1);}}?數(shù)據(jù)的組織結(jié)構(gòu)(一)全文共36頁,當(dāng)前為第13頁。根據(jù)需求對數(shù)據(jù)進(jìn)行統(tǒng)計(jì)

為了滿足特定的需要,對一組數(shù)據(jù)的某些特征進(jìn)行統(tǒng)計(jì)是一項(xiàng)經(jīng)常遇到的基本操作。例如,統(tǒng)計(jì)一段文本中某個(gè)字符出現(xiàn)的頻率;統(tǒng)計(jì)學(xué)生考試的平均成績等等都屬于統(tǒng)計(jì)操作。統(tǒng)計(jì)操作的結(jié)果往往是通過對所有數(shù)據(jù)進(jìn)行掃描、判斷或綜合加工得到的。在C程序中,參與統(tǒng)計(jì)操作的批量數(shù)據(jù)可以用一維數(shù)組來組織,具體統(tǒng)計(jì)過程可以通過邏輯判斷、累計(jì)、算術(shù)運(yùn)算等基本操作手段實(shí)現(xiàn)。

?數(shù)據(jù)的組織結(jié)構(gòu)(一)全文共36頁,當(dāng)前為第14頁。例2:在一段文本中,可能會(huì)出現(xiàn)各式各樣的字符。編寫一個(gè)程序,從鍵盤讀入一行文本,完成統(tǒng)計(jì)每個(gè)英文字母出現(xiàn)頻率的操作。問題分析用一維數(shù)組構(gòu)造26個(gè)用于記錄每個(gè)字母出現(xiàn)次數(shù)的累加器。對于輸入的文本字符,可以在讀取時(shí)檢查一下是否為英文字母,而不需要將其存儲(chǔ)起來。?數(shù)據(jù)的組織結(jié)構(gòu)(一)全文共36頁,當(dāng)前為第15頁。算法描述

?數(shù)據(jù)的組織結(jié)構(gòu)(一)全文共36頁,當(dāng)前為第16頁。#include<stdio.h>#defineNUM26main(){intletter[NUM]={0}; charch;inti;printf("\nEntertextline\n");while((ch=getchar())!='\n'){ if('A'<=ch&&ch<='Z'){ /*檢測是否為大寫字母*/letter[ch-'A']=letter[ch-'A']+1;}else{if('a'<=ch&&ch<='z')/*檢測是否為小寫字母*/ letter[ch-'a']=letter[ch-'a']+1;}}

/*輸出每個(gè)英文字母出現(xiàn)的次數(shù)*/for(i=0;i<NUM;i++){printf("\n\'%c\':%d",'A'+i,letter[i]);}}程序代碼?數(shù)據(jù)的組織結(jié)構(gòu)(一)全文共36頁,當(dāng)前為第17頁。例3:每年中央電視臺(tái)都要舉辦青年歌手大獎(jiǎng)賽。假設(shè)有13位評委參與評分工作。計(jì)算每位歌手最終得分的方法是:首先去掉一個(gè)最高分和一個(gè)最低分,然后計(jì)算剩余11個(gè)分?jǐn)?shù)的平均值,所得結(jié)果就是選手的最終得分。希望編寫一個(gè)程序,幫助工作人員計(jì)算每個(gè)歌手的分?jǐn)?shù)。問題分析用一維數(shù)組存儲(chǔ)13位評委給出的分?jǐn)?shù)尋找最高分和最低分計(jì)算剩余11個(gè)分?jǐn)?shù)的平均分?數(shù)據(jù)的組織結(jié)構(gòu)(一)全文共36頁,當(dāng)前為第18頁。算法描述

?數(shù)據(jù)的組織結(jié)構(gòu)(一)全文共36頁,當(dāng)前為第19頁。#include<stdio.h>#defineNUM13 main(){floatscore[NUM];*/inti,minValue,maxValue;floatsum;/*輸入13位評委給出的分?jǐn)?shù)*/printf("\nEnter13score:");for(i=0;i<NUM;i++){scanf("%f",&score[i]);}程序代碼?數(shù)據(jù)的組織結(jié)構(gòu)(一)全文共36頁,當(dāng)前為第20頁。/*找出最高分、最低分,并同時(shí)累加13個(gè)分?jǐn)?shù)的總和*/minValue=score[0];maxValue=score[0];sum=score[0];for(i=1;i<NUM;i++){if(score[i]<minValue) minValue=score[i];if(score[i]>maxValue) maxValue=score[i];sum=sum+score[i];}/*計(jì)算并輸出歌手的最終得分*/sum=(sum-minValue-maxValue)/(NUM-2);printf("\nFinalscoreis%6.2f",sum);}?數(shù)據(jù)的組織結(jié)構(gòu)(一)全文共36頁,當(dāng)前為第21頁。查找問題所謂查找是指根據(jù)某個(gè)給定的條件,在一組數(shù)據(jù)中搜索是否存在滿足該條件的數(shù)據(jù)的過程。如果存在,則表示查找成功,給出成功的標(biāo)志;否則表示查找不成功,給出失敗的標(biāo)志。在程序中,查找操作的結(jié)果經(jīng)常被用來作為是否執(zhí)行某項(xiàng)后續(xù)操作的決策依據(jù)。?數(shù)據(jù)的組織結(jié)構(gòu)(一)全文共36頁,當(dāng)前為第22頁。例4:已知某個(gè)班級35名學(xué)生的某門課程的考試成績。請編寫一個(gè)程序,查看在這個(gè)班級中是否存在不及格的學(xué)生。

問題分析用一維數(shù)組記錄每位學(xué)生的考試成績,下標(biāo)表示每個(gè)學(xué)生的編號,元素內(nèi)容表示考試成績。查找可以通過從前往后依次查看每個(gè)元素內(nèi)容的過程實(shí)現(xiàn)。?數(shù)據(jù)的組織結(jié)構(gòu)(一)全文共36頁,當(dāng)前為第23頁。算法描述

?數(shù)據(jù)的組織結(jié)構(gòu)(一)全文共36頁,當(dāng)前為第24頁。#include<stdio.h>#include<stdlib.h>#defineNUM35/*學(xué)生人數(shù)*/main(){ intscore[NUM]; inti;/*隨機(jī)產(chǎn)生35個(gè)考試成績*/randomize();for(i=0;i<NUM;i++){ score[i]=random(100); } /*顯示35名學(xué)生的考試成績*/ for(i=0;i<NUM;i++){ printf("\nNo.%d:%d",i+1,score[i]); }程序代碼?數(shù)據(jù)的組織結(jié)構(gòu)(一)全文共36頁,當(dāng)前為第25頁。

/*順序查找是否存在不及格的學(xué)生*/ for(i=0;i<NUM;i++){ if(score[i]<60)break; }

/*輸出查找結(jié)果*/ if(i<NUM) printf("\nNotallpass."); else printf("Allpass.");}?數(shù)據(jù)的組織結(jié)構(gòu)(一)全文共36頁,當(dāng)前為第26頁。例5:已知一個(gè)按非遞減有序排列的整型數(shù)列(12,23,30,45,48,50,67,82,91,103)。請編寫一個(gè)程序,查找其中是否存在與給定key相等的數(shù)值。

問題分析二分查找是指每次用key與位于查找區(qū)間中央位置的元素進(jìn)行比較,比較結(jié)果將會(huì)產(chǎn)生下面三種情形之一:如果相等,說明查找成功。如果key小于中央位置的元素,說明如果存在這樣的元素,應(yīng)該位于查找區(qū)間的前半部分。此時(shí)可以將查找區(qū)間縮減為原來的一半,并在這一半的區(qū)間中繼續(xù)用相同的方式查找。如果key大于中央位置的元素,說明如果存在這樣的元素,應(yīng)該位于查找區(qū)間的后半部分。同樣可以將查找區(qū)間縮減為原來的一半,并在這一半的區(qū)間中繼續(xù)用相同的方式查找??梢钥闯觯胟ey與當(dāng)前查找區(qū)間中央位置的元素比較后,不是找到了,就是將查找區(qū)間縮小了一半。直到查找區(qū)間不存在了,說明沒有要找的key。?數(shù)據(jù)的組織結(jié)構(gòu)(一)全文共36頁,當(dāng)前為第27頁。算法描述

?數(shù)據(jù)的組織結(jié)構(gòu)(一)全文共36頁,當(dāng)前為第28頁。?數(shù)據(jù)的組織結(jié)構(gòu)(一)全文共36頁,當(dāng)前為第29頁。#include<stdio.h>#defineNUM10main(){intvalue[NUM]={12,23,30,45,48,50,67,82,91,103};/*非遞減整型數(shù)列*/intlow,high,mid,key;printf("\nEnterakey:"); /*輸入查找的數(shù)值*/scanf("%d",&key);low=0; high=NUM-1;while(low<=high){ mid=(low+high)/2; if(value[mid]==key) break; if(value[mid]<key)low=mid+1; elsehigh=mid-1;}if(low<=high) printf("\n%disfoundat%d.",key,mid); /*確認(rèn)break出口*/else printf("\n%disnotfound.",key); /*確認(rèn)循環(huán)正常出口*/}程序代碼?數(shù)據(jù)的組織結(jié)構(gòu)(一)全文共36頁,當(dāng)前為第30頁。

排序問題

將一組無序的數(shù)列重新排列成非遞減或非遞增的順序是一種經(jīng)常需要的操作。例如,在管理學(xué)生成績的應(yīng)用程序中,可以用一個(gè)數(shù)列表示一個(gè)班級的學(xué)生成績,并按照從高到低的順序重新排列,以便確定獲得獎(jiǎng)學(xué)金的學(xué)生。

?數(shù)據(jù)的組織結(jié)構(gòu)(一)全文共36頁,當(dāng)前為第31頁。例6:假設(shè)用戶通過鍵盤輸入一個(gè)整型數(shù)列。請編寫一個(gè)程序,將其按照從小到大的順序重新排列。問題分析首先從n個(gè)數(shù)據(jù)中選擇一個(gè)最小的數(shù)據(jù),并將它交換到第1個(gè)位置;然后再從后面n-1個(gè)數(shù)據(jù)中選擇一個(gè)最小的數(shù)據(jù),并將它交換到第2個(gè)位置;以此類推,直至最后從兩個(gè)數(shù)據(jù)中選擇一個(gè)最小的數(shù)據(jù),并將它交換到第n-1個(gè)位置為止,整個(gè)排序操作結(jié)束。?數(shù)據(jù)的組織結(jié)構(gòu)(一)全文共36頁,當(dāng)前為第32頁。算法描述

?數(shù)據(jù)的組織結(jié)構(gòu)(一)全文共36頁,當(dāng)前為第33頁。#include<stdio.h>#defineNUM10 /*參與排序的數(shù)據(jù)個(gè)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論