C語言程序相關(guān)設(shè)計基礎(chǔ)_第1頁
C語言程序相關(guān)設(shè)計基礎(chǔ)_第2頁
C語言程序相關(guān)設(shè)計基礎(chǔ)_第3頁
C語言程序相關(guān)設(shè)計基礎(chǔ)_第4頁
C語言程序相關(guān)設(shè)計基礎(chǔ)_第5頁
已閱讀5頁,還剩47頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、C語言程序相關(guān)設(shè)計基礎(chǔ)共 53 頁 第 2 2 頁本章要點本章要點1.1.建立數(shù)組的概念;建立數(shù)組的概念;2.2.掌握一維數(shù)組和二維數(shù)組的定義、掌握一維數(shù)組和二維數(shù)組的定義、3.3.4.4.5.5.掌握用數(shù)組進行編程的技術(shù)。掌握用數(shù)組進行編程的技術(shù)。共 53 頁 第 3 3 頁 如何處理一個班學(xué)生的學(xué)習(xí)成績?如何處理一個班學(xué)生的學(xué)習(xí)成績? 一行文字怎樣存儲?一行文字怎樣存儲? 一個矩陣怎樣存儲一個矩陣怎樣存儲 ?.一組具有一組具有相同數(shù)據(jù)類型相同數(shù)據(jù)類型的數(shù)據(jù)的的數(shù)據(jù)的 有序集合有序集合 這些數(shù)據(jù)的特點:這些數(shù)據(jù)的特點:1.1.具有相同的數(shù)據(jù)類型具有相同的數(shù)據(jù)類型 2.2.使用過程中需要保留原

2、始數(shù)據(jù)使用過程中需要保留原始數(shù)據(jù) C C語言為這些數(shù)據(jù)提供了一種構(gòu)造數(shù)據(jù)類型:數(shù)組。語言為這些數(shù)據(jù)提供了一種構(gòu)造數(shù)據(jù)類型:數(shù)組。共 53 頁 第 4 4 頁 數(shù)組數(shù)組是一組有序的、類型相同的數(shù)據(jù)的集合,是一組有序的、類型相同的數(shù)據(jù)的集合,這些數(shù)據(jù)被稱為這些數(shù)據(jù)被稱為數(shù)組的元素數(shù)組的元素。共 53 頁 第 5 5 頁7.2 7.2 一維數(shù)組一維數(shù)組7.2.1 7.2.1 一維數(shù)組的定義和引用一維數(shù)組的定義和引用1.一維數(shù)組的定義一維數(shù)組的定義 類型說明符類型說明符 數(shù)組名數(shù)組名 正整型常量表達式正整型常量表達式 ; ;說明:說明:類型說明符:數(shù)組的類型。類型說明符:數(shù)組的類型。數(shù)組名同變量名命名

3、規(guī)則相同。數(shù)組名同變量名命名規(guī)則相同。常量表達式指明數(shù)組中元素個數(shù),必須大于零。常量表達式指明數(shù)組中元素個數(shù),必須大于零??梢允菙?shù)值常量、符號常量和字符常量??梢允菙?shù)值常量、符號常量和字符常量。例如:例如: float mark100;float mark100; char str200;char str200; int int aa1010;共 53 頁 第 6 6 頁其中:其中:markmark、strstr、a a 是數(shù)組名。是數(shù)組名。 方括號內(nèi)是數(shù)組的方括號內(nèi)是數(shù)組的長度長度。 下標的個數(shù)稱為數(shù)組的下標的個數(shù)稱為數(shù)組的維數(shù)維數(shù),markmark、strstr是一維是一維數(shù)組、數(shù)組、a

4、a是二維數(shù)組。是二維數(shù)組。 數(shù)組的成員稱為數(shù)組數(shù)組的成員稱為數(shù)組元素元素。 數(shù)組元素的類型稱為該數(shù)組的數(shù)組元素的類型稱為該數(shù)組的基類型基類型。數(shù)組。數(shù)組markmark的基類型是的基類型是floatfloat,數(shù)組,數(shù)組strstr的基類型是的基類型是charchar。例如:存儲學(xué)生成績用實型數(shù)組例如:存儲學(xué)生成績用實型數(shù)組 mark100mark100, 存儲一行文字用字符數(shù)組存儲一行文字用字符數(shù)組 str200str200, 存儲一個存儲一個4 4* *6 6的矩陣用二維整型數(shù)組的矩陣用二維整型數(shù)組 a46a46。共 53 頁 第 7 7 頁說明說明: : (1) (1)數(shù)組名后是用方括號

5、而不是圓括號。數(shù)組名后是用方括號而不是圓括號。 (2)(2)數(shù)組定義中的常量表達式表示數(shù)組元素個數(shù)。數(shù)組定義中的常量表達式表示數(shù)組元素個數(shù)。必須是大于必須是大于零的常量。零的常量。 如:如: int a0,d(6); /*錯誤錯誤*/ int b-8; /*錯誤錯誤*/ int c2+3; /*正確正確*/(3) (3) 語言中不允許對數(shù)組的大小作動態(tài)定義。語言中不允許對數(shù)組的大小作動態(tài)定義。 數(shù)組的說明語句必須在可執(zhí)行語句之前。數(shù)組的說明語句必須在可執(zhí)行語句之前。#define N 5int aN;int n;scanf(“%d” , &n ); int an;int n=10,an

6、;共 53 頁 第 8 8 頁2. 一維數(shù)組的引用一維數(shù)組的引用 C 語言規(guī)定,只能引用單個數(shù)組元素,不能一次引用整個數(shù)組。語言規(guī)定,只能引用單個數(shù)組元素,不能一次引用整個數(shù)組。 數(shù)組元素的引用形式:數(shù)組元素的引用形式: 數(shù)組名數(shù)組名 下標下標 如如a3n下標可以是整型常量、整型變量或整型表達式。下標可以是整型常量、整型變量或整型表達式。 如:如: a3= a0 + ai+1; n下標的值是數(shù)組元素的序號,且從下標的值是數(shù)組元素的序號,且從0開始,直到開始,直到n-1. int a10, 說明數(shù)組說明數(shù)組a一共有一共有10個元素,起始值是個元素,起始值是0。數(shù)組數(shù)組a的的10個元素分別是:個元

7、素分別是:a0、a1、a9。注意區(qū)分數(shù)組的定義和數(shù)組元素的引用。注意區(qū)分數(shù)組的定義和數(shù)組元素的引用。n數(shù)組的輸入輸出應(yīng)采用循環(huán)的方法數(shù)組的輸入輸出應(yīng)采用循環(huán)的方法. int a10;int a10; for ( i=0; i10; i+ )for ( i=0; i10; i+ ) scanf(”%scanf(”%d d”, &”, &a ai);i); 下標指出在數(shù)組中第幾個元素共 53 頁 第 9 9 頁數(shù)組中的每個元素在功能上等價于一個一般的變量。數(shù)組中的每個元素在功能上等價于一個一般的變量。例如:例如:輸入輸入100100個學(xué)生成績,并求出總成績。個學(xué)生成績,并求出總成績

8、。l 引用數(shù)組元素的注意事項引用數(shù)組元素的注意事項: :float m100,sum=0;float m100,sum=0;for ( i=0; i100; i+ )for ( i=0; i100; i+ ) scanf(scanf(”%f%f”, &mi);, &mi); sum += mi;sum += mi; 數(shù)組方式數(shù)組方式float x, sum=0;float x, sum=0;for (i=0; i100; i+)for (i=0; i100; i+) scanf(scanf(”%f%f”, &x);, &x); sum += x; sum +=

9、x; 簡單變量簡單變量x xsumsum85m0m1m2m99sumsum828563789063 851488279501482263167950優(yōu)點:優(yōu)點:數(shù)據(jù)重用數(shù)據(jù)重用 數(shù)據(jù)有序數(shù)據(jù)有序共 53 頁 第 1010 頁mark0mark1mark2mark3. . . .mark9986.592.077.552.0. . . .94.02000H2004H2008H200CH。218CH引用數(shù)組元素時,根據(jù)首地址引用數(shù)組元素時,根據(jù)首地址和下標,自動計算出該元素的和下標,自動計算出該元素的實際地址,取出該地址的內(nèi)容實際地址,取出該地址的內(nèi)容進行操作。進行操作。如引用如引用 mark2:(

10、1)計算計算 2000+2* *4=2008(2)取出取出2008的內(nèi)容的內(nèi)容下標與地址的關(guān)系下標與地址的關(guān)系 為下標運算符為下標運算符, , 數(shù)組名、數(shù)組名、數(shù)組元素是兩種不同性質(zhì)的數(shù)據(jù)數(shù)組元素是兩種不同性質(zhì)的數(shù)據(jù)。 數(shù)組名是數(shù)組的首地址,是數(shù)組名是數(shù)組的首地址,是一個地址常量。一個地址常量。 數(shù)組元素則是數(shù)值。數(shù)組元素則是數(shù)值。共 53 頁 第 1111 頁方法:將初值依次寫在花括號方法:將初值依次寫在花括號 內(nèi)。內(nèi)。如:如: int a5= 2 , 4 , 6 , 8 , 10 ;存儲形式:存儲形式:存儲單元存儲單元共 53 頁 第 1212 頁 (1)給數(shù)組中部分元素賦初值,其他元素按

11、零值處理。給數(shù)組中部分元素賦初值,其他元素按零值處理。 如:如: int a9=1,2; 則則 a0= 1, a1= 2, a2a8值全為值全為0。(2) 對數(shù)組元素全部賦值可以不指定長度。 int a=0,1,2,3,5 ;int a=0,1,2,3,5 ;等價于:等價于:int a5=0,1,2,3,5 ;int a5=0,1,2,3,5 ; (4)初值的個數(shù)不能超過數(shù)組總元素的個數(shù))初值的個數(shù)不能超過數(shù)組總元素的個數(shù)。 int a3= 1, 2,3, 4 ; 語法錯語法錯!說明:說明:(3)對數(shù)組中間元素賦值必須指明位置)對數(shù)組中間元素賦值必須指明位置。 int a5= , , 2,3,

12、 4 ; /*對第對第3-5個元素賦初值個元素賦初值*/ 共 53 頁 第 1313 頁為個別元素賦值為個別元素賦值main() char as26; as0=a; .利用循環(huán)為全部元素賦值利用循環(huán)為全部元素賦值main() char as26,ch; for(ch=A;ch=Z;ch+) asch-A=ch; .共 53 頁 第 1414 頁數(shù)組元素輸出數(shù)組元素輸出main() char as26; int i ; for(i=0; i26; i+) printf(%c,&asi); . 數(shù)組元素輸入數(shù)組元素輸入main() char as26; int i ; for(i=0; i

13、26; i+) scanf(%c,&asi); .共 53 頁 第 1515 頁 例例1 1 從鍵盤上輸入從鍵盤上輸入1010個實型數(shù)存入數(shù)組,然個實型數(shù)存入數(shù)組,然 后按輸入順序的逆序輸出這后按輸入順序的逆序輸出這1010個數(shù)。個數(shù)。#include main() float a10; int i; for(i=0 ; i=0 ; i-) printf(%10.2f,ai); 數(shù)組的引用離不開循環(huán)。將數(shù)組的下標作為循環(huán)變量,通過循環(huán),數(shù)組的引用離不開循環(huán)。將數(shù)組的下標作為循環(huán)變量,通過循環(huán),就可以對數(shù)組的所有元素逐個進行處理。就可以對數(shù)組的所有元素逐個進行處理。共 53 頁 第 16

14、16 頁 例例2 2 從鍵盤上輸入從鍵盤上輸入1010個數(shù),求出其中最大值并輸出。個數(shù),求出其中最大值并輸出。#include main() int a10,i,max; for(i=0 ; i10 ; i+) scanf(%d,&ai); max=a0; for(i=1 ; imax) max=ai; printf(max=%dn,max);算法分析算法分析:采用打擂臺的方法采用打擂臺的方法,先把先把10個數(shù)存在數(shù)組中個數(shù)存在數(shù)組中,任意指定某數(shù)為任意指定某數(shù)為擂主擂主,然后擂主依次與其他數(shù)比較然后擂主依次與其他數(shù)比較,若某數(shù)大于擂主若某數(shù)大于擂主,則該數(shù)為擂主。則該數(shù)為擂主。循環(huán)結(jié)

15、束,擂主變量中一定是最大的數(shù)。循環(huán)結(jié)束,擂主變量中一定是最大的數(shù)。指定第指定第1 1個元個元素為擂素為擂主主 共 53 頁 第 1717 頁 例例33從鍵盤上輸入從鍵盤上輸入6個數(shù)存入數(shù)組中,再按輸入順序的逆序存放在個數(shù)存入數(shù)組中,再按輸入順序的逆序存放在該數(shù)組中并輸出。該數(shù)組中并輸出。#include main() int a6,i,j,k,t; for(i=0 ; i6 ; i+) scanf(%d,&ai); k=6/2-1; for(i=0 ; i=k ; i+) j=6-i-1; t=aj; aj=ai; ai=t; for(i=0 ; i6 ; i+) printf(%3d

16、,ai);算法分析算法分析:采用循環(huán)設(shè)計。逆序操作可總結(jié)為:采用循環(huán)設(shè)計。逆序操作可總結(jié)為: ai與與aj進行交換,其中進行交換,其中i=0,1,n/2-1, j=n-i-1程序運行演示程序運行演示3 4 1 5 6 2 a0 a1 a2 a3 a4a5 共 53 頁 第 1818 頁 例例4 4 利用數(shù)組計算斐波那契數(shù)列的前利用數(shù)組計算斐波那契數(shù)列的前2020個數(shù),并以每行個數(shù),并以每行5 5個輸出個輸出。#include int main() int i,f20= 1, 1 ; for( i=2; i20 ;i+) fi=fi-1+fi-2; for( i=0; i20; i+) if(i

17、%5=0) printf(n);printf(%6d,fi ); printf(n); return 0;說明:斐波那契數(shù)列的前兩個數(shù)是說明:斐波那契數(shù)列的前兩個數(shù)是1 1,從第,從第3 3個數(shù)開始,每個數(shù)是前個數(shù)開始,每個數(shù)是前兩個數(shù)之和。即兩個數(shù)之和。即1,1,2,3,5,8,131,1,2,3,5,8,13,滿足關(guān),滿足關(guān)系式:系式:f0=f1=1,fn=f0=f1=1,fn=fn-1+fn-2,2fn-1+fn-2,2 n n 19 19 運行結(jié)果:運行結(jié)果:共 53 頁 第 1919 頁例例5 用冒泡法對數(shù)據(jù)進行由小到大排序。用冒泡法對數(shù)據(jù)進行由小到大排序。方法:將兩個相鄰數(shù)比較,小

18、的調(diào)到前頭。采用兩重循環(huán)。方法:將兩個相鄰數(shù)比較,小的調(diào)到前頭。采用兩重循環(huán)。9 8 8 8 8 8 5 5 5 5 4 4 4 2 2 0 8 9 5 5 5 5 8 4 4 4 5 2 2 4 0 25 5 9 4 4 4 4 8 2 2 2 5 0 0 4 4 4 4 4 9 2 2 2 2 8 0 0 0 5 5 5 52 2 2 2 9 0 0 0 0 8 8 8 8 8 8 80 0 0 0 0 9 9 9 9 9 9 9 9 9 9 9由以上可推知:由以上可推知:6 個數(shù)要比較個數(shù)要比較5趟趟 第一趟中要進行兩兩比較第一趟中要進行兩兩比較5次次 第二趟中比較第二趟中比較 4次次

19、若若 有有n個數(shù),則要進行個數(shù),則要進行n-1趟比較趟比較 第第 i趟比較中要進行趟比較中要進行n-i次兩兩比較。次兩兩比較。共 53 頁 第 2020 頁#include #define N 6 main( ) int aN, i, j, t ; for( i=0; iN; i+) scanf(%d, &ai); for( i=0; iN-1; i+ ) for( j=1; jaj) t=aj-1; aj-1= aj;aj= t ; printf(The sorted numbers: n); for( i=0; iN; i+) printf(%d , ai); n n個數(shù)比較個數(shù)比

20、較n-1n-1趟趟第第i i趟比較趟比較n-in-i次次程序運行演示程序運行演示共 53 頁 第 2121 頁冒泡排序的缺陷:在比較交換的過程中大的數(shù)不能一冒泡排序的缺陷:在比較交換的過程中大的數(shù)不能一次到位,效率低。次到位,效率低。 選擇排序法的基本思想:選擇排序法的基本思想: 以冒泡排序法為基礎(chǔ),在兩兩比較后并不馬上進行交換,而以冒泡排序法為基礎(chǔ),在兩兩比較后并不馬上進行交換,而是在找到最小的數(shù)之后,記住最小數(shù)的位置(數(shù)組中的下標)是在找到最小的數(shù)之后,記住最小數(shù)的位置(數(shù)組中的下標),待一輪比較完畢后,再將最小的數(shù)一次交換到位。,待一輪比較完畢后,再將最小的數(shù)一次交換到位。共 53 頁

21、第 2222 頁3 6 1 9 41 6 3 9 41 3 6 9 41 3 4 9 61 3 4 6 9問題問題 將將 3 3、6 6、1 1、9 9、4 4 從小到大排列。從小到大排列。若有若有N N個數(shù),則需要進行個數(shù),則需要進行N-1N-1輪排序處理。輪排序處理。 第第1 1輪輪排序從排序從1 1N N個數(shù)中找出最小的數(shù),然后將它與第個數(shù)中找出最小的數(shù),然后將它與第1 1個數(shù)交換個數(shù)交換。第。第1 1個數(shù)則是最小的數(shù)。個數(shù)則是最小的數(shù)。第第2 2輪輪排序從排序從2 2N N個數(shù)中找出最小的數(shù),然后將它與第個數(shù)中找出最小的數(shù),然后將它與第2 2個數(shù)交換。第個數(shù)交換。第2 2個數(shù)則是次小的

22、數(shù)。個數(shù)則是次小的數(shù)。 經(jīng)過經(jīng)過 N-1 N-1 輪處理,完成全部輪處理,完成全部N N個數(shù)排序。個數(shù)排序。 編程時使用二重循環(huán)。外循環(huán)控制進行編程時使用二重循環(huán)。外循環(huán)控制進行N-1N-1輪排序,內(nèi)循環(huán)找出輪排序,內(nèi)循環(huán)找出第第 i i 輪的最小值。輪的最小值。共 53 頁 第 2323 頁#include #define N 5main( ) int aN ,i,j,k,t; printf(Input numbers:n); for( i=0; iN; i+) /*輸入數(shù)組元素輸入數(shù)組元素*/ scanf(%d, &ai); for( i=0;iN-1;i+ ) /* 排序排序 *

23、/ k=i; for(j=i+1;jaj) k=j; if(k!=i) t=ai; ai=ak;ak=t; printf(The sorted numbers: n); for( i=0; iN; i+) /*輸出數(shù)組元素輸出數(shù)組元素*/ printf(%d , ai); 程序運行演示程序運行演示共 53 頁 第 2424 頁 定義二維數(shù)組的一般方式:定義二維數(shù)組的一般方式:類型說明符類型說明符 數(shù)組名數(shù)組名 常量表達式常量表達式11常量表達式常量表達式22; 例如例如 int a33 存儲形式存儲形式: 二維數(shù)組在內(nèi)存中二維數(shù)組在內(nèi)存中按行的順序存放按行的順序存放,即先存放,即先存放第一行的

24、元素,再存放第二行的元素。第一行的元素,再存放第二行的元素。 例如例如 float a34; float a34; 7.3 7.3 二維數(shù)組二維數(shù)組7.3.1 二維數(shù)組的定義二維數(shù)組的定義222120121110020100aaaaaaaaaa第一個下標可能取第一個下標可能取值的個數(shù)值的個數(shù)第二個下標可能第二個下標可能取值的個數(shù)取值的個數(shù)共 53 頁 第 2525 頁說明:說明:二維數(shù)組除了維數(shù)比一維數(shù)組多一維外,二維數(shù)組除了維數(shù)比一維數(shù)組多一維外, 其其它性質(zhì)與一維數(shù)組全部類似。它性質(zhì)與一維數(shù)組全部類似。 下面寫法是否正確?下面寫法是否正確? int a03; 用于定義數(shù)組長度的常量表達式的

25、值必須是用于定義數(shù)組長度的常量表達式的值必須是大于大于0的正整數(shù)。的正整數(shù)。 int i=3 , j=4 ; int aij ; 定義數(shù)組元素的個數(shù)必須使用常量表達式,而不能定義數(shù)組元素的個數(shù)必須使用常量表達式,而不能使用變量。使用變量。 共 53 頁 第 2626 頁7.3.2 二維數(shù)組的引用二維數(shù)組的引用 二維數(shù)組的引用二維數(shù)組的引用與引用一維數(shù)組元素一樣,也用與引用一維數(shù)組元素一樣,也用下標法引用二維數(shù)組元素。下標法引用二維數(shù)組元素。 二維數(shù)組元素表示形式:數(shù)組名二維數(shù)組元素表示形式:數(shù)組名下標下標1下標下標2 下標下標1和下標和下標2是整型常量、整型變量或整型表達式是整型常量、整型變量

26、或整型表達式。其編號是從。其編號是從0開始的開始的。 例如:若有例如:若有 int a2*53*4, i=15; 則使用則使用 a3*30, a1i-5都是合法的。都是合法的。說明說明:數(shù)組名:數(shù)組名a代表的是數(shù)組代表的是數(shù)組a在內(nèi)存中的首地址,在內(nèi)存中的首地址, 因此,可以用數(shù)組名因此,可以用數(shù)組名a來代表數(shù)組元來代表數(shù)組元 素素a00的的地址。數(shù)組名是常量,不可對它賦值。地址。數(shù)組名是常量,不可對它賦值。共 53 頁 第 2727 頁一、二維數(shù)組的初始化一、二維數(shù)組的初始化1. 分行給二維數(shù)組賦初值。分行給二維數(shù)組賦初值。如:int a23= 2,3,1,1,2,3;2. 2. 將所有數(shù)據(jù)

27、寫在一個將所有數(shù)據(jù)寫在一個 內(nèi),按順序賦值。內(nèi),按順序賦值。 即按數(shù)組元素在內(nèi)存中排列的順序賦初值。即按數(shù)組元素在內(nèi)存中排列的順序賦初值。 int a23=2,3,1,1,2,3;int a23=2,3,1,1,2,3;二維數(shù)組的初始化和輸入輸出二維數(shù)組的初始化和輸入輸出321132a共 53 頁 第 2828 頁3. 對部分元素賦值對部分元素賦值如: int a33=1,0,1,0,0,1;相當矩陣:1000100011000000014. 如果對數(shù)組全部元素賦初值,第一個下標可省略,但第二個下標不可如果對數(shù)組全部元素賦初值,第一個下標可省略,但第二個下標不可省略。省略。 如: a34=0,

28、1,3,1,2,1,0,2,1,1,2,0; 可寫成 a 4=0,1,3,1,2,1,0,2,1,1,2,0; int a33=1, ,0,0,1;相當矩陣:int a23=5,6,7,8;int a23=5,6,7,8;例得到的數(shù)組為得到的數(shù)組為: 5 6 0 7 8 0得到的數(shù)組為得到的數(shù)組為: 5 6 7 8 0 0共 53 頁 第 2929 頁1. 二維數(shù)組的輸入二維數(shù)組的輸入 int a23,i,j; for( i=0; i2; i+) for( j=0; j3; j+) scanf(%d, &aij);2. 二維數(shù)組的輸出二維數(shù)組的輸出 int a23,i,j; for(

29、i=0; i2; i+) for( j=0; j3; j+) printf(%5d, aij);二、二維數(shù)組的輸入、輸出二、二維數(shù)組的輸入、輸出共 53 頁 第 3030 頁7.3.4 二維數(shù)組程序舉例二維數(shù)組程序舉例例例1 將一個矩陣將一個矩陣a 23轉(zhuǎn)置存到另一個矩陣轉(zhuǎn)置存到另一個矩陣b 32中。中。 635241654321ba,分析:用數(shù)組分析:用數(shù)組a、b分別代表矩陣分別代表矩陣a、b; a 矩陣的行數(shù)必須要等于矩陣的行數(shù)必須要等于b 矩陣的列數(shù)。矩陣的列數(shù)。 執(zhí)行:執(zhí)行:bji=aij; 即可完成轉(zhuǎn)換。即可完成轉(zhuǎn)換。 涉及到兩個下標的,一般用兩重循環(huán)。涉及到兩個下標的,一般用兩重循

30、環(huán)。 求矩陣轉(zhuǎn)置問題也可以在矩陣本身進行,但應(yīng)是方陣。求矩陣轉(zhuǎn)置問題也可以在矩陣本身進行,但應(yīng)是方陣。共 53 頁 第 3131 頁main( ) int a23=1,2,3,4,5,6; int b32, i , j; printf(“array a: n”); for( i=0; i2; i+) for( j=0; j3; j+) printf(%5d, aij); bji=aij; printf(n); printf(array b: n);for(i=0; i3; i+) for( j=0; j2; j+) printf(%5d,bij); printf(n); 運行結(jié)果如下:運行結(jié)果

31、如下: array a: 1 2 3 4 5 6 array b: 1 4 2 5 3 6 共 53 頁 第 3232 頁例例2求方陣求方陣A4*4的轉(zhuǎn)置陣,并將該轉(zhuǎn)置陣輸出的轉(zhuǎn)置陣,并將該轉(zhuǎn)置陣輸出(限定在一個數(shù)組進行限定在一個數(shù)組進行)main( ) int a44,i,j,t; printf(array a: n); for( i=0; i4; i+) for( j=0; j4; j+) scanf(%d, &aij); /*輸入輸入*/ for(i=0;i4-1;i+) /*轉(zhuǎn)置轉(zhuǎn)置*/ for(j=i+1;j4;j+) t=aij;aij=aji;aji=t; printf(

32、“rotated a: n); for(i=0; i4; i+) for( j=0; j4; j+) printf(%4d, aij); /* 輸出輸出 */ printf(n); 程序運行情況:程序運行情況:array a: 2 3 4 6 7 8 10 11 12 14 15 16 rotated a:5 9 13 6 10 147 11 154 8 12 16轉(zhuǎn)置部分還可改寫如下:轉(zhuǎn)置部分還可改寫如下:for(i=1;i4;i+) for(j=0;ji;j+) t=aij;aij=aji;aji=t;二維數(shù)組輸入二維數(shù)組輸入共 53 頁 第 3333 頁程序:main( ) int i,

33、 j, row=0, colum=0, max; int a34=1,2,3,4,9,7,4,6,-1,2,0,8; max=a00; for( i=0; i=2; i+) for(j=0; jmax) max=aij; row=i; colum=j; printf(max=%d,row=%d,colum=%dn,max, row,colum); 運行結(jié)果為: max=9,row=1, colum=0例例3 求求34矩陣中最大元素的值及其所在行和列號。矩陣中最大元素的值及其所在行和列號。802164794321a共 53 頁 第 3434 頁將程序補充完整將程序補充完整:#include st

34、dio.hmain( ) 例例4編寫求整型矩陣編寫求整型矩陣A3*3的副對角線元素之積的程序。的副對角線元素之積的程序。共 53 頁 第 3535 頁7.4 7.4 字符數(shù)組字符數(shù)組7.4.1 7.4.1 一維字符數(shù)組的定義一維字符數(shù)組的定義 用來存放字符數(shù)據(jù)的數(shù)組是用來存放字符數(shù)據(jù)的數(shù)組是字符數(shù)組字符數(shù)組。 C語言用字符數(shù)組語言用字符數(shù)組存放字符串,字符數(shù)組中的各元素依次存放字符串的各字存放字符串,字符數(shù)組中的各元素依次存放字符串的各字符。符。 格式:格式:char char 數(shù)組名數(shù)組名 常量表達式常量表達式 強調(diào):字符串實際占有單元的數(shù)量等于字符串長度強調(diào):字符串實際占有單元的數(shù)量等于字

35、符串長度+1。 定義時應(yīng)注意考慮元素總個數(shù)應(yīng)比實際長度多定義時應(yīng)注意考慮元素總個數(shù)應(yīng)比實際長度多1。例如例如:char c6, b10;C 數(shù)組具有數(shù)組具有6個元素,可以存放長度等于或小于個元素,可以存放長度等于或小于5的字的字符串。符串。共 53 頁 第 3636 頁1.1.用單個字符對字符數(shù)組初始化用單個字符對字符數(shù)組初始化例如:例如:char ch6=char ch6=C C, ,H H, ,I I, ,N N, ,A A,00;把把5 5個字符分別賦給個字符分別賦給ch0ch0到到c4.c4.在內(nèi)存中存放情況:在內(nèi)存中存放情況:7.4.2 7.4.2 一維字符數(shù)組的初始化一維字符數(shù)組的

36、初始化說明:說明:(1 1)初值的個數(shù)不能超過數(shù)組元素的個數(shù),否則語法錯)初值的個數(shù)不能超過數(shù)組元素的個數(shù),否則語法錯 (2) (2) 初值的個數(shù)小于數(shù)組長度,系統(tǒng)自動添入結(jié)束符初值的個數(shù)小于數(shù)組長度,系統(tǒng)自動添入結(jié)束符00 (3) (3) 初值的個數(shù)與數(shù)組元素相等,定義時可省略長度初值的個數(shù)與數(shù)組元素相等,定義時可省略長度 (4) (4) 因字符串常量自動加因字符串常量自動加0,0,因此常人為地在字符數(shù)組后加一個因此常人為地在字符數(shù)組后加一個00。CHINA0c0 c1 c2 c3 c4 c5串長串長=5=5共 53 頁 第 3737 頁2. 2. 用字符串常量對字符數(shù)組初始化:用字符串常量

37、對字符數(shù)組初始化:char ch6=CHINA;char ch6=CHINA;char ch6=CHINA;char ch6=CHINA; / /* * 省略省略 * */ /char ch =CHINA;char ch =CHINA; / /* * 省略長度值省略長度值 * */ / char d12= char d12=How are youHow are you與與char d=char d=H H, ,o o. .w w, , , ,a a, ,r r, ,e e, , , ,y y, ,o o, ,u u, ,00;等價等價將字符串存儲到字符數(shù)組中,字符串和第一個將字符串存儲到字符數(shù)

38、組中,字符串和第一個00構(gòu)構(gòu)成有效字符串。對字符串的操作,就是對字符數(shù)組的成有效字符串。對字符串的操作,就是對字符數(shù)組的操作。但是它和普通字符數(shù)組的操作不同。普通數(shù)組操作。但是它和普通字符數(shù)組的操作不同。普通數(shù)組中的元素是確定的,一般用下標控制循環(huán);而字符串中的元素是確定的,一般用下標控制循環(huán);而字符串使用結(jié)束符使用結(jié)束符00來控制循環(huán)。來控制循環(huán)。共 53 頁 第 3838 頁例如:例如: chara6=chara6=g g, , r r, , e e, , e e, , n n, , 00; char b5= char b5=123123; ; a2= a2=00; ; a5=b1; a5

39、=b1; printf( printf(%cn%cn,a1);,a1); printf( printf(%s%s,a);,a);共 53 頁 第 3939 頁 main() int i; char a3; for (i=0;i3;i+) scanf(%c,&ai); for (i=0;i3;i+) printf(%c,ai); printf(n); 輸入數(shù)據(jù)順序:輸入數(shù)據(jù)順序: dos輸出數(shù)據(jù)順序:輸出數(shù)據(jù)順序: dos1.1.單字符輸入輸出單字符輸入輸出 ( (用格式符用格式符c c或字符輸入函數(shù)或字符輸入函數(shù)) ) char a3; for (i=0;i3;i+) ai=getch

40、ar(); for (i=0;i3;i+) putchar(ai); printf(n); 共 53 頁 第 4040 頁char a7;scanf(%s,a); 2. 2. 字符串整體或部分輸入輸出字符串整體或部分輸入輸出 ( (用格式符用格式符s)s) - -輸入輸出項必須是以字符串的地址形式出現(xiàn);輸入輸出項必須是以字符串的地址形式出現(xiàn); 也可以是字符串常量:也可以是字符串常量: printf ( %sn , abcd ); - -只能輸入不包括空格、只能輸入不包括空格、tt和和nn的字符串;的字符串; -若要輸入空格,用若要輸入空格,用getsgets函數(shù);函數(shù); -數(shù)組名前不加數(shù)組名前

41、不加 & &符號符號。如:如:char a10; scanf(%s,a); printf(%sn,a);輸入:輸入:How are you輸出:輸出: How空格、跳格和回車空格、跳格和回車是輸入數(shù)據(jù)的結(jié)束是輸入數(shù)據(jù)的結(jié)束標志標志.共 53 頁 第 4141 頁n 用用s s輸出字符串時,從輸出項提供的地址開始輸出,直到輸出字符串時,從輸出項提供的地址開始輸出,直到遇到字符串結(jié)束符遇到字符串結(jié)束符 00 為止為止。n 若字符串長度與數(shù)組定義長度相等,則字符串結(jié)束標志無若字符串長度與數(shù)組定義長度相等,則字符串結(jié)束標志無法存儲,輸出字符串后繼續(xù)輸出后續(xù)存儲單元內(nèi)容。法存儲,輸出字符

42、串后繼續(xù)輸出后續(xù)存儲單元內(nèi)容。若若: :char b3= xyz, ,c=H,a10= abcd072; printf(b=%sn,b); printf(c=%cn,c); printf(a=%sn,a); 輸出:輸出: b=xyz c=H a=abcd:共 53 頁 第 4242 頁#include main() int i=0; char s180; printf(Input string s1:n); gets(s1); while(s1i!=0) i+; printf(i=%dn,i);例例: : 求給定字符串的長度。求給定字符串的長度。通常用來通常用來判斷字符判斷字符串的結(jié)束串的結(jié)束

43、共 53 頁 第 4343 頁 strcat strcat 字符串連接字符串連接strcpy strcpy 字符串復(fù)制字符串復(fù)制strcmp strcmp 字符串比較字符串比較strlen strlen 字符串長度字符串長度strlwr strlwr 將字符串中的大寫字符轉(zhuǎn)換為小寫字符將字符串中的大寫字符轉(zhuǎn)換為小寫字符strupr strupr 將字符串中的小寫字符轉(zhuǎn)換為大寫字符將字符串中的小寫字符轉(zhuǎn)換為大寫字符( (使用時注意程序前邊加使用時注意程序前邊加: #include ): #include )C函數(shù)庫中提供一些用來處理字符串的函數(shù):函數(shù)庫中提供一些用來處理字符串的函數(shù): puts

44、輸出字符串輸出字符串 gets 輸入字符串輸入字符串 (使用時注意程序前邊加使用時注意程序前邊加: #include )共 53 頁 第 4444 頁(1) puts(1) puts(字符數(shù)組字符數(shù)組) ) 將一個字符串輸出到終端并換行。將一個字符串輸出到終端并換行。 (2) gets(字符數(shù)組字符數(shù)組) 輸入一個字符串到字符數(shù)組,該輸入一個字符串到字符數(shù)組,該字符數(shù)組的起始地址為該函數(shù)值。字符數(shù)組的起始地址為該函數(shù)值。 可以輸入帶空格的字符串可以輸入帶空格的字符串,用用scanf的的%s格式不行格式不行.main() char str = book ; puts(str); 其作用與其作用與

45、printf(%s,str) 等效等效main() char str12; gets(str); puts(str);輸入:輸入:How are you輸出:輸出:How are you共 53 頁 第 4545 頁(3)strcat(字符數(shù)組字符數(shù)組1,字符數(shù)組,字符數(shù)組2) 連接兩個字符串,把連接兩個字符串,把字符數(shù)組字符數(shù)組2連到字符數(shù)組連到字符數(shù)組1上,該數(shù)值為字符數(shù)組上,該數(shù)值為字符數(shù)組1的地的地址。址。 如:如: char str140= C language ; char str2 = program; printf(%s, strcat( str1, str2); 輸出:輸出:

46、 C language program(4) strcpy(字符數(shù)組字符數(shù)組1,字符數(shù)組,字符數(shù)組2) 將字符數(shù)組將字符數(shù)組2拷貝到拷貝到字符數(shù)組字符數(shù)組1中去。字符數(shù)組中去。字符數(shù)組1的長度應(yīng)大于字符串的長度應(yīng)大于字符串2的的長度。長度。 如:如:char str110, str2 = red flag; strcpy(str1,str2); 不能用賦值形式不能用賦值形式 str1=str2共 53 頁 第 4646 頁(5) strcmp(字符串字符串1,字符串,字符串2) 兩個串的比較;兩個串的比較;2121210)2, 1(strstrstrstrstrstrstrstrstrcmp負

47、整數(shù)正整數(shù)說明:說明:1)確定字符)確定字符串大小的基本規(guī)則:串大小的基本規(guī)則:按照串中對應(yīng)位置字符的按照串中對應(yīng)位置字符的ASCII碼值的大小確定大小。碼值的大小確定大小。 abc b 因為字符因為字符 a abadef 因為字符因為字符 c a2)比較結(jié)果由函數(shù)值帶回(返回兩個字符之差)。)比較結(jié)果由函數(shù)值帶回(返回兩個字符之差)。 例如:例如: if(str1= str2) 錯誤錯誤 if( strcmp(str1,str2) = 0) 正確正確共 53 頁 第 4747 頁(6) strlen(字符數(shù)組字符數(shù)組) 測試字符數(shù)組的長度測試字符數(shù)組的長度(不包括不包括0”); 如:如:char str10= yellow; printf(“%d”, strlen(str); 結(jié)果:結(jié)果: (7) strlwr(字符串字符串) 將大寫字符串變小寫字符串。將大寫字符串變小寫字符串。(8) strupr(字符串字符串) 將小寫

溫馨提示

  • 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

提交評論