版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第7章 數(shù)組,前面所用到的數(shù)據(jù)均為基本類型(整、實(shí)、字符),為了豐富數(shù)據(jù)類型 ,須提供強(qiáng)有力的數(shù)據(jù)表達(dá)方式。C語言提供了一種構(gòu)造類型數(shù)據(jù)由基本類型按某一規(guī)則組合在一起。 其中數(shù)組:同一種(基本)類型按一定順序組合在一起的數(shù)據(jù)類型。,第六章 數(shù)組,構(gòu)造數(shù)據(jù)類型之一 數(shù)組:有序數(shù)據(jù)的集合,用數(shù)組名標(biāo)識(shí) 元素:屬同一數(shù)據(jù)類型,用數(shù)組名和下標(biāo)確定 6.1 一維數(shù)組 一維數(shù)組的定義 定義方式: 數(shù)據(jù)類型 數(shù)組名常量表達(dá)式;,合法標(biāo)識(shí)符,表示元素個(gè)數(shù) 下標(biāo)從0開始, :數(shù)組運(yùn)算符 單目運(yùn)算符 優(yōu)先級(jí)(1) 左結(jié)合 不能用( ),例 int a6;,編譯時(shí)分配連續(xù)內(nèi)存 內(nèi)存字節(jié)數(shù)=數(shù)組維數(shù)* sizeof(
2、元素?cái)?shù)據(jù)類型),數(shù)組名表示內(nèi)存首地址, 是地址常量,一維數(shù)組的引用 數(shù)組必須先定義,后使用 只能逐個(gè)引用數(shù)組元素,不能一次引用整個(gè)數(shù)組 數(shù)組元素表示形式: 數(shù)組名下標(biāo) 其中:下標(biāo)可以是常量或整型表達(dá)式,例 int i=15; int datai; (不能用變量定義數(shù)組維數(shù)),例 int a10; printf(“%d”,a); () 必須 for(j=0;j10;j+) printf(“%dt”,aj); (),例 int data5; data5=10; /C語言對數(shù)組不作越界檢查,使用時(shí)要 注意,一維數(shù)組的初始化 初始化方式,在定義數(shù)組時(shí),為數(shù)組元素賦初值 (在編譯階段使之得到初值),in
3、t a5=1,2,3,4,5; 等價(jià)于:a0=1; a1=2; a2=3; a3=4; a4=5;,說明: 數(shù)組不初始化,其元素值為隨機(jī)數(shù) 對static數(shù)組元素不賦初值,系統(tǒng)會(huì)自動(dòng)賦以0值,當(dāng)全部數(shù)組元素賦初值時(shí),可不指定數(shù)組長度,如 int a5=6,2,3; 等價(jià)于: a0=6; a1=2;a2=3; a3=0; a4=0; 如 int a3=6,2,3,5,1; (),static int a5; 等價(jià)于:a0=0; a1=0; a2=0; a3=0; a4=0;,只給部分?jǐn)?shù)組元素賦初值,int a=1,2,3,4,5,6; 編譯系統(tǒng)根據(jù)初值個(gè)數(shù)確定數(shù)組維數(shù),#define N 6 m
4、ain() int aN,bB-60,c=1,2,3,4,5,6,i; for(i=0;iN;i+) scanf(“%d%d”, ,數(shù)組定義:必須用常量表達(dá)式,數(shù)組元素引用,Ch6_01.c,程序舉例,程序舉例,步驟: 1. 輸入:for循環(huán)輸入10個(gè)整數(shù) 2. 處理: (a) 先令max=min=x0 (b) 依次用xi和max,min比較(循環(huán)) 若maxxi,令min=xi 3. 輸出:max和min,#include #define SIZE 10 main() int xSIZE,i,max,min; printf(Enter 10 integers:n); for(i=0;ixi)
5、 min=xi; printf(Maximum value is %dn,max); printf(Minimum value is %dn,min); ,#include main() int i; int f20=1,1; for(i=2;i20;i+) fi=fi-2+fi-1; for(i=0;i20;i+) if(i%5=0) printf(n); printf(%12d,fi); ,程序舉例,例6_04 求Fibonacci數(shù)列:1,1,2,3,5,8,的前40個(gè)數(shù)。,Ch6_04.c,main() long f1,f2; int i; f1=1; f2=1; for (i=1;i
6、=20;i+) printf(%12ld %12ld,f1,f2) ; if(i%2 =0) printf(n); f1=f1+f2; f2=f2+f1; ,例6_05 用冒泡法對10個(gè)數(shù)排序。,排序過程: (1)比較第一個(gè)數(shù)與第二個(gè)數(shù),若為逆序a0a1,則交換;然 后比較第二個(gè)數(shù)與第三個(gè)數(shù);依次類推,直至第n-1個(gè)數(shù)和第 n個(gè)數(shù)比較為止第一趟冒泡排序,結(jié)果最大的數(shù)被安置在 最后一個(gè)元素位置上 (2)對前n-1個(gè)數(shù)進(jìn)行第二趟冒泡排序,結(jié)果使次大的數(shù)被安置在 第n-1個(gè)元素位置 (3)重復(fù)上述過程,共經(jīng)過n-1趟冒泡排序后,排序結(jié)束,例,38 49 65 76 13 27 30 97,第一趟,3
7、8 49 65 13 27 30 76,第二趟,38 49 13 27 30 65,第三趟,38 13 27 30 49,第四趟,13 27 30 38,第五趟,13 27 30,第六趟,49 38 65 97 76 13 27 30,初始關(guān)鍵字,n=8,13,76,76,76,27,30,13,65,27,65,30,65,13,13,49,49,30,49,27,38,27,38,30,38,13 27,第七趟,38,49,76,97,97,97,97,27,13,27,30,#include main() int a11,i,j,t; printf(Input 10 numbers:n)
8、; for(i=1;iai+1) t=ai; ai=ai+1; ai+1=t; printf(The sorted numbers:n); for(i=1;i11;i+) printf(%d ,ai); ,Ch6_05.c,例6_06 用簡單選擇法對10個(gè)數(shù)排序,排序過程: (1)首先通過n-1次比較,從n個(gè)數(shù)中找出最小的, 將它 與第一個(gè)數(shù)交換第一趟選擇排序,結(jié)果最小的數(shù)被安置 在第一個(gè)元素位置上 (2)再通過n-2次比較,從剩余的n-1個(gè)數(shù)中找出關(guān)鍵字 次小的記錄,將它與第二個(gè)數(shù)交換第二趟選擇排序 (3)重復(fù)上述過程,共經(jīng)過n-1趟排序后,排序結(jié)束,例,初始: 49 38 65 97 76
9、 13 27 ,i=1,13,49,一趟: 13 38 65 97 76 49 27 ,i=2,27,38,六趟: 13 27 38 49 65 76 97 ,Ch6_06.c,#include main() int a10,i,j,k,x; printf(Input 10 numbers:n); for(i=0;i10;i+) scanf(%d, ,例,i=1,初始: 49 38 97 13 65 76 27 ,13,49,i=2,一趟: 13 38 97 49 65 76 27 ,27,38,38,97,三趟: 13 27 38 49 65 76 97 ,改進(jìn)的選擇法,main() int
10、 a11,i,j,k,x; printf(Input 10 numbers:n); for(i=0;i10;i+) scanf(%d, ,改進(jìn)的選擇法,增加標(biāo)識(shí)語句,對不需排序就退出循環(huán)的執(zhí)行。,Ch6_06_1.c,從以上例子可以看到: 用到兩種循環(huán), 第一種冒泡法循環(huán)找第i大的元素;第二 種選擇法循環(huán)對其后的元素的一一比較, 找最小的數(shù)。,流程圖:,Ex01 在C語言中,引用數(shù)組元素時(shí),其數(shù)組下 標(biāo)的數(shù)據(jù)類型允許是。 整型常量 B) 整型表達(dá)式 C) 整型常量或整型表達(dá)式 D) 任何類型的表達(dá)式,學(xué)生練習(xí),Ex02 若有說明:int a10; 則對a數(shù)組元素的正確 引用是。 A) a10
11、B) a3.5 C) a-5 D) a10-10,學(xué)生練習(xí),Ex03 在C語言中,一維數(shù)組的定義方式為: 類型說明符 數(shù)組名; A) 常量表達(dá)式 B) 整型表達(dá)式 C) 數(shù)值型表達(dá)式 D) 任意類型表達(dá)式,學(xué)生練習(xí),Ex04 下面程序以每行4個(gè)數(shù)據(jù)的形式輸出a數(shù)組, 請?zhí)羁铡?#define N 20 main() int aN,i; for (i=0;iN; i+) scanf(%d, 【1】); for (i=0;iN;i+) if (【2】) 【3】 printf(%3d,ai); printf(n); ,學(xué)生練習(xí),Ex05 以下程序的功能是求數(shù)組num中小于零的 數(shù)據(jù)之和。請?zhí)羁铡?m
12、ain() int num20= 10,20,1,-20,203,-21,2,-2,-2,11,-21,22,12,-2,-234,-90,22,90,-45,20; int sum=0,i; for (i=0;i=19;i+) if(【1】) sum=【2】; printf(sum=%6d,sum); ,學(xué)生練習(xí),Ex06 已知某課程的平時(shí)、實(shí)習(xí)、測驗(yàn)和期末成績,求該課程的總評成績。其中平時(shí)、實(shí)習(xí)、測驗(yàn)和期末分別占10、20、20、50。/*功能:從鍵盤上循環(huán)輸入某課程的平時(shí)、實(shí)習(xí)、測驗(yàn)和期末成績,按10,20,20,50的比例計(jì)算總評成績,并在屏幕上顯示出來。按空格鍵繼續(xù)循環(huán),其他鍵終止循
13、環(huán)。*/,學(xué)生練習(xí),#include“stdio.h”main()inti =1,j; char con_key=x20; /* x20 空格鍵的ASCII碼*/ float score5,ratio4=0.1,0.2,0.2,0.5; /*定義成績、比例系數(shù)數(shù)組*/ while(con_key=x20) clrscr(); printf(輸入第%2d個(gè)學(xué)生的成績n, i+); printf(平時(shí) 實(shí)習(xí) 測驗(yàn) 期末成績n); score4=0;/* score4:存儲(chǔ)總評成績*/,for(j=0; j4; j+) scanf(%f, /*getch()函數(shù)等待從鍵盤上輸入一個(gè)字符*/ ,ex0
14、6.c,6.2 二維數(shù)組及多維數(shù)組 二維數(shù)組的定義 定義方式: 數(shù)據(jù)類型數(shù)組名常量表達(dá)式常量表達(dá)式;,數(shù)組元素的存放順序 原因:內(nèi)存是一維的 二維數(shù)組:按行序優(yōu)先 多維數(shù)組:最右下標(biāo)變化最快,例 int a34; float b25; int c234; int a3,4; (),行數(shù),列數(shù),元素個(gè)數(shù)=行數(shù)*列數(shù),二維數(shù)組理解,每個(gè)元素ai由包含4個(gè)元素 的一維數(shù)組組成,二維數(shù)組a是由3個(gè)元素組成,二維數(shù)組元素的引用 形式: 數(shù)組名下標(biāo)下標(biāo) 二維數(shù)組元素的初始化 分行初始化:,按元素排列順序初始化,Ch6_100,例6_07 給一個(gè)2*3的2維數(shù)組各元素賦值,并輸出全部元素的值。,/*功能:從
15、鍵盤上給2*3數(shù)組賦值,并在屏幕上顯示出來。*/,main() int i, j, arrayRowCol; /*定義1個(gè)2行3列的2維數(shù)組array*/ for(i=0; iRow; i+) /*外循環(huán):控制2維數(shù)組的行*/ for(j=0; jCol; j+) /*內(nèi)循環(huán):控制2維數(shù)組的列*/ printf(please input array%2d%2d:,i,j); scanf(%d,/*輸出2維數(shù)組array*/ for(i=0;iRow;i+) for(j=0;jCol;j+) printf(%dt,arrayij); /*將aij的值顯示在屏幕上*/ printf(n); ,程序
16、舉例,程序舉例,例6_08 將二維數(shù)組行列元素互換,存到另一個(gè)數(shù)組中。,程序舉例,例6_09 求二維數(shù)組行列中對角線的元素的和。,main() int i,j,s=0; static int a33=1,2,3,9,8,7, -10,10,-5; clrscr(); for (i=0;i=2; i+) for (j=0; j=2; j+) printf( %4d , aij); if (i=j) s+=aij; printf(n); ,printf(%d,s); ,例6_10 求二維數(shù)組中最大元素值及其行列號(hào)。,#include main() int a34=1,2,3,4, 9,8,7,6,
17、 -10,10,-5,2; int i,j,row=0,colum=0,max; max=a00; for(i=0;imax) max=aij; row=i; colum=j; printf(max=%d,row=%d, colum=%dn,max,row,colum); ,程序舉例,例6_11 讀入下表中值到數(shù)組,分別求各行、各列及表中所有數(shù)之和。,#include main() int x54,i,j; for(i=0;i4;i+) for(j=0;j3;j+) scanf(%d, ,for(i=0;i5;i+) for(j=0;j4;j+) printf(%5dt,xij); print
18、f(n); ,程序舉例,學(xué)生練習(xí),Ex07 請打印出右邊圖形。,Ex 07.c,6.3 字符數(shù)組和字符串 字符數(shù)組 定義,字符數(shù)組的初始化 逐個(gè)字符賦值 用字符串常量 字符數(shù)組的引用,例 char c10, ch34;,例6_12 輸出一個(gè)字符串。,#include main() char c10=I, ,a,m, ,a, ,b,o,y; int i; for(i=0;i10;i+) printf(%c,ci); printf(n); ,字符串 字符串及其結(jié)束標(biāo)志 無字符串變量,用字符數(shù)組處理字符串 字符串結(jié)束標(biāo)志:0,字符串的輸入輸出 逐個(gè)字符I/O: %c 整個(gè)字符串I/O: %s,例6_
19、13 用%c main() char str5; int i; for(i=0;i5;i+) scanf(“%c”, ,例6_14 用%s main() char str5; scanf(“%s”, str); printf(“%s”, str); ,用字符數(shù)組名,不要加 printf(“%s”,a); ,例 main( ) char a =“Hello”; printf(“%s”,a); ,結(jié)果:Hello#-=*,結(jié)果:Hello,用“%s”輸出時(shí),遇0結(jié)束,比較兩種輸出的區(qū)別,main() char a=h,e,l,0,l,o,0; printf(%s,a); ,例6_16,輸出:hel
20、,數(shù)組中有多個(gè)0時(shí), 遇第一個(gè)結(jié)束,main() int i; char a5; scanf(%s,a); for(i=0;i5;i+) printf(%d,ai); ,運(yùn)行情況: (1)若輸入 hel , 正常 (2)若輸入 hell , 正常 (3)若輸入 hello , 用%s 輸出時(shí),會(huì)出現(xiàn)問題,輸入字符串長度數(shù)組維數(shù),例 字符串輸入舉例,#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); ,運(yùn)行情況: 輸入:H
21、ow are you? 輸出:a=How b=are c=you? 輸入:How are you? 輸出:a=How,scanf中%s輸入時(shí),遇空格或回車結(jié)束,運(yùn)行情況: 輸入:How are you?,例 若準(zhǔn)備將字符串“This is a string.”記錄下來, 錯(cuò)誤的輸入語句為: (A)scanf(“%20s”,s); (B)for(k=0;k17;k+) sk=getchar(); (C)while(c=getchar()!=n) sk+=c;,常用的字符串處理函數(shù) 包含在頭文件 string.h,字符串輸出函數(shù)puts 格式:puts(字符數(shù)組) 功能:向顯示器輸出字符串(輸出完
22、,換行) 說明:字符數(shù)組必須以0結(jié)束,字符串輸入函數(shù)gets 格式:gets(字符數(shù)組) 功能:從鍵盤輸入一以回車結(jié)束的字符串放入字符數(shù)組中, 并自動(dòng)加0 說明:輸入串長度應(yīng)小于字符數(shù)組維數(shù),例 #include main( ) char string80; printf(“Input a string:”); gets(string); puts(string); 輸入: How are you? 輸出: How are you ?,字符串連接函數(shù)strcat 格式:strcat(字符數(shù)組1,字符數(shù)組2) 功能:把字符數(shù)組2連到字符數(shù)組1后面 返值:返回字符數(shù)組1的首地址 說明:字符數(shù)組1必
23、須足夠大 連接前,兩串均以0結(jié)束;連接后,串1的0取消, 新串最后加0,字符串拷貝函數(shù)strcpy 格式:strcpy(字符數(shù)組1,字符串2) 功能:將字符串2,拷貝到字符數(shù)組1中去 返值:返回字符數(shù)組1的首地址 說明:字符數(shù)組1必須足夠大 拷貝時(shí)0一同拷貝 不能使用賦值語句為一個(gè)字符數(shù)組賦值,例 char str120,str220; str1=“Hello!”; str2=str1;,(),(),例 strcpy與strcat舉例,#include #include void main() char destination25; char blank = , c= C+, turbo =
24、Turbo; strcpy(destination, turbo); strcat(destination, blank); strcat(destination, c); printf(%sn, destination); ,Turbo C+,字符串比較函數(shù)strcmp 格式:strcmp(字符串1,字符串2) 功能:比較兩個(gè)字符串 比較規(guī)則:對兩串從左向右逐個(gè)字符比較(ASCII碼), 直到遇到不同字符或0為止 返值:返回int型整數(shù),a. 若字符串1 字符串2, 返回正整數(shù) c. 若字符串1= 字符串2, 返回零 說明:字符串比較不能用“=”,必須用strcmp,字符串長度函數(shù)strlen 格式:strlen(字符數(shù)組) 功能:計(jì)算字符串長度 返值:返回字符串實(shí)際長度,不包括0在內(nèi),例 對于以下字符串,strlen(s)的值為: (1)char s10=A,0,B,C,0,D; (
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026遼寧體育產(chǎn)業(yè)集團(tuán)校招試題及答案
- 信息技術(shù)高二《超市物流管理系統(tǒng)》教學(xué)設(shè)計(jì)
- 初中英語寫作中句子語序錯(cuò)誤認(rèn)知診斷與干預(yù)策略課題報(bào)告教學(xué)研究課題報(bào)告
- 2026年未來橋梁設(shè)計(jì)的趨勢與挑戰(zhàn)
- 2026年建筑電氣系統(tǒng)自動(dòng)化的實(shí)現(xiàn)路徑
- 超聲檢查的護(hù)理風(fēng)險(xiǎn)管理與預(yù)防
- 高中地理教學(xué)中人地協(xié)調(diào)觀與可持續(xù)發(fā)展研究教學(xué)研究課題報(bào)告
- 高中物理教學(xué)中學(xué)生科學(xué)精神培養(yǎng)的實(shí)踐研究教學(xué)研究課題報(bào)告
- 初中化學(xué)溶液濃度測定誤差影響因素及實(shí)驗(yàn)優(yōu)化技術(shù)課題報(bào)告教學(xué)研究課題報(bào)告
- 基于情境模擬的初中英語主題復(fù)習(xí)課教學(xué)實(shí)踐研究教學(xué)研究課題報(bào)告
- 大學(xué)《軍事理論》考試題庫及答案解析(10套)
- 急救復(fù)蘇與氣管插管-課件
- 英雄(2024年江蘇南通中考語文試卷散文閱讀試題)
- 氫氣使用管理安全培訓(xùn)
- 保育員培訓(xùn):扎頭發(fā)技巧與實(shí)操
- 2024年延安市市直事業(yè)單位選聘工作人員筆試真題
- 特殊作業(yè)安全管理監(jiān)護(hù)人培訓(xùn)課件
- 成本限額及配置標(biāo)準(zhǔn)
- 2020高職院校教學(xué)能力比賽大學(xué)語文課程實(shí)施報(bào)告(定)
- 化工廠叉車安全操作應(yīng)急預(yù)案
- 長期合作協(xié)議書合同書
評論
0/150
提交評論