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

下載本文檔

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

文檔簡(jiǎn)介

1數(shù)組2主要內(nèi)容一維數(shù)組一維數(shù)組的查找與排序數(shù)組與函數(shù)字符串小結(jié)3數(shù)組數(shù)組是一組同類(lèi)型數(shù)據(jù)所組成的序列,其特點(diǎn)為:組織了一組同類(lèi)型數(shù)據(jù)并用一個(gè)名字命名這組數(shù)據(jù)被存儲(chǔ)在內(nèi)存的一塊連續(xù)區(qū)域中這組數(shù)據(jù)具有順序關(guān)系,組成它的每個(gè)元素可以通過(guò)序號(hào)進(jìn)行訪問(wèn)4一維數(shù)組概述一維數(shù)組也稱為向量例如:處理某班學(xué)生的成績(jī),若人數(shù)較少,可以用一系列變量a,b,c,d,e,f,……分別進(jìn)行命名,當(dāng)人數(shù)較多時(shí),這種方式會(huì)帶來(lái)很大不便利用數(shù)組將該班學(xué)生的成績(jī)統(tǒng)一命名為student_grade即數(shù)組名,不同學(xué)生的成績(jī)通過(guò)下標(biāo)加以區(qū)分,如student_grade[0],student_grade[1],……,即同一數(shù)組中的不同元素,稱為數(shù)組元素,通過(guò)下標(biāo)加以區(qū)分5一維數(shù)組概述

longsum_grade=0; floataverage_grade; for(inti=0;i<=n;i++) sum_grade+=student_grade[i]; average_grade=sum_grade/n;6一維數(shù)組的定義類(lèi)型標(biāo)識(shí)符數(shù)組名[數(shù)組大小];學(xué)生成績(jī)數(shù)組的定義:floatstudent_grade[32];7一維數(shù)組的定義說(shuō)明:(1)float表示組成該數(shù)組的元素都是浮點(diǎn)型。數(shù)組的類(lèi)型為float[]。數(shù)組類(lèi)型與數(shù)組元素的類(lèi)型是相關(guān)聯(lián)的兩個(gè)概念。(2)student_grade是該數(shù)組的名字,數(shù)組名應(yīng)遵循標(biāo)識(shí)符命名規(guī)則。(3)32是該數(shù)組中元素的個(gè)數(shù)。VS.NET編譯系統(tǒng)要求定義數(shù)組時(shí),元素個(gè)數(shù)必須使用整型常量值。(4)數(shù)組元素的下標(biāo)值從0開(kāi)始。8數(shù)組元素的引用方法數(shù)組一旦定義,編譯器即為之分配內(nèi)存空間,將數(shù)組元素順序存儲(chǔ)在這個(gè)空間中。student_grade[0]72student_grade[1]69student_grade[2]84…………student_grade[31]98數(shù)組元素存儲(chǔ)區(qū)9數(shù)組元素的引用方法數(shù)組名[下標(biāo)]說(shuō)明:(1)下標(biāo)可以是整數(shù)或整數(shù)表達(dá)式(2)下標(biāo)取值從0開(kāi)始,最大值為數(shù)組大小-1。寫(xiě)程序是一定要防止數(shù)組越界。(3)數(shù)組元素與普通變量的特性相同。#include<stdio.h>#defineNELEMENTS10intmain(void){ inti; intstudent_age[NELEMENTS]; for(i=0;i<NELEMENTS;i++) { printf("Pleaseinputastudenage:"); scanf("%d",&student_age[i]); } for(i=0;i<NELEMENTS;i++) printf("%6d",student_age[i]); printf("\n"); for(i=NELEMENTS-1;i>=0;i--) printf("%6d",student_age[i]); printf("\n"); return0;}例:用一個(gè)數(shù)組存儲(chǔ)10個(gè)學(xué)生年齡,然后分別按照正序和反序顯示11一維數(shù)組的初始化自動(dòng)存儲(chǔ)類(lèi)型的數(shù)組如果沒(méi)有初始化,也沒(méi)有對(duì)其元素賦值,則每個(gè)元素的值都是不確定的12一維數(shù)組的初始化對(duì)數(shù)組元素全部初始化(按定義的數(shù)組大小,依次給各元素提供初值)intstudent_age[3]={10,11,12};將數(shù)組元素部分初始化(花括號(hào)中的數(shù)據(jù)數(shù)量小于數(shù)組大?。﹊ntstudent_age[3]={10,11};對(duì)大小可變的數(shù)組進(jìn)行初始化(定義時(shí)并未指定大?。﹊ntstudent_age[]={10,11,12};13一維數(shù)組元素的查找與排序例:順序查找一個(gè)學(xué)生的年齡,若查找成功,則輸出該學(xué)生的學(xué)號(hào),若查找失敗,則輸出相應(yīng)的信息#include<stdio.h>#include<stdlib.h>intmain(void){ inti,age; intstudentAge[]={10,11,12,13,14,15,16,17,18,19}; printf("請(qǐng)輸入要查找的年齡:"); scanf("%d",&age); for(i=0;i<10;i++) { if(studentAge[i]==age) { printf("第%d位學(xué)生的年齡是%d\n",i+1,studentAge[i]); exit(0); } } printf("找不到這個(gè)年齡的學(xué)生\n"); return0;}15一維數(shù)組元素的查找與排序例:對(duì)排序數(shù)列進(jìn)行折半查找前提:數(shù)據(jù)已按升序或降序排列基本思路:首先查找位于1/2處的數(shù)據(jù),判斷其是否為所需數(shù)據(jù),如果不是所需的數(shù)據(jù),則判斷要查找的數(shù)據(jù)位于中間數(shù)的哪一邊,下次繼續(xù)在這個(gè)范圍中查找,每次將查找范圍縮小一半,直到找到所需的數(shù)據(jù)為止迭代查找的終止條件:設(shè)數(shù)組為a,要查找的元素為x,則終止條件為:找到a[mid]=xtop>bot2567131517192123252627mid=(top+bot)/2topbot192123252627topbot01260712mid1921top78botmid218bottopmid17一維數(shù)組元素的查找與排序流程圖:定義數(shù)組并進(jìn)行初始化輸入要查找的元素top=0,bot=n-1mid=(top+bot)/2x>a[mid]top=mid+1while(top<=bot)x==a[mid]輸出查找成功x<a[mid]bot=mid-1#include<stdio.h>#include<stdlib.h>#defineN13intmain(void){inta[N]={2,5,6,7,13,15,17,19,21,23,25,26,27};intmid,top,bot,x;top=0;bot=N-1;printf("輸入要查找的元素:");scanf("%d",&x); while(top

<=bot) { mid=(top+bot)/2; if(x==a[mid]) { printf("\n找到元素%d是:a[%2d]\n",x,mid); exit(0); } elseif(x>a[mid]) top=mid+1; else bot=mid-1; } printf("沒(méi)有找到該元素!\n"); return0;}運(yùn)行結(jié)果:輸入要查找的元素:21↙找到元素21是:a[8]20排序例:冒泡排序冒泡排序是交換排序算法中的一種交換排序法的基本思想:按照某種原則,不斷對(duì)數(shù)列中的逆序數(shù)據(jù)進(jìn)行比較和交換,直到數(shù)列中不存在任何一對(duì)逆序數(shù)據(jù)為止冒泡排序法的基本思想:依次對(duì)相鄰兩個(gè)數(shù)據(jù)進(jìn)行比較交換,使一個(gè)符合要求的數(shù)據(jù)被放到數(shù)列末尾,成為有序數(shù)列中的一個(gè)再對(duì)未排序數(shù)據(jù)進(jìn)行兩兩比較和交換……直到比較并交換最后兩個(gè)數(shù)據(jù)為止9835289399583529838598352359853298532第1輪第2輪第3輪第4輪22排序冒泡排序法的特點(diǎn):每經(jīng)過(guò)一輪比較,都有一個(gè)數(shù)成為有序序列中的一個(gè)設(shè)數(shù)組中有N個(gè)數(shù)據(jù),則第i輪比較的次數(shù)為(N-i)次,總共進(jìn)行(N-1)輪比較23排序流程圖:定義數(shù)組a,并進(jìn)行初始化for(i=0;i<N-1;i++)for(j=0;j<N-i-1;j++)真假a[j]>a[j+1]輸出數(shù)組a交換a[j]與a[j+1]無(wú)#include<stdio.h>#defineN8intmain(void){ inta[N]={9,8,3,7,5,2,6,1}; inti,j,temp; for(i=0;i<N-1;i++) { for(j=0;j<N-i-1;j++) if(a[j]>a[j+1]) { temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } } printf("\n排序結(jié)果:\n"); for(i=0;i<N;i++) printf("%3d",a[i]); printf("\n"); return0;}運(yùn)行結(jié)果:排序結(jié)果:

1235678925排序例:選擇排序選擇排序也是一種交換排序選擇排序的基本思想:將數(shù)列中最?。ù螅┑臄?shù),將它與第一個(gè)數(shù)交換在剩下的數(shù)中繼續(xù)將最小(大)的數(shù),與第二個(gè)數(shù)交換重復(fù)執(zhí)行以上步驟,直到數(shù)列中的數(shù)全部按順序排列為止26排序未排序時(shí)的情況: a[0]a[1]a[2]a[3]a[4] 36194將5個(gè)數(shù)中最小的數(shù)1與a[0]對(duì)換:

16394將余下的4個(gè)數(shù)中最小的數(shù)3與a[1]對(duì)換

13694將余下的3個(gè)數(shù)中最小的數(shù)4與a[2]對(duì)換

13496將余下的2個(gè)數(shù)中最小的數(shù)6與a[3]對(duì)換

13469113134134627排序流程圖:定義數(shù)組afor(i=0;i<N-1;i++)for(j=i+1;j<N;j++)真假a[j]<a[i]輸出數(shù)組a交換a[i]與a[j]無(wú)輸入數(shù)組中的元素值#include<stdio.h>#defineN10voidsort(int[],int);intmain(void){ inta[N],i; printf(“Pleaseenterthearray:\n"); for(i=0;i<N;i++) scanf("%d",&a[i]); sort(a,N); printf("Thesortedarray:\n"); for(i=0;i<N;i++) printf("%d\t",a[i]); printf("\n"); return0;}voidsort(inta[],intn){ inti,j,temp; for(i=0;i<n-1;i++) { for(j=i+1;j<n;j++) if(a[j]<a[i]) { temp=a[i]; a[i]=a[j]; a[j]=temp; } }}運(yùn)行結(jié)果:Pleaseenterthearray:3619452087Thesortedarray:012345678931數(shù)組與函數(shù)數(shù)組與函數(shù)之間的關(guān)系:向函數(shù)的形參傳送數(shù)組元素調(diào)用函數(shù)后返回一個(gè)數(shù)組元素值向函數(shù)的形參傳遞數(shù)組名(數(shù)組的地址)函數(shù)對(duì)數(shù)組進(jìn)行操作32數(shù)組與函數(shù)函數(shù)對(duì)數(shù)組進(jìn)行操作以冒泡排序?yàn)槔?,通過(guò)函數(shù)實(shí)現(xiàn),并將數(shù)組定義為外部變量#include<stdio.h>#defineN8voiddisp(void);voidbubbleSort(void);inta[N]={9,8,3,7,5,2,6,1};intmain(void){ bubbleSort(); disp(); return0;}staticvoidbubbleSort(void){ inti,j,temp; for(i=0;i<N-1;i++) { for(j=0;j<N-i-1;j++) if(a[j]>a[j+1]) { temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } }}voiddisp(void){ inti; printf("\n排序結(jié)果:"); for(i=0;i<N;i++) printf("%3d",a[i]); printf("\n");}運(yùn)行結(jié)果:排序結(jié)果:1235678935數(shù)組與函數(shù)向函數(shù)的形參傳遞數(shù)組名數(shù)組名作為參數(shù)與簡(jiǎn)單變量作參數(shù)的區(qū)別:將數(shù)組的首地址傳遞給被調(diào)函數(shù),而不是將所有數(shù)組元素的值傳遞給函數(shù),即數(shù)組名作為參數(shù)是進(jìn)行“地址傳遞”,而不是“值傳遞”以冒泡排序?yàn)槔?include<stdio.h>#defineN8voiddisp(int[]);voidbubbleSort(intd[N]);intmain(void){

inta[N]={9,8,3,7,5,2,6,1}; bubbleSort(a); disp(a); return0;}voidbubbleSort(int

a[N]){ inti,j,temp; for(i=0;i<N-1;i++) { for(j=0;j<N-i-1;j++) if(a[j]>a[j+1]) { temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } }}voiddisp(intc[]){ inti; printf("排序結(jié)果:"); for(i=0;i<N;i++) printf("%3d",c[i]); printf("\n");}運(yùn)行結(jié)果:排序結(jié)果:1235678938數(shù)組與函數(shù)當(dāng)采用地址傳遞時(shí),如果在被調(diào)函數(shù)中使形參數(shù)組元素的值改變了,實(shí)參數(shù)組元素的值也發(fā)生變化以數(shù)組名作為參數(shù),應(yīng)遵循以下規(guī)則:函數(shù)原型必須指明數(shù)組類(lèi)型,數(shù)組的大小不需要明確給出實(shí)參只寫(xiě)數(shù)組名,而且數(shù)組名必須是已定義的具有確定長(zhǎng)度的數(shù)組名39字符串字符數(shù)組與字符串字符數(shù)組的初始化charstr1[]={‘C’,‘h’,‘i’,‘n’,‘a(chǎn)’};charstr2[]={‘C’,‘

’,‘p’,‘r’,‘o’,‘g’,‘r’,‘a(chǎn)’,‘m’};字符串初始化字符串:C語(yǔ)言中,把用一對(duì)雙撇號(hào)括起來(lái)的0個(gè)或多個(gè)字符序列稱為字符串常量例如:“hello”,“Programming”,“a”等若字符串常量中需包含單引號(hào)或雙引號(hào),則應(yīng)采用轉(zhuǎn)義字符:例如:“Isay:\‘hello\’”字符串存放在字符數(shù)組中,而不是放在單個(gè)變量中40字符串字符串在內(nèi)存中的存儲(chǔ)方式字符串是一個(gè)特殊的字符數(shù)組,以字符串結(jié)束標(biāo)志‘\0’作為最后一個(gè)元素,即只有當(dāng)字符數(shù)組以‘\0’作為最后一個(gè)元素時(shí),這樣的字符數(shù)組才能被稱之為字符串例如:“China”在字符數(shù)組中被存為:

‘C’,‘h’,‘i’,‘n’,‘a(chǎn)’,‘\0’41字符串字符串的定義和初始化charstr1[6]={‘C’,‘h’,‘i’,‘n’,‘a(chǎn)’,‘\0’};charstr1[6]={“China”};charstr1[6]=“China”;charstr1[]={‘C’,‘h’,‘i’,‘n’,‘a(chǎn)’,‘\0’};charstr1[]={“China”};charstr1[]=“China”;注意:定義字符串時(shí),所給字符數(shù)組的長(zhǎng)度要比實(shí)際存儲(chǔ)字符串中的有效字符數(shù)多142字符串的輸入/輸出使用格式化輸入/輸出函數(shù)(printf和scanf),以%c格式輸入/輸出采用循環(huán),依次輸入字符數(shù)組的元素使用格式化輸入/輸出函數(shù)(printf和scanf),以%s格式輸入/輸出使用字符串處理函數(shù)puts()和gets()進(jìn)行輸入/輸出43采用%s格式輸入/輸出#include<stdio.h>#defineN5intmain(void){ charstr1[N],str2[N],str3[N]; scanf("%3s%5s%7s",str1,str2,str3); printf("str1=%s,str2=%s,str3=%s\n",str1,str2,str3); scanf("%s%s%s",str1,str2,str3); printf("str1=%s,str2=%s,str3=%s\n",str1,str2,str3); return0;}運(yùn)行結(jié)果:mycountryischina↙str1=myc,str2=ountr,str3=yischinyou↙are↙str1=a,str2=you,str3=are44采用%s格式輸入/輸出說(shuō)明:

用scanf輸入時(shí),字符數(shù)組名前不需要添加地址運(yùn)算符&用scanf輸入字符串時(shí),并不按照定義的字符數(shù)組的長(zhǎng)度決定實(shí)際輸入的字符個(gè)數(shù)實(shí)際輸入的字符個(gè)數(shù)按以下情況決定:由輸入時(shí)格式控制符給出的寬度決定遇到輸入的字符串中有空格、換行符或制表符時(shí),本輸入結(jié)束,因此在用scanf輸入字符串時(shí)中間不能有空格注意:實(shí)際輸入的字符串長(zhǎng)度應(yīng)小于定義的字符數(shù)組長(zhǎng)度字符數(shù)組按照格式控制符給出的寬度分割從緩沖區(qū)中讀取的字符45采用%s格式輸入/輸出說(shuō)明:輸入字符后,系統(tǒng)自動(dòng)為每個(gè)字符串添加字符串結(jié)束標(biāo)志符‘\0’使用printf函數(shù)輸出字符串時(shí),碰到‘\0’就認(rèn)為該字符串結(jié)束,即只輸出‘\0’之前的字符myc\0ountr\0yischin\0str1str2str346字符串處理函數(shù)實(shí)現(xiàn)輸入/輸出#include<stdio.h>#defineN13intmain(void){ charstr[N]; printf("請(qǐng)輸入一個(gè)字符串:\n"); gets(str); puts(str); puts(str); return0;}運(yùn)行結(jié)果:myinput↙myinputmyinput47字符串處理函數(shù)實(shí)現(xiàn)輸入/輸出說(shuō)明:用gets()可以讀入包括空格在內(nèi)的字符串,即gets函數(shù)不以空格作為字符串輸入結(jié)束的標(biāo)志,而以回車(chē)作為輸入結(jié)束的標(biāo)志用puts()進(jìn)行輸出時(shí),自動(dòng)將‘\0’轉(zhuǎn)換為換行符,puts()一次輸出一行用puts()輸出的字符串中可以包含轉(zhuǎn)義字符,如‘\n’gets函數(shù)的返回值為字符數(shù)組的首地址puts函數(shù)的返回值為整型,不是字符數(shù)組的首地址48字符串處理函數(shù)實(shí)現(xiàn)輸入/輸出#include<stdio.h>#defineN13intmain(void){ charstr[N]; printf("請(qǐng)輸入一個(gè)字符串:\n"); printf("gets的返回值為:%d\n",gets(str)); printf("puts的返回值為:%d\n",puts(str)); return0;}運(yùn)行結(jié)果:請(qǐng)輸入一個(gè)字符串:myinput↙gets的返回值為:1245008myinputputs的返回值為:049字符串處理函數(shù)C語(yǔ)言的庫(kù)函數(shù)中提供了字符串處理函數(shù)字符串處理函數(shù)包含在string.h頭文件中,因此,在代碼中使用字符串處理函數(shù)時(shí),應(yīng)采用包含命令#include<string.h>或#include“string.h”50字符串處理函數(shù)常用的字符串處理函數(shù):strlen(字符串)求字符串的長(zhǎng)度(字符串當(dāng)中有效字符的個(gè)數(shù))注意:該函數(shù)返回的字符串長(zhǎng)度不包括‘\0’字符例如:charstr[10]=“china”;intlength=strlen(str);51字符串處理函數(shù)strcpy(字符串1,字符串2)將字符串2復(fù)制到字符串1中注意:strcpy并不檢查字符串1所在的字符數(shù)組的大小是否大于等于字符串2的,因此當(dāng)字符串1的長(zhǎng)度小于字符串2時(shí)會(huì)出錯(cuò)例如:if(sizeof(string1)>=sizeof(string2)) strcpy(string1,string2);注意:sizeof運(yùn)算符求的是string1所在的字符數(shù)組的長(zhǎng)度52字符串處理函數(shù)strncpy(目標(biāo)字符串,源字符串,長(zhǎng)度)例如:strncpy(destination,source,n)將source中長(zhǎng)度為n的字符復(fù)制到destination字符串中例如:

chardestination[]=“Thisstringwillbereplaced”; charsource[]=“Thisstringwillbecopiedinpart”; intn=26; strncpy(destination,source,n);注意:字符串不能進(jìn)行賦值操作,而字符數(shù)組中的元素可以進(jìn)行賦值操作53字符串處理函數(shù)strcmp(字符串1,字符串2)比較兩個(gè)字符串,對(duì)每個(gè)字符的ASCII碼進(jìn)行比較例如:ThebrownfoxTheblackfox>=====54字符串處理函數(shù)strchr(字符串,字符)在字符串中搜索給定的字符返回在字符串中找到的第一個(gè)給定字符的地址(內(nèi)存單元的地址),如果沒(méi)找到則返回NULL,相當(dāng)于0,表示該地址未指向任何變量例如:charstr[]=“Thequickbrownfox”;charc=‘q’;char*pGot_char=NULL;pGot_char=strchr(str,c);55字符串處理函數(shù)strcat(字符串1,字符串2)將字符串2連接到字符串1中的有效字符后面注意:這個(gè)函數(shù)與字符串復(fù)制函數(shù)類(lèi)似,也要確保目標(biāo)數(shù)組空間足夠容納連接后的字符串,否則將覆蓋目標(biāo)數(shù)組之后的內(nèi)存空間count2=0;while(str2[count2]) str1[count1++]=str2[count2++];str1[count1]=‘\0’;56字符串處理函數(shù)#include<stdio.h>#include<string.h>#defineSTR_LENGTH40intmain(void){ charstr1[STR_LENGTH]="Tobeornottobe"; charstr2[STR_LENGTH]=",thatisthequestion"; if(STR_LENGTH>strlen(str1)+strlen(str2)) printf("\n%s\n",strcat(str1,str2)); else printf("\nYoucan'tputaquartintoapintpot."); return0;}運(yùn)行結(jié)果:Tobeornottobe,thatisthequestion#include<stdio.h>#include<string.h>#defineN120#defineN28intmain(){ charc; charstr1[N1]="abcdefg"; charstr2[N2]="hijklm"; printf("\nstr1=%s,str2=%s\n",str1,str2); printf("\nstrcat的返回值:%ld\n",strcat(str1,str2)); printf("\n連接后的str1=%s\n",str1);例:字符串函數(shù)的簡(jiǎn)單應(yīng)用 printf("\n輸入要查找的字符\n"); scanf("%c",&c); printf("\nstrchr的返回值:%ld\n",strchr(str1,c)); printf("\nstrlen的返回值:%d\n",strlen(str1)); return0;}#include<stdio.h>#include<string.h>#defineN10intmain(){ charstr[N]; charmin[N]; inti; printf("先輸入第1個(gè)字符串:"); gets(min);例:輸入5個(gè)字符串,輸出其中最小的字符串 for(i=2;i<=5;i++) { printf("輸入第%d個(gè)字符串:",i); gets(str); if(strcmp(min,str)>0) { strcpy(min,str); } } printf("\n最小的字符串是:%s\n",min); return0;}61字符串函數(shù)分析舉例例:計(jì)算字符串長(zhǎng)度intstrlength(chars[]){ inti=0,len=0; while(s[i++]) len++; returnlen;}62字符串函數(shù)分析舉例例:字符串復(fù)制voidstrcopy(chardest[],charsrc[]){ inti=0,j=0; while((dest[i++]=src[j++])!='\0');}63二維數(shù)組由一維數(shù)組所組成的數(shù)組稱為二維數(shù)組,通過(guò)兩個(gè)下標(biāo)表示數(shù)組中的元素758665879265789167886675844577studentGrade[0]studentGrade[1]studentGrade[2]studentGrade[0][0]64二維數(shù)組二維數(shù)組具有兩個(gè)下標(biāo),第一個(gè)稱為行下標(biāo),第二個(gè)稱為列下標(biāo)二維數(shù)組的每行都是一個(gè)一維數(shù)組studentGrade[2][3]二維數(shù)組名一維數(shù)組名65二維數(shù)組的定義二維數(shù)組的定義 類(lèi)型標(biāo)識(shí)符數(shù)組名[常量表達(dá)式][常量表達(dá)式]例如:intb[3][4];不能寫(xiě)成:intb[3,4];數(shù)組元素在內(nèi)存中的存儲(chǔ)二維數(shù)組中的元素在內(nèi)存中的存儲(chǔ)順序是:按行存放,即先順序存放第一行的元素,再存放第二行的元素……

66二維數(shù)組的定義數(shù)組元素在內(nèi)存中的存儲(chǔ)下圖表示對(duì)a[3][4]數(shù)組存放的順序地址

數(shù)組元素b[0][0]b[0][1]b[0][2]b[1][0]b[1][1]b[1][2]b[2][0]b[2][1]b[2][2]3000H3004H3008H300CH3010H3014H3018H301CH3020H例如:整型數(shù)組b[3][3]={{1,2,3},{4,5,6},{7,8,9}};12345678968多維數(shù)組的定義多維數(shù)組的定義可以仿照二維數(shù)組的形式例如:inta[2][3][4];多維數(shù)組元素在內(nèi)存中的排列順序:

a[0][0][0]→a[0][0][1]→a[0][0][2]→a[0][0][3]→a[0][1][0]→a[0][1][1]→a[0][1][2]→a[0][1][3]→

a[0][2][0]→a[0][2][1]→a[0][2][2]→a[0][2][3]→a[1][0][0]→a[1][0][1]→a[1][0][2]→a[1][0][3]→a[1][1][0]→a[1][1][1]→a[1][1][2]→a[1][1][3]→a[1][2][0]→a[1][2][1]→a[1][2][2]→a[1][2][3]→69二維數(shù)組元素的引用二維數(shù)組元素的表示形式為: 數(shù)組名[下標(biāo)][下標(biāo)]例如:a[2][3]下標(biāo)可以是整型表達(dá)式,如a[2-1][2*2-1]不要寫(xiě)成a[2,3],a[2-1,2*2-1]形式數(shù)組元素可以出現(xiàn)在表達(dá)式中,也可以被賦值例如:b[1][2]=a[2][3]/270二維數(shù)組元素的引用在使用數(shù)組元素時(shí),應(yīng)該注意下標(biāo)值應(yīng)在已定義的數(shù)組大小的范圍內(nèi)常出現(xiàn)的錯(cuò)誤有:

inta[3][4];

/*定義a為3×4的數(shù)組*/

┆a[3][4]=3;

71二維數(shù)組的初始化逐行為二維數(shù)組賦初值格式:數(shù)據(jù)類(lèi)型數(shù)組名[常量表達(dá)式1][常量表達(dá)式2]={初始化數(shù)據(jù)};例如:inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};也可省略第一維的大?。篿nta[][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};72二維數(shù)組的初始化在定義二維數(shù)組時(shí)不能省略第二維的大小或者同時(shí)省略兩個(gè)維的大小例如:inta[][]=……inta[3][]=……可以將所有數(shù)據(jù)寫(xiě)在一個(gè)花括號(hào)內(nèi),按數(shù)組排列的順序?qū)Ω髟刭x初值。例如:inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};此時(shí)也可省略第一維的大?。篿nta[][4]={1,2,3,4,5,6,7,8,9,10,11,12};73二維數(shù)組的初始化不完全初始化可以對(duì)部分元素賦初值,對(duì)各行的前幾個(gè)元素賦初值例如:

inta[3][4]={{1},{5},{9}};10005000900074二維數(shù)組的初始化也可以對(duì)各行中的某一元素賦初值例如:inta[3][4]={{1},{0,6},{0,0,0,11}};也可以只對(duì)某幾行元素賦初值。如:inta[3][4]={{1},{5,6}};100006000

0011

10005600000075二維數(shù)組的初始化在定義時(shí)也可以只對(duì)部分元素賦初值而省略第一維的長(zhǎng)度,但應(yīng)分行賦初值例如:inta[][4]={{0,0,3},{0},{0,10}};76二維數(shù)組程序舉例例:將一個(gè)二維數(shù)組行和列元素互換,存到另一個(gè)二維數(shù)組中#include<stdio.h>intmain(void){ intsource[2][3]={{1,2,3},{4,5,6}}; intdest[3][2],i,j; printf("sourcearray:\n"); for(i=0;i<2;i++) { for(j=0;j<3;j++) { printf("%d\t",source[i][j]); dest[j][i]=source[i][j]; } printf("\n"); }

printf("destinationarray:\n"); for(i=0;i<3;i++) { for(j=0;j<2;j++) printf("%d\t",dest[i][j]); printf("\n"); } return0;}運(yùn)行結(jié)果如下:sourcearray:123456destinationar

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論