C語(yǔ)言 一維數(shù)1組_第1頁(yè)
C語(yǔ)言 一維數(shù)1組_第2頁(yè)
C語(yǔ)言 一維數(shù)1組_第3頁(yè)
C語(yǔ)言 一維數(shù)1組_第4頁(yè)
C語(yǔ)言 一維數(shù)1組_第5頁(yè)
已閱讀5頁(yè),還剩59頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、教學(xué)目標(biāo):本章介紹C語(yǔ)言中數(shù)組的定義和使用,其中重點(diǎn)介紹一維數(shù)組的定義、引用、初始化本章重點(diǎn) :一維數(shù)組的定義、初始化及應(yīng)用;數(shù)組元素的引用方法:下標(biāo)法、數(shù)組名法。本章難點(diǎn): 利用指針實(shí)現(xiàn)對(duì)數(shù)組的操作;教學(xué)方法:理論教學(xué)與實(shí)踐教學(xué)相結(jié)合。3.1 一維數(shù)組1問(wèn)題的提出: 到目前為止,我們使用的都是屬于基本的數(shù)據(jù)類(lèi)型(即int、float、double、char以及int和float的一些變體)的數(shù)據(jù)。盡管這些數(shù)據(jù)類(lèi)型都很有用,但是它們卻只能用于處理數(shù)量有限的數(shù)據(jù)。當(dāng)遇到大量數(shù)據(jù)的時(shí)候我們?cè)撛趺崔k呢?我們先看一個(gè)實(shí)際問(wèn)題。 假設(shè)某計(jì)算機(jī)班有學(xué)生人數(shù)為30人,要編程實(shí)現(xiàn)錄入該班學(xué)生的C語(yǔ)言程序設(shè)計(jì)課

2、程成績(jī),并將成績(jī)按照從低分到高分的次序輸出。2在編程的時(shí)候,我們先暫時(shí)不考慮排序的細(xì)節(jié),先看如何存儲(chǔ)這30個(gè)學(xué)生的成績(jī)?很多初學(xué)者覺(jué)得這個(gè)問(wèn)題很簡(jiǎn)單,就像聲明實(shí)型變量一樣聲明30個(gè)實(shí)型變量(如:int a1,a2,a3,a30;),如果這樣可以的話(huà),那么若某年級(jí)的500名學(xué)生的C成績(jī)都要處理,那將需要聲明500個(gè)變量?很顯然,這是不可能的。下面的知識(shí)幫助你處理多個(gè)同類(lèi)型數(shù)據(jù)存儲(chǔ)的知識(shí)數(shù)組數(shù)組屬于是一組數(shù)據(jù)類(lèi)型相同的變量的有限序列,序列中的每個(gè)變量稱(chēng)為數(shù)組元素。數(shù)組必須先定義后使用。 33.1 一維數(shù)組3.1.1. 一維數(shù)組的定義和初始化1一維數(shù)組的定義一維數(shù)組定義的一般形式為: 元素類(lèi)型 數(shù)組

3、名常量表達(dá)式 數(shù)組的長(zhǎng)度, 必須是常量或常量表達(dá)式數(shù)組元素的類(lèi)型合法的用戶(hù)定義標(biāo)識(shí)符數(shù)組名是代表數(shù)組存儲(chǔ)空間首地址的地址常量4 :下標(biāo)運(yùn)算符單目運(yùn)算符優(yōu)先級(jí)(1)左結(jié)合其中:下標(biāo)可以是常量、變量或表達(dá)式數(shù)組元素就視作同類(lèi)型的普通變量來(lái)使用。數(shù)組元素引用形式一:數(shù)組名下標(biāo)如:int a6;定義了一個(gè)能夠容納6個(gè)整數(shù)的一維數(shù)組a。例如int a6;數(shù)組a中有6個(gè)元素,分別是:a0, a1, a2, a3, a4, a5。 如果有int i=2;則ai+2就是a4,是數(shù)組中第5個(gè)元素。數(shù)組元素的下標(biāo)從0開(kāi)始。5數(shù)組在內(nèi)存中的分配: 系統(tǒng)自動(dòng)為數(shù)組分配合適大小的連續(xù)的存儲(chǔ)空間,數(shù)組元素按其下標(biāo)遞增的順

4、序依次占用相應(yīng)字節(jié)的內(nèi)存單元。即數(shù)組是順序存儲(chǔ)的。數(shù)組所占字節(jié)數(shù)sizeof(類(lèi)型)*數(shù)組長(zhǎng)度。a00145a1a2a3a4a523a數(shù)組名表示數(shù)組內(nèi)存首地址,是地址常量int a6;6注意示項(xiàng):int n=10,an;/*error*/1)不能用變量定義數(shù)組長(zhǎng)度。#define N 100 int aN,bN+10; /*correct*/72)C語(yǔ)言對(duì)數(shù)組不作越界檢查,使用時(shí)要注意控制好元素引用范圍。例 int data5; data5=10; /*編譯沒(méi)有錯(cuò)誤,請(qǐng)問(wèn)此處對(duì)數(shù)組元素的引用是否正確?*/3)數(shù)值型數(shù)組只能單個(gè)引用數(shù)組元素,不能用數(shù)組名一次引用整個(gè)數(shù)組。8 數(shù)組在定義時(shí),可以為

5、數(shù)組元素賦初值。2一維數(shù)組初始化注意:數(shù)組定義時(shí)沒(méi)有初始化時(shí)值的情況若數(shù)組定義時(shí)沒(méi)有初始化,各元素均是隨機(jī)值。例如 int a3; 此時(shí)a0,a1,a2都是隨機(jī)值。若數(shù)組定義時(shí)前面加上static來(lái)修飾,整型數(shù)組各元素值是0,字符數(shù)組各元素值是0(ASCII碼值0)。例如 static int a3;此時(shí)a0,a1,a2都是0。9 全部元素初始化在對(duì)全部數(shù)組元素初始化時(shí),可以不指定數(shù)組長(zhǎng)度。如:長(zhǎng)度是10的數(shù)組a,a0到a9的值分別為:0,1,2,3,4,5,6,7,8,9。 請(qǐng)對(duì)數(shù)組a的初始化: int a10=0,1,2,3,4,5,6,7,8,9;或 int a =0,1,2,3,4,5

6、,6,7,8,9;/*初始化時(shí)不指定長(zhǎng)度,則數(shù)組長(zhǎng)度就是內(nèi)的元素個(gè)數(shù)*/數(shù)組初始化方法有: 全部元素初始化 部分元素初始化。在定義數(shù)組時(shí)用“=”,將元素寫(xiě)在和 之間并用“,”分隔。10 部分元素初始化。 此時(shí)數(shù)組的長(zhǎng)度不能省略。并且是賦值給前面的元素。 沒(méi)有被賦值的數(shù)組元素,數(shù)值型數(shù)組時(shí)值為0,字符型數(shù)組時(shí)值為0。如: 1 2 0 0 0 int a5=1,2,i;for(i=0;i5;i+) printf(“%4d”,ai);運(yùn)行結(jié)果11int a6,i;/*輸入*/for(i=0;i6;i+) scanf(“%d”, );&ai3數(shù)組的輸入、輸出和賦值(1)輸入:已知往整型數(shù)組a中輸入6個(gè)

7、整數(shù):注意:對(duì)于數(shù)值型數(shù)組必須每個(gè)元素逐個(gè)讀值12int a6 , i;for(i=0;i6;i+) scanf(“%d”, &ai );/*輸出*/for(i=0;i6;i+) printf(“%d”, ai);(2)輸出:對(duì)于數(shù)值型數(shù)組必須每個(gè)元素逐個(gè)輸出13(3)賦值 注意:數(shù)組名是地址常量,值不可改變,不允許對(duì)數(shù)組名進(jìn)行賦值運(yùn)算。例如:假設(shè)數(shù)組a中有元素1,2,3,則下面的賦值是錯(cuò)誤的:int a3;a=1,2,3;/*error*/改成:int a3=1,2,3;或者 int a3; a0 = 1;a2 = 2; a3 = 3;注意在定義語(yǔ)句外,只能對(duì)數(shù)組元素進(jìn)行單個(gè)引用14例如,想

8、要數(shù)組b和數(shù)組a的值相同,請(qǐng)問(wèn)下面做法是否正確?指出并改正。 int a3=1,2,3,b3; b = a; int a3=1,2,3,b3,i; for(i = 0; i3;i+) bi = ai;/*error*/改成:15假設(shè)有一存放6個(gè)整數(shù)的數(shù)組a,編寫(xiě)程序,使得數(shù)組b和數(shù)組a的值相同。課堂編程練習(xí):16【例3.1】編程,將整型數(shù)組a中的十個(gè)整型數(shù)逆序存放 并輸出。數(shù)組編程的常用的兩種方法:方法一:直接在原數(shù)組a中進(jìn)行操作。方法二:輔設(shè)一個(gè)同長(zhǎng)度的數(shù)組b,按要求先將原數(shù)組a中的元素按要求轉(zhuǎn)換到b中,然后再將b中的元素拷貝回a中。通常方法二的思路簡(jiǎn)單,容易實(shí)現(xiàn),方法一的算法難度大些。但方

9、法一的效率高,較方法二優(yōu)秀。17方法一:直接在原數(shù)組中進(jìn)行操作操作前 a: 1 2 3 4 5 6 7 8 9 10操作后 a: 10 9 8 7 6 5 4 3 2 1抓住值的變化特征很容易發(fā)現(xiàn):a中第一個(gè)數(shù)和最后一個(gè)數(shù)交換,第二個(gè)數(shù)和倒數(shù)第二個(gè)數(shù)交換,直到中間兩個(gè)數(shù)交換完畢,就實(shí)現(xiàn)了a的逆置。算法分析:18a: 1 2 3 4 5 6 7 8 9 10ij101ij92下標(biāo): 0 1 9算法思想:取得前后兩個(gè)元素的值需要設(shè)置兩個(gè)下標(biāo)變量,假設(shè)是i,j。算法步驟:(1)i=0, j=9(2)如果 i=j結(jié)束19main() int a10,i,j,t; /*輸入數(shù)據(jù)*/*數(shù)組逆置*/*輸出數(shù)

10、據(jù)*/注意:數(shù)值型數(shù)組只能是單個(gè)元素輸入,單個(gè)元素輸出。for(i=0;i10;i+) scanf(%d,&ai);for(i=0,j=9;ij;i+,j-)t=ai;ai=aj;aj=t;for(i=0;i10;i+) printf(%4d,ai);算法實(shí)現(xiàn):20方法二:輔設(shè)一個(gè)同長(zhǎng)度的數(shù)組b算法分析:操作前 a: 1 2 3 4 5 6 7 8 9 10 輔設(shè)b:操作后a:10 9 8 7 6 5 4 3 2 1 10 9 8 7 6 5 4 3 2 121main() int a10,b10,i,j,t; for(i=0;i10;i+) scanf(%d,&ai); /*將a中的數(shù)據(jù)逆序

11、放到b中*/ for(i=0,j=9;i10;i+,j-) bj=ai; /*將中數(shù)據(jù)順序?qū)懟豠*/ for(i=0;i10;i+) bi=ai; for(i=0;i10;i+) printf(%4d,ai);算法實(shí)現(xiàn):223.1.2指針與一維數(shù)組(難點(diǎn)) 數(shù)組元素的地址為: &數(shù)組名下標(biāo) 例如: int a6; a00145a1a2a3a4a523a數(shù)組名表示數(shù)組內(nèi)存首地址,是地址常量可以看成是指向元素a0的指針,但是常量數(shù)組元素a0的地址:數(shù)組元素a3的地址:&a0或a&a3。說(shuō)明: 數(shù)組名不能取地址。原因:數(shù)組名是地址常量,對(duì)數(shù)組名取地址沒(méi)有意義。23 main() int a6=1,2

12、,3,4,5,6,*p,*q; p=&a3; q=a; /*或者q=&a0*/ printf(“%3d%3dn”,*p,*q); 輸出:1指向一維數(shù)組元素的指針變量 通過(guò)指針可以操作數(shù)組中的元素。 例3.2: 1 4242指針運(yùn)算 除了賦值運(yùn)算外,指向一維數(shù)組元素的指針,還可以進(jìn)行下列運(yùn)算: 指向數(shù)組元素的指針可以加(減)一個(gè)整型數(shù)。 例如:main() int a6=1,2,3,4,5,6,*p =&a2; printf(“%3d%3dn”,*(a+3),*(p-1); 輸出:假設(shè)p是指向數(shù)組元素的指針, n是一個(gè)整型數(shù),則:pn的含義:獲得p所指元素的后(前)數(shù)第n個(gè)元素的地址。分析:a+

13、3等價(jià)于&a3,即a+3指向a3; p-1指向a1。4 225 指向數(shù)組元素的指針變量可以做自加自減運(yùn)算p+或+p :等價(jià)于 p=p+1,自加后指向原來(lái)指向元素的下一個(gè)元素p- 或 -p:等價(jià)于p=p-1,自減后指向原來(lái)指向元素的前一個(gè)元素。注意:數(shù)組名是常量,不能進(jìn)行自加自減運(yùn)算?!窘Y(jié)論】如果有定義int a100, *p=a; 則數(shù)組元素ai的地址可以表示成: &ai 或 a+i 或p+i26例3.3: main() int a6=1,2,3,4,5,6,*p,*q; p=&a3; q=p+; printf(“%3d%3dn”,*p,*q); 輸出:5 427【例3.4】讀程序?qū)懡Y(jié)果,注意

14、*和+運(yùn)算符的優(yōu)先級(jí),及前置加和后置加的區(qū)別。 main() int a=1,3,5,*p; p=&a1; printf(*p+=%dn,*p+); printf(%dn,*p); p=&a1; printf(*p)+=%dn,(*p)+); printf(*p=%dn,*p); 注意:要想使得p所指向的變量的值加1應(yīng)寫(xiě)成: (*p)+; 或者 +*p;/* 等價(jià)于*(p+) ,先使用*p然后p加1 */*先使用*p然后*p值加1 */【執(zhí)行結(jié)果】*p+=3*p=5(*p)+=3*p=428【例3.5】用指向元素的指針變量來(lái)實(shí)現(xiàn)數(shù)組元素的逆置。取得數(shù)組中一個(gè)元素的位置有兩種方法:方法一、用下標(biāo)

15、 (邏輯順序) 于是可以通過(guò) ai, *(a+i)操作元素。方法二、用實(shí)際地址 (物理存儲(chǔ)) 假設(shè)i是當(dāng)前元素的實(shí)際地址,于是可以通過(guò)*i來(lái)操作元素。下面就是采用方法二來(lái)編程。 地址: a a+1 a+9 a: 1 2 3 4 5 6 7 8 9 10ij101ij9229for(i=a;ia+10;i+) scanf(%d,i);for(i=a,j=a+9;ij;i+,j-)t=*i; *i=*j; *j=t;for(i=a;ia為真,pa+4為假。313.1.3一維數(shù)組元素的指針?lè)ㄒ茫〝?shù)組元素的另兩種引用方法)由前面的介紹可知,若有定義:int a10,*p=a;則&ai、(a+i)和(

16、p+i)是等價(jià)的,它們都表示數(shù)組元素ai的地址。由此下標(biāo)為i的數(shù)組元素可以表示成: ai、 *(a+i)、*(p+i)、pi 等價(jià)。由此,一維數(shù)組元素可以用指針?lè)ㄒ谩?數(shù)組名法指針變量法下標(biāo)法321數(shù)組名法數(shù)組元素引用方法二用數(shù)組名引用數(shù)組元素的一般形式為:*(數(shù)組名+下標(biāo)表達(dá)式)其中,表達(dá)式類(lèi)型任意,一般為算術(shù)表達(dá)式,其值為數(shù)組元素的下標(biāo)。如:*(a+3-1)表示數(shù)組元素a2。 【例3.4】用數(shù)組名法實(shí)現(xiàn)例3.1。將整型數(shù)組a中的十個(gè)整型數(shù)逆序存放并輸出。33main() int a10,i,j,t; for(i=0;i10;i+) scanf(%d, ); for(i=0,j=9;ij;

17、i+,j-) for(i=0;i10;i+) printf(%4d, );*(數(shù)組名+下標(biāo)表達(dá)式)a+it=*(a+i);*(a+i)=*(a+j);*(a+j)=t;*(a+i)main() int a10,i,j,t; /*輸入數(shù)據(jù)*/ for(i=0;i10;i+) scanf(%d,&ai); /*數(shù)組逆置*/for(i=0,j=9;ij;i+,j-)t=ai;ai=aj;aj=t; /*輸出數(shù)據(jù)*/ for(i=0;i10;i+) printf(%4d,ai);342指針變量法用指針變量引用數(shù)組元素的一般形式為:*(指針變量+表達(dá)式)其中,指針變量為指向一維數(shù)組元素的指針變量。表達(dá)式

18、類(lèi)型任意,一般為算術(shù)表達(dá)式?!纠}】int a10,*p=a+3;則下列用指針變量p對(duì)數(shù)組元素引用的都是正確的。適說(shuō)明各語(yǔ)句的作用。*p=10 ; *(p+2*2)=20;*p+=40;/* 與a3=10等價(jià) */* 與a7=20等價(jià) */* 與*p=*p+40等價(jià)即a3+=40*/35指向數(shù)組元素的指針變量也可用下標(biāo)法表示數(shù)組元素,即*(p+i)和pi是等價(jià)的。 main() int a10,*p=a;for(i=0;i10;i+) scanf(%d,&pi); /*數(shù)組逆置*/for(i=0,j=9;ij;i+,j-)t=pi;pi=pj;pj=t;/*輸出數(shù)據(jù)*/for(i=0;i10;

19、i+) printf(%4d,ai);36課程項(xiàng)目案例二 學(xué)生成績(jī)管理題目要求:要編寫(xiě)一個(gè)對(duì)某班學(xué)生C語(yǔ)言課程成績(jī)進(jìn)行管理的小程序,功能包括成績(jī)信息錄入、 顯示、成績(jī)查詢(xún)、成績(jī)插入、成績(jī)刪除、成績(jī)排序。3.1.2 函數(shù)調(diào)用對(duì)一維數(shù)組編程37此處具體功能要求如下:(1)成績(jī)信息錄入:輸入若干個(gè)學(xué)生的成績(jī)。(2)顯示:輸出所有學(xué)生成績(jī)。(3)查詢(xún):暫且為查詢(xún)等于指定成績(jī)的第一個(gè)學(xué)生的位置。到學(xué)會(huì)定義姓名數(shù)組之后該功能要改。(4)插入:指定位置插入一學(xué)生成績(jī)。(5)刪除:指定位置刪除一學(xué)生成績(jī)。(6)排序:將學(xué)生成績(jī)按降序排序。38預(yù)備知識(shí)分析:(1)數(shù)據(jù)存儲(chǔ)問(wèn)題:很顯然數(shù)據(jù)宜用數(shù)組來(lái)組織,當(dāng)前字符

20、數(shù)組的知識(shí)還沒(méi)學(xué),所以暫且只用整型數(shù)組來(lái)存放若干個(gè)成績(jī)。(2)設(shè)計(jì)思想:顯然,這個(gè)程序的功能比較多,若都寫(xiě)在主函數(shù)中,顯然代碼過(guò)長(zhǎng),出錯(cuò)后不易調(diào)試。所以應(yīng)采用模塊化設(shè)計(jì)思想,將功能分解成獨(dú)立的子模塊,并用函數(shù)來(lái)實(shí)現(xiàn)。需要學(xué)習(xí)如何用函數(shù)實(shí)現(xiàn)對(duì)數(shù)組的操作 ?(3)要實(shí)現(xiàn)各個(gè)功能,需要學(xué)習(xí)數(shù)據(jù)的插入、刪除、查找、排序等算法。393.1.2 函數(shù)調(diào)用對(duì)一維數(shù)組編程形參:使用指針變量,通常定義成數(shù)組(長(zhǎng)度可以省略)實(shí)參:數(shù)組名參數(shù)傳遞規(guī)則:是地址傳遞,是將主調(diào)函數(shù)中數(shù)組空間的首地址給了形參變量40【例3.7】假設(shè)某班有30人,現(xiàn)有一數(shù)組已存放了若干個(gè)學(xué)生的成績(jī),函數(shù)調(diào)用編程:查詢(xún)值等于x的第一個(gè)學(xué)生成績(jī)

21、,找到后返回位序,沒(méi)找到返回0。#include #define N 30 /*指定數(shù)組的容量*/*查找函數(shù)聲明*/int search(int score,int n,int x);系統(tǒng)會(huì)自動(dòng)將其視為int *score41main()int scoreN,i,n,x;printf(請(qǐng)輸入錄入成績(jī)的數(shù)量(=30):);scanf(%d,&n);printf(請(qǐng)輸入%d個(gè)學(xué)生的成績(jī):,n);for(i=0; in; i+) scanf(%d,&scorei);printf(請(qǐng)輸入待查找的學(xué)生的成績(jī):);scanf(%,&x); /*查找函數(shù)調(diào)用與結(jié)果輸出*/if(i=search(score,

22、n,x)=0)printf(成績(jī)不存在!);elseprintf(該成績(jī)是第%d個(gè)數(shù)據(jù),i);42/*查找函數(shù)定義*/*在成績(jī)數(shù)組score中查詢(xún)值等于x的成績(jī)第一次出現(xiàn)時(shí)的位置,找到后返回位序,沒(méi)找到返回0。*/int search(int score,int n,int x)int i=0;while(in & scorei!=x) i+;if(in) return i+1;else return 0;必須保證在數(shù)組范圍內(nèi)進(jìn)行查找43【例3.8】指定位置進(jìn)行數(shù)據(jù)插入。 已知一組整數(shù),要求在指定位置i處插入值x,成功返回1,失敗返回0. 插入前 (a1, , ai-1, ai, , an)

23、插入后 (a1, , ai-1, x, ai, , an)0 1 i i+1 n-1a1 a2 ai-1 ai an an-1anai-1 x44算法思想:1)檢查i值是否超出所允許的范圍(1in+1),若超出,則返回0,插入失??;2) 將線(xiàn)性表的第i個(gè)元素和它后面的所有元素均逆序 向后移動(dòng)一個(gè)位置;3)將新元素x寫(xiě)入到空出的第i個(gè)位置上;4)使數(shù)組的長(zhǎng)度n增1。45/*在數(shù)組score中第i位置插入成績(jī)x,成功返回1,失敗返回0.*/int insert(int score,int *n,int i,int x) int j;if(i*n)return 0;/*將scoren-1到score

24、i-1間的數(shù)據(jù)后移*/for(j=*n-1;j=i-1;j-)scorej+1=scorej;scorei-1 = x;(*n)+; return 1;46#define N 30 /*指定數(shù)組的容量*/Void main() int scoreN, n, i,x; /*指定元素個(gè)數(shù)n*/ /*往數(shù)組score中輸入元素*/ /*輸入插入位置i*/ /*輸入待插入的值x*/ /*調(diào)用插入函數(shù)*/ if(insert(score,&n,i,x) /調(diào)用結(jié)果是1 printf(插入成功n); else printf(插入失敗n); /*顯示插入后數(shù)組*/ 47【例3.9】指定位置進(jìn)行數(shù)據(jù)刪除。已知

25、一組整數(shù),要求刪除指定位置i處的元素,成功返回1,失敗返回0. 刪除前 (a1, , ai-1, ai, ai+1, an) 刪除后 (a1, , ai-1, ai+1, , an)0 1 i-1 i n-2 n-1a1 a2 ai ai+1 an-1 an anai+1ai+248算法思想:1)檢查i值是否超出所允許的范圍(1in),若超出,則返回0,刪除失敗;2) 將線(xiàn)性表的第i+1個(gè)元素和它后面的所有元素均正序前移一個(gè)位置;3)使數(shù)組的長(zhǎng)度n減1。49/*刪除成績(jī)數(shù)組score中第i個(gè)成績(jī),成功返回1,失敗返回0.*/int delete(int score,int *n,int i)

26、int j;if(i*n)return 0;/*將scorei到scoren-1間的數(shù)據(jù)前移*/for(j=i;j=*n-1;j+)scorej-1=scorej;(*n)-; return 1;主函數(shù)略50【例3.10】數(shù)據(jù)由小到大升序排序。數(shù)據(jù)排序的方法有很多種下面介紹三種較簡(jiǎn)單的排序方法:直接插入排序簡(jiǎn)單選擇排序冒泡排序511、用直接插入排序?qū)崿F(xiàn)一組整數(shù)升序排序。排序過(guò)程:參看圖示排序思想:先將第一個(gè)數(shù)看成有序序列,然后一次將后面的數(shù)插入到前面有序序列中。共經(jīng)過(guò)n-1趟排序,排序結(jié)束。52 i=6 (13 27 38 49 65 76 97) 49例49 38 65 97 76 13 2

27、7 49i=1 (38 49) 65 97 76 13 27 49i=2 (38 49 65) 97 76 13 27 49i=3 (38 49 65 97) 76 13 27 49i=4 (38 49 65 76 97) 13 27 49i=5 (13 38 49 65 76 97) 27 49 ( )i=7 (13 27 38 49 49 65 76 97)排序結(jié)果: (13 27 38 49 49 65 76 97)53i=6 (13 38 49 65 76 97) 27 49jjjjjj977665493827)i27t一趟插入排序的實(shí)現(xiàn)過(guò)程:54void InsertSort(int

28、 a,int n)int i,j,t;for(i=1;i=0 & ajt)aj+1=aj; j-;/存入待插元素aj+1=t;55#define N 30void main()int scoreN,i,n;printf(請(qǐng)輸入錄入成績(jī)的數(shù)量(=30):);scanf(%d,&n);printf(請(qǐng)輸入%d個(gè)學(xué)生的成績(jī):,n);for(i=0; in; i+) scanf(%d,&scorei);/*調(diào)用插入排序*/InsertSort(score,n);/*輸出排序結(jié)果*/ for(i=0; in; i+) printf(%4d,scorei);562、用簡(jiǎn)單選擇排序法實(shí)現(xiàn)一組整數(shù)升序排序。選擇排序過(guò)程:參看圖示(1)從N個(gè)元素中找出值最小的元素,將其與第一個(gè)元素值交換。(2)從剩下的N-1元素中找出值最小的元素,將其與第二個(gè)元素值交換。(3)如此下去,重復(fù)上述過(guò)程,直到剩下一個(gè)最大數(shù)。 共經(jīng)過(guò)n-1趟排序,排序結(jié)束。57例初始: 49 38 65 49 76 13 27 kjjjjjjkk1349一趟: 13 38 65 49 76 49 27 kkjjjjj2738二趟: 13 27 65 49 76 49 38 三趟: 13 27 38 49 76 49 65 四趟: 1

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論