版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
數(shù)據(jù)的組織結構—數(shù)組第四章一、一維數(shù)組二、一維數(shù)組的編程實例三、字符數(shù)組與字符串四、二維數(shù)組1數(shù)據(jù)的組織結構--一維數(shù)組共48頁,您現(xiàn)在瀏覽的是第1頁!數(shù)組類型的應用背景同時存在若干個用來描述同一性質(zhì)且不同個體的數(shù)據(jù)將這些數(shù)據(jù)組織在一起形成批量數(shù)據(jù),共同參與處理,很多操作才具有實際意義2數(shù)據(jù)的組織結構--一維數(shù)組共48頁,您現(xiàn)在瀏覽的是第2頁!例如:輸入100名學生的成績,要求輸出高于平均分的所有成績。單一數(shù)據(jù)考慮:用100個變量(a1,a2,,a100)存放學生成績,與平均成績(ave)進行判斷, if(a1>ave)printf(“%f\n”,a1); if(a2>ave)printf(“%f\n”,a2);
用數(shù)組:for(i=1;i<=100;i++) if(a[i]>ave)printf(“%f\n”,a[i]);數(shù)組是一種用來組織批量數(shù)據(jù)的數(shù)據(jù)類型。3數(shù)據(jù)的組織結構--一維數(shù)組共48頁,您現(xiàn)在瀏覽的是第3頁!說明:若數(shù)組長度為n,下標的下限從0開始,上限到n-1。注意下標不要越界,否則將產(chǎn)生不可預料的運行結果,C語言并不檢驗下標是否越界C語言規(guī)定,數(shù)組名是一個地址常量,代表所分配的內(nèi)存區(qū)域的起始地址4數(shù)據(jù)的組織結構--一維數(shù)組共48頁,您現(xiàn)在瀏覽的是第4頁!一維數(shù)組初始化在定義數(shù)組時對數(shù)組元素賦以初值
inta[10]={0,1,2,3,4,5,6,7,8,9};在對全部數(shù)組元素賦初值時,數(shù)組長度可以省略
inta[]={0,1,2,3,4,5,6,7,8,9};只給一部分賦值,未設定初值的自動被設定為0,數(shù)組長度不能省略
inta[10]={0,1,2,3,4};intdigit[10]={0};有幾個初值,數(shù)組默認大小就是多大5數(shù)據(jù)的組織結構--一維數(shù)組共48頁,您現(xiàn)在瀏覽的是第5頁!某個公司計劃由職工推選一名辦公室主任。假設有10名候選人準備參與競選。編寫一個程序,輸入一組選舉人的投票信息,統(tǒng)計每個候選人的得票數(shù)目及選舉結果。
實例1根據(jù)條件對數(shù)據(jù)進行篩選二、一維數(shù)組的編程實例[P81,例4-1]6數(shù)據(jù)的組織結構--一維數(shù)組共48頁,您現(xiàn)在瀏覽的是第6頁!數(shù)據(jù)對象每位候選人的得票數(shù)量intvote[10]投票時輸入的編碼intcode最高得票數(shù)量intwinner約束條件假設投票時以0作為輸入的結束標志輸入無效編碼的檢驗7數(shù)據(jù)的組織結構--一維數(shù)組共48頁,您現(xiàn)在瀏覽的是第7頁!#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);程序代碼8數(shù)據(jù)的組織結構--一維數(shù)組共48頁,您現(xiàn)在瀏覽的是第8頁!為了滿足特定的需要,對一組數(shù)據(jù)的某些特征進行統(tǒng)計是一項經(jīng)常遇到的基本操作例如統(tǒng)計一段文本中某個字符出現(xiàn)的頻率統(tǒng)計學生考試的平均成績……在C程序中,參與統(tǒng)計操作的批量數(shù)據(jù)可以用一維數(shù)組來組織,具體統(tǒng)計過程可以通過邏輯判斷、累計、算術運算等基本操作手段實現(xiàn)根據(jù)需求對數(shù)據(jù)進行統(tǒng)計9數(shù)據(jù)的組織結構--一維數(shù)組共48頁,您現(xiàn)在瀏覽的是第9頁!算法描述
開始
ch=getchar()
輸出統(tǒng)計結果
相應計數(shù)器加1
結束
是大寫
是小寫
相應計數(shù)器加1
ch!=‘\n’Y
N
Y
N
N
Y
10數(shù)據(jù)的組織結構--一維數(shù)組共48頁,您現(xiàn)在瀏覽的是第10頁!實例2:
大獎賽
每年中央電視臺都要舉辦青年歌手大獎賽。假設有13位評委參與評分工作。計算每位歌手最終得分的方法是:首先去掉一個最高分和一個最低分,然后計算剩余11個分數(shù)的平均值,所得結果就是選手的最終得分。希望編寫一個程序,幫助工作人員計算每個歌手的分數(shù)。11數(shù)據(jù)的組織結構--一維數(shù)組共48頁,您現(xiàn)在瀏覽的是第11頁!算法描述
12數(shù)據(jù)的組織結構--一維數(shù)組共48頁,您現(xiàn)在瀏覽的是第12頁!/*找出最高分、最低分,并同時累加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);}13數(shù)據(jù)的組織結構--一維數(shù)組共48頁,您現(xiàn)在瀏覽的是第13頁!
題目用簡單選擇法對從鍵盤輸入的10個整數(shù)由小到大排序(升序)。實例3選擇排序P93例4-6數(shù)據(jù)對象考慮應保存10個整數(shù),設置數(shù)組a[10]每個元素存一個數(shù)個數(shù)保存在a[0]中14數(shù)據(jù)的組織結構--一維數(shù)組共48頁,您現(xiàn)在瀏覽的是第14頁!選擇排序過程:P93原始數(shù)據(jù):[23163295667863]minimini第一趟后:6[1632956237863]minmin第二趟后:69[321656237863]imin15數(shù)據(jù)的組織結構--一維數(shù)組共48頁,您現(xiàn)在瀏覽的是第15頁!最小值下標minValue0i
i<N-1
minValue!=i
交換
Y
Y
NN
開始
輸入待排序整數(shù)數(shù)列
i+1i
iminValue
顯示排序后的結果
結束
算法描述顯示整數(shù)數(shù)列16數(shù)據(jù)的組織結構--一維數(shù)組共48頁,您現(xiàn)在瀏覽的是第16頁!
for(i=0;i<N-1;i++)/*排序*/{min=i;for(j=i+1;j<N;j++) if(a[j]<a[min])min=j;if(i!=min){t=a[i];a[i]=a[min];a[min]=t;}}
printf("Thesortednumbers:\n");for(i=0;i<N;i++)/*顯示排序后結果*/ printf("%d",a[i]);}17數(shù)據(jù)的組織結構--一維數(shù)組共48頁,您現(xiàn)在瀏覽的是第17頁!
隨機數(shù)的產(chǎn)生
C語言的標準庫提供了函數(shù)rand()和srand()??蓪崿F(xiàn)如模擬和游戲等方面的應用。函數(shù)rand和srand的函數(shù)原型在stdlib.h中函數(shù)rand()產(chǎn)生一個在0到RAND_MAX之間的整數(shù)值(隨機數(shù))。RAND_MAX是符號常量,其值為32767。
調(diào)用形式:n=rand();18數(shù)據(jù)的組織結構--一維數(shù)組共48頁,您現(xiàn)在瀏覽的是第18頁!
intrandom(intnum)
返回一個0~num-1之間的數(shù)k=random(10);
voidrandomize()
初始化隨機數(shù)發(fā)生器使用例:randomize();for(i=0;i<10;i++)/*產(chǎn)生隨機數(shù)*/ a[i]=1+random(10);另一組隨機函數(shù):19數(shù)據(jù)的組織結構--一維數(shù)組共48頁,您現(xiàn)在瀏覽的是第19頁!實例4:請編寫一個程序,查看在某班35名學生的某門課程的考試成績中,是否存在不及格的學生問題分析用一維數(shù)組記錄每位學生的考試成績,下標表示每個學生的編號,元素內(nèi)容表示考試成績通過從前往后依次查看每個元素內(nèi)容的過程實現(xiàn)查找20數(shù)據(jù)的組織結構--一維數(shù)組共48頁,您現(xiàn)在瀏覽的是第20頁!#include<stdio.h>#include<stdlib.h>#defineNUM35/*學生人數(shù)*/main(){intscore[NUM],i;randomize();for(i=0;i<NUM;i++)/*隨機產(chǎn)生35個考試成績*/score[i]=random(100);for(i=0;i<NUM;i++)/*輸出35個考試成績*/printf("\nNo.%d:%d",i+1,score[i]);for(i=0;i<NUM;i++)if(score[i]<60)break;if(i<NUM)printf("\nNotallpass.");elseprintf("Allpass.");}問題:找出(顯示)所有不及格的學生的成績,應如何修改21數(shù)據(jù)的組織結構--一維數(shù)組共48頁,您現(xiàn)在瀏覽的是第21頁!開始結束構造非遞減數(shù)組value二分查找Key輸入key存在Key輸出成功輸出失敗NY22數(shù)據(jù)的組織結構--一維數(shù)組共48頁,您現(xiàn)在瀏覽的是第22頁!ST.elemST.length例如:key=20的查找過程如下:查找不成功的條件:low>highhighmidlow23數(shù)據(jù)的組織結構--一維數(shù)組共48頁,您現(xiàn)在瀏覽的是第23頁!#include<stdio.h>#defineNUM10main(){intvalue[NUM]={05,13,19,21,37,56,64,75,80,88};intlow,high,mid,key;printf("\nEnterakey:");scanf("%d",&key);//二分查找
;
//輸出查找結果if(low<=high) printf("\n%disfoundat%d",key,mid);else printf("\n%disnotfound.",key);
}24數(shù)據(jù)的組織結構--一維數(shù)組共48頁,您現(xiàn)在瀏覽的是第24頁!順序查找的特點優(yōu)點是在查找前沒有先決條件,在任何情況下都可以使用缺點是效率低若待查找的數(shù)據(jù)是有序的,則可以使用二分查找25數(shù)據(jù)的組織結構--一維數(shù)組共48頁,您現(xiàn)在瀏覽的是第25頁!一、一維數(shù)組一維數(shù)組:由若干具有相同類型的數(shù)據(jù)元素組成。每個元素僅使用一個序號(下標)唯一標識。一維數(shù)組定義<元素類型說明符><數(shù)組名>[長度];
inta[10];元素序號(下標)從0開始,即a[0]a[1]…a[9]長度即為元素的數(shù)量,必須給定數(shù)組名的命名與通常變量命名方式相同系統(tǒng)為它分配一片連續(xù)的存儲空間數(shù)組元素的引用形式
數(shù)組名[下標]◆下標為整型表達式26數(shù)據(jù)的組織結構--一維數(shù)組共48頁,您現(xiàn)在瀏覽的是第26頁!數(shù)組的存儲實現(xiàn)例如:inta[8];為a分配的存儲空間如圖:所占字節(jié)數(shù):
sizeof(元素類型)×元素個數(shù)27數(shù)據(jù)的組織結構--一維數(shù)組共48頁,您現(xiàn)在瀏覽的是第27頁!一維數(shù)組的引用利用賦值語句為數(shù)組元素賦值
for(i=0;i<10;i++)a[i]=0;數(shù)組的輸入
for(i=0;i<10;i++)scanf(“%f”,&score[i]);數(shù)組的輸出
for(i=0;i<10;i++)printf(“%6.2f”,score[i]);28數(shù)據(jù)的組織結構--一維數(shù)組共48頁,您現(xiàn)在瀏覽的是第28頁!問題分析記錄每位候選人的得票數(shù)量(一維數(shù)組)投票可通過循環(huán)輸入1~10之間的整型數(shù)值來模擬,需對候選人進行編號。例如,輸入3代表某個職工選舉編碼為3的候選人找出最多的得票數(shù)量再從所有的候選人中篩選出得票數(shù)量與最高得票數(shù)量相同的人(可能有多人)29數(shù)據(jù)的組織結構--一維數(shù)組共48頁,您現(xiàn)在瀏覽的是第29頁!算法描述
輸入選票code選票合法?code<>0?code-1計數(shù)器加1輸出錯誤信息code<>0?YNNYYN職工投票30數(shù)據(jù)的組織結構--一維數(shù)組共48頁,您現(xiàn)在瀏覽的是第30頁!/*輸出選票*/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);}}問題:改為winner=0;for(i=1;i<NUM;i++){if(vote[i]>=vote[winner]) winner=i;}后面是否修改,如何修改31數(shù)據(jù)的組織結構--一維數(shù)組共48頁,您現(xiàn)在瀏覽的是第31頁!教材P84例4-2:編寫一個程序,從鍵盤讀入一行文本,統(tǒng)計每個英文字母出現(xiàn)的頻率該題與上一章的3.5例5的方法類似基本方法用一維數(shù)組構造26個用于記錄每個字母出現(xiàn)次數(shù)的計數(shù)器用數(shù)組下標來區(qū)分不同字母,且順序一致輸入的字符如果是字母,則按其在字母表中的順序找到相應的計數(shù)器32數(shù)據(jù)的組織結構--一維數(shù)組共48頁,您現(xiàn)在瀏覽的是第32頁!#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ù)次數(shù)大于0的結果,應如何修改?33數(shù)據(jù)的組織結構--一維數(shù)組共48頁,您現(xiàn)在瀏覽的是第33頁!數(shù)據(jù)對象分析用一維數(shù)組存儲13位評委給出的分數(shù)floatscore[13]尋找最高分和最低分floatmaxValue,minValue
計算剩余11個分數(shù)的平均分
floatsum
34數(shù)據(jù)的組織結構--一維數(shù)組共48頁,您現(xiàn)在瀏覽的是第34頁!#include<stdio.h>#defineNUM13
/*評委人數(shù)*/main(){floatscore[NUM];inti;floatminValue,maxValue,sum;
/*輸入13位評委給出的分數(shù)*/printf("\nEnter13score:");for(i=0;i<NUM;i++){scanf("%f",&score[i]);}程序代碼
35數(shù)據(jù)的組織結構--一維數(shù)組共48頁,您現(xiàn)在瀏覽的是第35頁!排序問題將一組無序的數(shù)列重新排列成非遞減或非遞增的順序是一種經(jīng)常需要的操作。例如,在管理學生成績的應用程序中,可以用一個數(shù)列表示一個班級的學生成績,并按照從高到低的順序重新排列,以便確定獲得獎學金的學生36數(shù)據(jù)的組織結構--一維數(shù)組共48頁,您現(xiàn)在瀏覽的是第36頁!算法思想:利用數(shù)組存放n個數(shù)據(jù),并在此數(shù)組中進行排序針對一組n個數(shù)據(jù)a0、a1、…、an-1選出最小的數(shù)據(jù),與個數(shù)據(jù)進行交換從剩余的n-1個數(shù)據(jù)中選出最小的數(shù)據(jù),與剩余的n-1個數(shù)據(jù)的個數(shù)據(jù)進行交換進行n-1遍處理后,數(shù)組形成升序排列37數(shù)據(jù)的組織結構--一維數(shù)組共48頁,您現(xiàn)在瀏覽的是第37頁!算法:1、從鍵盤輸入N個整數(shù)(即10個)。2、for(i=0;i<N-1;i++)2.1設第i個值為最小值(min)。2.2for(j=i+1;j<N;j++)如果第j個值比第min個值小,則minj2.3if(i!=min)a[i]a[min]3、輸出。
流程圖P94圖4-938數(shù)據(jù)的組織結構--一維數(shù)組共48頁,您現(xiàn)在瀏覽的是第38頁!#include<stdio.h>#defineN10/*參與排序的數(shù)據(jù)個數(shù)*/main(){inta[N];/*存放參與排序的所有整數(shù)*/inti,j,min,t;/*通過鍵盤輸入待排序的整型數(shù)列*/
printf("Input10numbers:\n");for(i=0;i<N;i++)scanf("%d",&a[i]);
(接下一頁)arrsort.c程序?qū)崿F(xiàn)39數(shù)據(jù)的組織結構--一維數(shù)組共48頁,您現(xiàn)在瀏覽的是第39頁!for(i=0;i<10;i++)/*產(chǎn)生隨機數(shù)*/ a[i]=1+rand()%10;printf(“Therandnumbers:\n”);/*顯示*/for(i=0;i<10;i++) printf("%d",a[i]);由隨機函數(shù)產(chǎn)生10個數(shù),放入數(shù)組中,需要#include<stdlib.h>數(shù)據(jù)產(chǎn)生待排序的數(shù)值通過隨機數(shù)產(chǎn)生,以便模擬鍵盤輸入。40數(shù)據(jù)的組織結構--一維數(shù)組共48頁,您現(xiàn)在瀏覽的是第40頁!可縮放和移動函數(shù)rand所產(chǎn)生的值,確定指定范圍。一般方法:n=a+rand()%b;其中:a為移動值,所需的連續(xù)整數(shù)值范圍內(nèi)的個數(shù);
b是比例因子,等于所需的連續(xù)整數(shù)值范圍的寬度。函數(shù)srand使程序隨機化。需要設置隨機種子。
srand(time(NULL))函數(shù)time的函數(shù)原型time.h中。41數(shù)據(jù)的組織結構--一維數(shù)組共48頁,您現(xiàn)在瀏覽的是第41頁!查找問題查找是指根據(jù)某個給定的條件,在一組數(shù)據(jù)中搜索是否存在滿足該條件的數(shù)據(jù)的過程查找有2種結果滿足給定的條件的數(shù)據(jù)存在,即查找成功,給出成功的標志該數(shù)據(jù)不存在,即查找不成功,應給出失敗的標志在程序中,查找操作的結果經(jīng)常被用來作為是否執(zhí)行某項后續(xù)操作的決策依據(jù)42數(shù)據(jù)的組織結構--一維數(shù)組共48頁,您現(xiàn)在瀏覽的是第42頁!算法描述開始
結束
順序查找不及格的學生
顯示35名學生的成績
存在不及格學生
輸出Notallpass
輸出Allpass
隨機產(chǎn)生35名學
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度搬家服務合同保險理賠條款3篇
- 2024年離婚財產(chǎn)分割標準協(xié)議樣式版B版
- 建筑排柵工程合同范文
- 包頭職業(yè)技術學院《當代社會思潮與青年教育》2023-2024學年第一學期期末試卷
- 包頭鋼鐵職業(yè)技術學院《手機短視頻拍攝與編輯》2023-2024學年第一學期期末試卷
- 2025年度智慧農(nóng)業(yè)PPP合同要素分析與實施路徑
- 2025年度安置房物業(yè)管理及服務合同5篇
- 2025年度BIM技術在建筑工程風險管理中的應用服務協(xié)議3篇
- 2025版酒店餐飲承包經(jīng)營合作協(xié)議3篇
- 2024年標準橋架安裝工程承包合同樣本版
- 教你炒紅爐火版00纏論大概
- 消防管道施工合同
- 大學生計算與信息化素養(yǎng)-北京林業(yè)大學中國大學mooc課后章節(jié)答案期末考試題庫2023年
- 2023年國開大學期末考復習題-3987《Web開發(fā)基礎》
- 《駱駝祥子》1-24章每章練習題及答案
- 國際金融課后習題答案(吳志明第五版)第1-9章
- 《基于杜邦分析法周大福珠寶企業(yè)盈利能力分析報告(6400字)》
- 全國英語等級考試三級全真模擬試題二-2023修改整理
- 02R112 拱頂油罐圖集
- 英語課presentation中國麻將-Chinese-mahjong
- GB/T 8571-2008復混肥料實驗室樣品制備
評論
0/150
提交評論