C語(yǔ)言課件數(shù)組_第1頁(yè)
C語(yǔ)言課件數(shù)組_第2頁(yè)
C語(yǔ)言課件數(shù)組_第3頁(yè)
C語(yǔ)言課件數(shù)組_第4頁(yè)
C語(yǔ)言課件數(shù)組_第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)介

會(huì)計(jì)學(xué)1C語(yǔ)言課件數(shù)組

本章要點(diǎn)掌握一維、二維數(shù)組的定義和引用方法、存儲(chǔ)結(jié)構(gòu)和初始化方法。掌握有關(guān)一維數(shù)組的有關(guān)算法。掌握數(shù)組的運(yùn)算。第七章數(shù)組第1頁(yè)/共73頁(yè)

主要內(nèi)容7.1一維數(shù)組的定義和引用7.2二維數(shù)組的定義和引用7.3字符數(shù)組第七章數(shù)組第2頁(yè)/共73頁(yè)

§7-1

一維數(shù)組的定義和引用

問(wèn)題:有如下幾組數(shù)據(jù),它們分別該如何存儲(chǔ)呢?

是一組具有相同數(shù)據(jù)類(lèi)型的數(shù)據(jù)的有序集合。

數(shù)組一個(gè)班學(xué)生的學(xué)習(xí)成績(jī)一行文字一個(gè)矩陣這些數(shù)據(jù)的特點(diǎn)是:1、具有相同的數(shù)據(jù)類(lèi)型2、使用過(guò)程中需要保留原始數(shù)據(jù)

C語(yǔ)言為這些數(shù)據(jù),提供了一種構(gòu)造數(shù)據(jù)類(lèi)型:數(shù)組。第3頁(yè)/共73頁(yè)

1、一維數(shù)組的定義格式為:類(lèi)型說(shuō)明符數(shù)組名[常量表達(dá)式];例如:inta[10];

它表示定義了一個(gè)整形數(shù)組,數(shù)組名為a,此數(shù)組有10個(gè)元素?!?.1.1一維數(shù)組的定義

2、說(shuō)明:(1)數(shù)組名定名規(guī)則和變量名相同,遵循標(biāo)識(shí)符定名規(guī)則。第4頁(yè)/共73頁(yè)(2)在定義數(shù)組時(shí),需要指定數(shù)組中元素的個(gè)數(shù),方括弧中的常量表達(dá)式用來(lái)表示元素的個(gè)數(shù),即數(shù)組長(zhǎng)度。例如,指定a[10],表示a數(shù)組有10個(gè)元素,注意下標(biāo)是從0開(kāi)始的,這10個(gè)元素是,a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9]。請(qǐng)持別注意,按上面的定義,不存在數(shù)組元素a[10]。(3)常量表達(dá)式中可以包括常量和符號(hào)常量,但不能包含變量。也就是說(shuō),C語(yǔ)言不允許對(duì)數(shù)組的大小作動(dòng)態(tài)定義,即數(shù)組的大小不依賴于程序運(yùn)行過(guò)程中變量的值。例如,下面這樣定義數(shù)組是不行的:第5頁(yè)/共73頁(yè)舉例:

intn;scanf(“%d″,&n);/*在程序中臨時(shí)輸入數(shù)組的大小*/inta[n];

①floata[0]; /*數(shù)組大小為0沒(méi)有意義*/

②intb(2)(3);/*不能使用圓括號(hào)*/

③intk,a[k];/*不能用變量說(shuō)明數(shù)組大小*/

數(shù)組說(shuō)明中其他常見(jiàn)的錯(cuò)誤第6頁(yè)/共73頁(yè)3、一維數(shù)組在內(nèi)存中的存放每個(gè)數(shù)據(jù)元素占用的字節(jié)數(shù),就是基類(lèi)型的字節(jié)數(shù)一個(gè)元素占4個(gè)字節(jié)一維數(shù)組:float

mark[100];mark[0]mark[1]mark[2]mark[3]...mark[99]86.592.077.552.0...94.0低地址

高地址第7頁(yè)/共73頁(yè)數(shù)組名[下標(biāo)]下標(biāo)可以是整型常量或整型表達(dá)式。例如:a[0]=a[5]+a[7]-a[2*3]定義數(shù)組時(shí)用到的“數(shù)組名[常量表達(dá)式]”和引用數(shù)組元素時(shí)用到的“數(shù)組名[下標(biāo)]”是有區(qū)別的。例如∶inta[10];/*定義數(shù)組長(zhǎng)度為10*/t=a[6];/*引用a數(shù)組中序號(hào)為6的元素。此時(shí)6不代表數(shù)組長(zhǎng)度*/注意§7.1.2一維數(shù)組元素的引用1、數(shù)組元素的引用方式:第8頁(yè)/共73頁(yè)2、一維數(shù)組元素引用的程序?qū)嵗?include<stdio.h>voidmain()

{inti,a[10];for(i=0;i<=9;i++)a[i]=i;for(i=9;i>=0;i--)printf("%d″,a[i]);printf("\n″);}

運(yùn)行結(jié)果如下:9876543210

程序使a[0]到a[9]的值為0~9,然后按逆序輸出。第9頁(yè)/共73頁(yè)

1、對(duì)數(shù)組元素初始化的實(shí)現(xiàn)方法:

(1)在定義數(shù)組時(shí)對(duì)數(shù)組元素賦以初值。例如:inta[10]={0,1,2,3,4,5,6,7,8,9};將數(shù)組元素的初值依次放在一對(duì)花括弧內(nèi)。經(jīng)過(guò)上面的定義和初始化之后,a[0]=0,a[1]=1,a[2]=2,a[3]=3,a[4]=4,a[5]=5,a[6]=6,a[7]=7,a[8]=8,a[9]=9。

§7.1.3一維數(shù)組的初始化第10頁(yè)/共73頁(yè)

(3)如果想使一個(gè)數(shù)組中全部元素值為0,可以寫(xiě)成

inta[10]={0,0,0,0,0,0,0,0,

0,0};或inta[10]={0};

不能寫(xiě)成:inta[10]={0*10};這是與FORTRAN語(yǔ)言不同的,不能給數(shù)組整體賦初值。

2)可以只給一部分元素賦值。例如:inta[10]={0,1,2,3,4};

定義a數(shù)組有10個(gè)元素,但花括弧內(nèi)只提供5個(gè)初值,這表示只給前面5個(gè)元素賦初值,后5個(gè)元素值為0。第11頁(yè)/共73頁(yè)4)在對(duì)全部數(shù)組元素賦初值時(shí),由于數(shù)據(jù)的個(gè)數(shù)已經(jīng)確定,因此可以不指定數(shù)組長(zhǎng)度。

例如:inta[5]={1,2,3,4,5};

也可以寫(xiě)成

inta[]={1,2,3,4,5};

在第二種寫(xiě)法中,花括弧中有5個(gè)數(shù),系統(tǒng)就會(huì)據(jù)此自動(dòng)定義a數(shù)組的長(zhǎng)度為5。但若數(shù)組長(zhǎng)度與提供初值的個(gè)數(shù)不相同,則數(shù)組長(zhǎng)度不能省略。例如,想定義數(shù)組長(zhǎng)度為10,就不能省略數(shù)組長(zhǎng)度的定義,而必須寫(xiě)成inta[10]={1,2,3,4,5};只初始化前5個(gè)元素,后5個(gè)元素為0。第12頁(yè)/共73頁(yè)程序舉例1:用數(shù)組來(lái)處理,求解Fibonacci數(shù)列。程序?qū)嵗?include<stdio.h>voidmain(){inti;intf[20]={1,1};Fibonacci數(shù)列公式:已知:

a1=a2=1 an=an-1+an-2

即:1,1,2,3,5,8,13§7.1.4一維數(shù)組程序舉例第13頁(yè)/共73頁(yè)for(i=2;i<20;i++)f[i]=f[i-2]+f[i-1];for(i=0;i<20;i++){if(i%5==0)printf(″\n″);printf(″%12d″,f[i])}/*For循環(huán)結(jié)束*/}/*程序結(jié)束*/運(yùn)行結(jié)果如下:

11235813213455891442333776109871597258441816765if語(yǔ)句用來(lái)控制換行,每行輸出5個(gè)數(shù)據(jù)。第14頁(yè)/共73頁(yè)程序舉例2:用起泡法對(duì)10個(gè)數(shù)排序(由小到大)。

起泡法的思路是:將相鄰兩個(gè)數(shù)比較,將小的調(diào)到前頭。

第一趟比較

經(jīng)過(guò)第一趟(共5次比較與交換)后,最大的數(shù)9已“沉底”。然后進(jìn)行對(duì)余下的前面5個(gè)數(shù)第二趟比較,注第15頁(yè)/共73頁(yè)第二趟比較如果有n個(gè)數(shù),則要進(jìn)行n-1趟比較。在第1趟比較中要進(jìn)行n-1次兩兩比較,在第j趟比較中要進(jìn)行n-j次兩兩比較。

經(jīng)過(guò)第二趟(共4次比較與交換)后,得到次大的數(shù)8。注第16頁(yè)/共73頁(yè)程序流程圖如下:第17頁(yè)/共73頁(yè)程序?qū)嵗?.3:#include<stdio.h>voidmain(){inta[10];inti,j,t;printf(″input10numbers:\n″);

for(i=0;i<10;i++)scanf("%d",&a[i]);printf("\n");

第18頁(yè)/共73頁(yè)for(j=0;j<9;j++)for(i=0;i<9-j;i++)if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}printf(″thesortednumbers:\n″);for(i=0;i<10;i++)printf(″%d″,a[i]);printf(″\n″);}/*程序結(jié)束*/程序運(yùn)行結(jié)果如下:input10numbers:10481265-76100-45123↙thesortednumbers:-76-4501481265100123第19頁(yè)/共73頁(yè)

§7-2

二維數(shù)組的定義和引用

§7.2.1二維數(shù)組的定義二維數(shù)組定義的一般形式為類(lèi)型說(shuō)明符數(shù)組名[常量表達(dá)式][常量表達(dá)式];例如:定義a為3×4(3行4列)的數(shù)組,b為5×10(5行10列)的數(shù)組。如下:floata[3][4],b[5][10];不能寫(xiě)成

floata[3,4],b[5,10];第20頁(yè)/共73頁(yè)注意我們可以把二維數(shù)組看作是一種特殊的一維數(shù)組:它的元素又是一個(gè)一維數(shù)組。例如,可以把a(bǔ)看作是一個(gè)一維數(shù)組,它有3個(gè)元素:a[0]、a[1]、a[2],每個(gè)元素又是一個(gè)包含4個(gè)元素的一維數(shù)組。第21頁(yè)/共73頁(yè)§7.2.1二維數(shù)組的定義

二維數(shù)組中的元素在內(nèi)存中的排列順序是:按行存放,即先順序存放第一行的元素,再存放第二行的元素…

一維數(shù)組在內(nèi)存中的存放下圖表示對(duì)a[3][4]數(shù)組存放的順序第22頁(yè)/共73頁(yè)地址

數(shù)組元素b[0][0]b[0][1]b[0][2]b[1][0]b[1][1]b[1][2]b[2][0]b[2][1]b[2][2]3000H3002H3004H3006H3008H300AH300CH300EH3010H例如:整型數(shù)組b[3][3]={{1,2,3},{4,5,6},{7,8,9}};123456789第23頁(yè)/共73頁(yè)問(wèn)題:有了二維數(shù)組的基礎(chǔ),那么多維數(shù)組如何定義呢?

定義三維數(shù)組:

floata[2][3][4];多維數(shù)組元素在內(nèi)存中的排列順序:第一維的下標(biāo)變化最慢,最右邊的下標(biāo)變化最快。§7.2.1二維數(shù)組的定義

a[0][0][0]→a[0][0][1]→a[0][0][2]→a[0][0][3]→a[0][1][0]→a[0][1][1]→a[0][1][2]→a[0][1][3]→

a[0][2][0]→a[0][2][1]→a[0][2][2]→a[0][2][3]→a[1][0][0]→a[1][0][1]→a[1][0][2]→a[1][0][3]→a[1][1][0]→a[1][1][1]→a[1][1][2]→a[1][1][3]→a[1][2][0]→a[1][2][1]→a[1][2][2]→a[1][2][3]→三維數(shù)組的元素排列順序第24頁(yè)/共73頁(yè)二維數(shù)組元素的表示形式為:數(shù)組名[下標(biāo)][下標(biāo)]

例如:a[2][3]下標(biāo)可以是整型表達(dá)式,如a[2-1][2*2-1]數(shù)組元素可以出現(xiàn)在表達(dá)式中,也可以被賦值,例如:b[1][2]=a[2][3]/2注意不要寫(xiě)成a[2,3],a[2-1,2*2-1]形式§7.2.2二維數(shù)組的引用第25頁(yè)/共73頁(yè)常出現(xiàn)的錯(cuò)誤有:

inta[3][4];

/*定義a為3×4的數(shù)組*/

┆a[3][4]=3;

在使用數(shù)組元素時(shí),應(yīng)該注意下標(biāo)值應(yīng)在已定義的數(shù)組大小的范圍內(nèi)。第26頁(yè)/共73頁(yè)可以用下面4種方法對(duì)二維數(shù)組初始化數(shù)據(jù)類(lèi)型

數(shù)組名[常量表達(dá)式1][常量表達(dá)式2]={初始化數(shù)據(jù)};(1)

分行給二維數(shù)組賦初值。如:

inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};

(2)

可以將所有數(shù)據(jù)寫(xiě)在一個(gè)花括弧內(nèi),按數(shù)組排列的順序?qū)Ω髟刭x初值。如:inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};§7.2.3二維數(shù)組的引用第27頁(yè)/共73頁(yè)(3)

可以對(duì)部分元素賦初值。如

inta[3][4]={{1},{5},{9}};

100050009000也可以對(duì)各行中的某一元素賦初值,如inta[3][4]={{1},{0,6},{0,0,11}};100006000

0011

100056000000也可以只對(duì)某幾行元素賦初值。如:inta[3][4]={{1},{5,6}};

第28頁(yè)/共73頁(yè)(4)如果對(duì)全部元素都賦初值,則定義數(shù)組時(shí)對(duì)第一維的長(zhǎng)度可以不指定,但第二維的長(zhǎng)度不能省。如:inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};它等價(jià)于:inta[][4]={1,2,3,4,5,6,7,8,9,10,11,12};在定義時(shí)也可以只對(duì)部分元素賦初值而省略第一維的長(zhǎng)度,但應(yīng)分行賦初值。如:inta[][4]={{0,0,3},{},{0,10}};0030000001000§7.2.3二維數(shù)組的引用第29頁(yè)/共73頁(yè)§7.2.4二維數(shù)組程序舉例例7.4將一個(gè)二維數(shù)組行和列元素互換,存到另一個(gè)二維數(shù)組中。#include<stdio.h>voidmain(){inta[2][3]={{1,2,3},{4,5,6}};intb[3][2],i,j;printf(″arraya:\n″);for(i=0;i<=1;i++){for(j=0;j<=2;j++){例如:a=12314456b=2536第30頁(yè)/共73頁(yè)printf(″%5d″,a[i][j]);b[j][i]=a[i][j];}printf(″\n″);}printf(″arrayb:\n″);for(i=0;i<=2;i++){for(j=0;j<=1;j++)printf("%5d″,b[i][j]);printf(″\n″);}}/*程序結(jié)束*/運(yùn)行結(jié)果如下:arraya:123456arrayb:1425

3

6

第31頁(yè)/共73頁(yè)例7.5:有一個(gè)3×4的矩陣,要求編程序求出其中值最大的那個(gè)元素的值,以及其所在的行號(hào)和列號(hào)。先用N-S流程圖表示算法

,如下:§7.2.4二維數(shù)組程序舉例第32頁(yè)/共73頁(yè)程序如下:

#include<stdio.h>voidmain(){inti,j,row=0,colum=0,max;inta[3][4]={{1,2,3,4},{9,8,7,6},

{-10,10,-5,2}};max=a[0][0];

第33頁(yè)/共73頁(yè)for(i=0;i<=2;i++)for(j=0;j<=3;j++)if(a[i][j]>max){max=a[i][j];row=i;colum=j;}printf(″max=%d,row=%d,colum=%d\n″,max,row,colum);}/*程序結(jié)束*/第34頁(yè)/共73頁(yè)§7-3

字符數(shù)組用來(lái)存放字符數(shù)據(jù)的數(shù)組是字符數(shù)組。字符數(shù)組中的一個(gè)元素存放一個(gè)字符?!?.3.1字符數(shù)組的定義定義方法與前面介紹的類(lèi)似。例如:charc[10];c[0]=′I′;c[1]=′′;c[2]=′a′;c[3]=′m′;c[4]=′′;c[5]=′h′;c[6]=′a′;c[7]=′p′;c[8]=′p′;c[9]=′y′;第35頁(yè)/共73頁(yè)對(duì)字符數(shù)組初始化,最容易理解的方式是逐個(gè)字符賦給數(shù)組中各元素。如:charc[10]={’I′,’′,’a′,’m′,’’,′h′,′a′,′p′,′p′,′y′};

如果在定義字符數(shù)組時(shí)不進(jìn)行初始化,則數(shù)組中各元素的值是不可預(yù)料的。如果花括弧中提供的初值個(gè)數(shù)(即字符個(gè)數(shù))大于數(shù)組長(zhǎng)度,則按語(yǔ)法錯(cuò)誤處理。

§7.3.2字符數(shù)組的初始化第36頁(yè)/共73頁(yè)如果初值個(gè)數(shù)小于數(shù)組長(zhǎng)度,則只將這些字符賦給數(shù)組中前面那些元素,其余的元素自動(dòng)定為空字符(即′\0′)。例如:

charc[10]={′c′,′′,′p′,′r′,′o′,′g′,′r′,′a′,′m′};第37頁(yè)/共73頁(yè)如果提供的初值個(gè)數(shù)與預(yù)定的數(shù)組長(zhǎng)度相同,在定義時(shí)可以省略數(shù)組長(zhǎng)度,系統(tǒng)會(huì)自動(dòng)根據(jù)初值個(gè)數(shù)確定數(shù)組長(zhǎng)度。例如:charc[]={′I′,′′,′a′,′m′,′′,′h′,′a′,′p′,′p′,′y′};數(shù)組c的長(zhǎng)度自動(dòng)定為10。

也可以定義和初始化一個(gè)二維字符數(shù)組。例如:

第38頁(yè)/共73頁(yè)

chardiamond[5][5]={{′′,′′,*′},{′′,′*′,′′,′*′},{′*′,′′,′′,′′,′*′},{′′,′*′,′′,′*′},{′′,′′,′*′}}第39頁(yè)/共73頁(yè)§7.3.3字符數(shù)組的引用例7.6輸出一個(gè)字符串。

程序如下:#include<stdio.h>voidmain(){charc[10]={’I’,’

’,’a’,’m’,’

’,’a’,’

’,

’b’,’o’,′y′};inti;for(i=0;i<10;i++)printf(″%c″,c[i]);printf(″\n″);}運(yùn)行結(jié)果:Iamaboy第40頁(yè)/共73頁(yè)例7.7輸出一個(gè)鉆石圖形

#include<stdio.h>voidmain(){chardiamond[][5]={{′′,′′,′*′},{′′,′*′,′′,′*′},{′*′,′′,′′,′′,′*′},{′′,′*′,′′,′*′},{′′,′′,′*′}};inti,j;for(i=0;i<5;i++){for(j=0;j<5;j++)printf(″%c″,diamond[i][j]);printf(″\n″);}}運(yùn)行結(jié)果********§7.3.3字符數(shù)組的引用第41頁(yè)/共73頁(yè)§7.3.4字符串和字符串結(jié)束標(biāo)志為了測(cè)定字符串的實(shí)際長(zhǎng)度,C語(yǔ)言規(guī)定了一個(gè)“字符串結(jié)束標(biāo)志”,以字符′\0′作為標(biāo)志。如果有一個(gè)字符串,前面9個(gè)字符都不是空字符(即′\0′),而第10個(gè)字符是′\0′,則此字符串的有效字符為9個(gè)。系統(tǒng)對(duì)字符串常量也自動(dòng)加一個(gè)′\0′作為結(jié)束符。′\0′代表ASCII碼為0的字符,從ASCII碼表中可以查到,ASCII碼為0的字符不是一個(gè)可以顯示的字符,而是一個(gè)“空操作符”,即它什么也不干。用它來(lái)作為字符串結(jié)束標(biāo)志不會(huì)產(chǎn)生附加的操作或增加有效字符,只起一個(gè)供辨別的標(biāo)志。第42頁(yè)/共73頁(yè)可以用字符串常量來(lái)使字符數(shù)組初始化。例如charc[]={″Iamhappy″};也可以省略花括弧,直接寫(xiě)成charc[]=“Iamhappy″;

它與下面的數(shù)組初始化等價(jià)charc[]={′I′,′′,′a′,′m′,′′,′h′,′a′,′p′,′p′,′y′,′\0′}注意再比如charc[10]={"China″};

數(shù)組c的前5個(gè)元素為′C′,′h′,′i′,′n′,′a′,第6個(gè)元素為′\0′,后4個(gè)元素也設(shè)定為空字符?!?.3.4字符串和字符串結(jié)束標(biāo)志第43頁(yè)/共73頁(yè)需要說(shuō)明的是:字符數(shù)組并不要求它的最后一個(gè)字符為′\0′,甚至可以不包含′\0′。例如:charc[5]={′C′,′h′,′i′,′n′,′a′};這樣寫(xiě)完全是合法的。但是由于系統(tǒng)對(duì)字符串常量自動(dòng)加一個(gè)′\0′。因此,人們?yōu)榱耸固幚矸椒ㄒ恢?,在字符?shù)組中也常人為地加上一個(gè)′\0′。如:charc[6]={′C′,′h′,′i′,′n′,′a′,′\0′};這樣做,這樣做是為了便于引用字符數(shù)組中的字符串。第44頁(yè)/共73頁(yè)定義了以下的字符數(shù)組∶charc[]={”P(pán)ascalprogram”};現(xiàn)在,想用一個(gè)新的字符串代替原有的字符串”P(pán)ascalprogram”

,從鍵盤(pán)向字符數(shù)組輸入∶Hello如果不加′\0′的話,字符數(shù)組中的字符如下∶Hellolprogram例如第45頁(yè)/共73頁(yè)§7-3

字符數(shù)組§7.3.5字符數(shù)組的輸入輸出字符數(shù)組的輸入輸出可以有兩種方法:

逐個(gè)字符輸入輸出。用格式符“%c”輸入或輸出一個(gè)字符。將整個(gè)字符串一次輸入或輸出。用“%s”格式符,意思是對(duì)字符串的輸入輸出。

第46頁(yè)/共73頁(yè)charc[]={″China″};printf(″%s″,c);

例如在內(nèi)存中數(shù)組c的狀態(tài)第47頁(yè)/共73頁(yè)用“%s”格式符輸出字符串時(shí),printf函數(shù)中的輸出項(xiàng)是字符數(shù)組名,而不是數(shù)組元素名。如:寫(xiě)成下面這樣是不對(duì)的:printf(″%s″,c[0]);如果數(shù)組長(zhǎng)度大于字符串實(shí)際長(zhǎng)度,也只輸出到遇′\0′結(jié)束。輸出字符不包括結(jié)束符′\0′。如:charc[10]={″China″};/*字符串長(zhǎng)度為5,連’\0’共占6個(gè)字節(jié)*/printf(″%s″,c);只輸出字符串的有效字符“China”,而不是輸出10個(gè)字符。這就是用字符串結(jié)束標(biāo)志的好處。說(shuō)明第48頁(yè)/共73頁(yè)(4)如果一個(gè)字符數(shù)組中包含一個(gè)以上′\0′,則遇第一個(gè)′\0′時(shí)輸出就結(jié)束。可以用scanf函數(shù)輸入一個(gè)字符串。例如scanf(″%s″,c);scanf函數(shù)中的輸入項(xiàng)c是已定義的字符數(shù)組名,輸入的字符串應(yīng)短于已定義的字符數(shù)組的長(zhǎng)度。例如,定義charc[6];

從鍵盤(pán)輸入:

China↙系統(tǒng)自動(dòng)在China后面加一個(gè)′\0′結(jié)束符。

說(shuō)明第49頁(yè)/共73頁(yè)如果利用一個(gè)scanf函數(shù)輸入多個(gè)字符串,則在輸入時(shí)以空格分隔。例如:charstrl[5],str2[5],str3[5];scanf(″%s%s%s″,str1,str2,str3);輸入數(shù)據(jù):Howareyou?數(shù)組中未被賦值的元素的值自動(dòng)置′\0′。第50頁(yè)/共73頁(yè)若改為charstr[13];scanf(″%s″,str);如果輸入以下12個(gè)字符Howareyou?大家思考一下str[13]數(shù)組中存放的結(jié)果會(huì)是什么呢?由于系統(tǒng)把空格字符作為輸入的字符串之間的分隔符,因此只將空格前的字符“How”送到str中。由于把“How”作為一個(gè)字符串處理,故在其后加′\0′。第51頁(yè)/共73頁(yè)分析圖中所示的字符數(shù)組用8進(jìn)制形式輸出數(shù)組c的起始地址printf(″%o″,c);

輸出數(shù)組c的起始地址2000。

printf(″%s″,c);按字符數(shù)組名c找到其數(shù)組起始地址,然后逐個(gè)輸出其中的字符,直到遇′\0′為止。需要注意:scanf函數(shù)中的輸入項(xiàng)如果字符數(shù)組名。不要再加地址符&,因?yàn)樵贑語(yǔ)言中數(shù)組名代表該數(shù)組的起始地址。下面寫(xiě)法不對(duì):scanf(″%s″,&str);第52頁(yè)/共73頁(yè)§7.3.6字符串處理函數(shù)在C的函數(shù)庫(kù)中提供了一些用來(lái)處理字符串的函數(shù),使用方便。幾乎所有版本的C編譯系統(tǒng)都提供這些函數(shù)。下面介紹幾種常用的函數(shù)。

1.puts函數(shù)其一般形式為:puts(字符數(shù)組)其作用是將一個(gè)字符串(以′\0′結(jié)束的字符序列)輸出到終端。假如已定義str是一個(gè)字符數(shù)組名,且該數(shù)組已被初始化為"China"。則執(zhí)行puts(str);其結(jié)果是在終端上輸出China。由于可以用printf函數(shù)輸出字符串,因此puts函數(shù)用的不多。第53頁(yè)/共73頁(yè)用puts函數(shù)輸出的字符串中可以包含轉(zhuǎn)義字符。例如:charstr[]={″China\nBeijing″};puts(str);輸出結(jié)果:ChinaBeijing在輸出時(shí),將字符串結(jié)束標(biāo)志′\0′轉(zhuǎn)換成′\n′,即輸出完字符串后換行。第54頁(yè)/共73頁(yè)2.gets函數(shù)其一般形式為:gets(字符數(shù)組)其作用是從終端輸入一個(gè)字符串到字符數(shù)組,并且得到一個(gè)函數(shù)值。該函數(shù)值是字符數(shù)組的起始地址。如執(zhí)行下面的函數(shù):gets(str)從鍵盤(pán)輸入:Computer↙§7.3.6字符串處理函數(shù)第55頁(yè)/共73頁(yè)將輸入的字符串"Computer"送給字符數(shù)組str(請(qǐng)注意送給數(shù)組的共有9個(gè)字符,而不是8個(gè)字符),函數(shù)值為字符數(shù)組str的起始地址。一般利用gets函數(shù)的目的是向字符數(shù)組輸入一個(gè)字符串,而不大關(guān)心其函數(shù)值。注意:用puts和gets函數(shù)只能輸入或輸出一個(gè)字符串,不能寫(xiě)成puts(str1,str2)

或gets(str1,str2)第56頁(yè)/共73頁(yè)3.strcat函數(shù)其一般形式為:strcat(字符數(shù)組1,字符數(shù)組2)Strcat的作用是連接兩個(gè)字符數(shù)組中的字符串,把字符串2接到字符串1的后面,結(jié)果放在字符數(shù)組1中,函數(shù)調(diào)用后得到一個(gè)函數(shù)值——字符數(shù)組1的地址?!?.3.6字符串處理函數(shù)第57頁(yè)/共73頁(yè)例如:charstr1[30]={″People′sRepublicof″};charstr2[]={″China″};print(″%s″,strcat(str1,str2));

輸出:People′sRepublicofChina

第58頁(yè)/共73頁(yè)4.strcpy函數(shù)其一般形式為:strcpy(字符數(shù)組1,字符串2)

strcpy是“字符串復(fù)制函數(shù)”。作用是將字符串2復(fù)制到字符數(shù)組1中去。例如:charstr1[10],str2[]={″China″};strcpy(str1,str2);

§7.3.6字符串處理函數(shù)第59頁(yè)/共73頁(yè)1.字符數(shù)組1必須定義得足夠大,以便容納被復(fù)制的字符串。字符數(shù)組1的長(zhǎng)度不應(yīng)小于字符串2的長(zhǎng)度。

2.“字符數(shù)組1”必須寫(xiě)成數(shù)組名形式(如str1),“字符串2”可以是字符數(shù)組名,也可以是一個(gè)字符串常量。如strcpy(str1,″China″);

3.復(fù)制時(shí)連同字符串后面的′\0′一起復(fù)制到字符數(shù)組1中。

4.可以用strcpy函數(shù)將字符串2中前面若干個(gè)字符復(fù)制到字符數(shù)組1中去。例如:strcpy(str1,str2,2);作用是將str2中前面2個(gè)字符復(fù)制到str1中去,然后再加一個(gè)‘\0’。第60頁(yè)/共73頁(yè)5.不能用賦值語(yǔ)句將一個(gè)字符串常量或字符數(shù)組直接給一個(gè)字符數(shù)組。如下面兩行都是不合法的:str1=″China″;str1=str2;

而只能用strcpy函數(shù)將一個(gè)字符串復(fù)制到另一個(gè)字符數(shù)組中去。用賦值語(yǔ)句只能將一個(gè)字符賦給一個(gè)字符型變量或字符數(shù)組元素。如下面是合法的:chara[5],c1,c2;c1=′A′;c2=′B′;a[0]=′C′;a[1]=′h′;a[2]=′i′;a[3]=′n′;a[4]=′a′;

第61頁(yè)/共73頁(yè)5.strcmp函數(shù)其一般形式為:strcmp(字符串1,字符串2)

strcmp的作用是比較字符串1和字符串2。例如:strcmp(str1,str2);strcmp(″China″,″Korea″);strcmp(str1,″Beijing″);§7.3.6字符串處理函數(shù)第62頁(yè)/共73頁(yè)"A"<"B",

"a">"A","computer">"compare","36+54">"!$&#","CHINA">"CANADA","DOG"<"cat"

字符串比較的規(guī)則與其他語(yǔ)言中的規(guī)則相同,即對(duì)兩個(gè)字符串自左至右逐個(gè)字符相比(按ASCII碼值大小比較),直到出現(xiàn)不同的字符或遇到′\0′為止。如全部字符相同,則認(rèn)為相等;若出現(xiàn)不相同的字符,則以第一個(gè)不相同的字符的比較結(jié)果為準(zhǔn)。

例如第63頁(yè)/共73頁(yè)比較的結(jié)果由函數(shù)值帶回(1)

如果字符串1=字符串2,函數(shù)值為0。(2)

如果字符串1>字符串2,函數(shù)值為一正整數(shù)。(3)

如果字符串1<字符串2,函數(shù)值為一負(fù)整數(shù)。注意:對(duì)兩個(gè)字符串比

溫馨提示

  • 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)論