




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第5章 數(shù)組,c語言還提供了構造類型的數(shù)據(jù),它們有:數(shù)組類型、結構體類型、共用體類型。 構造類型數(shù)據(jù)是由基本類型數(shù)據(jù)按一定規(guī)則組成的,因此有的書稱它們?yōu)椤皩С鲱愋汀薄?數(shù)組是有序數(shù)據(jù)的集合。數(shù)組中的每一個元素都屬于同一個數(shù)據(jù)類型。用一個統(tǒng)一的數(shù)組名和下標來唯一地確定數(shù)組中的元素。,數(shù)組的特點:,常用于處理大批量數(shù)據(jù); 數(shù)據(jù)特點:存在內在聯(lián)系; 數(shù)組具有相同數(shù)據(jù)類型的變量集合; 這些變量都有相同名字,但下標不同; 稱這些變量為數(shù)組元素; 只有一個下標一維數(shù)組; 有兩個下標二維數(shù)組。,本章將介紹的內容,51 一維數(shù)組 52 字符串 53 二維數(shù)組 實例的部分程序,5.1 一維數(shù)組 P124,5.1
2、.1 一維數(shù)組的定義和引用 5.1.2 一維數(shù)組的初始化 5.1.3 一維數(shù)組程序舉例,5.1.1 一維數(shù)組的定義和引用 P124,【例5.1】一維數(shù)組示例。 #define N 10 main( ) int i,a3; float bN; a0=2; a1=4; a2=a0+a1; for ( i=0; iN; i+ ) scanf(%f, ,N為符號常量,給數(shù)組a的元素賦值,運行結果:,1 2 3 4 5 6 7 8 9 10,2 4 6,1 2 3 4 5 6 7 8 9 10,數(shù)組a的元素值,數(shù)組b的元素值,int a3; 表示: a為一維數(shù)組名; a的長度為3,即含3個元素; 元素為
3、a0、a1、a2 ; 元素類型均為整型。,說明:,每個元素都是變量,下標:02,float bN; 表示: 數(shù)組名為b; b數(shù)組的長度為N; N個元素分別為b0,b1,b2,bN-1; 各元素的類型為單精度型。,不能含變量,數(shù)組元素代表內存中的一個存儲單元; 數(shù)組元素像普通變量一樣使用; 數(shù)組元素用下標形式表示; 常用循環(huán)對數(shù)組進行輸入輸出操作。,為a數(shù)組分配3個連續(xù)的存儲單元: (2字節(jié)3=6個字節(jié)) 為b數(shù)組分配N個連續(xù)的存儲單元: (4字節(jié)N),用 #define N 10 定義符號常量N,方便修改程序。 例如,要將數(shù)組b的長度改為20,只需把命令行改為#define N 20。 程序其
4、他部分無需改動。,【例5.2】存放字符的數(shù)組示例。 #include main( ) int i; char ch4; ch0=G; ch1=o; ch2=o; ch3=d; for ( i=0; i4; i+ ) putchar(chi); ,運行結果: Good,ch0,ch1,ch2,ch3,ch,ch數(shù)組的存儲單元,一維數(shù)組的一般定義形式: 類型名 數(shù)組名1 常量表達式1 , 數(shù)組名2 常量表達式2 , ; 例如,int a5, b6+3;,注意: 數(shù)組名定名規(guī)則與變量名相同; 數(shù)組名后是方括號, 例如:int a5; 而不是圓括號,下面用法不對: int a(5); 常量表達式表示元
5、素的個數(shù),下標從零開始。 數(shù)組的大小是固定的,不能動態(tài)定義。 例如: int n; scanf(“%d”, 是錯誤的。,一維數(shù)組元素的引用: 數(shù)組必須先定義,然后使用; 一個數(shù)組占有一串連續(xù)的存儲單元; c語言規(guī)定只能逐個引用數(shù)組元素而不能一次引用整個數(shù)組。,引用數(shù)組元素的形式: 數(shù)組名 下標 例如,a2,bi,bi+1是合法引用 下標可以是常量、變量或表達式; 其值必須確定、且是整型; 系統(tǒng)不做下標越界檢查。,【例5.3】輸入若干學生的成績(用負數(shù)結束輸入),計算其平均成績,并統(tǒng)計不低于平均分的學生人數(shù)。,編程點撥:,為了統(tǒng)計不低于平均分的學生人數(shù),先把學生成績存起來,等到計算平均成績后,再
6、與平均分比較; 如果使用普通變量,過程就會很繁瑣; 選用數(shù)組簡化程序 。,#define N 40 main( ) int i, n=0, count=0; float score,total=0,aN,ave; printf(data:n); scanf(%f, ,學生人數(shù)不能多于40,a中存放成績,ave=total/n; for ( i=0; i=ave ) count+; printf(ave=%f,count=%d,ave,count); ,運行結果: data: 55 66 77 88 99 100 1 ave=80.833336,count=3,計算平均成績,統(tǒng)計不低于平均分人數(shù)
7、,思考題,輸入十個學生的成績,統(tǒng)計低于平均分的人數(shù)。,for(i=0; i10; i+) scanf(“%d”,for ( i=0; i=ai ) count+;,輸入并計算平均分,統(tǒng)計低于平均分人數(shù),printf(%f,%d,ave,count);,5.1.2 一維數(shù)組的初始化,當系統(tǒng)為所定義的數(shù)組在內存中開辟一串連續(xù)的存儲單元時,這些存儲單元中并沒有確定的值;可以在定義語句中為所定義的數(shù)組賦初值。 定義數(shù)組的同時,給數(shù)組元素賦初值的方法稱為數(shù)組的初始化。,【例5.4】一維數(shù)組的初始化示例。 (1)在定義數(shù)組時對數(shù)組元素賦以初值。將數(shù)組元素的初值依次放在一對花括弧內。,int i; int
8、a5=1,2,3,4,5; for( i=0; i5; i+ ) printf(%5d,ai);,等價于,(2)可以只給一部分元素賦值。,int i; int b5=2,3,4; for( i=0; i5; i+ ) printf(%5d,bi);,等價于,int b5=2,3,4,0,0;,(3)若初始化時不指定數(shù)組元素的個數(shù),則默認其長度為后面提供的數(shù)據(jù)的個數(shù)。但若被定義的數(shù)組長度與提供初值的個數(shù)不相同,則數(shù)組長度不能省略。,int i; int c =3,4,5,6,7; for( i=0; i5; i+ ) printf(%5d,ci);,等價于,int c5=3,4,5,6,7;,(
9、4)不能給數(shù)組整體賦初值。若想使一個數(shù)組中全部元素值為0,可以表示為: int a5= 0,0,0,0,0; 不能寫成: int a5= 05;,int i; int d5=0; for( i=0; i5; i+ ) printf(%5d,di);,等價于,int d5=0,0,0,0,0;,(5)若沒有進行初始化,也沒有給數(shù)組元素賦值,則其數(shù)組元素的值是不確定的。,int i; int e5; for( i=0; i5; i+ ) printf(%5d,ei);,未初始化,不能寫成 int e ;,輸出不確定值,(6)所賦初值多于所定義數(shù)組的元素個數(shù)時,在編譯時將給出出錯信息。,int i;
10、 int f5=1,2,3,4,5,6,7,8;,提供數(shù)據(jù)過多,報錯,定義數(shù)組的同時,給數(shù)組元素賦初值數(shù)組的初始化,【例5.5】存放字符的數(shù)組初始化示例。 #include main( ) int i; char a4=G,o,o,d; char b4=G; char c4= 0 ; for ( i=0; i4; i+ ) printf(%c,ai); printf(n); for ( i=0; i4; i+ ) printf(%c,bi); printf(n); for ( i=0; i4; i+ ) printf(%c,ci); ,等價于,0,運行結果: Good G ,0在屏幕上無顯示
11、0的ASCII碼值為0,【例5.6】定義含有10個元素的數(shù)組,并按順序和逆序輸出各元素的值。 #include main( ) int i,j,t; int a10=1,2,3,4,5,6,7,8,9,10; for( i=0; i=0; i- ) printf(%4d,ai); printf(n); ,運行結果: 1 2 3 4 5 6 7 8 9 10 10 9 8 7 6 5 4 3 2 1,【例5.7】定義含有10個元素的數(shù)組,并將數(shù)組中的元素按逆序重新存放后輸出。,a,a,值變化,逆序輸出和逆序存放不同,a,b,按逆序將a數(shù)組的值賦給b數(shù)組,按順序將b數(shù)組的值賦給a數(shù)組,a,方法1:
12、開辟另一個數(shù)組,for( i=0; i10; i+) bi=a10-i-1;,for( i=0; i10; i+) ai=bi;,#include main( ) int i,a10=1,2,3,4,5,6,7,8,9,10,b10; for( i=0; i10; i+ ) printf(%4d,ai); printf(n); for( i=0; i10; i+ ) bi=a10-i-1; for( i=0; i10; i+ ) ai=bi; for( i=0; i10; i+ ) printf(%4d,ai); printf(n); ,運行結果: 1 2 3 4 5 6 7 8 9 10 1
13、0 9 8 7 6 5 4 3 2 1,方法2:只開辟一個存儲單元t,1 2 3 4 5 6 7 8 9 10,a,通過,交換,通過,交換,t,通過,交換,通過,交換,通過,交換,#include main( ) int i,t,a10=1,2,3,4,5,6,7,8,9,10; for( i=0; i10; i+ ) printf(%4d,ai); printf(n); for(i=0; i10/2; i+ ) t=ai; ai=a10-i-1; a10-i-1=t; for( i=0; i10; i+ ) printf(%4d,ai); printf(n); ,能改成i10?,5.1.3
14、一維數(shù)組程序舉例 P128,【例5.8】觀察運行情況,int i,t,a10=1,2,3,4,5,6,7,8,9,10;,t=a0;,for ( i=0; i9; i+ ) ai=ai+1;,a9=t;,for ( i=0;i10;i+) printf(%4d,ai);,1,2,3,4,5,6,7,8,9,10,1,向左移動,int i,t, b10=1,2,3,4,5,6,7,8,9,10;,t=b9;,for ( i=9; i0; i- ) bi=bi-1;,b0=t;,for ( i=0;i10;i+) printf(%4d, bi);,10,2,3,4,5,6,7,8,9,10,1,向
15、右移動,5.1.3 一維數(shù)組程序舉例 P128,【例5.8】觀察運行情況,【例5.9】數(shù)組中已存互不相同的10個整數(shù),從鍵盤輸入一個整數(shù),輸出與該值相同的數(shù)組元素下標。,編程點撥:,使用循環(huán)將輸入的數(shù)和數(shù)組元素逐個進行比較; 如果找到相等的元素,用k記住該元素下標值; 輸出k的值 。,if( k!=-1 ) printf(下標值=%dn,k);,#include main( ) int i, x, , a10=1,2,3,4,5,6,7,8,9,10; for ( i=0; i10; i+ ) printf(%4d,ai); printf(n); ,printf(Input x:); scan
16、f(%d,for( i=0; i10; i+ ),if ( x=ai ) k=i;,輸入需查找的數(shù),若找到,用k記下標值,k=-1,else printf(沒找到 %dn,x);,程序編寫過程:,不能賦09之間的值,運行過程:,第一次運行: Input x:6 1 2 3 4 5 6 7 8 9 10 下標值=5 第二次運行: Input x:12 1 2 3 4 5 6 7 8 9 10 沒找到 12,優(yōu)化程序:,main( ) int i, x, k=-1 , a10=1,2,3,4,5,6,7,8,9,10; printf(Input x:); scanf(%d, ,break;,i10
17、,i,【例5.10】輸入十個互不相同的整數(shù)并存在數(shù)組中,找出最大元素,并刪除。,編程點撥:,第一步:求最大值所在元素下標。 不必用max記住最大值,只要用k記住最大值所在的元素下標。 第二步:刪除最大值。 從最大值開始將其后面元素依次前移一個位置。,#include main( ) int i,k,a10; printf(Input data:); for ( i=0; i10; i+) scanf(%d, ,a,k,k=0;,if ( aka1 ),k=1;,真,執(zhí)行,0,1,2,3,4,5,6,7,8,9,if ( aka2 ),k=2;,假,不執(zhí)行,if ( aka3 ),k=3;,真,
18、執(zhí)行,下標=,k=0; for ( i=1; i10; i+ ) if ( akai ) k=i;,a,for ( i=0; i9; i+) printf(%4d,ai); printf(n); ,最先,a 3 =a 3 +1;,最后,a8=a8+1;,k8,for ( i=k; i9; i+ ) ai=ai+1;,a,k,k,【例5.11】在數(shù)組中找出最小元素,并與第一個元素對調 。,第一步:求最小值所在元素下標,k=0; for ( j=1; jaj ) k=j;,編程點撥:,第二步:最小元素與第一個元素對調 temp=a0; a0=ak; ak=temp;,#include main(
19、) int j,k,temp,a10; for ( j=0; j10; j+ ) scanf(%d, ,k=0; for( j= 0 +1; jaj ) k=j;,8,1,temp=a0; a0=ak; ak=temp;,5,for ( j=0; j10; j+ ) printf(%4d,aj); ,a,新的問題:,在后9個元素中,最小值與第二個元素對調。,a,k= 1 ; for( j= 1+1 ; jaj ) k=j;,9,2,temp=a1; a1=ak; ak=temp;,3,a,k= 1 ; for( j= 1 +1 ; jaj ) k=j;,10,3,temp=a2; a2=ak;
20、 ak=temp;,7,2,2,a,for( ; i= ; i+) ,k= 3 ; for( j= 3 +1 ; jaj ) k=j;,temp=a 3 ; a 3 =ak; ak=temp;,i,i,或k+1,i=0 8,由小到大的順序排序,a,i,i,8,9,4,【例5.12】將10個數(shù)由小到大的順序排序。 方法1:用選擇法排序 。 前面介紹的算法就是選擇法排序的過程。,main( ) int i,j,k,temp,a10=10,9,8,2,5,1,7,3,4,6; for ( i=0; iaj ) k=j; temp=ai; ai=ak; ak=temp; for ( i=0; i10;
21、 i+ ) printf(%4d,ai); ,方法2:用冒泡法排序。 參見教材中的方法2。 方法3:參見教材【例5.13】。,【例5.14】將鍵盤輸入的一個數(shù),插入到已按降序排列的數(shù)組中,要求按原來的排序規(guī)律插入。 編程點撥: 定義數(shù)組時多開辟一個存儲單元; 找合適的插入位置; 向右移動插入點后的元素; 插入 。,#include main( ) int i,j=0,k,a11=20,18,16,14,12,10,8,6,4,2; for ( i=0; i10; i+ ) printf(%4d,ai); printf(n); printf(Input k:); scanf(%d, ,15,k,
22、15,j=0 aj k?,j=1 aj k? 即18 15 ? 是 j+,j=2 aj k? 即16 15 ? 是 j+,j=3 aj k? 即14 15 ?,while( aj=k ,找不到比k小的元素時也要退出循環(huán),不是,結束循環(huán),j=3,3,找合適的插入位置,即20 15 ? 是 j+,k,15,while( aj=k ,向右移動插入點后的元素,2,4,6,8,10,12,14,a10=a9;,a 4 =a 3 ;,10j+1,aj=k;,for ( i=10; i=j+1; i- ),ai=ai-1;,插入k的值,j+1,j,while( aj=k ,【例5.15】擲100次骰子,統(tǒng)計
23、各點數(shù)出現(xiàn)的次數(shù)。 編程點撥: 用for循環(huán) i:1100 。 每次點數(shù)為16間數(shù),用random(6)+1表示 random(k):隨機產(chǎn)生0,k-1內整數(shù)。 定義數(shù)組a7,用ai統(tǒng)計出現(xiàn)點數(shù)為i的次數(shù) 例如,若產(chǎn)生3,則執(zhí)行: a3=a3+1;,#include #include ,main( ) int i, n, a7=0;,for ( i=1; i=100; i+ ), n=random(6)+1; an=an+1; ,for ( i=1; i=6; i+ ) printf(%8d,ai); ,randomize( );,不用a0,隨機產(chǎn)生 0至5,缺點:每次運行時產(chǎn)生與上次相同數(shù),
24、解決方法,要加,5.2 字符串 P140,5.2.1 字符串的概念和 字符串的輸入輸出 5.2.2 字符串處理函數(shù)和 實現(xiàn)相應功能的自編程序,5.2.1 字符串的概念和 字符串的輸入輸出,字符串用雙引號括起來,例如,”abc”; 用字符型數(shù)組存放字符串,存放時,系統(tǒng)在有效字符后自動加0; 稱0為空值,是字符串結束標志,占用存儲空間,但不計入串的實際長度;用以區(qū)別a和“a”。 有效字符的個數(shù)稱為字符串長度。 例如,”abc”的長度為3,但占4個字節(jié) (0占一位) 。,5.2.1 字符串的概念和 字符串的輸入輸出 P140,注意:在寫字符串時不必加0 , 0字符是系統(tǒng)自動加上的。字符串 “a” 實
25、際上包含2個字符:a 和 0,因此把它賦給只能容納一個字符的字符變量c: c = “a” ; 是錯誤的。 用來存放字符數(shù)據(jù)的數(shù)組是字符數(shù)組。字符數(shù)組中的一個元素存放一個字符。,【例5.17】字符串示例 #include main( ) int i=0; char a =K; char b = Sit down ; while(ai!=0) putchar(ai); i+; printf(n); i=0; while(bi!=0) putchar(bi); i+; ,省略了2,常用0判斷是否結束循環(huán),等價于K,0,”K”和K不同; ”和也不同。 ” ”是空串,占一個字節(jié),存放0; 是字符常量,也
26、占一個字節(jié),存放空格。 0的ASCII碼值為0; 空格的ASCII碼值為32 。,【例5.18】字符串的輸入輸出示例。 #include main( ) char a10, b10; gets(a); scanf(”%s”,b); puts(a); printf(”%sn”,b); ,必須開辟足夠大的空間,運行結果: Sit down Sit down Sit down Sit,遇空格、跳格符或回車符,認為字符串輸入結束,%s,【例5.19】輸入一個字符串,統(tǒng)計其中單詞個數(shù)。單詞之間用空格隔開。,編程點撥:,要找的字符,while( ai= ) i+;,找第一個非空格字符。,用count統(tǒng)計單
27、詞數(shù),步驟如下:,編程點撥:,用count統(tǒng)計單詞數(shù),步驟如下: 找第一個非空格字符,是有效字符,單詞數(shù)增1,if ( ai != 0 ) count+;,判斷找到的字符是否有效字符。,編程點撥:,用count統(tǒng)計單詞數(shù),步驟如下: 判斷找到的字符是否有效字符,每找到一次,count增1,判斷一個空格和非空格字符是否連續(xù)。,不能為0,#include main( ) char a80; int i=0, count=0; gets(a); while( ai= ) i+; if ( ai != 0 ) count+; while( ai != 0 ) if(ai= ,5.2.2 字符串處理函數(shù)
28、和 實現(xiàn)相應功能的自編程序,字符串處理函數(shù)在使用時,必須在程序前面,用命令行指定包含標準頭文件 include 求字符串長度; 字符串復制 ; 字符串連接; 字符串比較 。,【例5.20_1】求字符串長度函數(shù)的使用。 Strlen: 是String Lenght(字符串長度)的縮寫。它是測試字符串長度的函數(shù)。函數(shù)的值為字符串中的實際長度,不包括0在內。,#include #include main( ) char a80; int count; gets(a); count=strlen(a); printf(%s: %dn,a,count); ,運行結果: I am OK I am OK:
29、7,問:strlen(“Good”)的值?,【例5.20_2】求串長自編程序 。 #include main( ) char a80; int i=0,count=0; gets(a); while( ai != 0 ) count+; i+; printf(%s: %dn,a,count); ,【例5.21_1】字符串復制函數(shù)的使用。 Strcpy:是String Copy(字符串復制)的縮寫。它是“字符串復制函數(shù)”。作用是將字符串2復制到字符數(shù)組1中去。,#include #include main( ) char a50,b80; gets(a); strcpy(b,a); puts(b
30、); ,運行結果: I am OK I am OK,給a輸入,輸出b中串,char a5=”ABCD”,b5=”abcd”; char temp5; strcpy(temp,a); strcpy(a,b); strcpy(b,temp);,交換兩個數(shù)組中字符串:,【例5.21_2】字符串復制的自編程序。,a,b, ,while( ai!=0 ) bi=ai; i+; ,bi=0;,#include main( ) int i=0; char a50,b80; gets(a); while( ai!=0 ) bi=ai; i+; bi=0; puts(b); ,【例5.22_1】字符串連接函數(shù)的
31、使用。 Strcat:是string catenate(字符串連接)的縮寫。其作用是:連接兩個字符數(shù)組中的字符串,把字符串2接到字符串1的后面,結果放在字符數(shù)組1中,函數(shù)調用后得到一個函數(shù)值字符數(shù)組1的地址。,#include #include main( ) char a80,b30; gets(a); gets(b); strcat(a,b); puts(a); ,運行結果: abc ABCD abcABCD,a的長度 應足夠大,【例5.22_2】連接字符串的自編程序。,b,a b c 0,a,找a中串的尾, ,【例5.22_2】連接字符串的自編程序。,b,a b c 0,a,找a中串的尾
32、, ,b中串賦值到a,A,B,C,D,人為地賦0,ai=0;,#include main( ) int i=0,j=0; char a80,b30; gets(a); gets(b); while( ai!=0 ) i+; while( bj!=0 ) ai=bj; i+; j+; ai=0; puts(a); ,【例5.23_1】字符串比較函數(shù)的使用。 Strcmp: string compare(字符串比較)的縮寫。作用是比較字符串1和字符串2。,規(guī)則:對兩個字符串自左至右逐個字符相比(按ASCII碼值大小比較),直到出現(xiàn)不同的字符或遇到0為止。如全部字符相同,則認為相等;若出現(xiàn)不相同的字
33、符,則以第一個不相同的字符的比較結果為準。,結果: (1) 如果字符串1=字符串2,函數(shù)值為0。 (2) 如果字符串1字符串2,函數(shù)值為一正整數(shù)。 (3) 如果字符串1字符串2,函數(shù)值為一負整數(shù)。 注意:對兩個字符串比較,不能用以下形式: if(Str1=Str2) printf(“yes); 而只能用 if(StrcmP(Str1,Str2)=0) printf(“yes”);,b o o k 0,b o y 0,=,=,“boy”“book”,比較串的規(guī)則:,按ASCII碼值比較,比較字符串的過程:,#include #include main( ) char a30,b30; gets(
34、a); gets(b); if( strcmp(a,b) 0 ) printf(第一個串大于第二個串n); if( strcmp(a,b) = 0 ) printf(兩串相等n); if( strcmp(a,b) 0 ) printf(第一個串小于第二個串n); ,不能寫成if( ab ),【例5.23_2】編寫字符串比較的程序。 #include main( ) int i=0; char a30,b30; gets(a); gets(b); while( ai=bi ,找第一個不相等的字符,二維數(shù)組的定義: 方式: 類型說明符 數(shù)組名常量表達式常量表達式; 例: float a34; 定義
35、a為34(3行4列)的數(shù)組 int b55; 定義b為55(5行5列)的數(shù)組 存放方式: 按行存放: 在內存中先順序存放第一行元素, 再存放第二行元素,。,5.3 二維數(shù)組,二維數(shù)組的引用 二維數(shù)組的元素的表示形式為: 數(shù)組名下標下標 如:a23 下標可以是整型表達式,如: a2-12*2-1不要寫成a2,3,a2-1,2*2-1形式。,5.3 二維數(shù)組,數(shù)組元素可以出現(xiàn)在表達式中,也可以被賦值,例如: b12=a23/2 在使用數(shù)組元素時,應該注意下標值應在已定義的數(shù)組大小的范圍內。常出現(xiàn)的錯誤是: int a34; a34=3; 定義a為34的數(shù)組,它可用的行下標值最大為2,列下標值最大為
36、3。用a34超過了數(shù)組的范圍。,5.3 二維數(shù)組,注意: 請大家嚴格區(qū)分在定義數(shù)組時用的a34和引用元素時的a34的區(qū)別。 前者a34用來定義數(shù)組的維數(shù)和各維的大小,后者a34中的3和4是下標值,a34代表某一個元素。,5.3 二維數(shù)組,二維數(shù)組的初始化 可以用下面的方法對二維數(shù)組初始化: (1) 分行給二維數(shù)組賦初值。 如: int a34= 1,2,3,4,5,6,7,8,9,10,11,12 ; 這種賦初值方法比較直觀,把第1個花括弧內的數(shù)據(jù)給第1行的元素,第2個花括弧內的數(shù)據(jù)賦給第2行的元素即按行賦初值。,5.3 二維數(shù)組,(2) 可以將所有數(shù)據(jù)寫在一個花括弧內,按數(shù)組排列的順序對各元
37、素賦初值。 如:int a34=1,2,3,4,5,6,7,8,9,10,11,12; 效果與前相同。 但以第1種方法為好,一行對一行,界限清楚。用第2種方法如果數(shù)據(jù)多,寫成一大片,容易遺漏,也不易檢查。,5.3 二維數(shù)組,(3) 可以對部分元素賦初值。 int a34=1,5,9; 它的作用是只對各行第1列的元素賦初值,其余元素值自動為0。賦初值后數(shù)組各元素為 1 0 0 0 5 0 0 0 9 0 0 0,5.3 二維數(shù)組,也可以對各行中的某一元素賦初值: int a34=1,0,6,0,0,11; 初始化后的數(shù)組元素如下: 1 0 0 0 0 6 0 0 0 0 11 0 這種方法對非0
38、元素少時比較方便,不必將所有的0都寫出來,只需輸入少量數(shù)據(jù)。,5.3 二維數(shù)組,也可以只對某幾行元素賦初值: int a34=1,5,6; 數(shù)組元素為: 1 0 0 0 5 6 0 0 0 0 0 0 第3行不賦初值。也可以對第2行不賦初值: int a34=1,9;,5.3 二維數(shù)組,(4) 如果對全部元素都賦初值(即提供全部初始數(shù)據(jù)),則定義數(shù)組時對第一維的長度可以不指定,但第二維的長度不能省。 如:int a34=1,2,3,4,5,6,7,8,9,10,11,12; 與下面的定義等價: int a4=1,2,3,4,5,6,7,8,9,10,11,12; 系統(tǒng)會根據(jù)數(shù)據(jù)總個數(shù)分配存儲空
39、間,一共12個數(shù)據(jù),每行4列,當然可確定為3行。,5.3 二維數(shù)組,在定義時也可以只對部分元素賦初值而省略第一維的長度,但應分行賦初值。 如:int a4=0,0,3,0,10; 這樣的寫法,能通知編譯系統(tǒng);數(shù)組共有3行。數(shù)組各元素為 0 0 3 0 0 0 0 0 0 10 0 0,5.3 二維數(shù)組,從本節(jié)的介紹中可以看到: c語言在定義數(shù)組和表示數(shù)組元素時采用 a這種兩個方括弧的方式,對數(shù)組初始化時十分有用,它使概念清楚,使用方便,不易出錯。,5.3 二維數(shù)組,5.3 二維數(shù)組,有兩個下標的數(shù)組,a00,a01,a10,a11,a20,a21,1,2,3,4,5,6,a,行下標,列下標,【
40、例5.24】二維數(shù)組的示例。 #include main( ) ,初始化二維數(shù)組,給第一行輸入數(shù)據(jù),定義b為兩行五列數(shù)組,1 2 3 4 5,for(j=0; j5; j+) scanf(%d,給第二行輸入數(shù)據(jù),6 7 8 9 0,for(j=0; j5; j+) scanf(%d,int a32=1,2,3,4,5,6;,int i,j,b25;,for(j=0; j5; j+) scanf(%d,for(j=0; j5; j+) scanf(%d,【例5.24】二維數(shù)組的示例。 #include main( ) ,int a32=1,2,3,4,5,6;,int i,j,b25;,for(
41、i=0; i2; i+) for(j=0; j5; j+) scanf(%d,【例5.24】二維數(shù)組的示例。 #include main( ) int a32=1,2,3,4,5,6; int i,j,b25; for(i=0; i2; i+) for(j=0; j5; j+) scanf(%d, ,外循環(huán)控制行下標,內循環(huán)控制列下標,給數(shù)組賦值,for(i=0; i3; i+) for(j=0; j2; j+) printf(%5d,aij); printf(n); printf(Array b:n); for(i=0; i2; i+) for(j=0; j5; j+) printf(%5d
42、,bij); printf(n); ,按矩陣形式輸出時需加此行,運行結果: 1 2 3 4 5 6 7 8 9 0 Array a: 1 2 3 4 5 6 Array b: 1 2 3 4 5 6 7 8 9 0,int a32 =1,2,3,4,5,6; 表示a為二維數(shù)組名,a含6個元素,且各元素均為整型; 常用雙層for處理二維數(shù)組; 在內存中為a分配6個連續(xù)的存儲單元(按行)。,說明:,1 2 3 4 5 6,a00,a01,a10,a11,a20,a21,a,【例5.25】打印如下楊輝三角形。 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1,編程點撥: 楊輝三角形有如下特點: 只有下半三角形有確定的值; 第一列和對角
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 高效會議管理技巧與實踐指南
- 臺風應急預案演練方案
- 項目預算控制表模板(財務部門)
- 可持續(xù)發(fā)展戰(zhàn)略實踐分享
- 電子交易系統(tǒng)操作指南
- 辦公室職員健康促進措施
- 項目執(zhí)行與推廣策略分析文檔
- 三農(nóng)村電商運營方案
- 智慧城市市政設施管理與規(guī)劃書
- 高科技研發(fā)流程優(yōu)化指南
- 綠野仙蹤(導讀課)課件
- 小學生防溺水安全教育主題班會ppt市公開課一等獎省名師優(yōu)質課賽課一等獎課件
- 中國近代海關史課件
- 《人衛(wèi)版第九版內科學心力衰竭》課件PPT
- 中藥熱鹽包熱熨講稿
- 目視檢測VT報告
- 四川省中小流域暴雨洪水計算
- 水泥熟料巖相分析
- 雜詩十二首其二陶淵明
- 第五屆大廣賽獲獎作品
- 《廣告攝影》課件第五講 食品廣告拍攝與后期制作
評論
0/150
提交評論