C語言程序設(shè)計課件 項目6 玩轉(zhuǎn)N維編程-數(shù)組_第1頁
C語言程序設(shè)計課件 項目6 玩轉(zhuǎn)N維編程-數(shù)組_第2頁
C語言程序設(shè)計課件 項目6 玩轉(zhuǎn)N維編程-數(shù)組_第3頁
C語言程序設(shè)計課件 項目6 玩轉(zhuǎn)N維編程-數(shù)組_第4頁
C語言程序設(shè)計課件 項目6 玩轉(zhuǎn)N維編程-數(shù)組_第5頁
已閱讀5頁,還剩82頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

玩轉(zhuǎn)N維編程—數(shù)組項目6任務(wù)1一維數(shù)組二維數(shù)組字符數(shù)組和字符串目錄CONTENTS任務(wù)2任務(wù)3【課程思政】

1.在程序中體會和發(fā)揮數(shù)組的集合優(yōu)勢,利用集體的力量解決單獨變量難以解決的問題。2.通過數(shù)組在內(nèi)存中順序排列的例子,培養(yǎng)遵守秩序和各種法律法規(guī),教育學生懂規(guī)矩,守紀律。任務(wù)1一維數(shù)組我們在前面的章節(jié)中已經(jīng)碰到過這樣的例子:求兩個整數(shù)中的較小數(shù),或者求三個整數(shù)中的最小數(shù)。那么大家想一下,如果要求大家找出10個整數(shù)中的最小數(shù)呢?按照我們前面學到的內(nèi)容,我們需要先定義10個變量a1,a2,a3,…,a10,然后這10個變量之間又要相互比較,求出最小數(shù)。顯然,這樣處理是非常麻煩的。在這里,我們可以使用數(shù)組來解決問題。數(shù)組是具有相同數(shù)據(jù)類型變量的集合,這些變量具有相同的名字,但用不同的下標來表明數(shù)據(jù)的位置,一般稱這些變量為數(shù)組元素。將數(shù)組與循環(huán)結(jié)合起來,可以有效地處理大批量的數(shù)據(jù),從而大大提高工作效率。任務(wù)1一維數(shù)組1一維數(shù)組的定義同樣,要在C語言中使用數(shù)組,必須先進行定義。一維數(shù)組的定義方式為:類型說明符數(shù)組名[常量表達式];其中:1類型說明符可以是任意基本數(shù)據(jù)類型或構(gòu)造數(shù)據(jù)類型,如int,float,char等。2數(shù)組名是用戶定義的數(shù)組標識符。對于數(shù)組元素來說,具有一個共同的名字,即數(shù)組名。任務(wù)1一維數(shù)組1一維數(shù)組的定義3方括號中的常量表達式表示數(shù)據(jù)元素的個數(shù),也稱數(shù)組的長度。例如:intch[20]; /*定義整型數(shù)組ch,有20個元素*/floatb[10],c[20]; /*定義實型數(shù)組b,有10個元素;實型數(shù)組c,有20個元素*/對于數(shù)組定義,應(yīng)注意以下幾點:1數(shù)組的類型實際上是指數(shù)組元素的取值類型。對于同一個數(shù)組,其所有元素的數(shù)據(jù)類型都是相同的。任務(wù)1一維數(shù)組1一維數(shù)組的定義2數(shù)組名不能與其他變量名相同。例如:intmain(){ inta; floata[20]; /*數(shù)組名與其他變量名相同*/ …}是錯誤的。3方括號中常量表達式表示數(shù)組元素的個數(shù),如a[5]表示數(shù)組a有5個元素。但其下標從0開始計算,因此,5個元素分別為a[0],a[1],a[2],a[3],a[4]。任務(wù)1一維數(shù)組1一維數(shù)組的定義4不能在方括號中用變量來表示元素的個數(shù),但是可以是符號常數(shù)或常量表達式。例如下面的定義是合法的:#defineD3 /*符號常量D的值為3*/intmain(){ inta[3+5],b[4+D]; /*合法的定義*/ …}但是下述說明方式是錯誤的。intmain(){ intn=5; inta[n]; /*不合法的定義,n為變量*/ …}任務(wù)1一維數(shù)組1一維數(shù)組的定義5經(jīng)過定義,系統(tǒng)為數(shù)組元素在內(nèi)存中分配了連續(xù)的存儲單元。例如:定義語句“inta[15];”說明了以下幾個問題:①數(shù)組名為a。②數(shù)組元素的數(shù)據(jù)類型為int整型。③數(shù)組元素的下標值從0開始。數(shù)組元素的個數(shù)為15個,分別是a[0],a[1],a[2]…,a[13],a[14]。④數(shù)組名a是數(shù)組存儲區(qū)的首地址,即存放數(shù)組第一個元素的地址:a→&a[0],因此,數(shù)組名是一個地址常量,不能對數(shù)組名進行賦值和運算。數(shù)據(jù)元素的存儲形式如圖所示,在VisualC++中,一個整型變量的存儲空間為4個字節(jié),所以此空間大小為4*15=60字節(jié)。任務(wù)1一維數(shù)組2一維數(shù)組的引用要使用數(shù)組,可以通過引用數(shù)組元素的方式使用該數(shù)組中的元素。一維數(shù)組的引用格式:數(shù)組名[下標]

提示(1)下標可以是常量或常量表達式,如a[3],a[3+2]。(2)下標也可以是變量或變量表達式,如a[i],a[i+j],a[i++]。(3)引用時,下標值若不是整型,C系統(tǒng)會自動取整,如a[5.3]相當于a[5]。(4)下標值從0開始,而不是從1開始。(5)下標不能越限,即引用時的下標不能超過或等于定義時的下標值,如“inta[10];a[10]=4;”是錯誤的。任務(wù)1一維數(shù)組2一維數(shù)組的引用實現(xiàn)從鍵盤中輸入10個互不相同的整數(shù),輸出這10個數(shù)并求其中的最小數(shù)。這里我們需要10個變量用來存儲這10個整數(shù),因此,可定義一個整型數(shù)組,包含10個數(shù)組元素。定義一個變量min用來存儲最小值,先將a[0]賦給min,然后將a[1]~a[9]逐個與min進行比較,如小于min,則將值賦給min,最后輸出min的值即為最小值。任務(wù)1一維數(shù)組2一維數(shù)組的引用#include<stdio.h>intmain(){inta[10]; /*數(shù)組定義,定義數(shù)組a*/inti,min; /*定義循環(huán)變量i和最小值min*/for(i=0;i<=9;i++) /*循環(huán)10次*/ scanf("%d",&a[i]); /*數(shù)組引用,給數(shù)組元素賦值*/for(i=0;i<=9;i++) /*循環(huán)10次*/ printf("%4d",a[i]); /*數(shù)組引用,輸出數(shù)組元素的值*/min=a[0]; /*數(shù)組引用,給min變量賦初值*/for(i=1;i<=9;i++) /*循環(huán)9次*/ if(min>a[i]) /*數(shù)組引用,如果min大于a[i]*/ min=a[i]; /*數(shù)組引用,將較小的賦給min*/printf("\n最小值為%d\n",min); /*輸出最小值*/return0;}任務(wù)1一維數(shù)組2一維數(shù)組的引用程序運行結(jié)果如圖所示。由于不能對數(shù)組整體進行(讀?。┎僮鳎荒軐?shù)組的元素進行操作,因此,如果要輸入或輸出a[0]到a[9]的所有數(shù)據(jù),需要用到循環(huán)語句,讓循環(huán)變量從0到9循環(huán),從而輸入或輸出數(shù)組中的每個數(shù)。任務(wù)1一維數(shù)組3一維數(shù)組的初始化與一般變量的初始化一樣,數(shù)組的初始化就是在定義數(shù)組的同時,給其數(shù)組元素賦初值。數(shù)組初始化是在編譯階段進行的,這樣就會減少程序的運行時間,從而提高程序效率。對數(shù)組進行初始化賦值的一般形式為:類型說明符數(shù)組名[常量表達式]={數(shù)值1,數(shù)值2,…,數(shù)值n};其中,在{}中的各數(shù)據(jù)值即為各元素的初值,各值之間用逗號間隔。例如:inta[3]={0,1,2};經(jīng)過以上初始化后,a[0]=0,a[1]=1,a[2]=2。任務(wù)1一維數(shù)組3一維數(shù)組的初始化C語言對數(shù)組的初始化有以下幾點規(guī)定:(1)可以只給部分元素賦初值。當{}中值的個數(shù)少于元素個數(shù)時,只給前面部分元素賦值。例如:inta[10]={0,1,2,3,4};相當于只給a[0],a[1],a[2],a[3],a[4]賦初值,而后5個元素自動賦0值。(2)只能給元素逐個賦值,不能給數(shù)組整體賦值。例如,給5個元素全部賦1值,只能寫為“inta[5]={1,1,1,1,1};”,而不能寫為“inta[5]=1;”。任務(wù)1一維數(shù)組3一維數(shù)組的初始化(3)如果在定義數(shù)組時給全部元素賦值,則在數(shù)組說明中可以不給出數(shù)組元素的個數(shù),此時數(shù)組的個數(shù)由值的個數(shù)確定。例如:“inta[5]={1,2,3,4,5};”可寫為“inta[]={1,2,3,4,5};”,表明數(shù)組有5個元素。(4)如果花括號{}中數(shù)值的個數(shù)多于數(shù)組元素的個數(shù),編譯時將提示語法錯誤。任務(wù)1一維數(shù)組用數(shù)組來實現(xiàn)例6-11中提出的求Fibonacci數(shù)列的前20項。根據(jù)題意,以f[n]表示第n項,其規(guī)律為f[n]=f[n-2]+f[n-1],如此構(gòu)成的數(shù)列為:f[0]=1,f[1]=1,f[2]=2,f[3]=3,…,f[n]=f[n-2]+f[n-1]。4一維數(shù)組應(yīng)用舉例任務(wù)1一維數(shù)組#include<stdio.h>intmain(){intn,f[20]; /*定義變量*/f[0]=f[1]=1; /*賦初值*/for(n=2;n<20;n++) /*循環(huán)條件設(shè)定*/ f[n]=f[n-1]+f[n-2]; /*計算f[n]的值*/for(n=0;n<20;n++) /*循環(huán)*/{ if(n%4==0) /*如果n能夠被4整除*/printf("\n"); /*每輸出四個數(shù)后換行*/ printf("%10d",f[n]); /*輸出數(shù)列中所有的值*/}printf("\n"); /*輸出換行符*/return0;}4一維數(shù)組應(yīng)用舉例任務(wù)1一維數(shù)組程序運行結(jié)果如圖所示。很多數(shù)列問題都可以用類似于上述計算斐波納契數(shù)列的方法,用數(shù)組來進行存儲和計算。4一維數(shù)組應(yīng)用舉例任務(wù)1一維數(shù)組給定任意n個整數(shù),按由小到大次序?qū)ζ溥M行排序,并輸出結(jié)果。排序方法有很多,如交換排序法、冒泡排序法、選擇排序法、插入排序法等,本例將采用常用的交換排序法來實現(xiàn)。4一維數(shù)組應(yīng)用舉例任務(wù)1一維數(shù)組交換排序法的基本思路是:將每個數(shù)與其后的所有數(shù)一一比較,將小的調(diào)到前面。首先,用第一個數(shù)依次與其后的所有數(shù)進行比較,如果后面的數(shù)比第一個數(shù)小,則交換這兩個數(shù)。例如,有5個數(shù),分別是7、6、10、4、2,依次將其放入數(shù)組a中,第1次先將a[0]與a[1](7和6)進行比較,由于a[1]小于a[0],將兩數(shù)對調(diào);第2次將a[0]與a[2](6和10)進行比較……如此進行5次后,得到2-7-10-6-4的順序。此時可以看到,最小數(shù)已成為第一個數(shù),比較過程如圖所示。4一維數(shù)組應(yīng)用舉例任務(wù)1一維數(shù)組然后進行第2趟比較,對余下的后4個數(shù)(7、10、6、4)進行新一輪比較,以便使次小數(shù)到達a[1]的位置。如左圖所示,經(jīng)過這一趟3次比較與交換,得到次小數(shù)4。按此規(guī)律進行下去,可以推算出,對5個數(shù)要比較4趟,才能使5個數(shù)按從小到大排列。其中,第1趟要比較4次,第2趟要比較3次……第4趟只需比較1次。因此,如果有n個數(shù),則要進行n-1趟比較,在第1趟中要比較n-1次,在第j趟中要比較n-j次。假設(shè)n=10,由此可畫出流程圖如右圖所示,用變量i來控制趟數(shù),用變量j來控制每趟中的比較次數(shù)。4一維數(shù)組應(yīng)用舉例任務(wù)1一維數(shù)組

#include<stdio.h>#defineN10 /*定義符號常量,N為排序數(shù)字個數(shù)*/intmain(){ inta[N]; /*定義數(shù)組a*/ inti,j,t; /*定義變量*/ printf("請輸入10個整數(shù):\n"); /*輸出提示語*/ for(i=0;i<N;i++) /*從鍵盤接收N個數(shù)據(jù)放入數(shù)組a中*/ { printf("a[%d]=",i); scanf("%d",&a[i]); }4一維數(shù)組應(yīng)用舉例任務(wù)1一維數(shù)組

for(i=0;i<N;i++) /*i是趟次循環(huán)變量(外循環(huán)變量)*/

for(j=i+1;j<N;j++) /*j是每趟中比較的次數(shù)變量(內(nèi)循環(huán)變量)*/

if(a[i]>a[j]) /*比較相鄰兩數(shù)大小,將較小的數(shù)放在前面*/

{

t=a[j];

a[j]=a[i];

a[i]=t;

}

printf("排序后的順序為:\n"); /*輸出提示語*/

for(i=0;i<N;i++) /*將排序好的數(shù)組輸出*/

printf("%d\t",a[i]);

printf("\n"); /*輸出回車符*/

return0;}4一維數(shù)組應(yīng)用舉例任務(wù)1一維數(shù)組程序運行結(jié)果如圖所示。輸入或者輸出數(shù)組中的元素需要用循環(huán)語句逐個輸入或輸出。4一維數(shù)組應(yīng)用舉例任務(wù)2二維數(shù)組在實際工作或生活中,有很多量不是一維,而是二維或多維的,例如,最常見的矩陣就是二維的,所以C語言還允許構(gòu)造多維數(shù)組。多維數(shù)組元素有多個下標,以標識它在數(shù)組中的位置,所以也稱多下標變量。本小節(jié)只介紹二維數(shù)組,多維數(shù)組可由二維數(shù)組類推得到。二維數(shù)組的定義與一維數(shù)組相似,其一般形式為:類型說明符數(shù)組名[常量表達式1][常量表達式2];其中,常量表達式1表示行下標,常量表達式2表示列下標。數(shù)組元素個數(shù)為:常量表達式1*常量表達式2。與一維數(shù)組相同,下標值從0開始。例如:intx[2][3];x是二維數(shù)組名,這個二維數(shù)組共有6個元素(2×3=6),分別是:x[0][0],x[0][1],x[0][2],x[1][0],x[1][1],x[1][2],其全部元素數(shù)據(jù)類型均為整型。二維數(shù)組在概念上是二維的,但在存儲器中是按一維線性排列的。在C語言中,二維數(shù)組是按行排列的。例如,二維數(shù)組x[2][3],先放第一行,即x[0][0],x[0][1],x[0][2];再放第二行,即x[1][0],x[1][1],x[1][2];如圖所示。任務(wù)2二維數(shù)組1二維數(shù)組的定義同一維數(shù)組一樣,二維數(shù)組也要先定義后引用。其引用的格式為:數(shù)組名[下標1][下標2]例如:a[2][3],表示數(shù)組a的第3行4列元素。任務(wù)2二維數(shù)組2二維數(shù)組的引用二維數(shù)組的初始化有兩種方法:(1)把初始化值括在一對大括號內(nèi),例如:intx[2][3]={1,2,3,4,5,6};初始化結(jié)果是:x[0][0]=1,x[0][1]=2,x[0][2]=3,x[1][0]=4,x[1][1]=5,x[1][2]=6。(2)把二維數(shù)組看作是一種特殊的一維數(shù)組,該數(shù)組的每個元素又是一個一維數(shù)組。例如:定義了二維數(shù)組x[2][3],可以把數(shù)組x看成是具有兩個元素的一維數(shù)組,其元素是x[0]和x[1];而每個元素x[0]和x[1]又都是具有三個元素的一維數(shù)組;如圖所示。任務(wù)2二維數(shù)組3二維數(shù)組的初始化因此,二維數(shù)組的初始化也可以分解成多個一維數(shù)組的初始化,例如:intx[2][3]={{1,2,3},{4,5,6}};任務(wù)2二維數(shù)組3二維數(shù)組的初始化

名師點睛對于二維數(shù)組的初始化賦值還有以下幾點說明:(1)可以只對部分元素賦初值,未賦初值的元素自動取0值。例如:intx[2][2]={{1},{2}};表示對每一行的第一列元素賦值,未賦值的元素取0值。賦值后各元素的值為:x[0][0]=1,x[0][1]=0,x[1][0]=2,x[1][1]=0。(2)如果對全部元素賦初值,第一維長度可以不給出。例如,二維數(shù)組x[2][3]的初始化過程可寫成:intx[][3]={1,2,3,4,5,6};系統(tǒng)會根據(jù)數(shù)據(jù)總個數(shù)和第二維的長度計算出第一維的長度。數(shù)組總共有6個元素,每行3列,顯然可以確定行數(shù)為2。任務(wù)2二維數(shù)組4二維數(shù)組應(yīng)用舉例求一個3*3矩陣的兩條對角線元素之和(注意:兩條對角線交叉點處的元素只計算一次)。利用雙重for循環(huán)控制輸入二維數(shù)組,將兩個下標一致的元素(即其中一條對角線上的元素)累加到result1;將兩個下標不一致、但它們的和等于2的元素(即另一條對角線上并不在交叉點處的元素)累加到result2,最后將result1、result2相加得到最后的結(jié)果并輸出。任務(wù)2二維數(shù)組4二維數(shù)組應(yīng)用舉例#include<stdio.h>intmain(){ inta[3][3]; /*定義3*3矩陣*/ inti,j,sum,result1=0,result2=0; /*定義變量*/ for(i=0;i<3;i++) /*外循環(huán)*/ { printf("輸入一行:"); /*輸出提示信息*/ for(j=0;j<3;j++) /*內(nèi)循環(huán)*/ { scanf("%d",&a[i][j]); /*逐行輸入矩陣*/ if(i==j) /*如下標相同,則累加到result1*/ result1+=a[i][j]; if(i+j==2&&i!=j) /*如下標不同且和為2,則累加到result2*/ result2+=a[i][j]; } } sum=result1+result2; /*將result1和result2相加*/ printf("sum=%d\n",sum); /*輸出結(jié)果*/}任務(wù)2二維數(shù)組4二維數(shù)組應(yīng)用舉例程序運行結(jié)果如圖所示。任務(wù)2二維數(shù)組4二維數(shù)組應(yīng)用舉例一個學習小組有6個人,每個人有3門課(數(shù)學、語文和英語)的考試成績,如表所示。求每門課的平均分和每個人的平均分。課程王笑李鵬吳欣張平趙明張曉娜數(shù)學859384859586語文7995958010098英語809193759790可設(shè)一個二維數(shù)組a[3][6]存放6個人3門課的成績。再設(shè)一個一維數(shù)組v[3]存放每門課的平均分,設(shè)一個一維數(shù)組w[6]存放每個人的平均分。任務(wù)2二維數(shù)組4二維數(shù)組應(yīng)用舉例#include<stdio.h>intmain(){inti,j,s=0,v[3],w[6]; /*定義變量*/inta[3][6]={{85,93,84,85,95,86},{79,95,95,80,100,98},{80,91,93,75,97,90}}; /*初始化*/for(i=0;i<3;i++) /*外循環(huán)*/{ for(j=0;j<6;j++) /*內(nèi)循環(huán)*/ s=s+a[i][j]; /*各科的分數(shù)累加*/ v[i]=s/6; /*各科平均分*/ s=0; /*s重新賦初值0*/ }任務(wù)2二維數(shù)組4二維數(shù)組應(yīng)用舉例

for(j=0;j<6;j++) /*外循環(huán)*/

{ for(i=0;i<3;i++) /*內(nèi)循環(huán)*/ s=s+a[i][j]; /*各人的分數(shù)累加*/ w[j]=s/3; /*各人平均分*/ s=0; /*s重新賦初值0*/}printf("數(shù)學:%d\t語文:%d\t英語:%d\n",v[0],v[1],v[2]); /*輸出各科平均分*/printf("王笑:%d\t李鵬:%d\t吳欣:%d\t張平:%d\t趙明:%d\t張曉娜:%d\n",w[0],w[1],w[2],w[3],w[4],w[5]); /*輸出每個人的平均成績*/return0;}任務(wù)2二維數(shù)組4二維數(shù)組應(yīng)用舉例程序運行結(jié)果如圖所示。任務(wù)3字符數(shù)組和字符串數(shù)組中的元素數(shù)據(jù)類型為字符型時稱為字符數(shù)組。由于字符數(shù)組的應(yīng)用比較廣泛,尤其是作為字符串形式使用時有著自己的特點,因此,在這里專門加以討論。任務(wù)3字符數(shù)組和字符串1字符數(shù)組的定義和引用前面介紹的都是數(shù)值型數(shù)組,即數(shù)組元素都是數(shù)值型。那么還有一種數(shù)組,其每個元素都是一個字符,也就是說,數(shù)組元素的數(shù)據(jù)類型都是char類型,稱為字符數(shù)組。定義字符數(shù)組的方法與定義數(shù)值型數(shù)組的方法類似。例如:chara[5]; /*定義字符數(shù)組a*/charb[3][4]; /*定義二維字符數(shù)組b*/字符數(shù)組的引用也與數(shù)值型數(shù)組引用方式一樣,可使用下標的形式。例如,為上面定義的數(shù)組a中的第1個元素賦值,可以用如下方式描述:a[0]='H';2字符數(shù)組的初始化字符數(shù)組同樣允許在定義時進行初始化賦值。字符數(shù)組初始化的過程與數(shù)值型數(shù)組初始化的過程相似。例如:chara[5]={'H','e','l','l','o'};賦值后各元素的值為:a[0]='H',a[1]='e',a[2]='l',a[3]='l',a[4]='o'。字符數(shù)組與數(shù)值型數(shù)組在初始化時的區(qū)別在于:如果字符數(shù)組在初始化時提供的數(shù)據(jù)個數(shù)少于數(shù)組元素個數(shù),則多余的數(shù)組元素初始化為空字符'\0',而數(shù)值型數(shù)組是0。例如:charb[9]={'G','o','o','d'};初始化后各元素的值為:b[0]='G',b[1]='o',b[2]='o',b[3]='d',b[5]='\0',b[6]='\0',b[7]='\0',b[8]='\0'。任務(wù)3字符數(shù)組和字符串2字符數(shù)組的初始化編寫程序,將字符IloveC!存放在一維數(shù)組中并輸出。先定義并初始化一個字符數(shù)組,然后用循環(huán)逐個輸出此字符數(shù)組中的字符。任務(wù)3字符數(shù)組和字符串2字符數(shù)組的初始化#include<stdio.h>intmain(){ charc[9]={'I','','l','o','v','e','','C','!'}; /*初始化字符數(shù)組c*/ inti; /*定義循環(huán)變量i*/ for(i=0;i<9;i++) /*輸出字符數(shù)組c中每個元素的值*/ printf("%c",c[i]); /*格式化輸出語句中,輸出字符用%c*/ printf("\n"); /*輸出換行符*/ return0;}任務(wù)3字符數(shù)組和字符串2字符數(shù)組的初始化程序運行結(jié)果如圖所示。任務(wù)3字符數(shù)組和字符串3字符串在C語言中沒有專門的字符串變量,通常用一個字符數(shù)組來存放一個字符串。前面介紹字符串常量時,已說明字符串總是以'\0'作為串的結(jié)束符。因此,當把一個字符串存入一個數(shù)組時,也把結(jié)束符'\0'存入數(shù)組,并以此作為該字符串是否結(jié)束的標志。存放字符串的字符數(shù)組的初始化有兩種方法。用字符常量初始化數(shù)組。用字符常量給字符數(shù)組賦初值時,要用花括號將賦值的字符常量括起來。例如:charstr[6]={'C','h','i','n','a','\0'};數(shù)組str[6]被初始化為“China”,其中,最后一個元素的賦值'\0'可以省略。用字符串常量初始化數(shù)組。例如:charstring[6]={"China"};還可將“{}”去掉,寫成:charstring[6]="China";12任務(wù)3字符數(shù)組和字符串3字符串

名師點睛字符數(shù)組初始化時應(yīng)注意以下幾個問題:(1)如果提供賦值的字符個數(shù)多于數(shù)組元素的個數(shù),則為語法錯誤。例如: charstr[4]={'C','h','i','n','a'}; × charstring[4]="China"; ×(2)如果提供賦值的字符個數(shù)少于數(shù)組元素的個數(shù),則多余數(shù)組元素自動賦'\0'。例如:charstring[20]="China";字符數(shù)組string從第六個元素開始之后全部賦'\0'。(3)用字符串常量初始化時,字符數(shù)組的下標可以省略,其數(shù)組元素個數(shù)由賦值的字符串的長度決定。例如:charstr[]="1a2b3c";等同于charstr[7]="1a2b3c";(4)初始化時,若字符個數(shù)與數(shù)組長度相同,則字符末尾不加'\0',此時字符數(shù)組不能作為字符串處理,只能作字符逐個處理。例如:charstr[5]={'C','h','i','n','a'};不能作為字符串處理。任務(wù)3字符數(shù)組和字符串4字符數(shù)組的輸入輸出字符數(shù)組的輸入輸出主要有兩種方式。1格式化輸入輸出函數(shù)可以輸入輸出任何類型的數(shù)據(jù)。若要輸入輸出字符,使用格式符%c。①從鍵盤讀取一個字符:scanf("%c",數(shù)組元素地址);②向顯示器輸出一個字符:printf("%c",數(shù)組元素);利用前面介紹過的字符輸入輸出函數(shù)輸入輸出一個字符。①getchar函數(shù)為字符輸入函數(shù),函數(shù)調(diào)用格式:getchar();②putchar函數(shù)為字符輸出函數(shù),函數(shù)調(diào)用格式:putchar(字符名);12任務(wù)3字符數(shù)組和字符串4字符數(shù)組的輸入輸出編程實現(xiàn)從鍵盤輸入一個字符串,存放于一個數(shù)組中,并將該數(shù)組輸出。用不同的輸入/輸出函數(shù)實現(xiàn)。使用逐個字符輸入輸出的方法必須結(jié)合循環(huán)控制語句實現(xiàn)所有元素的輸入輸出。任務(wù)3字符數(shù)組和字符串4字符數(shù)組的輸入輸出#include<stdio.h>intmain(){ chara[10]; /*定義數(shù)組a能夠存放10個元素*/ inti; /*定義循環(huán)變量i*/ for(i=0;i<10;i++) /*循環(huán)實現(xiàn)逐個輸入a[i]的值*/ scanf("%c",&a[i]); /*用scanf()對字符數(shù)組進行賦值*/ for(i=0;i<10;i++) /*循環(huán)實現(xiàn)逐個輸出a[i]的值*/ printf("%c",a[i]); /*用printf()輸出字符數(shù)組中的內(nèi)容*/ printf("\n"); /*輸出回車符*/ return0;}(1)用格式化輸入輸出字符實現(xiàn)如下:任務(wù)3字符數(shù)組和字符串4字符數(shù)組的輸入輸出#include<stdio.h>intmain(){ chara[10]; /*定義數(shù)組a能夠存放10個元素*/ inti; /*定義循環(huán)變量*/ for(i=0;i<10;i++) /*循環(huán)實現(xiàn)逐個輸入a[i]的值*/ a[i]=getchar(); /*用getchar()對字符數(shù)組進行賦值*/ for(i=0;i<10;i++) /*循環(huán)實現(xiàn)逐個輸出a[i]的值*/ putchar(a[i]); /*用putchar()輸出字符數(shù)組中的內(nèi)容*/ printf("\n"); /*輸出回車符*/ return0;}(2)用字符輸入輸出函數(shù)實現(xiàn)如下:任務(wù)3字符數(shù)組和字符串4字符數(shù)組的輸入輸出程序運行結(jié)果如圖所示。任務(wù)3字符數(shù)組和字符串4字符數(shù)組的輸入輸出用這兩種方法實現(xiàn)數(shù)組的輸入輸出,其運行結(jié)果相同,輸入時不能少于10個字符,回車也算一個字符。如果輸入多于10個字符,只將前10個字符賦值給數(shù)組a,當輸出數(shù)組時也就只輸出前10個字符。任務(wù)3字符數(shù)組和字符串4字符數(shù)組的輸入輸出2利用格式化輸入輸出函數(shù)輸入輸出字符串,使用格式符%s即可。①從鍵盤讀取一串字符:scanf("%s",數(shù)組名);②向顯示器輸出一串字符:printf("%s",數(shù)組名);1

提示當輸入完要輸入的字符串時,字符數(shù)組自動包含一個'\0'結(jié)束標志。輸出字符串時,遇'\0'結(jié)束。任務(wù)3字符數(shù)組和字符串4字符數(shù)組的輸入輸出使用字符串輸入輸出函數(shù)。2①gets函數(shù)為字符串輸入函數(shù),函數(shù)調(diào)用格式為:gets(字符串數(shù)組名)其作用是從終端輸入一個字符串到字符數(shù)組,并且得到一個函數(shù)值。該函數(shù)值是字符數(shù)組的起始位置。如執(zhí)行函數(shù):gets(a); /*a為已定義的字符數(shù)組*/從鍵盤輸入program↙,以回車作為字符串結(jié)束標志;將輸入的字符串“program”送給字符數(shù)組a(請注意,送給數(shù)組的共有8個字符,包括'\0'結(jié)束標志),返回的函數(shù)值是字符數(shù)組a的起始地址。一般利用gets函數(shù)的目的是向字符數(shù)組輸入一個字符串,并不關(guān)心其函數(shù)值,函數(shù)值將在第8章詳細介紹。任務(wù)3字符數(shù)組和字符串4字符數(shù)組的輸入輸出用將整個字符串一次輸入輸出的方法實現(xiàn)例7-7中的問題。②puts函數(shù)為字符串輸出函數(shù),函數(shù)調(diào)用格式為:puts(字符串數(shù)組名)其作用是將一個字符串(以'\0'結(jié)束的字符序列)輸出到終端。任務(wù)3字符數(shù)組和字符串4字符數(shù)組的輸入輸出#include<stdio.h>intmain(){ chara[10]; /*定義數(shù)組a能夠存放10個元素*/ scanf("%s",a); /*用scanf()函數(shù)對字符串數(shù)組進行賦值*/ printf("%s",a); /*用printf()函數(shù)輸出字符數(shù)組中的內(nèi)容*/ return0;}(1)用格式化輸入輸出字符串方法實現(xiàn)如下:任務(wù)3字符數(shù)組和字符串4字符數(shù)組的輸入輸出#include<stdio.h>intmain(){ chara[10]; /*定義數(shù)組a能夠存放10個元素*/ gets(a); /*用gets()函數(shù)對字符串數(shù)組進行賦值*/ puts(a); /*用puts()函數(shù)輸出字符數(shù)組中的內(nèi)容*/ return0;}(2)用字符串輸入輸出函數(shù)實現(xiàn)如下:任務(wù)3字符數(shù)組和字符串4字符數(shù)組的輸入輸出程序運行結(jié)果如圖所示。任務(wù)3字符數(shù)組和字符串4字符數(shù)組的輸入輸出用這兩種方法實現(xiàn)數(shù)組的輸入輸出,其運行結(jié)果相同。當輸入字符少于10個時,輸出與輸入一樣的字符串。但當輸入字符大于10個時就會造成溢出,從而導致運行出錯。因此,需要特別注意數(shù)組元素的溢出問題。任務(wù)3字符數(shù)組和字符串5字符串處理函數(shù)為了完成對字符串的操作,C語言的函數(shù)庫提供了豐富的函數(shù)集。這些函數(shù)包含在“string.h”文件中,因此,如果使用字符串處理函數(shù),就需要在程序開頭添加預(yù)編譯命令:#include<string.h>或#include"string.h"1其一般格式為:strlen(字符數(shù)組名)功能:測字符串的實際長度(不含字符串結(jié)束標志'\0')并作為函數(shù)返回值。任務(wù)3字符數(shù)組和字符串5字符串處理函數(shù)編寫程序求字符串的長度。#include<stdio.h>#include<string.h>intmain(){ intk; /*定義變量k用于存放字符串的長度*/ chars[]="Clanguage"; /*初始化字符串s*/ k=strlen(s); /*調(diào)用strlen函數(shù)求字符串s的長度*/ printf("字符串長度為:%d\n",k); /*輸出長度*/ return0;}任務(wù)3字符數(shù)組和字符串5字符串處理函數(shù)程序運行結(jié)果如圖所示。字符串長度包括空格,但不包括字符串結(jié)束標志'\0'。任務(wù)3字符數(shù)組和字符串5字符串處理函數(shù)2其一般格式為:strcat(字符數(shù)組名1,字符數(shù)組名2)功能:把字符數(shù)組2中的字符串連接到字符數(shù)組1中字符串的后面,并刪去字符串1后的串結(jié)束標志'\0'。其返回值是字符數(shù)組1的首地址。編程實現(xiàn)將兩個字符串相連接后輸出。任務(wù)3字符數(shù)組和字符串5字符串處理函數(shù)#include<stdio.h>#include<string.h>intmain(){ charstr1[30]="Ilove",str2[]="C!"; /*初始化str1和str2*/ strcat(str1,str2); /*調(diào)用strcat函數(shù)*/ puts(str1); /*輸出str1*/ return0;}任務(wù)3字符數(shù)組和字符串5字符串處理函數(shù)程序運行結(jié)果如圖所示。將字符串str2接到str1的后面,在定義str1的時候要保證str1的空間足夠大。也就是str1和str2加起來的字符個數(shù)要小于str1定義的數(shù)據(jù)元素的個數(shù)30。任務(wù)3字符數(shù)組和字符串5字符串處理函數(shù)3其一般格式為:strcpy(字符數(shù)組名1,字符數(shù)組名2)功能:把字符數(shù)組2中的字符串拷貝到字符數(shù)組1中。串結(jié)束標志'\0'也一同拷貝。字符數(shù)組2,也可以是一個字符串常量,這時相當于把一個字符串賦予一個字符數(shù)組。編寫程序?qū)崿F(xiàn)將字符串2中的字符拷貝到字符串1中。任務(wù)3字符數(shù)組和字符串5字符串處理函數(shù)#include<stdio.h>#include<string.h>intmain(){ charstr1[15],str2[]="CLanguage"; /*定義兩個字符數(shù)組,并為str2賦初值*/ strcpy(str1,str2); /*調(diào)用strcpy函數(shù)*/ puts(str1); /*輸出字符串1*/ return0;}任務(wù)3字符數(shù)組和字符串5字符串處理函數(shù)程序運行結(jié)果如圖所示。定義字符數(shù)組時注意字符數(shù)組1的長度應(yīng)大于字符串2的長度。任務(wù)3字符數(shù)組和字符串5字符串處理函數(shù)4①strlwr函數(shù)的一般格式為:strlwr(字符數(shù)組名)功能:將字符串中的字符轉(zhuǎn)換成小寫。②strupr函數(shù)的一般格式為:strupr(字符數(shù)組名)功能:將字符串中的字符轉(zhuǎn)換成大寫。編程實現(xiàn)將一字符串中的字符轉(zhuǎn)換成小寫輸出,再轉(zhuǎn)換成大寫輸出。任務(wù)3字符數(shù)組和字符串5字符串處理函數(shù)#include<stdio.h>#include<string.h>intmain(){ chars[]="howAREYou?"; /*初始化字符串s*/ strlwr(s); /*將s中的字符轉(zhuǎn)換成小寫*/ puts(s); /*輸出s*/ strupr(s); /*將s中的字符轉(zhuǎn)換成大寫*/ puts(s); /*輸出s*/ return0;}任務(wù)3字符數(shù)組和字符串5字符串處理函數(shù)程序運行結(jié)果如圖所示。用字符串常量初始化時,字符數(shù)組的下標可以省略,其數(shù)組元素的個數(shù)由賦值的字符串長度決定。任務(wù)3字符數(shù)組和字符串5字符串處理函數(shù)5其一般格式為:strcmp(字符數(shù)組名1,字符數(shù)組名2)功能:將兩個數(shù)組中的字符串從左至右逐個相比較,比較字符的ASCII碼大小,并由函數(shù)返回值返回比較結(jié)果。(1)如果字符串1=字符串2,則返回值為0。(2)如果字符串1>字符串2,則返回值為一個正整數(shù)。(3)如果字符串1<字符串2,則返回值為一個負整數(shù)。比較兩字符串的大小,并輸出結(jié)果。任務(wù)3字符數(shù)組和字符串5字符串處理函數(shù)#include<stdio.h>#include<string.h>intmain(){ intk; /*定義變量k用于存放strcmp函數(shù)的返回值*/ charstr1[15],str2[15]; /*定義字符數(shù)組*/ printf("請輸入第一個字符串:"); /*輸出提示語*/ gets(str1); /*輸入字符串1*/ printf("請輸入第二個字符串:"); /*輸出提示語*/ gets(str2); /*輸入字符串2*/ k=strcmp(str1,str2); /*調(diào)用strcmp函數(shù)*/ if(k==0)printf("str1=str2\n"); /*返回值為0,那么字符串1=字符串2*/ if(k>0)printf("str1>str2\n"); /*返回值>0,那么字符串1>字符串2*/ if(k<0)printf("str1<str2\n"); /*返回值<0,那么字符串1<字符串2*/ return0;}任務(wù)3字符數(shù)組和字符串5字符串處理函數(shù)程序運行結(jié)果如圖所示。輸入的字符串不同,比較的大小不同,返回值就不同,

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論