文檔簡介
第九講數(shù)組之一一維數(shù)組的定義及排序算法教學(xué)目的:理解數(shù)組與數(shù)組元素概念,掌握一維數(shù)組的定義與引用掌握常用排序算法主要內(nèi)容:一、數(shù)組和數(shù)組元素二、一維數(shù)組的定義和使用三、一維數(shù)組的排序算法重點難點一、數(shù)組和數(shù)組元素已經(jīng)學(xué)習(xí)的C語言基本數(shù)據(jù)類型:整型(short、int、long)實型(float、double、longdouble)字符型(char)空類型(void)后續(xù)學(xué)習(xí)C語言數(shù)據(jù)類型:枚舉類型(屬于基本類型)構(gòu)造類型:數(shù)組、結(jié)構(gòu)體、共同體指針類型所謂構(gòu)造類型:由已存在的數(shù)據(jù)類型構(gòu)造的(或自定義的)組合(或復(fù)合)數(shù)據(jù)類型。一、數(shù)組和數(shù)組元素數(shù)組:又稱下標變量,是一組同類型的變量的有序的集合。數(shù)組中的每個變量稱為數(shù)組的一個元素??梢杂脭?shù)組名稱與數(shù)組的下標惟一地確定一個數(shù)組元素。例如:一個班有30個學(xué)生,用
s0,s1,s2,‥,s29
來表示30個學(xué)生的某科成績,其中,s15就表示第16個學(xué)生的成績。S是數(shù)組名,下標表示序號。在C語言中用s[15]表示s16,則s[15]為數(shù)組s的一個元素。數(shù)組包括一維數(shù)組和多維數(shù)組。數(shù)組元素是按下標遞增的順序存儲的二、一維數(shù)組的定義與引用1、一維數(shù)組的定義類型說明數(shù)組名[常量表達式];可以是任何一種基本數(shù)據(jù)類型或構(gòu)造類型。指定數(shù)組中所有元素的共同數(shù)據(jù)類型??崭馵]數(shù)組名的命名規(guī)則同簡單變量的命名規(guī)則指定數(shù)組元素的個數(shù),又稱數(shù)組長度??梢允侵苯映A炕蚍柍A?。必須是方括號!二、一維數(shù)組定義和使用a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]例如:inta[10];/*定義10個整型變量*/4字節(jié)charc[12];/*定義12個字符變量*/c[0]c[1]c[2]c[3]c[4]c[5]c[6]c[7]c[8]c[9]c[10]c[11]1字節(jié)2、一維數(shù)組的引用
數(shù)組必須先定義后使用,而且只能引用數(shù)組元素,而不是整個數(shù)組。數(shù)組元素的表示:數(shù)組名[下標]定義時使用的名稱可以使整型常量或整型表達式;注意數(shù)組元素下標從0開始。最后一個元素的下標是數(shù)組長度-1例1、定義一個名稱為a并含有10個元素的整型數(shù)組,然后依次把1,2,3,…,10這10個數(shù)存入元素a[0],a[1],a[2],…,[9],最后求出這10個數(shù)的和。#include<stdio.h>main(){inta[10],s;a[0]=1;a[1]=2;a[2]=3;a[3]=4;a[4]=5;a[5]=6;a[6]=7;a[7]=8;a[8]=9;a[9]=10;s=a[0]+a[1]+a[2]+a[3]+a[4]+a[5]+a[6]+a[7]+a[8]+a[9];printf(“a[0]+a[1]+…+a[9]=%d”,s);}數(shù)組與循環(huán)結(jié)合起來,可以有效地處理批量數(shù)據(jù)!#include<stdio.h>main(){inta[10],i,s=0;for(i=0;i<=9;i++)a[i]=i+1;
for(i=0;i<=9;i++)s=s+a[i];printf(“a[0]+a[1]+…+a[9]=%d”,s);}3、一維數(shù)組的初始化
對數(shù)組元素的初始化可以用下面4種方法:定義時賦初值如:inta[5]={0,1,2,3,4};只給一部分元素賦值如:inta[5]={0,1,2};
/*只對前三個元素賦值*/元素值全為0時的賦值如:inta[5]={0};缺省數(shù)組長度對全部元素賦值如:inta[]={0,1,2,3,4};
/*定義數(shù)組a,并對其中的元素賦值,賦5個值則長度為5*/
注意:如果對數(shù)組不賦初值,則數(shù)組元素取隨機值,若數(shù)組定義為
static或外部存儲類型,則在程序編譯階段會自動賦0值。#include<stdio.h>main(){inta[]={23,56,83,52,100,88,78,25,34},max,i;max=a[0];/*擂臺初值*/for(i=1,i<=8;i++)/*循環(huán)*/if(a[i]>max)max=a[i];
/*讓每個數(shù)與擂臺上的數(shù)比較,大者留在擂臺上*/printf(“最大值:%d”,max);}例2、利用數(shù)組求集合{23,56,83,52,100,88,78,25,34}的最大值。擂臺2356835210088782534求最值的“擂臺法”三、常用排序算法在程序設(shè)計中,排序的算法主要有冒泡法、選擇法、插入法等。本節(jié)中主要通過利用一維數(shù)組來介紹冒泡法和選擇法兩種排序算法。1、冒泡法排序(以從小到大舉例)冒泡法的基本思想:通過相鄰兩個數(shù)之間的比較和交換,使數(shù)值較小的逐漸從底部移向頂部,數(shù)值較大的逐漸從頂部移向底部。就像水底的氣泡一樣逐漸向上冒,故而得名。988888895555559444444922222290000009第1次第2次第3次第4次第5次結(jié)果第一趟比較
6-1次以6個數(shù)為例的算法示意圖:8555558444448222228000008第1次第2次第3次第4次結(jié)果第二趟比較
6-2次5444452222500005第1次第2次第3次結(jié)果第三趟比較
6-3次422240004第1次第2次結(jié)果2002第1次結(jié)果第四趟比較
6-4次第五趟比較
6-5次
算法結(jié)論:6個數(shù)需要比較5趟才可以完成排序,而在第一趟中比較6-1次,第二趟比較6-2趟…由此可以總結(jié)出若有n個數(shù),則要進行n-1趟比較,在第i趟中比較n-i次。根據(jù)算法結(jié)論畫出流程圖如下:設(shè)n=10輸入10個數(shù)給a[0]~a[9]i由0到8共執(zhí)行9次循環(huán)進行9-i次比較真
a[j]和a[j+1]交換輸出a[0]~a[9]a[j]>a[j+1]#include<stdio.h>#defineN10main(){inta[N],i,j,t;
printf("inputtennumber:\n");
for(i=0;i<N;i++)
scanf("%d",&a[i]);printf("\n");
for(i=0;i<N-1;i++)
for(j=0;j<N-1-i;j++){
if(a[j]>a[j+1])
{t=a[j];a[j]=a[j+1];a[j+1]=t;}}
printf("thesortednumber:\n");
for(i=0;i<N;i++)printf("%5d",a[i]);}程序假選擇排序法的基本思想:(假設(shè)n=6)(1)、采用“擂臺法”,首先以A[0]為“擂主”,從A[0],…,A[5]中找出最大的元素與A[0]交換。(2)、然后以A[1]為“擂主”,找出A[1]~A[5]中最大的元素與A[1]交換。(3)、依此類推以A[i]為“擂主”,找出A[i]~A[5]中最大的元素與A[i]交換。當i==5停止。(此時“擂主”左邊所有元素均遞減有序,而“擂主”為最后一個元素,故完成排序)2、選擇法排序(以從大到小舉例)974938137665134938977665以6個數(shù)為例的算法示意圖:kj76kjjkjj139797
763813496549kjjjkj386597
76
65134938491397
76
65
49133897
76
65
49
38133813結(jié)果:第5輪:第4輪:第3輪:第2輪:第1輪:#defineN10main(){inti,j,k,t,a[N];printf("inputNnumbers:\n");
for(i=0;i<N;i++)
scanf(“%d”,&a[i]);/*輸入N個數(shù)*/printf("\n");
for(i=0;i<N-1;i++)/*執(zhí)行N-1輪比較*/{k=i;
for(j=i+1;j<N;j++)if(a[j]>a[k])/*遇到比當前元
k=j;素大的數(shù),記下k*/if(k!=i){t=a[i];a[i]=a[k];a[k]=t;}}printf("thesortednumbers:\n");
for(i=0;i<N;i++)printf(“%3d”,a[i]);/*輸出數(shù)組*/}輸入10個數(shù)給a[0]~a[9]i=0i由0到8共執(zhí)行9次循環(huán)k=ij=i+1
當j<N時真
假k=jj=j+1a[i]和a[k]交換i=i+1輸出a[0]~a[9]a[j]>a[k]一維數(shù)組考點1、一維整型數(shù)組實現(xiàn)倒序。2、統(tǒng)計一維數(shù)組中滿足條件的元素個數(shù)。3、隨機給一維數(shù)組賦值,然后進行排序,輸出最大幾個元素的平均值或者最小幾個元素的平均值。4、在已排序的數(shù)組中插入一個數(shù)據(jù),保證數(shù)組的有序性。補充內(nèi)容在程序中如果直接調(diào)用rand函數(shù),第一次運行獲得的是隨機數(shù),以后在運行該組數(shù)不會發(fā)生變化,這是因為計算機是嚴格按照某種規(guī)則執(zhí)行,不可能靈活變化。那么要利用計算機產(chǎn)生真正隨機數(shù),就必須和srand一起用。
srand用法:srand(time(0))
如果想要產(chǎn)生一個范圍內(nèi)的隨機數(shù),比如10—99之間的正整數(shù)賦給變量a,就應(yīng)該是a=rand()%(99-10+1)+10。隨機函數(shù)rand()的使用方法隨機函數(shù)用法舉例:#include<stdio.h>#include<stdlib.h>#include<time.h>main(){ inta[3][4],
溫馨提示
- 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)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度智能交通系統(tǒng)建設(shè)合同4篇
- 2025年度產(chǎn)品上樣研發(fā)創(chuàng)新合作框架協(xié)議4篇
- 二零二四年專業(yè)調(diào)解離婚財產(chǎn)分配協(xié)議3篇
- 2025年度廠房租賃合同補充協(xié)議(含租賃物保險及理賠)4篇
- 2025年度柴油產(chǎn)品售后服務(wù)協(xié)議3篇
- 女性職工知識培訓(xùn)課件
- 2024藝術(shù)品經(jīng)營公司與藝術(shù)家前期藝術(shù)品交易合同
- 不動產(chǎn)企業(yè)股權(quán)轉(zhuǎn)讓標準協(xié)議版B版
- 專業(yè)辦公設(shè)備配送及維護服務(wù)協(xié)議版A版
- 2024藥品、醫(yī)療器械質(zhì)量保證協(xié)議書
- 醫(yī)養(yǎng)康養(yǎng)園項目商業(yè)計劃書
- 《穿越迷宮》課件
- 《C語言從入門到精通》培訓(xùn)教程課件
- 2023年中國半導(dǎo)體行業(yè)薪酬及股權(quán)激勵白皮書
- 2024年Minitab全面培訓(xùn)教程
- 社區(qū)電動車棚新(擴)建及修建充電車棚施工方案(純方案-)
- 項目推進與成果交付情況總結(jié)與評估
- 鐵路項目征地拆遷工作體會課件
- 醫(yī)院死亡報告年終分析報告
- 建設(shè)用地報批服務(wù)投標方案(技術(shù)方案)
- 工會工作人年度考核個人總結(jié)
評論
0/150
提交評論