C語言程序設(shè)計(jì)教程 課件 第6.2 二維數(shù)組_第1頁
C語言程序設(shè)計(jì)教程 課件 第6.2 二維數(shù)組_第2頁
C語言程序設(shè)計(jì)教程 課件 第6.2 二維數(shù)組_第3頁
C語言程序設(shè)計(jì)教程 課件 第6.2 二維數(shù)組_第4頁
C語言程序設(shè)計(jì)教程 課件 第6.2 二維數(shù)組_第5頁
已閱讀5頁,還剩19頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第6章數(shù)組主講教師:賀愛香理論知識數(shù)組概述1一維數(shù)組

2二維數(shù)組3

字符數(shù)組與字符串4例初始關(guān)鍵字3849761397n=665第一趟384965977613第二趟384965971376第三趟384913976576第四趟381349976576第五趟133849976576【例1】用冒泡法對10個數(shù)排序(從小到大)【例1】用冒泡法對10個數(shù)排序(從小到大)a[0]不用,數(shù)組下標(biāo)從1開始(1)比較第一個數(shù)與第二個數(shù),若為逆序a[1]>a[2],則交換;然后比較第二個數(shù)與第三個數(shù);依次兩兩比較,直至第n-1個數(shù)和第n個數(shù)比較為止——第一趟起泡排序,比較n-1次,結(jié)果最大的數(shù)被安置在最后一個元素位置上(2)對前n-1個數(shù)進(jìn)行第二趟起泡排序,比較n-2次,結(jié)果使次大的數(shù)被安置在第n-1個元素位置(3)重復(fù)上述過程,共經(jīng)過n-1趟起泡排序后,排序結(jié)束(4)結(jié)論:需要n-1趟起泡排序,第j趟需要n-j次比較排序過程總結(jié):兩兩比較,大者下沉,小者上浮#include<stdio.h>voidmain(){inta[11],i,n,t;//i表示數(shù)組下標(biāo),n表示遍歷次數(shù),t用來交換數(shù)據(jù)

printf(“Input10numbers:\n”);for(i=1;i<11;i++) scanf(“%d”,&a[i]);printf(“\n”);for(n=1;n<=9;n++)//控制趟數(shù) for(i=1;i<=10-n;i++)

//控制比較的次數(shù) if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}printf("Thesortednumbers:\n");for(i=1;i<11;i++) printf("%d",a[i]);printf(“\n”);}起泡排序的核心程序段分析for(n=1;n<=9;n++)for(i=1;i<=10-n;i++)if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}外層循環(huán)的變量n表示總的起泡的趟數(shù)內(nèi)層循環(huán)實(shí)現(xiàn)一趟起泡操作交換相鄰數(shù)組元素的值思考:對于N個數(shù),采用起泡排序,總共要比較多少次?

對于本來有序的序列,要比較多少次?根據(jù)起泡排序的思想,寫出數(shù)列

127683945一趟起泡排序后的序列?(N-1)+(N-2)+….+1=N(N-1)/2(N-1)+(N-2)+….+1=N(N-1)/2根據(jù)起泡排序的思想,寫出數(shù)列(小到大)

127683945一趟起泡排序后的序列?127683945126738459126738945126739854ABCD提交單選題1分【例2】用簡單選擇法對10個數(shù)排序(1)首先通過n-1次比較,從n個數(shù)中找出最小的,將它與第一個數(shù)交換—第一趟選擇排序,結(jié)果最小的數(shù)被安置在第一個元素位置上(2)再通過n-2次比較,從剩余的n-1個數(shù)中找出關(guān)鍵字次小的記錄,將它與第二個數(shù)交換—第二趟選擇排序(3)重復(fù)上述過程,共經(jīng)過n-1趟排序后,排序結(jié)束排序過程例初始:[49386597761327]kji=11349一趟:13[386597764927]i=22738二趟:1327[6597764938]三趟:132738[97764965]四趟:13273849[769765]五趟:1327384965[9776]六趟:132738496576[97]kkkkjjjjjjjjjj輸入n個數(shù)給a[1]到a[n]fori=1ton-1forj=i+1tona[j]<a[k]真假k=j輸出a[1]到a[n]k=ia[i]

a[k]i!=k真假#include<stdio.h>voidmain(){inta[11],i,j,k,x;printf("Input10numbers:\n");for(i=1;i<11;i++)scanf("%d",&a[i]);printf("\n");for(i=1;i<10;i++){k=i;for(j=i+1;j<=10;j++)if(a[j]<a[k])k=j;if(i!=k){x=a[i];a[i]=a[k];a[k]=x;}}printf("Thesortednumbers:\n");for(i=1;i<11;i++) printf("%d",a[i]);}簡單選擇排序的核心程序段分析for(i=1;i<10;i++){k=i;for(j=i+1;j<=10;j++)if(a[j]<a[k])k=j;if(i!=k){x=a[i];a[i]=a[k];a[k]=x;}}外層循環(huán)的變量i表示總的排序的趟數(shù)K記錄第i趟排序中最小值的位置查找第i趟排序中最小值的位置,記錄在k中交換a[i]和a[k]的值

二維數(shù)組二維數(shù)組的聲明二維數(shù)組的初始化二維數(shù)組元素的引用二維數(shù)組的應(yīng)用

二維數(shù)組定義格式:數(shù)據(jù)類型數(shù)組名[常量表達(dá)式1][常量表達(dá)式2]={元素初值列表};說明:

常量表達(dá)式1表示行值,常量表達(dá)式2表示列值

inta[4][5];floatf[5][2*4];存放方式:按行存放(存放時,最右邊的下標(biāo)變化最快)intd[3][5]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};d[0]d[0][0]d[0][1]d[0][2]d[0][3]d[0][4]

d[1][0]d[1][1]d[1][2]d[1][3]d[1][4]

d[2][0]d[2][1]d[2][2]d[2][3]d[2][4]d[1]d[2]123456789101112131415123456789101112131415d[0]d[1]d[2]由逗號分割,前幾行的元素必須連續(xù)填滿inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};intb[3][4]={1,2,3,4,5,6,7,8};234567891011122345678

0000用{}將每行元素括起來inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};intb[3][4]={{1,2,3,4},{5,6,7,8}};用{}將每行元素括起來,對部分元素賦初值inta[3][4]={{1,2},{3},{8}};inta[3][4]={1,2,3,8};≠注意:和一維數(shù)組一樣,當(dāng)初值的個數(shù)超過數(shù)組元素個數(shù)時,編譯時會產(chǎn)生錯誤。

eg:intn[2][3]={1,2,3,4,5,6,7};//編譯錯誤二維數(shù)組的初始化二維數(shù)組的初始化可以省略第一維的長度,即省略行數(shù)。

eg:intn[3][3]={1,2,3,4,5,6,7,8,9};

可以寫成intn[][3]={1,2,3,4,5,6,7,8,9};

intn[][3]={1,2,3,4,5};等價(jià)于intn[2][3]={{1,2,3},{4,5,0}};

因?yàn)槎S數(shù)組各元素是“按行存放”的,所以系統(tǒng)能根據(jù)初值總數(shù)和每行元素個數(shù)計(jì)算出行數(shù)。

注意:二維數(shù)組初始化必須要指定第二維長度,因?yàn)椴淮_定每行元素的個數(shù)將無法“按行存放”。

eg:intn[2][]={1,2,3,4,5};//錯誤二維數(shù)組元素的引用

二維數(shù)組元素要用兩個下標(biāo)確定,引用形式為:

數(shù)組名[行下標(biāo)][列下標(biāo)]

若有以下聲明:

intnum[3][4],i=0,j=0;

則num[1][3]、num[i][j]、num[i+1][j+2]都是正確的引用形式。

注意:下標(biāo)不能越界,0~行、列下標(biāo)減1除函數(shù)調(diào)用語句外,其他語句都只能逐個引用數(shù)組元素,不能單獨(dú)用數(shù)組引用整個數(shù)組,不能給數(shù)組整體賦值。數(shù)組先定義,后引用二維數(shù)組元素的引用intnum[3][4],i,j;printf("請輸入12個整數(shù):\n");for(i=0;i<3;i++)//外層循環(huán)變量i控制數(shù)組的行下標(biāo)

{for(j=0;j<4;j++)//內(nèi)層循環(huán)變量j控制數(shù)組的列下標(biāo)

{scanf("%d",&num[i][j]);printf("num[%d][%d]=%-4d",i,j,num[i][j]);}printf("\n");//每輸出一行后換行

}二維數(shù)組操作通常和二重循環(huán)結(jié)合使用。可以通過以下程序段實(shí)現(xiàn)對二維數(shù)組元素的輸入和輸出:二維數(shù)組應(yīng)用舉例23456A456BB[j][i]=A[i][j]例:將一個二維數(shù)組行和列元素互換,存到另一個二維數(shù)組中(轉(zhuǎn)置矩陣)。#defineM3#defineN2voidmain(){inta[N][M]/*={{1,2,3},{4,5,6}}*/;intb[M][N],i,j;printf("arraya:\n");for(i=0;i<N;i++){for(j=0;j<M;j++)

{scanf(("%d",&a[i][j]);printf("%5d",a[i][j]);

b[j][i]=a[i][j];

}printf("\n");}printf("arrayb:\n");for(i=0;i<M;i++){for(j=0;j<N;j++)printf("%5d",b[i][j]);printf("\n");}}

輸出楊輝三角形

11112113311464115101051

………………特點(diǎn):0列和對角線元素都是1

其他元素均為上一行的同列元素與前一列元素之和11112113311464115101051

………………#include<stdio.h>#defineN10main(){inti,j,y[N][N];for(i=0;i<N;i++){y[i][0]=1;y[i][i]=1;}for(i=2;i<N;i++)for(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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論