C語言程序設(shè)計 數(shù)組一(一維數(shù)組相關(guān))_第1頁
C語言程序設(shè)計 數(shù)組一(一維數(shù)組相關(guān))_第2頁
C語言程序設(shè)計 數(shù)組一(一維數(shù)組相關(guān))_第3頁
C語言程序設(shè)計 數(shù)組一(一維數(shù)組相關(guān))_第4頁
C語言程序設(shè)計 數(shù)組一(一維數(shù)組相關(guān))_第5頁
已閱讀5頁,還剩18頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第九講數(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論