數(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ù)免費閱讀

下載本文檔

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

文檔簡介

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

4.3字符串的組織

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

4.1數(shù)組類型

4.4常用的字符串標準函數(shù)及應(yīng)用實例

4.5二維數(shù)組

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

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

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

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

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

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

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

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

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

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

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

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

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

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

?數(shù)據(jù)的組織結(jié)構(gòu)(一)全文共36頁,當前為第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){ /*檢驗輸入的編碼是否有效*/ printf("\nInvalidvote.");}else{if(code!=0) vote[code-1]=vote[code-1]+1; /*累加票數(shù)*/}}while(code!=0);程序代碼?數(shù)據(jù)的組織結(jié)構(gòu)(一)全文共36頁,當前為第12頁。/*輸出選票*/printf("\nTheamountofvotesis:");for(i=0;i<NUM;i++){printf("%4d",vote[i]);}/*計算最高得票數(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頁,當前為第13頁。根據(jù)需求對數(shù)據(jù)進行統(tǒng)計

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

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

?數(shù)據(jù)的組織結(jié)構(gòu)(一)全文共36頁,當前為第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;}}

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

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

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

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

/*順序查找是否存在不及格的學生*/ 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頁,當前為第26頁。例5:已知一個按非遞減有序排列的整型數(shù)列(12,23,30,45,48,50,67,82,91,103)。請編寫一個程序,查找其中是否存在與給定key相等的數(shù)值。

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

?數(shù)據(jù)的組織結(jié)構(gòu)(一)全文共36頁,當前為第28頁。?數(shù)據(jù)的組織結(jié)構(gòu)(一)全文共36頁,當前為第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); /*確認break出口*/else printf("\n%disnotfound.",key); /*確認循環(huán)正常出口*/}程序代碼?數(shù)據(jù)的組織結(jié)構(gòu)(一)全文共36頁,當前為第30頁。

排序問題

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

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

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

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論