




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第七章 數組內容提要(ni rn t yo): 一維數組 二維數組 字符數組 應用舉例共三十五頁回顧(hug) 我們前面使用的數據類型(lixng)都屬于基本類型(lixng)(整型、實型、字符型)其存儲特點是:每個變量單獨存儲,亦稱簡單變量如: x=a ; y1=0; y2=-2*x;個變量之間獨立存放,無任何聯系。共三十五頁構造類型的基本概念 構造類型(lixng):是由基本類型(lixng)構造而成的。 (如數組、結構體、共同體、梅舉型)在C語言中,變量類型(lixng)除了前面介紹的幾種基本類型(lixng)之外,還有另外一些復雜的類型(lixng),合稱為構造類型(lixng)。構造
2、類型的每一個分量是一個變量,它可以是簡單類型或者構造類型。構造類型的分量占用相鄰的存儲空間。共三十五頁數組是構造數據類型之一數組:具有相同類型的,在存儲空間上連續(linx)的一組元素的集合。元素:屬同一數據類型,用數組名和下標來唯一確定合法(hf)標識符表示元素個數 :數組運算符單目運算符優先級(1)左結合不能用( )7.1 一維數組一維數組的定義定義方式: 數據類型 數組名常量表達式; 例 int i=15; int datai; (不能用變量定義數組長度)定義即提供四個方面的信息:名、類型、維數、長度, 從而分配空間。例如:int a10 表示數組名是 ,它是 維數組,數組元素的類型是
3、,數組有 個元素。a整型10一共三十五頁一維數組的引用數組必須先定義,后使用只能逐個引用數組元素,不能一次引用整個數組數組元素表示形式: 數組名下標其中:下標可以(ky)是常量或整型表達式如果數組長度(chngd)為n,則元素的最大下標為n-1注意: 定義數組時用到的“數組名常量表達式” 和引用數組元素時用到的“數組名下標” 是有區別的。例如 int a10; t=a6; 下標從0開始例 int a10; printf(“%d”,a); /* 定義數組長度為10 */* 引用a數組中序號為6的元素。此時6不代表數組長度 */例 int data5; data0、 data1、 data2、 d
4、ata3、 data4;printf(“%dt”,aj);共三十五頁例7.1 數組元素(yun s)的引用#include void main() int i,a10; for (i=0; i=0; i-) printf(%d ,ai); printf(n); 運行結果如下:9 8 7 6 5 4 3 2 1 0 程序使a0到a9的值為09,然后(rnhu)按逆序輸出。數組元素的下標常用循環變量來控制共三十五頁 注意:在一維數組引用(ynyng)過程中要防止下標越界問題。如“int a10”定義的數組a,數組a中不包括a10元素,下標為10已經越界。對于數組下標越界問題,C語言編譯系統不進行檢
5、測,即不進行錯誤報告,只是會造成程序運行結果的錯誤。共三十五頁 C編譯程序(bin y chn x)怎么管理一個數組呢?用連續的內存(ni cn)單元存放各個元素 如:int a5:其內存中存儲為:低地址 高地址 1000 1004 1008 1012 1016 a0 a1 a2 a3 a4每個數據元素占用的字節數,就是基類型的字節數一個元素占4個字節一維數組的存儲 a數組名表示內存首地址,是地址常量共三十五頁一維數組的初始化初始化方式(fngsh) 在定義數組時,為數組元素賦初值(在編譯階段(jidun)使之得到初值) int a5=1,2,3,4,5;等價于:a0=1; a1=2; a2=
6、3; a3=4; a4=5;說明:數組不初始化,其元素值為隨機數如果想使一個數組中全部元素值為0或,可以寫成 : int a10=0; char b5=當全部數組元素賦初值時,可不指定數組長度只給部分數組元素賦初值 int a=1,2,3,4,5,6;編譯系統根據初值個數確定數組長度如 int a5=6,2,3; 等價于: a0=6; a1=2;a2=3; a3=0; a4=0;共三十五頁 如: 1、int a4=1、2、3、4、5、6; 2、int a4; a1=1;a22;a33;a44; 3、int an;數據多于元素個數,且數據間沒用(mi yn)逗號隔開錯錯錯不能使用(shyng)變
7、量下標要從0開始共三十五頁例 數組的初始化#include stdio.hvoid main() int i;int a5=1,2,3,4,5; int b5=1,2,3;int c=1,2,3,4,5;int d5=0; int e5;for(i=0;i5;i+) printf(%d,ai);printf(n); for(i=0;i5;i+) printf(%d,bi);printf(n);for(i=0;i5;i+) printf(%d,ci);printf(n);for(i=0;i5;i+) printf(%d,di);printf(n);for(i=0;i5;i+) printf(%d
8、,ei);printf(n); 12345123001234500000-858993460-858993460-858993460-858993460-858993460 int i, a5=1,2,3,4,5, b5=1,2,3,c=1,2,3,4,5,d5=0, e5;共三十五頁例7.2 用數組求Fibonacci數列(shli)(斐波納契數列)前20個數f0f1f2f3f4f5f19.11f1901452319235#include main() int i; int f20= ; for(i=2;i20;i+) for(i=0;iai+1真假aiai+1輸出a1到an共三十五頁#in
9、clude main() int a11,i,j,t; printf(Input 10 numbers:n); for(i=1;i11;i+) scanf(%d,&ai); printf(n); for(i=1;i=9;i+) for (j=1;jaj+1) t=aj; aj=aj+1; aj+1=t; printf(The sorted numbers:n); for(i=1;i11;i+)printf(%d ,ai);共三十五頁7.2 二維數組及多維數組 二維數組的定義(dngy)定義方式:數據類型數組名常量表達式常量表達式;例 int a34; float b25; int a3,4;
10、行數列數元素(yun s)個數=行數*列數在C語言中,數組的元素還可以是數組,這樣就構成二維數組,所以二維數組可以看成是“數組的數組”。可以用于存放有行有列的數據表格共三十五頁引用二維數組元素的一般(ybn)形式: 數組名 行下標列下標 二維數組的引用(ynyng) 如:int a23; 定義了一個2行3列的二維整型數組a,它的各元素為a00,a01,a02,a10,a11,a12,總共有六個元素。注意: 不要寫成 a1,2,a2-1,2*2-2形式又如:a2-12*2-1 b12=a13/2注意:在使用數組元素時,下標的最大取值。 即注意數組定義和數組元素引用的區別如:int a34; /*
11、 定義a為34的數組 */ 則下標下限值是a00下標上限值是a23共三十五頁例 int a34;a00a01a02a03a10a11a12a13a20a21a22a23每個元素(yun s)ai由包含4個元素的一維數組組成二維數組a是由3個元素(yun s)組成a0a1a2行名二維數組理解: 我們可以把二維數組看作是一種特殊的一維數組:它的元素又是一個一維數組。014523a01a02a03a10a11a00a13a20a21a22a23a1267101189a0a1a2數組元素的存放順序原因:內存是一維的二維數組:按行存放共三十五頁二維數組元素(yun s)的初始化分行初始化: 例 int
12、a23=1,2,3,4,5,6;a00a01a02a10a11a12123456全部初始化按元素(yun s)排列順序初始化 例 int a23=1,2,4;a00a01a02a10a11a12120400部分初始化 例 int a3=1,4,5;a00a01a02a10a11a12100450第一維長度省略初始化 例 int a23=1,2,3,4,5,6;a00a01a02a10a11a12123456全部初始化 例 int a23=1,2,4;a00a01a02a10a11a12124000部分初始化 例 int a3=1,2,3,4,5;a00a01a02a10a11a12123450
13、第一維長度省略初始化第一維的大小按以下規則決定:(1)當初值的個數能被第二維的常量表達式的值除盡時,所得的商就是第一維的大小。(2)當初值的個數不能被第二維的常量表達式的值除盡時,則:第一維的大小=所得的商+1。共三十五頁程序(chngx)舉例例 將二維數組輸入(shr)與輸出#include main() int a33,i,j; for(i=0;i=2;i+) for(j=0;j=2;j+) scanf(%d,&aij); for(i=0;i=2;i+) for(j=0;j=2;j+) printf(%d , aij );printf(n); 一般二維數組的處理用二重循環實現, 用循環變量
14、的值控制數組元素的下標。 #include main() int a33,i,j; for(i=0;i=2;i+) for(j=0;j=2;j+) scanf(%d,&aji); for(i=0;i=2;i+) for(j=0;j=2;j+) printf(%d , aij );printf(n); a00a01a02a10a11a12a21a22a231234567891 2 3 4 5 67 8 91 2 3 7 8 9 4 5 6 1 4 7 2 5 83 6 9共三十五頁算法:1、a數組初始化并輸出2、用二重循環進行(jnxng)轉置 bji=aij3、輸出b數組例7.4 將二維數組行
15、列元素互換,存到另一個(y )數組中(轉置)。a=1 2 34 5 6b=1 42 53 6#include main() int a23=1,2,3,4,5,6; int b32,i,j; printf(array a:n); for(i=0;i=1;i+) for(j=0;j=2;j+) printf(%5d,aij); bji=aij;printf(n); printf(array b:n); for(i=0;i=2;i+) for(j=0;j=1;j+) printf(%5d,bij); printf(n); printf(array b:n); for(j=0;j=2;j+) for
16、(i=0;imax真假max=aijrow=icolum=j輸出:max和row,colum#include main() int a34=1,2,3,4, 9,8,7,6, -10,10,-5,2; int i,j,row=0,colum=0,max; 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);共三十五頁作業(zuy): 7.4 7.6共三十五頁7.3 字符(z f)數組內容提要(ni rn t yo): 字符數組
17、的定義 字符數組的初始化 字符數組的引用 字符串的字符串結束標志 字符數組的輸入與輸出 字符串處理函數 字符數組的應用共三十五頁一、字符(z f)數組的定義用來存放(cnfng)字符數據的數組是字符數組。例 int c10, ch34;在C語言中沒有專門的字符串變量,而是將字符串存入字符數組來處理。用一個一維數組存放一個字符串,每個元素存放一個字符。P142字符數組是數組的一個特殊情況,它的定義方法與前面介紹的類似,引用方法可以與前面介紹的相同,但也有其獨特的引用方法。二、字符數組的初始化逐個字符賦值 P141 7.3.2用字符串常量 P142 7.3.4無字符串變量,用字符數組存放字符串,字
18、符串結束標志:0 例 char ch5=H,e,l,l,o;ch0Hello逐個元素賦值ch1ch2ch3ch4 例 char ch5=B,o,y;ch0Boy00逐個字符賦值ch1ch2ch3ch4 例 char ch6=“Hello”; char ch6=“Hello”; char ch =“Hello”;用字符串常量ch0Helloch1ch2ch3ch40ch5注:以字符串方式賦值時,必須保證數組元素個數字符個數+1。(后面自動加一個0) char a5=“hello”; 例 char fruit7=“Apple”, “Orange”, “Grape”, “Pear”, “Peach”
19、;二維字符數組初始化fruit0fruit1fruit2fruit3fruit4Apple00Orange0Grape00Pear000Peach00例 char c10, ch34; 例 char ch5=“Boy”;ch0Boy00用字符串常量ch1ch2ch3ch4空字符 例 char diamond5=., .,*,.,*,.,*, *, ., ., . ,*,.,*, .,*,., .,*;二維字符數組初始化.*00.*.*0*.*.*.*0.*00diamond0diamond1diamond2diamond3diamond4例 “hello”共5個字符,在內存占6個字節 字符串長
20、度5 h e l l o 0104 101 108 108 111 0內存存放字符ASCII碼值共三十五頁一、字符(z f)數組的定義用來存放(cnfng)字符數據的數組是字符數組。例 char c10, ch34;二、字符數組的初始化逐個字符賦值用字符串常量三、字符數組的引用例: #include void main() char a10=I, , a,m , ,h,a,p,p,y,b10;int i; for (i=0;i10;i+) scanf(%c,&bi); for (i=0;i10;i+) printf(%5ct%5cn,ai,bi);四、字符串的輸入與輸出 逐個字符I/O:(數組
21、元素)%c 整個字符串I/O:(數組)%s例 用%c main() char str5; int i; for(i=0;i5;i+) scanf(“%c”, &stri); for(i=0;i5;i+) printf(“%c”, stri);例 用%s main() char str5; scanf(“%s”, str); printf(“%s”, str);用字符數組名,遇0結束例 #include void main( ) char a =Hello; printf(%s,a); main() char a=h,e,l,0,l,o,0; printf(%s,a);注:如果 字符數組中包含一
22、個以上的0,則遇第一個0時輸出就結束。共三十五頁例 字符串輸入(shr)舉例 P145#include main() char a15,b5,c5; scanf(%s%s%s,a,b,c); printf(a=%snb=%snc=%sn,a,b,c); scanf(%s,a); printf(a=%sn,a);scanf中%s輸入時,遇空格或、tab鍵或回車(hu ch)結束輸出:a=How b=are c=you? a=How運行情況:輸入:How are you?輸入:How are you?運行情況:輸入: How areyou ?輸入: Howareyou?輸出:a=How b=are
23、you c=? a=Howareyou?共三十五頁常用(chn yn)的字符串處理函數格式:puts(字符數組)功能:向顯示器輸出(shch)字符串(輸出(shch)完,換行)說明:字符數組必須以0結束格式:gets(字符數組)功能:從鍵盤輸入一以回車結束的字符串放入字符數組中, 并自動加0說明:輸入串長度應小于字符數組維數例 #include main( ) char string80; printf(“Input a string:”); gets(string); puts(string); 輸入: How are you?輸出: How are you ? 包含在頭文件 string.
24、h 中字符串輸出函數puts字符串輸入函數gets字符串連接函數strcat格式:strcat(字符數組1,字符數組2)功能:把字符數組2連到字符數組1后面返值:返回字符數組1的首地址說明:字符數組1必須足夠大 連接前,兩串均以0結束;連接后,串1的0取消, 新串最后加0字符串拷貝函數strcpy格式:strcpy(字符數組1,字符串2)功能:將字符串2,拷貝到字符數組1中去返值:返回字符數組1的首地址說明:字符數組1必須足夠大 拷貝時0一同拷貝 不能使用賦值語句為一個字符數組賦值#include #include void main() char a25; char b = , c = C+
25、, t = “Visual; strcpy(a, t); strcat(a, b); strcat(a, c); printf(%sn, a);字符串比較函數strcmp格式:strcmp(字符串1,字符串2)功能:比較兩個字符串比較規則:對兩串從左向右逐個字符比較(ASCII碼), 直到遇到不同字符或0為止返值:返回int型整數,a. 若字符串1 字符串2, 返回正整數 (1) c. 若字符串1= 字符串2, 返回零 (0)說明:字符串比較不能用“=”,必須用strcmp字符串長度函數strlen格式:strlen(字符數組)功能:計算字符串長度返值:返回字符串實際長度,不包括0在內例 對于
26、以下字符串,strlen(s)的值為:(1)char s10=A,0,B,C,0,D;(2)char s =“tv0willn”;(3)char s =“x69082n”; 答案:1 3 1共三十五頁#include void main() char str140 , strt221; int j,k; printf(“please input 20 charactersn”); scanf(“%s”, ); printf(“please input 20 charactersn”); scanf(“%s”, ); for ( j=0; str1j!= ;j+); for ( k=0; str
27、t2k!= ;k+) =strt2k; ; =0; printf(“%s”,str1); 習題7.13:以下為不用strcat函數而將兩個字符串中的字符拼接起來(q li)的程序,請補充。str1strt200str1jj+st1j 算法:輸入字符串str1 和str2找到str1的結 束標志0將str2的字符 逐個放入str1 當前位置開始(kish) 的地方共三十五頁例7.9 有三個字符串,找出其中(qzhng)最大者 H o w 0 H e l l o 0 H i g h 0 str0str1str2#include #include main() char string20,str320; int i; for(i=1;i0)strcpy(string,str1); else strcpy(string,str2); if(strcmp(str3,string)0)strcpy(string,str3); printf(n
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 高潛力人才識別-洞察及研究
- 冠心病健康教育內容講課件
- 跨文化運動身體差異-洞察及研究
- 中科大固體廢物的處理與處置課件12固體廢物的最終處置
- 2025屆甘肅省徽縣英語七年級第二學期期末聯考試題含答案
- 江蘇省江都區國際學校2025屆七下英語期中達標測試試題含答案
- 提升團隊合作中的情緒智商技巧
- 便秘的健康教育宣教講課件
- 提高初中生對生物實驗課的興趣與熱情的方法研究
- 統編版語文七年級下冊期末模擬試卷(含解析)
- 2023年宜城市中醫醫院醫護人員招聘筆試題庫及答案解析
- 醫學高級職稱評審答辯報告PPT模板
- 《緩解新入園幼兒焦慮策略的研究》課題結題材料(開題報告、中期報告、結題報告、調查問卷、課題論文)
- 健康生活方式基本的知識講座
- 消防管理檢查評分表
- 制造執行系統SMT MES解決方案
- 高二區域地理 撒哈拉以南的非洲課件
- 數字化精密加工車間項目可行性研究報告建議書
- 2022年《內蒙古自治區建設工程費用定額》取費說明
- Q∕GDW 10799.6-2018 國家電網有限公司電力安全工作規程 第6部分:光伏電站部分
- 寧波市建設工程資料統一用表(2022版)1 通用分冊
評論
0/150
提交評論