程序設(shè)計(jì)基礎(chǔ)(C語(yǔ)言)_第1頁(yè)
程序設(shè)計(jì)基礎(chǔ)(C語(yǔ)言)_第2頁(yè)
程序設(shè)計(jì)基礎(chǔ)(C語(yǔ)言)_第3頁(yè)
程序設(shè)計(jì)基礎(chǔ)(C語(yǔ)言)_第4頁(yè)
程序設(shè)計(jì)基礎(chǔ)(C語(yǔ)言)_第5頁(yè)
已閱讀5頁(yè),還剩68頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、程序設(shè)計(jì)基礎(chǔ)(C語(yǔ)言)程序設(shè)計(jì)基礎(chǔ)(C語(yǔ)言)數(shù)組概念基本概念問(wèn)題的提出? a,b從大到小排序輸出?Programming1 : if (ab) temp=a; a=b; btemp; printf(“%d%dn”,a,b); a,b,c從大到小排序輸出?Programming1 : if (ab) temp=a; a=b; b=temp; if (ac) temp=a; a=c; c=temp; if (bc) temp=b; b=c; c=temp; printf(“%d%d%dn”,a,b,c); a,b,c,d從大到小排序輸出? a,b,從大到小排序輸出?利用數(shù)組可以進(jìn)行數(shù)據(jù)的排序3基本

2、概念問(wèn)題的提出?用變量來(lái)解決:#include main() float cj1,cj2,cj3, cj10; /*定義10個(gè)變量*/ float pj; scanf(“%f”,&cj1); /*輸入10個(gè)數(shù)據(jù)*/ scanf(“%f”,&cj2); scanf(“%f”,&cj10); pj=cj1+cj2+cj10; pj=pj/10; /*求平均值*/ /*打印低于平均成績(jī)的同學(xué)成績(jī)*/ if (cj1pj) printf(“%fn”,cj1); if (cj1pj) printf(“%fn”,cj2); if (cj1pj) printf(“%fn”,cj10); 例2:計(jì)算10個(gè)同學(xué)

3、的成績(jī):計(jì)算平均成績(jī)、打印低于平均成績(jī)的同學(xué)成績(jī)?nèi)绻黾?000個(gè)成績(jī)?4基本概念問(wèn)題的提出?用數(shù)組來(lái)解決:#include main() float cj10; /*定義一個(gè)實(shí)型數(shù)組存放10個(gè)成績(jī)*/ float pj; int i; for (i=0;i10;i+) /*輸入10個(gè)數(shù)據(jù)*/ scanf(%f,&cji); for(i=1,pj=0;i10;i+) /*求平均值*/ pj=pj+cji; pj=pj/10; for (i=0;i10;i+) /*打印低于平均成績(jī)的同學(xué)成就*/ if (cjipj) printf(cj=%d=%fn,i+1,cji); 例2:計(jì)算10個(gè)同學(xué)的成

4、績(jī):計(jì)算平均成績(jī)、打印低于平均成績(jī)的同學(xué)成績(jī)5基本概念問(wèn)題的提出?用數(shù)組解決此類問(wèn)題在程序設(shè)計(jì)中,數(shù)組是十分有用的數(shù)據(jù)類型循環(huán)中使用數(shù)組能更好地發(fā)揮循環(huán)的作用例2:采用數(shù)組和循環(huán)相結(jié)合,循環(huán)變量的值改變某些問(wèn)題不使用數(shù)組就難以解決例1 :優(yōu)點(diǎn)程序簡(jiǎn)潔、思路清楚明了書(shū)寫(xiě)簡(jiǎn)潔,通用性強(qiáng)6基本概念什么是數(shù)組?是一組具有固定數(shù)目的、有序的、類型相同的數(shù)據(jù)的集合是同類型有序數(shù)據(jù)的集合可以為該數(shù)據(jù)集合起一個(gè)名字,稱為數(shù)組名該數(shù)據(jù)集合中的各數(shù)據(jù)項(xiàng)稱為數(shù)組元素,用數(shù)組名和下標(biāo)表示 根據(jù)數(shù)組下標(biāo)的多少,數(shù)組可以分為一維數(shù)組和多維數(shù)組一維只有一個(gè)下標(biāo),例如:cj10二維有兩個(gè)下標(biāo),例如:grade347基本概念什

5、么是數(shù)組?一個(gè)數(shù)組就是一組連續(xù)的內(nèi)存空間,用來(lái)保存數(shù)據(jù),數(shù)組中的每一項(xiàng)稱為一個(gè)元素C語(yǔ)言數(shù)組的特點(diǎn)數(shù)組的個(gè)數(shù)必須確定不允許變動(dòng),但數(shù)組元素的值可以改變數(shù)組元素的類型必須是相同的不允許混合的a0a1a2a3a4DFFODFF2DFF4DFF6DFF8a8基本概念什么是數(shù)組?使用下標(biāo)的優(yōu)點(diǎn)?下標(biāo)唯一確定了元素在數(shù)組中的位置(或者說(shuō)是排列順序)采用數(shù)組名+下標(biāo) 可以準(zhǔn)確訪問(wèn)到數(shù)組中的每一個(gè)元素提示C語(yǔ)言是一個(gè)有趣的語(yǔ)言,它從0開(kāi)始計(jì)數(shù),而不是從1開(kāi)始,所以例題中10個(gè)元素的編號(hào)是從0到9a10 a0 a1 a2 a9數(shù)組名數(shù)組元素名數(shù)組長(zhǎng)度9程序設(shè)計(jì)基礎(chǔ)(C語(yǔ)言)一維數(shù)組一維數(shù)組一維數(shù)組的定義格式:

6、類型說(shuō)明符 數(shù)組名常量表達(dá)式;說(shuō)明:數(shù)據(jù)類型是數(shù)組全體數(shù)組元素的數(shù)據(jù)類型數(shù)組名用標(biāo)識(shí)符表示符合表示服的命名規(guī)則整型常量表達(dá)式代表數(shù)組具有的數(shù)組元素個(gè)數(shù)必須是正的整型常量表達(dá)式,不能出現(xiàn)變量或非整型值提示編譯程序?yàn)閿?shù)組開(kāi)辟連續(xù)的存儲(chǔ)單元,用來(lái)順序存放數(shù)組的各數(shù)組元素用數(shù)組名表示該數(shù)組存儲(chǔ)區(qū)的首地址數(shù)組元素的下標(biāo)一律從0開(kāi)始一維數(shù)組元素按順序存放,其所占字節(jié)數(shù)的計(jì)算公式: 數(shù)組所占總字節(jié)數(shù)=sizeof(type)*size11一維數(shù)組一維數(shù)組的定義 int a5,b5;float c10;說(shuō)明:定義了整型數(shù)組a和 b以及實(shí)型數(shù)組ca和 b的 數(shù)組元素的類型都是intc的 數(shù)組元素的類型都是flo

7、ata數(shù)組有5個(gè)數(shù)組元素,b數(shù)組有5個(gè)數(shù)組元素,c數(shù)組有10個(gè)元素以a5為例a數(shù)組的數(shù)組元素是a0,a1,a2,a3和a4 共5個(gè)數(shù)組元素a數(shù)組元素的下標(biāo)大于等于0,且小于5定義了int型數(shù)組a編譯程序?qū)閍數(shù)組在內(nèi)存中開(kāi)辟5個(gè)連續(xù)的存儲(chǔ)單元(每個(gè)int存儲(chǔ)單元占2個(gè)字節(jié)),用來(lái)存放a數(shù)組的5個(gè)數(shù)組元素a0代表這片存儲(chǔ)區(qū)的第一個(gè)存儲(chǔ)單元數(shù)組名a代表a數(shù)組的首地址,即a0存儲(chǔ)單元的地址ai實(shí)際上代表這片存儲(chǔ)區(qū)序號(hào)為i的存儲(chǔ)單元ai就是一個(gè)帶下標(biāo)的int型變量a數(shù)組是這些int型下標(biāo)變量的集合12一維數(shù)組一維數(shù)組的定義正確的定義方式#define N 5 int aN; /* N是符號(hào)常量,其值為

8、5 */int b2+3; /* 2+3是常量表達(dá)式,其值為5 */int c10;錯(cuò)誤的數(shù)組定義int aj; /* j不是常量 */int x=10,bx; /* ? */int M(4); /* 不能用圓括號(hào)定義數(shù)組 */int n1.0; /* ?*/13一維數(shù)組一維數(shù)組初始化格式說(shuō)明可在 中給出各數(shù)組元素的初值各初值之間用逗號(hào)分開(kāi)把 中的初值依次賦給各數(shù)組元素?cái)?shù)據(jù)類型 數(shù)組名整型常量表達(dá)式=初值1,初值2,;14一維數(shù)組初始化例int num 4= 1,2,3,4;表示把初值1,2,3,4依次賦給num 0, num1, num2 ,num 3相當(dāng)于執(zhí)行如下語(yǔ)句int num 4;

9、num 0=1; num 1=2; num 2=3; num 3=4;提示初始化的數(shù)據(jù)個(gè)數(shù)不能超過(guò)數(shù)組元素的個(gè)數(shù),否則出錯(cuò)例如:int a4=1,2,3,4,5;是錯(cuò)誤的一維數(shù)組15一維數(shù)組一維數(shù)組初始化對(duì)數(shù)組的部分元素賦初值例int num5=1,2,3 ;numnum0 num1 num2 num3 num4 1 2 3 0 0該語(yǔ)句執(zhí)行:num0=1;num1=2;num2=3;num3=0;num4=0; 16一維數(shù)組一維數(shù)組初始化提示初始化的數(shù)據(jù)個(gè)數(shù)不能超過(guò)數(shù)組元素的個(gè)數(shù),可以少于數(shù)組元素的個(gè)數(shù) 數(shù)組的元素不能自動(dòng)初始化采用語(yǔ)句 int cj10=0;將數(shù)組cj的元素初始化為0若數(shù)組

10、元素的個(gè)數(shù)定義省略,則系統(tǒng)根據(jù)初值的個(gè)數(shù)來(lái)確定數(shù)組元素的個(gè)數(shù)例如:int a3=1,2,3;數(shù)組有3個(gè)數(shù)組元素:a0=1,a1=2,a2=3若省略數(shù)組元素個(gè)數(shù)的定義,則初值必須完全給出C 語(yǔ)言編譯系統(tǒng)將自動(dòng)根據(jù)初始化數(shù)據(jù)的個(gè)數(shù)來(lái)確定數(shù)組的長(zhǎng)度17一維數(shù)組數(shù)組的引用數(shù)組引用兩種形式對(duì)整個(gè)數(shù)組的引用只給出數(shù)組名即可對(duì)數(shù)組元素的引用需要給出數(shù)組名下標(biāo)的形式形式: 數(shù)組名 下標(biāo)表達(dá)式 例如 int a5,i=1,j=2,k=4;ak,aj-1,aj+i都是對(duì)a數(shù)組元素的合法引用ak=ai-1+a0;表示a0的值與a2的值求和并賦給a4for(i=0;i5;i+) scanf(%d,&ai); 表示依次

11、為a數(shù)組的5個(gè)元素輸入數(shù)據(jù)18一維數(shù)組數(shù)組的引用提示定義時(shí)整型常量表達(dá)式與引用時(shí)的數(shù)組元素的下標(biāo)表達(dá)式是完全不同的概念數(shù)組定義: int a5; 整型常量表達(dá)式5表示a數(shù)組有5個(gè)數(shù)組元素?cái)?shù)組元素的引用a2=a1+a5; 下標(biāo)表達(dá)式2和1均表示數(shù)組元素的下標(biāo)a5是錯(cuò)誤的數(shù)組元素引用,因?yàn)橄聵?biāo)從0開(kāi)始,所以數(shù)組元素的下標(biāo)小于5,下標(biāo)已經(jīng)越界系統(tǒng)不檢查數(shù)組元素下標(biāo)是否越界只能由編程者自己掌握下標(biāo)越界會(huì)破壞其它變量的值編程時(shí)一定要保證數(shù)組元素下標(biāo)不越界19問(wèn)題1: int a2; scanf(“%d%d”, &a1,&a2); ? 錯(cuò)誤: 在C語(yǔ)言中數(shù)組元素的下標(biāo)由 0開(kāi)始,一個(gè)數(shù)組的下標(biāo)的合法范圍在

12、0n-1,因此該題正確的寫(xiě)法是: int a2; scanf(“%d%d”, &a0,&a1);錯(cuò)誤: 數(shù)組元素是通過(guò)數(shù)組名下標(biāo)來(lái)訪問(wèn)的,其中下標(biāo)必須是大于0的整數(shù)、整型變量或整型表達(dá)式,在這段程序中,i是浮點(diǎn)數(shù),不能做數(shù)組元素的下標(biāo)。問(wèn)題2:int a10; float i=3; ai=10; ?一維數(shù)組20一維數(shù)組一維數(shù)組的操作數(shù)組只是一種便于實(shí)現(xiàn)算法的數(shù)據(jù)結(jié)構(gòu),如何使用它解決實(shí)際問(wèn)題才是實(shí)質(zhì)在程序設(shè)計(jì)中常使用數(shù)組,很多算法也是建立在數(shù)組和循環(huán)之上由于數(shù)組元素具有相同的性質(zhì)處理他們往往需要重復(fù)操作,因此數(shù)組操作離不開(kāi)循環(huán)結(jié)構(gòu)數(shù)組與循環(huán)總是聯(lián)系在一起的21一維數(shù)組一維數(shù)組的操作例:在數(shù)組中查

13、找和X相同的元素的位置,如果找到打印元素的位置,如果未找到則打印信息(假定數(shù)組中的元素互不相同)。#include#define SIZE 10main()int aSIZE=1,2,35,6,39,47,53,4,5,10; int i,x; printf(“please enter a x:n”); scanf(“%d”,&x); for (i=0;i=SIZE-1;i+) if(ai = x)break; if (i SIZE) printf(“%d,poster is %dn”,x,i); else printf(“no find %d n”,x); 22一維數(shù)組一維數(shù)組的操作例:已知

14、一維數(shù)組中存放10個(gè)互不相同的整數(shù),從鍵盤(pán)輸入一個(gè)數(shù),并從數(shù)組中刪除與該值相同的元素中的值。#include#define SIZE 10main()int aSIZE=1,2,35,6,39,47,53,4,5,10; int i,j,x; for (i=0;iSIZE;i+) printf(“%4d”,ai); printf(“please enter a x:n”); scanf(“%d”,&x); for (i=0;iSIZE;i+) if(ai= =x)break; for (j=i;jSIZE-1;j+) aj=aj+1; for (i=0;iSIZE-1;i+) printf(“

15、%4d”;ai); printf(“n”); 說(shuō)明:做刪除操作時(shí),首先要找到刪除元素的位置,找到后,立即用break語(yǔ)句推出循環(huán)并進(jìn)行刪除操作,刪除操作實(shí)質(zhì)是把一些數(shù)組元素向前移動(dòng)一位。最后一位的刪除不必移位,直接輸出前size-1位。23一維數(shù)組一維數(shù)組的操作例:編寫(xiě)程序求10個(gè)數(shù)中的最大值和最小值以及求10個(gè)數(shù)中的最大值和最小值的位置#define N 10main ( ) int aN,k,max,min; for ( k=0; kN; k+ ) /* 將N個(gè)數(shù)輸入到a數(shù)組中 */ scanf(%d,&ak); max=a0; for ( k=1; kN; k+ ) /* 依次比較各數(shù),

16、找出最大值max */ if ( maxak ) max=ak; min=a0; for ( k=1; kak ) min=ak; printf (max=%d,min=%dn,max,min); 求10個(gè)數(shù)中的最大值和最小值。把以上求最大值的程序和求最小值的程序按串行方式寫(xiě)入一個(gè)程序中。程序中先求最大值,然后再求最小值24一維數(shù)組一維數(shù)組的操作例:編寫(xiě)程序求10個(gè)數(shù)中的最大值和最小值以及求10個(gè)數(shù)中的最大值和最小值的位置#define N 10#include stdio.hmain ( ) int aN,k,max,min; for(k=0;kN;k+) /* 將N個(gè)數(shù)輸入到a數(shù)組中 */

17、 scanf(%d,&ak); max=min=0; /* 假定最大值和最小值均為a0,記錄它們的下標(biāo)0 */ for ( k=1;kN;k+ ) /* 依次比較各數(shù),找出最大值和最小值的下標(biāo)max、min */ if(amaxak) min=k; /* 找出最小值下標(biāo)min */ printf(max=a%d=%d,min=a%d=%dn,max,amax,min,amin); 在上面程序中必須增加記憶最大值下標(biāo)和最小值下標(biāo)的語(yǔ)句。即每當(dāng)產(chǎn)生一個(gè)最大(?。┲禃r(shí),立即記錄它的下標(biāo)。若最大值下標(biāo)是max,最小值下標(biāo)是min,則amax就是最大值,amin就是最小值25程序設(shè)計(jì)基礎(chǔ)(C語(yǔ)言)二維數(shù)

18、組二維數(shù)組二維數(shù)組的定義需要兩個(gè)下標(biāo)才能識(shí)別某個(gè)元素的數(shù)組稱為“二維數(shù)組”二維數(shù)組可以看作具有行和列的平面數(shù)據(jù)結(jié)構(gòu)如矩陣 格式說(shuō)明數(shù)據(jù)類型是數(shù)組全體數(shù)組元素的數(shù)據(jù)類型數(shù)組名用標(biāo)識(shí)符表示兩個(gè)整型常量表達(dá)式分別代表數(shù)組具有的行數(shù)和列數(shù)數(shù)組元素的下標(biāo)一律從0開(kāi)始例:int array34;類型說(shuō)明符 數(shù)組名常量表達(dá)式1常量表達(dá)式2;27012第0行第1行第2行 0 1 2 3第0列 第1列 第2列 第3列 數(shù)組名行下標(biāo)列下標(biāo) a00 a01 a02 a03 a10 a11 a12 a13 a20 a21 a22 a23 該二維數(shù)組包含三行四列,因此稱為34數(shù)組。數(shù)組中的每一個(gè)元素都用aij的形式表示

19、。所以: 該例中定義了一個(gè)3*4(3行4列)的數(shù)組,我們可以將其視為一個(gè)有3個(gè)元素a0、a1、a2組成的一維數(shù)組,而a0、a1、a2又是包含4個(gè)元素的一維數(shù)組。因此,可以將a0、a1、a2分別看成是三個(gè)一維數(shù)組的名字。二維數(shù)組28二維數(shù)組二維數(shù)組的存放方式在C語(yǔ)言中,二維數(shù)組在內(nèi)存中的存儲(chǔ)是按行存放的a11a12a13a20a21a22a23 a00 a01a02a03a10 a a00 a01. a22 a23二維數(shù)組存儲(chǔ)所占的內(nèi)存字節(jié)數(shù)的計(jì)算公式為:數(shù)組總字節(jié)數(shù)=sizeof(type)*size1*size229二維數(shù)組二維數(shù)組的初始化形式數(shù)據(jù)類型 數(shù)組名整常量表達(dá)式 整常量表達(dá)式= 初

20、始化數(shù)據(jù) ;在 中給出各數(shù)組元素的初值各初值之間用逗號(hào)分開(kāi)把 中的初值依次賦給各數(shù)組元素初始化方式分行進(jìn)行初始化例:int a23=1,2,3,4,5,6;在 內(nèi)部再用 把各行分開(kāi)提示初始化的數(shù)據(jù)個(gè)數(shù)不能超過(guò)數(shù)組元素的個(gè)數(shù),否則出錯(cuò)30二維數(shù)組二維數(shù)組的初始化按二維數(shù)組在內(nèi)存中的排列順序初始化例:int a23= 1,2,3,4,5,6;把 中的數(shù)據(jù)依次賦給a數(shù)組各元素(按行賦值)為部分?jǐn)?shù)組元素初始化例:int a23=1,2,4;省略第一維的定義,但不能省略第二維的定義系統(tǒng)根據(jù)初始化的數(shù)據(jù)個(gè)數(shù)和第2維的長(zhǎng)度可以確定第一維的長(zhǎng)度例:int a 3= 1,2,3,4,5,6;a數(shù)組的第一維的定義

21、被省略,初始化數(shù)據(jù)共6個(gè),第二維的長(zhǎng)度為3,即每行3個(gè)數(shù),所以a數(shù)組的第一維是2省略第一維的定義時(shí),第一維的大小按如下規(guī)則確定:初值個(gè)數(shù)能被第二維整除,所得的商就是第一維的大?。蝗舨荒苷?,則第一維的大小為商再加1例如int a 3= 1,2,3,4;等價(jià)于:int a23= 1,2,3,4; 31二維數(shù)組二維數(shù)組的初始化提示只對(duì)部分?jǐn)?shù)組元素初始化。未被初始化的數(shù)組元素將被編譯系統(tǒng)自動(dòng)清0兩種初始化方法得到的初始結(jié)果是不同的int a23=5,6,7,8;5,6,07,8,0int a23=5,6,7,85,6,78,0,032二維數(shù)組二維數(shù)組的初始化例:一下能夠?qū)ΧS數(shù)組a進(jìn)行正確初始化的語(yǔ)

22、句是:(A)int a2=1,0,1,2,0,2;(B)int a3=1,2,3,4,5,6;(C)int a24=1,2,3,4,5,6;(D)int a3=1,0,1, ,2,3;例:已知 int a3=0,1,2,3,4,5,6 ;則數(shù)組 的第一維的大小是多少?(A) 2 (B) 3 (C) 4 (D)無(wú)確定值33二維數(shù)組二維數(shù)組元素的引用格式 數(shù)組名下標(biāo)1下標(biāo)2;每個(gè)元素同一般變量一樣使用例: int a24 ;a02=a13*4;例:int a23,i=1,j=2,k=0;合法引用aik,aj-1i,a1j+k aik=ai-1j+a1j;錯(cuò)誤引用a23下標(biāo)越界a32,行下標(biāo)越界a1

23、,0 a(1)(2) C語(yǔ)言不進(jìn)行數(shù)組的越界檢查,在引用時(shí)不要使數(shù)組越界34二維數(shù)組二維數(shù)組的操作可以采用循環(huán)(嵌套)結(jié)構(gòu)實(shí)現(xiàn)對(duì)二維數(shù)組的操作例從鍵盤(pán)依次為數(shù)組元素輸入數(shù)據(jù)計(jì)算數(shù)組a24的所有元素之和的操作將數(shù)組a24的第二行的所有元素初始化值為0的操作for(i=0;i2;i+) for(j=0;i3;i+) scanf(%d,&aij); total=0; for (row=0;row=1;row+) for (column=0;column=3;column+) total+=arowcolumn; for(column=0;column=3;column+) a1column=0;35

24、二維數(shù)組【例】:閱讀下列程序,選擇程序的運(yùn)行結(jié)果。 int m33=1,2,3; int n33=1,2,3; main() printf(”%dn”,m10+n00);/*1.結(jié)果*/ printf(”%dn”,m01+n10);/*2.結(jié)果*/ 1.結(jié)果:A)0 B)1 C)2 D)32.結(jié)果:A)0 B)1 C)2 D)336【例】:閱讀下列程序,選擇程序的運(yùn)行結(jié)果。 main() int a66,m,n; for(m=1;m6;m+) for(n=1;n6;n+) amn=(m/n)*(n/m); for(m=1;m6;m+) for(n=1;n6;n+) printf(”%2d”,a

25、mn); printf(”n”); A)1111111111111111111111111B)0000100010001000100010000C)1000001000001000001000001D)1000101010001000101010001二維數(shù)組37二維數(shù)組應(yīng)用例 將一個(gè)二維數(shù)組的每個(gè)元素按逆序存放在另一個(gè)數(shù)組中main() int a23=1,2,3,4,5,6; int b23; int i,j; printf(array a:n); for(i=0;i2;i+) for(j=0;j3;j+) printf(%4d,aij); bi2-j=aij; printf(n); pr

26、intf(array b:n); for(i=0;i2;i+) for (j=0;j3;j+) printf(%4d,bij); printf(n); 關(guān)系: bi2-j=aij 38二維數(shù)組應(yīng)用例:求出一個(gè)二維數(shù)組的兩條對(duì)角線上的元素之和 #include”stdio0.h” main() int a33=1,3,7,13,19,27,37,49,63; int sum1=0,sum2=0,m,n; for(m=0;m3;m+) for(n=0;n3;n+) if(m=n) sum1=sum1+amn; for(m=0;m=0;n-) if(m+n=2) sum2=sum2+amn; pri

27、ntf(“sum1=%d,sum2=%dn”,sum1,sum2); 39二維數(shù)組應(yīng)用例:根據(jù)用戶輸入的年份和月份,輸出這個(gè)月的天數(shù)分析要考慮平年和閏年的二月份的天數(shù)是不一樣的程序中采用一個(gè)二維數(shù)組來(lái)存放平年和閏年的各個(gè)月份的天數(shù)#include main() int days212=31,28,31,30,31,30,31,31,30,31,30,31, 31,29,31,30,31,30,31,31,30,31,30,31 ; int year,month; int leap ;40二維數(shù)組應(yīng)用 printf(“enter a year:n”); scanf(“%d” ,&year); p

28、rintf(“enter a month:n”); scanf(“%d” ,&month); if (month=1&month=12) if (year%4= =0&year%100!= 0)| (year%400=0) leap=1; else leap=0; i=daysleapmonth-1 ; printf(“%dyear%dmonth%ddays” ,year,month,i); else printf(“enter error month!n”); 演示 66.c41小測(cè)試1. 以下對(duì)一維數(shù)組a的正確說(shuō)明是。A、char a(10);B、int a ; C、int k=5,ak;

29、 D、char a =a , b , c; 2. 若有說(shuō)明語(yǔ)句:int y 4=0,0; 則下面敘述不正確的是。A、數(shù)組y的每個(gè)元素都可得初值0B、二維數(shù)組y的行數(shù)為1C、該說(shuō)明等價(jià)于int y 4=0;D、只有元素y00和y01可得到初值0,其余元素均得不到初值0 42小結(jié)提示“數(shù)組的第1個(gè)元素”和“下標(biāo)為1的元素”之間的區(qū)別數(shù)組在編譯時(shí)占用內(nèi)存空間,要指定空間長(zhǎng)度下標(biāo)是一個(gè)整數(shù)或整數(shù)表達(dá)式在使用循環(huán)訪問(wèn)數(shù)組時(shí),數(shù)組下標(biāo)應(yīng)該不小于0并且小于數(shù)組元素的個(gè)數(shù)初始化數(shù)據(jù)列表的數(shù)據(jù)個(gè)數(shù)可以少于數(shù)組元素個(gè)數(shù)常見(jiàn)錯(cuò)誤缺少對(duì)數(shù)組元素的初始化聲明時(shí)進(jìn)行初始化的數(shù)據(jù)列表 的數(shù)據(jù)個(gè)數(shù)多于數(shù)組元素的個(gè)數(shù)越界訪問(wèn)數(shù)

30、組元素43程序設(shè)計(jì)基礎(chǔ)(C語(yǔ)言)字符數(shù)組與字符串 基本概念字符數(shù)組定義當(dāng)數(shù)組元素為字符類型時(shí),被稱之為字符型數(shù)組具有一般數(shù)組的性質(zhì)定義的格式char str10 ; /*含有10個(gè)字符的一維字符型數(shù)組*/ char stree310 ;/*含有3*10個(gè)字符的二維字符型數(shù)組*/也可以將其看成3行并且每行各含有10個(gè)字符的一維字符數(shù)組45基本概念字符數(shù)組字符數(shù)組的引用同數(shù)值型數(shù)組在用法上一樣字符數(shù)組中的一個(gè)元素位置存放一個(gè)字符用賦值語(yǔ)句為其賦值時(shí)應(yīng)該是單個(gè)字符例:int str10 ; str0=A;str1= ;str2=n; str3=e;str4=w;str5= ; str6=y;str7

31、=e;str8=a; str9=r;str A n e w y e a rstr開(kāi)辟的連續(xù)存儲(chǔ)單元中存放的是: A new year。(一串字符)46例如: char name4; main() name0=c;name1=+; name2=+;name3=0; 此程序段建立了一個(gè)四個(gè)元素的字符型數(shù)組?;靖拍钭址麛?shù)組字符串串就是一組字符C語(yǔ)言沒(méi)有提供內(nèi)部串的類型串是由字符數(shù)組創(chuàng)建的實(shí)際上字符串就是帶有若干限制的字符型數(shù)組其中一個(gè)限制條件是用0(NULL)來(lái)表示串的結(jié)束str A n e w y e a r0字符串47基本概念字符數(shù)組雙重性可被認(rèn)為是一個(gè)表示若干個(gè)字符的字符類型的數(shù)組可被認(rèn)為是

32、一個(gè)字符串類型變量(如果一串字符的最后一個(gè)字符是一個(gè)0字符 )提示字符型數(shù)組作為字符串形式處理時(shí),無(wú)需使用下標(biāo)實(shí)際上是將數(shù)組以指針的方式進(jìn)行處理當(dāng)使用下標(biāo)時(shí),實(shí)際上使用的是字符串中某一位置上的字符,而不是整個(gè)字符串字符型數(shù)組也不能整體賦值操作不允許一個(gè)數(shù)組賦給另一個(gè)數(shù)組48基本概念字符數(shù)組賦值和引用方法將其元素作為字符型采用一般數(shù)組的處理方式, 賦值、引用或初始化以字符串形式進(jìn)行賦值、引用或初始化char message 6=“hello”;或 char message = “hello” ;char message=h,e,l,l,o; 不是字符串;char message=h,e,l,l,

33、o,0; 是字符串;49基本概念字符數(shù)組賦值和引用方法區(qū)別字符常量char message5= h ,e , l , l ,o;存放方式:字符串常量char message =“hello”;存放方式 h e l l o 0char message=h ,e , l , l ,o ,0;h e l l o50基本概念存放方式: t h i s i k ! 0 P . C H I N A 0 0 0 J A P A N 0 0 0 0 0 C A N A D A 0 0 0 0 存放方式: char str16=“This is a book!”;或省略 ,直接寫(xiě)成: char str16= “

34、This is a book!” ; char str1310=“P.CHINA”,“JAPAN”,“CANADA”; 51基本概念字符數(shù)組提示兩種方式實(shí)現(xiàn)對(duì)字符數(shù)組的部分元素的初始化(賦初值)可省略一維數(shù)組的維長(zhǎng)度和二維數(shù)組的第一維長(zhǎng)度(與數(shù)值型相同)當(dāng)用字符串常量賦初值時(shí),系統(tǒng)自動(dòng)加上“0”字符字符數(shù)組的維長(zhǎng)度要比實(shí)際字符長(zhǎng)度多1個(gè)字符數(shù)組存放字符串時(shí),應(yīng)該事先估計(jì)出來(lái)實(shí)際字符串的長(zhǎng)度保證數(shù)組的長(zhǎng)度始終大于字符串的實(shí)際長(zhǎng)度如果在一個(gè)數(shù)組中先后存放多個(gè)長(zhǎng)度不同的字符串,數(shù)組長(zhǎng)度的定義應(yīng)大于最長(zhǎng)字符串的長(zhǎng)度如果字符串的長(zhǎng)度大于存儲(chǔ)它的字符數(shù)組的長(zhǎng)度,由于C語(yǔ)言不提供越界檢查。超出字符數(shù)組長(zhǎng)度的

35、部分就會(huì)將內(nèi)存中字符數(shù)組后面的數(shù)據(jù)覆蓋掉賦初值時(shí),初值個(gè)數(shù)要少于數(shù)組的維長(zhǎng)度,否則進(jìn)行系統(tǒng)編譯時(shí)越界例如:char str23=“this” ,“is” ,“a” ,“book”;52基本概念【例1】下面有關(guān)字符數(shù)組和字符串說(shuō)法正確的是: A)字符數(shù)組中存放的一定是一個(gè)字符串。 B)所有的字符數(shù)組都可以被當(dāng)作字符串處理。 C)對(duì)存放字符串的字符數(shù)組可以像一般數(shù)組一樣對(duì)數(shù)組中 的單個(gè)元素進(jìn)行操作。 D)一個(gè)字符數(shù)組可以認(rèn)為就是一個(gè)字符串?!纠?】合法的數(shù)組說(shuō)明語(yǔ)句是 。int a=“string”; int a5=0,1,2,3,4,5;char a=“string”;char a=0,1,2,

36、3,4,5; 在 C語(yǔ)言中,字符變量中存放的是與字符對(duì)應(yīng)的ASCII碼。數(shù)值 0,1,2,3,4,5 所對(duì)應(yīng)的ASCII字符雖然是不可顯示的字符,但是這些都可以作為控制字符。53【例3】若有以下語(yǔ)句,則正確的描述是 。 char x =“12345”; char y =1,2,3,4,5;X數(shù)組和y數(shù)組的長(zhǎng)度相同X數(shù)組長(zhǎng)度大于y數(shù)組長(zhǎng)度X數(shù)組長(zhǎng)度小于y數(shù)組長(zhǎng)度X數(shù)組等價(jià)與y數(shù)組【例4】閱讀下面的程序給出執(zhí)行結(jié)果。 main() int i=0; char a33=1,2,3,4,5,6,7,8,9; for (i=0;i3;i+) printf(“%d”,ai1); A)50,53,56 B)

37、49,52,55 C)2,5,8 D)1,4,7基本概念54字符數(shù)組輸入/輸出輸入采用%c格式符,逐個(gè)輸入所有字符main() int i,string15 ; for (i=0;i15;i+) scanf(“%c” ,&stringi); printf(“%c” , stringi ); 演示7C3.C55字符數(shù)組輸入/輸出輸入采用%s格式符,輸入字符串整體將字符數(shù)組作為字符串變量處理例scanf(“%s” ,string);說(shuō)明該函數(shù)向數(shù)組string中輸入一個(gè)字符串?dāng)?shù)組名在數(shù)組中代表著首地址,所以scanf函數(shù)中的變量地址表中的輸入變量只需寫(xiě)數(shù)組名string不能寫(xiě)成: scanf(“%

38、s” ,&string)為什么?scanf(“%c” ,&stringi)針對(duì)的是某一變量元素的地址,取一字符串中一個(gè)元素的地址 scanf(“%s” ,string)是要讀入一串字符,數(shù)組名即是首地址56字符數(shù)組輸入/輸出輸入采用%s格式符,輸入字符串整體例此時(shí)假設(shè)數(shù)據(jù)輸入的是: this is a book則數(shù)組中的存儲(chǔ)格式為:例: main() int i; char string15 ; scanf(“%s” ,string); t h i s 0為什么?57字符數(shù)組輸入/輸出輸入采用%s格式符,輸入字符串整體如何解決scanf()函數(shù)不能完整輸入全部字符(包括空格)的問(wèn)題?C語(yǔ)言提供

39、一個(gè)專門(mén)讀入字符串的函數(shù)getsgets (string)其功能是從控制臺(tái)讀取一個(gè)字符串該函數(shù)可以讀入包括空格在內(nèi)的所有字符,直到遇到回車(chē)符作為結(jié)束標(biāo)志,函數(shù)的值為字符串上例可寫(xiě)成此時(shí)輸入This is a book在內(nèi)存中的存放格式為: main() int i; char string15 ; gets(string); T h i s i s a b o o k 0 58字符數(shù)組輸入/輸出輸出使用函數(shù)puts輸出字符串puts()格式 puts(字符串名)或 puts(字符串常量)main() int i=0; char ch,text80; puts(“Enter a line of

40、text:”); while (ch=getchar()!=n) texti+=ch; texti=0;/*在字符串的最后加入一個(gè)NULL字符*/ puts(“nThe line ertered was:”); puts(text); 演示7C6。C59字符串運(yùn)算函數(shù)C語(yǔ)言支持多串函數(shù)的操作最常用的包括 strcpy(s1, s2)將s2拷貝到 s1 strcat(s1, s2)將s2連接到 s1的尾部 strlen (s1) 返回s1的長(zhǎng)度(不包括0) strcmp(s1,s2) 若s1與s2相等,返回值為0 若s1s2,返回值大于060字符串運(yùn)算函數(shù)C語(yǔ)言支持多串函數(shù)的操作提示字符串處理函

41、數(shù)的說(shuō)明定義在頭文件中處理字符串時(shí)最好的方式是使用指針對(duì)字符串變量(字符數(shù)組)不能采用直接賦值的方法賦值,必須使用strcpy()函數(shù)來(lái)處理strcpy在拷貝時(shí)連同0一起拷貝兩個(gè)字符串(數(shù)組)不能使用邏輯運(yùn)算直接比較大小,必須使用strcmp()函數(shù)str=“abcd” 非法strcpy(str, “abcd”)合法if (str1str2)printf(“true!”);非法if (strcmp( str1,str2 )= =1) printf(“true!”); 合法61字符串運(yùn)算函數(shù)字符串應(yīng)用編寫(xiě)一個(gè)比較兩個(gè)字符串大小的程序分析字符串的比較規(guī)則是按兩個(gè)字符串自左至右逐個(gè)字符比較(按其AS

42、CII碼值大小比較),直到出現(xiàn)不同的字符或遇到0為止若所有的字符全部相同,則兩個(gè)字符串相等否則按第一個(gè)不同字符的比較結(jié)果處理#include main() int i,c; char s120, s220; printf(First string:); gets(s1); printf(Second string:); gets(s2); i=0;62 while(s1i!=0&s2i!=0) if (s1is2i) c=1; break; else if(s1is2i) c=-1; break; else i=i+1; 字符串運(yùn)算函數(shù)63 if (s1i!=0&s2i=0) c=1; if

43、(s1i=0&s2i!=0) c=-1; if (s1i=0&s2i=0) c=0; if (c=0) printf(%s=%sn,s1,s2); else if(c=-1) printf(%s%sn,s1,s2); 字符串運(yùn)算函數(shù)64字符串?dāng)?shù)組字符串?dāng)?shù)組定義就是說(shuō)數(shù)組的每一個(gè)元素均是一個(gè)字符串 C語(yǔ)言中,常用二維字符數(shù)組的形式建立字符串?dāng)?shù)組數(shù)組的第一個(gè)下標(biāo)(左下標(biāo))決定字符串的個(gè)數(shù)第二個(gè)下標(biāo)(右下標(biāo))說(shuō)明每個(gè)串的最大長(zhǎng)度例如: char str_array3080;說(shuō)明定義了一個(gè)可以存放30個(gè)字符串的字符串?dāng)?shù)組,每個(gè)串的最大長(zhǎng)度為80個(gè)字符提示在 C語(yǔ)言中,一維字符數(shù)組的最普遍的用法是作為字符串使用數(shù)組處理字符串的另一種常見(jiàn)的形式是字符串?dāng)?shù)組65字符串?dāng)?shù)組字符串?dāng)?shù)組引用訪問(wèn)字符串?dāng)?shù)組中一個(gè)單獨(dú)的字符串只需要標(biāo)明左下標(biāo)即可例如gets(str_array0);數(shù)組 str_array中的第一個(gè)字符串為參數(shù)調(diào)用函數(shù)gets()實(shí)際上是將 str_array0作為指針處理的它指向字符數(shù)組元素str_array00的地址上述語(yǔ)句等價(jià)于gets(&str_array00);提示定義字符串?dāng)?shù)組時(shí),數(shù)組的第二個(gè)下標(biāo)應(yīng)比實(shí)際字符串長(zhǎng)度大1,以存放字符

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論