




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、第7章 數(shù)組2022-3-23語言程序設(shè)計教程21.1.數(shù)組的引入數(shù)組的引入 在前面的程序設(shè)計中,所涉及和處理的數(shù)據(jù)都非常簡單,對這些數(shù)據(jù)采用C語言的基本類型(整型、實型、字符型)來描述就行,但在實際應(yīng)用中,需要處理的數(shù)據(jù)往往是復(fù)雜多樣的。問題:問題:輸入中南大學(xué)2003級4500名學(xué)生的C語言成績,按成績從高分到低分排序,輸出平均成績及高于平均成績的學(xué)生成績。 如何編程呢?如何編程呢? 語言提供了用戶自定義數(shù)據(jù)的描述方法,即構(gòu)造類型:由若干基本類型數(shù)據(jù)按一定的規(guī)則構(gòu)成復(fù)雜數(shù)據(jù)對象。如數(shù)組類型。構(gòu)造數(shù)據(jù)類型的引入,使我們能較方便地解決上面的問題。第7章 數(shù)組2022-3-23語言程序設(shè)計教程3
2、2.數(shù)組的概念數(shù)組:具有相同類型的數(shù)據(jù)組成的序列,是有序集合。數(shù)組中的每一個數(shù)據(jù)稱數(shù)組元素數(shù)組分量下標(biāo)變量注意注意:數(shù)組元素有序不是指元素大小順序數(shù)組元素有序不是指元素大小順序 第7章 數(shù)組2022-3-23語言程序設(shè)計教程47.1 7.1 一維數(shù)組一維數(shù)組7.1.1 一維數(shù)組的定義一維數(shù)組一維數(shù)組:只有一個下標(biāo)的數(shù)組。定義格式定義格式 : 存儲類別 類型標(biāo)識符 數(shù)組名元素個數(shù);說明:說明:1.存儲類別存儲類別:說明數(shù)組的存儲屬性,即數(shù)組的作用域與生成期,可以是靜態(tài)型(static),自動型(auto)及外部型(extern)。當(dāng)使用auto型時可以省略。 2.類型標(biāo)識符類型標(biāo)識符:數(shù)組元素的
3、類型。3.數(shù)組名的命名規(guī)則數(shù)組名的命名規(guī)則:與標(biāo)識符的命名規(guī)則相同。4.數(shù)組數(shù)組“元素個數(shù)元素個數(shù)”:即數(shù)組長度,只能是一個整型常量表達式??梢允欠柍A俊5?章 數(shù)組2022-3-23語言程序設(shè)計教程5 定義了一個自動型整型數(shù)組: 數(shù)組的元素為整型;數(shù)組名為數(shù)組的元素為整型;數(shù)組名為a a;元素個數(shù)為元素個數(shù)為5 5; 下面是合法的數(shù)組定義: char str20; /* 定義一個有20個元素的字符型數(shù)組str */ float score8;/* 定義一個有8個元素的浮點型數(shù)組score */ #define N 5long dataN; /* 定義一個有5個元素的長整型數(shù)組data */
4、short z4*N; /* 定義了一個有20個元素的短整型數(shù)組z */其中其中的數(shù)組長度使用的是符號常量的數(shù)組長度使用的是符號常量 下面的定義是非法的: int n=10; char cn; /*數(shù)組長度不能使用變量 */第7章 數(shù)組2022-3-23語言程序設(shè)計教程6:int student35;char name20;float score35; #define student 35float n_studentstudent;int score_studentstudent*3; int person(10); int n=10, an;第7章 數(shù)組2022-3-23語言程序設(shè)計教程7
5、a5=80;a2.5=60; ?定義了數(shù)組以后,就可使用它了。但不能利用數(shù)組名來整體引用一個數(shù)組但不能利用數(shù)組名來整體引用一個數(shù)組, ,只能只能單個的使用數(shù)組元素。單個的使用數(shù)組元素。數(shù)組元素的描述 : 由 數(shù)組名加方括號中的下標(biāo) 組成, 即:數(shù)組名數(shù)組名 下標(biāo)下標(biāo) 下下 標(biāo):標(biāo):數(shù)組元素在數(shù)組中的順序號,使用整序型表達式。取值范圍取值范圍:從0到元素個數(shù)。 C語言不對下語言不對下標(biāo)越界作語法檢查標(biāo)越界作語法檢查。 若有定義: int a5; 則數(shù)組a的元素分別為: a0、a1、a2、a3、a4;但a5不是。 每個元素都可作為一個整型變量來使用。 如: a0=5;a3=a1+4;aD-B=3;
6、scanf(“%d”,&a4);第7章 數(shù)組2022-3-23語言程序設(shè)計教程8定義了數(shù)組以后,就可使用它了。但不能利用數(shù)組名來整體引用一個數(shù)組但不能利用數(shù)組名來整體引用一個數(shù)組, ,只能單個的使用數(shù)組元只能單個的使用數(shù)組元素素數(shù)組元素的描述數(shù)組元素的描述 : 由 數(shù)組名加方括號中的下標(biāo) 組成,即: 數(shù)組名數(shù)組名 下標(biāo)下標(biāo) 下下 標(biāo):標(biāo):數(shù)組元素在數(shù)組中的順序號,使用整序型表達式。取值范圍取值范圍:從0到元素個數(shù)。 C語言不對下標(biāo)越界作語法檢查語言不對下標(biāo)越界作語法檢查。若有定義: int a5;則數(shù)組a的元素分別為: a0、a1、a2、a3、a4;但a5不是。每個元素都可作為一個整型變量來使
7、用。 如:a0=5;a3=a1+4;aD-B=3;scanf(“%d”,&a4);a5=80;a2.5=60; ?第7章 數(shù)組2022-3-23語言程序設(shè)計教程9#include main() int n,a15; for(n=0;n=0;n-) printf(“%4d”,an);輸入:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 輸出:15 14 13 12 11 10 9 8 7 6 5 4 3 2 1問:不用數(shù)組能否完成,如何實現(xiàn)?假設(shè)是1000個數(shù)據(jù)呢?: 1. 循環(huán)控制變量的初值、終值及控制條件。 2.不能整體輸入/出數(shù)組 如:printf(“%d”,a);
8、學(xué)會如何對數(shù)組進行輸入輸出學(xué)會如何對數(shù)組進行輸入輸出第7章 數(shù)組2022-3-23語言程序設(shè)計教程10 數(shù)組變量 在內(nèi)存中分配一片連續(xù)的存儲單元,數(shù)組元素按數(shù)組下標(biāo)從小到大連續(xù)存放。a代表首地址(數(shù)組起始地址),每個元素字節(jié)數(shù)相同,因此,根據(jù)數(shù)組元素序號可以求得數(shù)組各元素在內(nèi)存的地址,并可對數(shù)組元素進行隨機存取。 數(shù)組元素地址數(shù)組元素地址=數(shù)組首地址+元素下標(biāo)*sizeof(數(shù)組類型) 例 int a5; 設(shè)a的首地址為1000,數(shù)組a存儲示意圖如右圖所示1006a0a1a2a3a4內(nèi)存1000 a3的地址=1000+32=1006第7章 數(shù)組2022-3-23語言程序設(shè)計教程11:在定義數(shù)組
9、的同時,對數(shù)組各元素指定初值。 初始化是 編譯階段完成。:用賦值語句或輸入語句也可給數(shù)組素指定初值,是在運行時完成。初始化數(shù)組格式:初始化數(shù)組格式: static =; 或或 = ;說明:說明: 是用逗號分隔的數(shù)組元素的初始值是用逗號分隔的數(shù)組元素的初始值(常量)。常量)。 中數(shù)值的類型必須與中數(shù)值的類型必須與一致。一致。第7章 數(shù)組2022-3-23語言程序設(shè)計教程12 若不對auto數(shù)組進行初始化,則其初值是不可知的。 若一個static或外部數(shù)組未進行初始化,則對數(shù)值型數(shù)組元素,初值為0,而對字符型數(shù)組元素,初值為空字符0.對數(shù)組初始化的幾種方法: 在定義數(shù)組時,對數(shù)組元素賦予初值。 例
10、:int a5=0,1,2,3,4; 在定義數(shù)組時,對部分?jǐn)?shù)組元素賦予初值。 例:int a5=1,2; 等價 a0=1,a1=2; 其它賦0 對全部數(shù)組元素賦初值時,可省數(shù)組長度,系統(tǒng)自動確定。 例:int a =0,1, 2,3,4 ;等價于 int a5=0,1,2,3,4;a0a1a2a3a401234初始化第7章 數(shù)組2022-3-23語言程序設(shè)計教程13例7.2 數(shù)組初始化與未初始化比較#include main()int i,a5=3,4,5,b5; printf(“narray a is:”) for(i=0;i5;i+) printf(“%6d”,ai); printf(“n
11、array b is:”) for(i=0;i5;i+) printf(“%6d”,bi); 運行結(jié)果: array a is:3 4 5 0 0 array b is:-32 1398 40 1170 454考慮:數(shù)組b 的值的含義?第7章 數(shù)組2022-3-23語言程序設(shè)計教程14#define N 5#include main( ) int i,j,k, max,min; static int a5; for (i=0;i5;i+) scanf(%d,&ai); max=min=a0; /*假定第一個元素既是最大的,也是最小的假定第一個元素既是最大的,也是最小的*/ j=k=0; /*對
12、分別記錄最大,最小元素下標(biāo)的變量對分別記錄最大,最小元素下標(biāo)的變量j,k初始化初始化 */ for (i=0;i5;i+) if (maxai) min=ai;k=i; printf(max:a%d=%d,min:a%d=%d,j,max,k,min); 若輸入若輸入: 8 2 312 0 -10 輸出為輸出為: max:a2=312,min:a4=-10 第7章 數(shù)組2022-3-23語言程序設(shè)計教程15維數(shù)組的定義: 存儲類別存儲類別 類型標(biāo)識符類型標(biāo)識符 數(shù)組名數(shù)組名 行數(shù)行數(shù) 列數(shù)列數(shù) ;例:float b53; 定義了一個53的數(shù)組b,即數(shù)組為5行3列,可存放15個實型數(shù)據(jù)。第7章
13、數(shù)組2022-3-23語言程序設(shè)計教程16例:int a23; 定義了一個23的數(shù)組a,即數(shù)組為2行3列,可存放6個整型數(shù)據(jù)。2.2.二維數(shù)組元素的表示形式:二維數(shù)組元素的表示形式: 數(shù)組名下標(biāo)下標(biāo)下標(biāo)稱第一維下標(biāo),下標(biāo)稱第二維下標(biāo)。 二維數(shù)組類似于數(shù)學(xué)中的矩陣 ,由行、列組成。 把所有第一維下標(biāo)相同的元素稱為行,所有第二維下標(biāo)相同的元素稱為列。 數(shù)組a的6個元素如下: a00 a01 a02 a10 a11 a12 第7章 數(shù)組2022-3-23語言程序設(shè)計教程173. 3. 多維數(shù)組的定義多維數(shù)組的定義 根據(jù)二維數(shù)組的定義,我們可以類推出多維數(shù)組的定義。static int b223; /
14、*定義了一個維的靜態(tài)整型數(shù)組*/float c2322; /*定義了一個維浮點型數(shù)組*/ 在數(shù)組定義時,多維數(shù)組的維從左到右第一個稱第一維,第二個稱第二維,依此類推。多維數(shù)組元素的順序仍由下標(biāo)決定。下標(biāo)的變化是先變最右邊的,再依次變化左邊的下標(biāo)。 三維數(shù)組b的12個元素是:b000 b001 b002 b010 b011 b012b100 b101 b102 b110 b111 b112第7章 數(shù)組2022-3-23語言程序設(shè)計教程181.1.二維數(shù)組元素的引用形式:二維數(shù)組元素的引用形式: 數(shù)組名下標(biāo)1下標(biāo)2下標(biāo)稱第一維下標(biāo)(或稱行),下標(biāo)稱第二維下標(biāo)(或稱列)。下標(biāo)從開始變化,其值分別小于
15、數(shù)組定義中的常量表達式與常量表達式。在二維數(shù)組中,一個元素的位置由其下標(biāo)決定。對 float a43;其12個元素是:第 ()行:a00,a01,a02第 ()行:a10,a11,a12第 ()行:a20,a21,a22第 ()行:a30,a31,a32二維數(shù)組的每一個元素都可以作一個變量來使用。如: printf(“%d”,a00); scanf(%d,&a11); a10+=a00+3*a01; 第7章 數(shù)組2022-3-23語言程序設(shè)計教程19例例7.4 7.4 二維數(shù)組輸入輸出二維數(shù)組輸入輸出mainint a23; printf(”nInput array a:”); for (j=
16、0;j2;j+) for (k=0;k3;k+) scanf(“%d”, &ajk);/*輸入數(shù)據(jù)到二維數(shù)組中輸入數(shù)據(jù)到二維數(shù)組中*/ printf(”nOutput array a:n”); for (j=0;j2;j+) for (k=0;k3;k+) /*循環(huán)三次,輸出一行共三個元素循環(huán)三次,輸出一行共三個元素*/ printf(“%4d”,ajk); printf(“n”); /*輸出一行后換行,再輸出下一行輸出一行后換行,再輸出下一行*/ 輸入:Input array a:1 2 3 4 5 6輸出:Output array a: 1 2 3 4 5 6對二維數(shù)組的輸入輸出多使用二層
17、循環(huán)結(jié)構(gòu)來實現(xiàn)。外層循環(huán)處理各行,對二維數(shù)組的輸入輸出多使用二層循環(huán)結(jié)構(gòu)來實現(xiàn)。外層循環(huán)處理各行,循環(huán)控制變量循環(huán)控制變量j作為數(shù)組元素的第一維下標(biāo);內(nèi)層循環(huán)處理一行的各列元作為數(shù)組元素的第一維下標(biāo);內(nèi)層循環(huán)處理一行的各列元素,循環(huán)控制變量素,循環(huán)控制變量k作為元素的第二維下標(biāo)。作為元素的第二維下標(biāo)。第7章 數(shù)組2022-3-23語言程序設(shè)計教程20 7.2.3 7.2.3 二維數(shù)組的存儲結(jié)構(gòu)二維數(shù)組的存儲結(jié)構(gòu)設(shè)有定義設(shè)有定義 int a23; float b32;int a23; float b32;a00 a01a02a10a11a12第行第行第行B00b01b10b11b20b21第行第
18、行系統(tǒng)為數(shù)組在內(nèi)存中分配一片連續(xù)的內(nèi)存空間,將二維數(shù)組元素按行的順序存儲在所分配的內(nèi)存區(qū)域。數(shù)組a與b的各元素的存儲順序如右圖所示 第7章 數(shù)組2022-3-23語言程序設(shè)計教程21例7.5 從鍵盤上輸入9個整數(shù),保存在二維數(shù)組中,按數(shù)組原來位置輸出第一行和第一列的所有元素。第0行第1行第2行 0列列列分析:1、輸入數(shù)組。2、輸出數(shù)組時要考慮不是所有數(shù)據(jù)都輸出。思考:應(yīng)該輸出的數(shù)據(jù)在位置關(guān)系上有何特點?(關(guān)鍵?。┑?章 數(shù)組2022-3-23語言程序設(shè)計教程22#include #include main()main() int i,j,a33; int i,j,a33; for(i=for(
19、i= 0;i3;i+) /0;i3;i+) /* *輸入數(shù)組輸入數(shù)組* */ /for(j=0;j3;j+)for(j=0;j3;j+) printf(a printf(a%d%d%d%d=,i,j);=,i,j); scanf(%d,&aij; scanf(%d,&aij; for(i=0;i3;i+) / for(i=0;i3;i+) /* *輸出數(shù)組輸出數(shù)組* */ / for (j=0;j3;j+)for (j=0;j3;j+)if(i=1|j=1) printf(%-6d,aij);else printf(%-6c, ); printf(“n”); 運行結(jié)果第7章 數(shù)組2022-3-
20、23語言程序設(shè)計教程23 分行給二維數(shù)組賦初值,每個花括號內(nèi)的數(shù)據(jù)對應(yīng)一行元素。分行給二維數(shù)組賦初值,每個花括號內(nèi)的數(shù)據(jù)對應(yīng)一行元素。 例:例:int a23=1,2,3,2,3,4;int a23=1,2,3,2,3,4; 將所有初值寫在一個花括號內(nèi),順序給各元素賦值。將所有初值寫在一個花括號內(nèi),順序給各元素賦值。 例:例:int a23=1,2,3,2,3,4;int a23=1,2,3,2,3,4;只對部分元素賦值,沒有初值對應(yīng)的元素賦只對部分元素賦值,沒有初值對應(yīng)的元素賦0 0值或空字符(字值或空字符(字符數(shù)組)。符數(shù)組)。 例:例:int a23=1,2,4;int a23=1,2,
21、4;給全部元素賦初值或分行初始化時,可不指定第一維大小,給全部元素賦初值或分行初始化時,可不指定第一維大小,其大小系統(tǒng)可根據(jù)初值數(shù)目與列數(shù)(第二維)自動確定;但其大小系統(tǒng)可根據(jù)初值數(shù)目與列數(shù)(第二維)自動確定;但必須指定第二維的大小。必須指定第二維的大小。例:例:int a3=1,2,3,4,5,6;int a3=1,2,3,4,5,6;int a3=0,0,5;int a3=0,0,5;第一維的大小為多少?第7章 數(shù)組2022-3-23語言程序設(shè)計教程24 例7.6 用如下的33矩陣初始化數(shù)組a33,求矩陣的轉(zhuǎn)置矩陣。123147456258789369轉(zhuǎn)置矩陣:是將原矩陣元素按行列互換形成
22、的矩陣1:轉(zhuǎn)置矩陣是將原矩陣元素按行列互換形成的。123147456258789369:沿主對角線將對稱位置元素互換即可。主對角線第7章 數(shù)組2022-3-23語言程序設(shè)計教程25程序如下:#include #include main()main()int j,k;int j,k; int a33=1,2,3,4,5,6,7,8,9,b33; int a33=1,2,3,4,5,6,7,8,9,b33; for (j=0;j3;j+) for (j=0;j3;j+)for(k=0;k3;k+) bfor(k=0;k3;k+) bj jk k=a=ak kj j; for(j=0;j3;j+)
23、for(j=0;j3;j+)for(k=0;k3;k+)for(k=0;k3;k+)printf(“%6d”,bjk);printf(“%6d”,bjk); printf(“n”); printf(“n”); 第7章 數(shù)組2022-3-23語言程序設(shè)計教程26 1. 1.利用數(shù)組求利用數(shù)組求fiboncacifiboncaci數(shù)列的前數(shù)列的前n n項項例7.7 求求fiboncaci數(shù)列的前數(shù)列的前20項:項: f0=1 f1=1 fi=fi-1+fi-2 (i=2, 3,n)將前將前20項輸出到屏幕上,每行五項。項輸出到屏幕上,每行五項。分析:分析:根據(jù)這個數(shù)列的組成規(guī)律:從第三項開始,每個
24、數(shù)據(jù)根據(jù)這個數(shù)列的組成規(guī)律:從第三項開始,每個數(shù)據(jù)項的值為前兩個數(shù)據(jù)項的和,采用遞推方法來實現(xiàn)??梢杂庙椀闹禐榍皟蓚€數(shù)據(jù)項的和,采用遞推方法來實現(xiàn)??梢杂靡粋€一維整型數(shù)組一個一維整型數(shù)組fib 20來保存這個數(shù)列的前來保存這個數(shù)列的前20項。項。第7章 數(shù)組2022-3-23語言程序設(shè)計教程27#include #include main() int i,fib20;fib0=1;fib1=1;for(i=2; i=19;i+) fibi= fibi-1+ fibi-2;printf( Fibonaci Numbers are:n);for(i=0;i20;i+) if (i%5=0)prin
25、tf(n); printf(%7d,fibi); getch();Fibonaci Numbers are: 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765第7章 數(shù)組2022-3-23語言程序設(shè)計教程282. 2.利用數(shù)組處理批量數(shù)據(jù)利用數(shù)組處理批量數(shù)據(jù)例例7.87.8 從鍵盤上輸入若干學(xué)生(不超過100人)的成績,計算平均成績,并輸出高于平均分的人數(shù)及成績。輸入成績?yōu)樨?fù)時結(jié)束。 分析:根據(jù)題意,可以定義一個有100個元素的一維數(shù)組score,先將成績輸入到數(shù)組中,并計算平均成績。然后,將數(shù)組中的成績值一個
26、個與平均值比較,輸出高于平均分的成績。 第7章 數(shù)組2022-3-23語言程序設(shè)計教程29程序如下: #include main() float score100,ave,sum=0,x; int i,n=0,count; printf(Input score:); scanf(%f,&x); while (x=0&n=100) sum+=x; scoren+=x; /*輸入的成績保存在數(shù)組score中*/ scanf(%f,&x); ave=sum/n;printf(average= %fn,ave); /*輸出平均分*/第7章 數(shù)組2022-3-23語言程序設(shè)計教程30/*接上頁*/for
27、 (count=0,i=0;iave) printf(%fn,scorei); /*輸出高于平均分的成績*/ count+; /*統(tǒng)計高于平均分成績的人數(shù)*/ if (count%5= =0) printf(“n”); /*每行輸出成績達5個時換行*/ printf(count=%d n,count); /*輸出高于平均分的人數(shù)*/第7章 數(shù)組2022-3-23語言程序設(shè)計教程31基本思想:基本思想:(1)從第個位置到第個位置中選擇出)從第個位置到第個位置中選擇出 最小的一個與第最小的一個與第個位置的數(shù)交換。個位置的數(shù)交換。(2)從第個位置到第個位置中選擇出最小的一個與第)從第個位置到第個位置
28、中選擇出最小的一個與第個位置的數(shù)交換。個位置的數(shù)交換。 (9) 從第個位置到第個位置中選擇出最小的一個與第從第個位置到第個位置中選擇出最小的一個與第個位置的數(shù)交換。個位置的數(shù)交換。第7章 數(shù)組2022-3-23語言程序設(shè)計教程32 第7章 數(shù)組2022-3-23語言程序設(shè)計教程33#include main()int I,j,t,a10;for(I=0;I10;I+) scanf(“%d”,&aI);/*輸入數(shù)據(jù)到數(shù)組*/內(nèi)循環(huán):在(I,10)內(nèi)選擇最小數(shù)外循環(huán):控制選擇的次數(shù)for(I=0;I9;I+)for(j=I+1;jaj)t=aI;aI=aj;aj=t;printf(“n”);for
29、(I=0;I10;I+)printf(“%6d”,aI);/*輸出排序后的數(shù)據(jù)*/第7章 數(shù)組2022-3-23語言程序設(shè)計教程34從程序可知:從程序可知:1.程序使用兩重循環(huán)來實現(xiàn)排序。程序使用兩重循環(huán)來實現(xiàn)排序。2.外循環(huán)控制排序趟數(shù)。若數(shù)組有外循環(huán)控制排序趟數(shù)。若數(shù)組有N個元素,則共個元素,則共進行進行N-1趟排序。第一趟,趟排序。第一趟,I=;第二趟,;第二趟,I=,3.內(nèi)循環(huán)完成在內(nèi)循環(huán)完成在I,的區(qū)間內(nèi)選擇最小數(shù)。比較的區(qū)間內(nèi)選擇最小數(shù)。比較次數(shù)隨趟數(shù)增大而減少。次數(shù)隨趟數(shù)增大而減少。4.在每一趟選擇中,當(dāng)后面元素較小時,馬上進行在每一趟選擇中,當(dāng)后面元素較小時,馬上進行交換。而這
30、種交換是不必要的。事實上,交換。而這種交換是不必要的。事實上,只要只要記住較小元素的位置,即下標(biāo),在內(nèi)循結(jié)束后記住較小元素的位置,即下標(biāo),在內(nèi)循結(jié)束后做一次交換即可做一次交換即可,這樣可大大節(jié)省程序運行時,這樣可大大節(jié)省程序運行時間。間。第7章 數(shù)組2022-3-23語言程序設(shè)計教程35改進排序過程如下: 第7章 數(shù)組2022-3-23語言程序設(shè)計教程36#include main()int I,j,k,a10;for(I=0;I10;I+) scanf(“%d”,&aI);for(I=0;I9;I+)k=I; for(j=I+1;jaj) k=j; if(k!=I)t=aI;aI=ak;ak
31、=t; printf(“n”);for(I=0;Ihighlowhigh的情況,則說明,序列中沒有該數(shù),亦的情況,則說明,序列中沒有該數(shù),亦結(jié)束查找過程。結(jié)束查找過程。 第7章 數(shù)組2022-3-23語言程序設(shè)計教程40程序為:#define M 10#includemain()static int aM=-12,0,6,16,23,56,80,100,110,115; int n,low,mid,high,found; low=0; high=M-1; found=0; printf(Input a number to be searched:); scanf(%d,&n); 第7章 數(shù)組2
32、022-3-23語言程序設(shè)計教程41while(lowamid) low=mid+1; else high=mid-1; if (found=1) printf(The index of %d is %d,n,mid); else printf(There is not %d,n); 輸入輸入:80輸出輸出:The index of 80 is 6第7章 數(shù)組2022-3-23語言程序設(shè)計教程427.4 7.4 字符數(shù)組與字符串字符數(shù)組與字符串7.4.1 字符數(shù)組的定義與初始化字符數(shù)組的定義與初始化1. 1. 字符數(shù)組的定義字符數(shù)組的定義字符數(shù)組:其元素類型為字符類型的數(shù)組,其定義與前面介紹的
33、數(shù)組定義相同。例如: char str40; 定義一個有40個元素的字符數(shù)組,每個元素相當(dāng)于一個字符變量。第7章 數(shù)組2022-3-23語言程序設(shè)計教程432. 2. 字符數(shù)組的初始化字符數(shù)組的初始化方法方法:將字符常量以逗號分隔寫在花括號中:將字符常量以逗號分隔寫在花括號中 在定義字符數(shù)組時進行初始化在定義字符數(shù)組時進行初始化char ch7=s,t,u,d,e,n,t;char ch7=s,t,u,d,e,n,t;在對全部元素指定初值時,可省寫數(shù)組長度。在對全部元素指定初值時,可省寫數(shù)組長度。 char ch=s,t,u,d,e,n,t;char ch=s,t,u,d,e,n,t;第7章
34、數(shù)組2022-3-23語言程序設(shè)計教程447.4.2 7.4.2 字符串的概念及存儲字符串的概念及存儲1. 1.字符串的概念字符串的概念字符串:字符串: 若干有效字符的序列; 可包含轉(zhuǎn)義字符、ASC碼表中的字符;形式為:形式為: 用雙引號括起來的字符序列; 例:I am a student. , Hello a5=; fn。 字符串的結(jié)束標(biāo)志:字符串的結(jié)束標(biāo)志:00。注注:C C語言無字符串類型,字符串是存放在字符數(shù)組中的。語言無字符串類型,字符串是存放在字符數(shù)組中的。第7章 數(shù)組2022-3-23語言程序設(shè)計教程452. 2. 用字符串來直接初始化字符數(shù)組用字符串來直接初始化字符數(shù)組可直接把
35、字符串寫在花括號中來初始化字符數(shù)組可直接把字符串寫在花括號中來初始化字符數(shù)組如:如:char chchar ch=“student”;=“student”;s t u d e n t 0幾點說明:幾點說明: ()字符串結(jié)束標(biāo)志()字符串結(jié)束標(biāo)志0僅用于判斷字符串是否結(jié)束,輸出字符串僅用于判斷字符串是否結(jié)束,輸出字符串時不會輸出。時不會輸出。 ()在對有確定大小的字符數(shù)組用字符串初始化時,數(shù)組長度應(yīng)()在對有確定大小的字符數(shù)組用字符串初始化時,數(shù)組長度應(yīng)大于字符串長度。如:大于字符串長度。如: char s7=char s7=studentstudent;是錯誤的是錯誤的. . ( ()在初始化
36、一個一維字符數(shù)組時,可以省略花括號。如)在初始化一個一維字符數(shù)組時,可以省略花括號。如: : char s8=char s8=studentstudent; ( 4 ( 4 )不能直接將字符串賦值給字符數(shù)組。下面的操作是錯誤的。)不能直接將字符串賦值給字符數(shù)組。下面的操作是錯誤的。 s=”s=”studentstudent”;”;系統(tǒng)將雙撇號括起來的字符依次賦給字符數(shù)組的各個元系統(tǒng)將雙撇號括起來的字符依次賦給字符數(shù)組的各個元 素,素, 并自動在末尾補上字符串結(jié)束標(biāo)志字符并自動在末尾補上字符串結(jié)束標(biāo)志字符00。第7章 數(shù)組2022-3-23語言程序設(shè)計教程467.4.3 字符串的輸入輸出1. 1
37、.字符串的輸出方法字符串的輸出方法(1 1)用)用printfprintf函數(shù)函數(shù)用printf輸出字符串時,要用格式符“%s”,輸出時從數(shù)組的第一個字符開始逐個字符輸出,直到遇到第一個0為止。例:char st15=“I am a boy!”printf(“st=%s,%c,%c”,st,st3,st7);輸出結(jié)果輸出結(jié)果: I am a boy!mb第7章 數(shù)組2022-3-23語言程序設(shè)計教程47例例7.11 7.11 字符串輸出示例字符串輸出示例#includemain() static char str20=”How do you do ?”; int k; printf(“%s”,
38、str); /*輸出str中的字符串*/ for (k=0;strk!=0;k+) printf(“%c”,strk); /*一個一個地輸出字符*/ 輸出結(jié)果為:How do you do ?How do you do ? 使用printf()函數(shù)的%s格式符來輸出字符串,從數(shù)組的第一個字符開始逐個輸出,直到遇到第一個0為止。 使用”%c”格式時,用循環(huán)實現(xiàn)每個元素的輸出。第7章 數(shù)組2022-3-23語言程序設(shè)計教程48(2)用)用puts函數(shù)輸出字符串函數(shù)輸出字符串函數(shù)原型函數(shù)原型:int put(char * str); 調(diào)用格式調(diào)用格式:puts(str); 函數(shù)功能函數(shù)功能:將字符數(shù)
39、組str中包含的字符串或str所指示的字符串輸出,同時將0轉(zhuǎn)換成換行符。 例:char ch=student; puts(ch); puts(Hello); 將字符數(shù)組中包含的字符串輸出,然后再輸出一個換行符。因此,用puts()輸出一行,不必另加換行符n。 函數(shù)puts每次只能輸出一個字符串,而printf可以輸出幾個:printf(%s%s,str1,str2);第7章 數(shù)組2022-3-23語言程序設(shè)計教程49 2. 2. 字符串的輸入字符串的輸入 (1)使用)使用scanf函數(shù)輸入字符串函數(shù)輸入字符串例:例:char st15; sacnf(“%s”,st);但:但:scanf(“%s
40、”,&st);是錯誤的;是錯誤的; 因為因為st就代表了該字符數(shù)組的首地址。就代表了該字符數(shù)組的首地址。注注:輸入時,以:輸入時,以回車回車或或空格空格作為結(jié)束標(biāo)志;作為結(jié)束標(biāo)志;即:用即:用scanf輸入的字符串中不能含有空格。輸入的字符串中不能含有空格。若按如下方法輸入:若按如下方法輸入: How do you do?執(zhí)行語句執(zhí)行語句 : scanf(%s,st) ; 則則s 的內(nèi)容為的內(nèi)容為: How0 使用格式字符串使用格式字符串%s%s時會自動加上結(jié)束標(biāo)志時會自動加上結(jié)束標(biāo)志00。第一個空。第一個空格后的字符沒有輸入格后的字符沒有輸入st st中。中。第7章 數(shù)組2022-3-23語
41、言程序設(shè)計教程50(2)使用函數(shù))使用函數(shù)gets()輸入字符輸入字符 函數(shù)原型:char *gets(char *str); 調(diào)用格式: gets(str); str是一個字符數(shù)組或指針。函數(shù)功能:從鍵盤讀入一個字符串到str中,并自動在末尾加字符串 結(jié)束標(biāo)志符0。輸入字符串時以回車結(jié)束輸入,這種方式可以讀入含空格符的字符串如:如: char s14; gets(s);若輸入的字符串為:若輸入的字符串為: How do you do? 則則s 的內(nèi)容為的內(nèi)容為: How do you do?0第7章 數(shù)組2022-3-23語言程序設(shè)計教程51例例7.12 7.12 字符串輸入輸出示例字符串輸
42、入輸出示例#include main()char s20,s120; scanf(“%s”,s); printf(“%sn”,s); scanf(“%s%s”,s,s1); printf(“s=%s,s1=%s”,s,s1); puts(“n”); gets(s); puts(s);程序運行過程:How do you do?HowHow do you do? s=How,s1=doHow do you do? How do you do?第7章 數(shù)組2022-3-23語言程序設(shè)計教程527.4.4 字符處理函數(shù)語言庫函數(shù)中除了前面用到的庫函數(shù)gets()與puts()之外,還提供了一些常用的庫
43、函數(shù),其函數(shù)原型說明在string.h中1. 字符串拷貝函數(shù):字符串拷貝函數(shù):strcpy()調(diào)用格式:strcpy(d_str,s_str);功 能:將源字符串s_str復(fù)制到目標(biāo)字符數(shù)組d_str中。說 明:d_str的長度應(yīng)不小于s_str的長度,d_str必須寫成數(shù)組名形式。s_str可以是字符串常量或字符數(shù)組名形式。例: char s110,s28=“student”,s36; strcpy(s1,s2); strcpy(s3,okey);將s2中的student賦給s1(連同結(jié)束標(biāo)志0), okey賦給s3;s2的值不變。注意:不能直接使用賦值語句來實現(xiàn)拷貝或賦值。如: s1=s2
44、; s1=“student”;都是不允許的第7章 數(shù)組2022-3-23語言程序設(shè)計教程532.2.字符串連接函數(shù)字符串連接函數(shù)strcat()strcat()調(diào)用格式:調(diào)用格式:strcat(d_str,s_str);strcat(d_str,s_str);功能:功能:將將s_strs_str連同連同00連接到連接到d_strd_str的最后一個字符的最后一個字符(非(非00字符)后面。結(jié)果放在字符)后面。結(jié)果放在d_strd_str中。中。例:例:char s114=“I am a”;char s114=“I am a”;char s25=“boy.”;char s25=“boy.”;st
45、rcat(s1,s2);strcat(s1,s2);連接前:連接前:s1:s1: s2: s2:連接后:連接后:s1s1 I a m a 0b o y . 0I a m a b o y . 0第7章 數(shù)組2022-3-23語言程序設(shè)計教程54 3.3.字符串比較函數(shù)字符串比較函數(shù)strcmp()strcmp()調(diào)用格式:調(diào)用格式:strcmp(str1,str2);功能:功能:若str1=str2,則函數(shù)返回值為0;若str1str2,則函數(shù)返回值為正整數(shù);若str1str2,則函數(shù)值返回為負(fù)整數(shù)。比較規(guī)則:比較規(guī)則:兩個字符串自左至右逐個字符比較,直到出現(xiàn)不同字符或遇到0為止。如字符全部相同
46、,則兩個字符串相等;若出現(xiàn)不同字符,則遇到的第一對不同字符的ASC大者為大。比較兩字符串是否相等一般用以下形式: if (strcmp(str1,str2)=0);而 if(str1=str2);是錯誤的。第7章 數(shù)組2022-3-23語言程序設(shè)計教程554. 字符長度函數(shù)字符長度函數(shù)strlen()調(diào)用格式調(diào)用格式:strlen(字符串);功能功能:求字符串的實際長度即所含字符個數(shù)(不包括0)。例: char str10=“student”;int length,strl;length=strlen(str); (=7)strl=strlen(“very good”); (=9)結(jié)果: le
47、ngth=7 strl=9第7章 數(shù)組2022-3-23語言程序設(shè)計教程56例例7.13 從鍵盤上輸入兩個字符串,若不相等,從鍵盤上輸入兩個字符串,若不相等,將短的字符串連接到長的字符串的末尾并輸出。將短的字符串連接到長的字符串的末尾并輸出。#include#includemain()int len1,len2 char s180,s280; gets(s1);gets(s2); if (strcmp(s1,s2)!=0) if (strlen(s1)strlen(s2) strcat(s1,s2);puts(s1); else strcat(s2,s1);puts(s2); 輸入:you T
48、hank輸出:Thank you 第7章 數(shù)組2022-3-23語言程序設(shè)計教程577.5 數(shù)組作為函數(shù)的參數(shù)數(shù)組作為函數(shù)參數(shù)主要有兩種情況: 數(shù)組元素作為函數(shù)的實參:這種情況與普通變量作實參一樣,是將數(shù)組元素的值傳給形參。形參的變化不會影響實參數(shù)組元素,我們稱這種參數(shù)傳遞方式為“值傳遞”。 數(shù)組名作實參:要求函數(shù)形參是相同類型的數(shù)組或指針,這種方式是把實參數(shù)組的起始地址傳給形參數(shù)組,形參數(shù)組的改變也是對實參數(shù)組的改變,稱這種參數(shù)傳遞方式為“地址傳遞”。第7章 數(shù)組2022-3-23語言程序設(shè)計教程581. 1. 數(shù)組元素做函數(shù)數(shù)組元素做函數(shù)實參實參數(shù)組元素作為函數(shù)實參與簡單變量相同,是將元素
49、的值傳給函數(shù)形參,是單向值傳遞;函數(shù)形參使用簡單變量。 例例7.13 7.13 從鍵盤上輸入兩個字符串,不用字符串函數(shù)從鍵盤上輸入兩個字符串,不用字符串函數(shù)strcmp()strcmp()比較兩者的大小比較兩者的大小分析:分析:(1 1)輸入兩個字符串,分別存放在)輸入兩個字符串,分別存放在str1str1與與str2str2中;中;(2 2)設(shè)計函數(shù))設(shè)計函數(shù)compstr()compstr()比較兩字符,返回比較兩字符,返回ASCII ASCII 碼之差,賦給主碼之差,賦給主函數(shù)的變量函數(shù)的變量flagflag;(3 3)用)用dowhiledowhile循環(huán)依次比較兩個字符串的對應(yīng)字符,
50、結(jié)束循環(huán)依次比較兩個字符串的對應(yīng)字符,結(jié)束的條件是兩字符串至少有一個結(jié)束,或者比較字符不相等。的條件是兩字符串至少有一個結(jié)束,或者比較字符不相等。(4 4)當(dāng)循環(huán)結(jié)束時)當(dāng)循環(huán)結(jié)束時flag flag 的值為的值為0 0或為第一個不相等的字符的或為第一個不相等的字符的ASCIIASCII碼值之差,由此可以判斷出字符串的大小碼值之差,由此可以判斷出字符串的大小 。第7章 數(shù)組2022-3-23語言程序設(shè)計教程59程序如下:程序如下:#include main( )int i,flag; int compstr(char, char ); char str180,str280; gets(str1
51、); gets(str2); i=0; do flag=compstr(str1i,str2i);/*數(shù)組元素作實參*/ i+; while(str1i!=0)&(str2i!=0)&(flag=0); /*只要有一個字符串到了末尾比較結(jié)束*/ 第7章 數(shù)組2022-3-23語言程序設(shè)計教程60 if (flag=0) printf(%s = %s,str1,str2); else if (flag0) printf(%s %s,str1,str2); else printf(%s very good第7章 數(shù)組2022-3-23語言程序設(shè)計教程61數(shù)組名作函數(shù)參數(shù)時形參與實參都應(yīng)使用數(shù)組名,
52、且分別在被調(diào)用函數(shù)與主調(diào)函數(shù)中的說明。實參與形參類型要一致。實參數(shù)組與形參數(shù)組大小可以不一致,形參數(shù)組可不指定大小。 C編譯程序不檢查形參 數(shù)組的大小。(1)在一維形參數(shù)組名后面可只跟一對空方括號。 為在被調(diào)用函數(shù)中處理數(shù)組元素的需要,可另設(shè)一參數(shù)來傳遞數(shù)組元素個數(shù)。如: int lenstr(char str1,int k);/*k為要處理的字符數(shù)*/ (2)對多維數(shù)組而言,形參的第一維可不指定,但其它維必須指定。如: char grade(float score4,int k);k為數(shù)組行數(shù)第7章 數(shù)組2022-3-23語言程序設(shè)計教程62數(shù)組名做函數(shù)參數(shù)時是把實參數(shù)組的起始地址傳給了形參
53、數(shù)組,即:形參數(shù)組與實參數(shù)組對應(yīng)同一段內(nèi)存單元形參數(shù)組與實參數(shù)組對應(yīng)同一段內(nèi)存單元。 利用這個特點,可用數(shù)組返回多個值。例7.13 用冒泡法將10個數(shù)按由小到大排序冒泡法的基本思想:相鄰兩數(shù)比較,若前面數(shù)大,則兩數(shù)交換相鄰兩數(shù)比較,若前面數(shù)大,則兩數(shù)交換位置,直至最后一個元素被處理,最大的元素就位置,直至最后一個元素被處理,最大的元素就“沉沉”到最下到最下面,即在最后一個元素位置。這樣,如有面,即在最后一個元素位置。這樣,如有n n個元素,共進行個元素,共進行n-1n-1輪,每輪讓剩余元素中最大的元素輪,每輪讓剩余元素中最大的元素“沉沉”到下面,從而完成排到下面,從而完成排序。序。事實上,事實
54、上, n-1n-1輪是最多的排序輪數(shù),只要在某一輪排序中沒有輪是最多的排序輪數(shù),只要在某一輪排序中沒有進行元素交換,說明已排好序,可以提前退出外循環(huán),結(jié)束排進行元素交換,說明已排好序,可以提前退出外循環(huán),結(jié)束排序。序。第7章 數(shù)組2022-3-23語言程序設(shè)計教程63程序如下:#include#define N 80main()int aN; int i, m; void sort(int b,int k); void print(int b,int k); printf(nInput m(80):); scanf(%d,&m); /*輸入要排序的元素的個數(shù)*/ for (i=0;im;i+) scanf(%d,&ai);/*輸入m個元素到數(shù)組a中 */ sort(a,m); print(a,m); 第7章 數(shù)組2022-3-23語言
溫馨提示
- 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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 設(shè)備維護長效管理制度
- 設(shè)施拱棚園區(qū)管理制度
- 設(shè)計公司財務(wù)管理制度
- 設(shè)計質(zhì)量獎懲管理制度
- 診室安全私密管理制度
- 診所護理中心管理制度
- 診療科目相應(yīng)管理制度
- 豫天公司安全管理制度
- 貨品庫存中心管理制度
- 貨物庫存收納管理制度
- 國開??啤督ㄖ茍D基礎(chǔ)》形考作業(yè)1-4試題及答案
- GA/T 2015-2023芬太尼類藥物專用智能柜通用技術(shù)規(guī)范
- 志愿服務(wù)證明(多模板)
- 《銷售員的角色定位》課件
- 醫(yī)療器械法規(guī)對醫(yī)療器械經(jīng)銷商資質(zhì)的規(guī)定
- 阿森斯失眠評定量表2
- 安全防水知識培訓(xùn)內(nèi)容
- 梨生產(chǎn)技術(shù)規(guī)范
- 紅旗H7汽車說明書
- 勞保鞋管理制度
- GB/T 15622-2023液壓缸試驗方法
評論
0/150
提交評論