《C語言程序設(shè)計(jì)》第5章數(shù)組、字符串、指針_第1頁
《C語言程序設(shè)計(jì)》第5章數(shù)組、字符串、指針_第2頁
《C語言程序設(shè)計(jì)》第5章數(shù)組、字符串、指針_第3頁
《C語言程序設(shè)計(jì)》第5章數(shù)組、字符串、指針_第4頁
《C語言程序設(shè)計(jì)》第5章數(shù)組、字符串、指針_第5頁
已閱讀5頁,還剩76頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第5章數(shù)組、字符串、指針本章要求:1、掌握C語言數(shù)組在內(nèi)存中的存儲形式2、掌握一維數(shù)組和二維數(shù)組的定義及使用3、掌握使用指針處理數(shù)組的方法4、掌握使用字符數(shù)組及指針處理字符串?dāng)?shù)據(jù)的方法5、掌握與數(shù)組有關(guān)的基本算法(如排序、查找、插入、刪除等)的程序設(shè)計(jì)重點(diǎn):一維數(shù)組、二維數(shù)組的定義與使用方法,使用指針訪問數(shù)組和字符串的方法。難點(diǎn):二維數(shù)組與指針;與數(shù)組有關(guān)的常用算法(排序、查找與插入等)。5.1數(shù)組概述例.輸入10個(gè)數(shù),求出他們的平均數(shù)。main(){intn,a,s=0;floatave;for(n=1;n<=10;n++){scanf(“%d”,&a);

s=s+a;

}ave=s/10;printf(“Ave=%d\n”,ave);

}并打印出其中大于平均數(shù)的數(shù)a

變量a中只能存放一個(gè)整數(shù)

需要10個(gè)變量的內(nèi)存空間才可以保留10個(gè)整數(shù)如果使用:a1,a2,a3,a4,a5,a6,a7,a8,a9,a10這10個(gè)變量,代碼:intn,s,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10;floatave;scanf(“%d%d%d%d%d%d%d%d%d%d”,

&a1,&a2,&a3,&a4,&a5,&a6,&a7,&a8,&a9,

&a10);s=a1+a2+a3+a4+a5+a6+a7+a8+a9+a10;ave=s/10;if(a1>ave)printf(“%d”,a1);

if(a2>ave)printf(“%d”,a2);

if(a3>ave)printf(“%d”,a3);………..

/*實(shí)際程序是不能這樣寫*/思考:發(fā)現(xiàn):如果不是10個(gè)數(shù),而是100,1000,甚至是10000,此時(shí)按上面方法編寫程序就非常冗長。

如果可以使用循環(huán)來編寫,程序可以簡潔許多。要使用循環(huán):必須使用ai(i=1,2…10)的形式來代表a1,a2…a10在C語言中使用“數(shù)組”來實(shí)現(xiàn):a[i]a[0]a[1]…a[9]#include<stdio.h>voidmain(){intn,i;

floats=0,ave,a[10];

for(i=0;i<10;i++){scanf("%f",&a[i]);s=s+a[i];}ave=s/10;for(i=0;i<10;i++)if(a[i]>ave)printf("%f",a[i]);}聲明有10個(gè)元素的一維數(shù)組aa[0]a[1]…a[9]a[i]a[i]a[i]a[i]在程序設(shè)計(jì)中,為了處理方便,把具有相同類型的若干變量按有序的形式組織起來。這些按序排列的同類數(shù)據(jù)元素的集合稱為數(shù)組。在C語言中,數(shù)組屬于構(gòu)造數(shù)據(jù)類型。按類型分為:數(shù)值數(shù)組、字符數(shù)組、指針數(shù)組、結(jié)構(gòu)數(shù)組等按維數(shù)可分為:一維數(shù)組、二維數(shù)組、多維數(shù)組。數(shù)組在內(nèi)存中占用一片連續(xù)的存儲單元5.2一維數(shù)組只有一個(gè)下標(biāo)變量的數(shù)組,稱為一維數(shù)組。

5.2.1一維數(shù)組定義

一般形式為:

類型符數(shù)組名[常量表達(dá)式];

其中:類型說明符是任一種基本數(shù)據(jù)類型或構(gòu)造數(shù)據(jù)類型,數(shù)組名是用戶定義的標(biāo)識符;方括號中的常量表達(dá)式表示數(shù)據(jù)元素的個(gè)數(shù),也稱為數(shù)組的長度。例如:inta[10];floatb[10],c[20];charch[20];

數(shù)組在內(nèi)存中占據(jù)一片連續(xù)的存儲空間:

以inta[5]為例,在內(nèi)存中為:a[0]a[1]a[2]a[3]a[4]相當(dāng)于聲明了5個(gè)整型變量說明:數(shù)組的所有元素的數(shù)據(jù)類型都是相同的。數(shù)組取名規(guī)則應(yīng)符合標(biāo)識符的規(guī)定,數(shù)組名不能與同一函數(shù)中其它變量名相同:

inta;floata[10];

是錯(cuò)誤的。C語言中規(guī)定數(shù)組的下標(biāo)從0開始,方括號中常量表達(dá)式表示數(shù)組元素的個(gè)數(shù)。不能在方括號中用變量來表示元素的個(gè)數(shù),但是可以是符號常數(shù)或常量表達(dá)式。例如:intn=5,a[n];

是錯(cuò)誤的。5.2.2一維數(shù)組的初始化1、數(shù)組聲明時(shí)初始化

在編譯階段進(jìn)行的。這樣將減少運(yùn)行時(shí)間,提高效率。數(shù)組初始化的一般形式為:

類型符數(shù)組名[常量表達(dá)式]={值,值…值};例如:inta[10]={0,1,2,3,4,5,6,7,8,9};

相當(dāng)于a[0]=0;a[1]=1;...a[9]=9;

說明:inta[10]={0,1,2,3,4};inta[10]=1;staticinta[3];inta[]={1,2,3,4,5};inta[5]={1,2,3,4,5,1};給前5個(gè)元素賦值,其余賦0值不能給數(shù)組整體賦值,改成{1}可以省略數(shù)組元素個(gè)數(shù)。靜態(tài)存儲類型,初值為0初值的個(gè)數(shù)不能超過元素個(gè)數(shù)2、使用賦值語句初始化

用賦值語句初始化是在程序執(zhí)行過程中實(shí)現(xiàn)的。例如:inta[3];a[0]=5;a[1]=8;a[2]=9;對于數(shù)組的元素用賦值語句初始化,常常使用循環(huán)來完成,例如:intk,a[10];for(k=0;k<10;k++)a[k]=1;/*對數(shù)組中所有元素賦初值為1*/5.2.3數(shù)組元素的引用

數(shù)組元素是組成數(shù)組的基本單元,數(shù)組元素可以看成一種變量。引用數(shù)組元素有下標(biāo)法和指針法。本小節(jié)介紹下標(biāo)法,指針法將在5.5節(jié)中介紹。使用下標(biāo)法引用一維數(shù)組元素的一般形式為:

數(shù)組名[下標(biāo)]

其中,的下標(biāo)只能為整型常量或整型表達(dá)式。若為小數(shù)時(shí),C編譯將自動(dòng)取整。說明:intn=3,a[10];

a[n]=5;a[n+1]=10;inta[10],x,y;

a[10]=5;inta[10];

printf("%d",a);

正確代碼。引用數(shù)組元素的時(shí)候,可以用變量。錯(cuò)誤代碼。最大下標(biāo)為9,沒有a[10]元素。錯(cuò)誤代碼。不能用一個(gè)語句輸出整個(gè)數(shù)組。5.2.4一維數(shù)組的基本操作可通過循環(huán)給數(shù)組元素輸入數(shù)據(jù)

inta[10],i,;for(i=0;i<10;i++)scanf(“%d”,&a[i]);也可通過循環(huán)輸出數(shù)組元素

for(i=0;i<10;i++)printf(“%d”,a[i]);例,輸入5個(gè)數(shù),再按倒序輸出5-1.c求數(shù)組中最大元素#defineN10main()

{inti,p,max,a[N];printf("Enter%dNumbers\n",N);for(i=0;i<N;i++)scanf("%d",&a[i]);max=a[0];for(i=1;i<N;i++)if(a[i]>max)max=a[i];printf("TheMax=%d\n",max);}p=0;a[%d]=%d\n",p,max);{p=i;}及其下標(biāo)求最大、最小值以及排序算法中的最大、最小值確定都可以采用類似方法:把第一個(gè)元素假想為當(dāng)前找到的最大、最小值,在后續(xù)的比較中進(jìn)行更新。5-2.c一維數(shù)組的倒置for(i=0;i<N/2;i++){t=a[i];a[i]=a[N-i-1];a[N-i-1]=t;}002468135791924681357029746813520397568134204975381642059753186420a[0]a[1]…a[9]類似問題:字符串的回文比較5-3.c5.2.5一維數(shù)組的應(yīng)用舉例例:如果要統(tǒng)計(jì)0~9,10~19,20~29,….80~89,90~99分?jǐn)?shù)段及100分的人數(shù)。

編程分析:a數(shù)組用來存放20個(gè)學(xué)生成績;另用數(shù)組bn來存各分?jǐn)?shù)段的人數(shù):bn[0]存0~9分的人數(shù),bn[1]存10~19分的人數(shù),…bn[9]存90~99分的人數(shù),bn[10]存100分的人數(shù)。5-4.c一維數(shù)組的應(yīng)用舉例:

5.8.1排序問題(教材P.166)數(shù)據(jù)的排序就是將一批數(shù)據(jù)由小大到(升序)或由大到?。ń敌颍┻M(jìn)行排列。常用的有選擇法、冒泡法。首先要將需要排序的數(shù)據(jù)放到數(shù)組中,這樣,便于我們排序。1.選擇法排序算法描述:從剩下的元素集中找一個(gè)最小的元素依次放到第i個(gè)位置。i從0開始原始數(shù)據(jù):869327第一輪后:269387第二輪后:239687第三輪后:236987第四輪后:2367

89第五輪后:236789a[0]a[1]a[2]a[3]a[4]a[5]8693276個(gè)數(shù)需要經(jīng)歷5輪選擇(i=0~4)每一輪做的工作:從第i個(gè)到最后一個(gè)中找一個(gè)最小的。與第i個(gè)交換。放到a[i]這個(gè)位置。代碼:for(i=0;i<5;i++){p=i;for(j=i+1;j<6;j++)if(a[j]<a[p])p=j;t=a[i];a[i]=a[p];a[p]=t;}i<N-1;i<N;

從第i個(gè)到最后一個(gè)中找一個(gè)最小的。與第i個(gè)交換。6個(gè)數(shù)需要經(jīng)歷5輪選擇(i=0~4)5-5.c2.冒泡法排序(升序)算法描述第一輪:8693268932689326839268329①②③④

683296382963289①②③第二輪:5個(gè)數(shù)共4輪即可…代碼:

for(i=0;i<4;i++)for(j=0;j<4-i;j++)if(a[j]>a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;}i<N-1;i<N-i-1;每輪需要經(jīng)過4-i次比較發(fā)現(xiàn)前面的數(shù)比后面的數(shù)大則需要交換,把大的換到后面去。5個(gè)數(shù)需要經(jīng)歷4輪選擇(i=0~3)5-6.c5.3二維數(shù)組與多維數(shù)組5.3.1二維數(shù)組的聲明二維數(shù)組說明的一般形式是:

類型符數(shù)組名[常量表達(dá)式1][常量表達(dá)式2];其中:常量表達(dá)式1表示第一維下標(biāo)的長度常量表達(dá)式2表示第二維下標(biāo)的長度。例如:inta[3][4];

floatb[4][4];

charc[5][10];

inta[3][4];

該數(shù)組的下標(biāo)變量共有3×4個(gè),即:a[0][0]a[0][1]a[0][2]a[0][3]a[1][0]a[1][1]a[1][2]a[1][3]a[2][0]a[2][1]a[2][2]a[2][3]a[0][0]a[0][1]a[0][2]a[0][3]a[1][0]…a[2][3]二維數(shù)組在內(nèi)存的存放順序是“先行后列”注意:C語言允許二維數(shù)組a[3][4]可分解為三個(gè)一維數(shù)組,其數(shù)組名分別為a[0],a[1],a[2]。這三個(gè)一維數(shù)組都有4個(gè)元素。5.3.2二維數(shù)組元素的引用二維數(shù)組的元素的引用形式為:

數(shù)組名[下標(biāo)][下標(biāo)]使用二維數(shù)組的情況舉例:學(xué)生多門功課的成績,如:

a[100][3]可以用來記錄100個(gè)學(xué)生3門功課的成績。矩陣,如:

a[3][3]可以用來記錄3×3的矩陣。一個(gè)數(shù)組元素正好存放一個(gè)矩陣的元素。5.3.3二維數(shù)組的初始化

二維數(shù)組初始化也是在類型說明時(shí)給各下標(biāo)變量賦以初值。1.按行分段賦值可寫為

int[5][3]={{80,75,92},{61,65,71},

{59,63,70},{85,87,90},{76,77,85}};

2.按行連續(xù)賦值可寫為

inta[5][3]={80,75,92,61,65,71,59,63,

70,85,87,90,76,77,85};

注意:這兩種賦初值的結(jié)果是完全相同的。說明:inta[3][3]={{1},{2},{3}};inta[][3]={1,2,3,4,5,6,7,8};1002003001234567805.3.4二維數(shù)組的基本操作二維數(shù)組的操作一般需要使用二重循環(huán)。1.二維數(shù)組的輸入輸出

設(shè)數(shù)組己定義

inta[N][M];

其程序段如下:for(i=0;i<N;i++)for(j=0;j<M;j++)scanf(“%d”,&a[i][j]);for(i=0;i<N;i++){for(j=0;j<M;j++)printf(“%d”,a[i][j]);printf(“\n”);}2.求最大元素及其所在的行和列

編程基本思路與在一維數(shù)組求最大值元素相同,row,column存放最大值所在行列號。3.矩陣的轉(zhuǎn)置(方陣)對比一維數(shù)組的倒置,注意:哪些元素要交換?和誰交換?a[0][0]a[0][1]a[0][2]a[0][3]a[1][0]a[1][1]a[1][2]a[1][3]a[2][0]a[2][1]a[2][2]a[2][3]a[3][0]a[3][1]a[3][2]a[3][3]

如果不是方陣,則要定義另一個(gè)數(shù)組。b[j][i]=a[i][j]5.3.6多維數(shù)組的聲明和引用

在處理三維空問題等其它復(fù)雜問題時(shí)要使用到三維及三維以上的數(shù)組,通常把三維及三維以上的數(shù)組稱為多維數(shù)組。定義多維數(shù)組的格式如下:

類型符數(shù)組名[常量1][常量2][常量3]…;例如:inta[5][5][5];/*聲明a是三維數(shù)組*/floatb[2][6][10][5];/*聲明b是四維數(shù)組*/注意:操作多維數(shù)組常常要用到多重循環(huán)。2.6指針變量

2.6.1地址與指針的概念

數(shù)據(jù)存放在內(nèi)存中,每個(gè)字節(jié)內(nèi)存單元按順序編號,稱為“內(nèi)存地址”。通過內(nèi)存單元的地址即可準(zhǔn)確地找到該內(nèi)存單元。變量的地址就是變量的指針5x2019變量名變量值變量地址p指針變量2.6.3指針變量的定義

指針變量定義的一般形式:

類型符*標(biāo)識符;說明:“*”直接修飾的“標(biāo)識符”是指針變量。

int*p,x;

/*p是指針變量,x是整型變量*/指針?biāo)笇ο蟮念愋头Q為指針的基準(zhǔn)類型。

int*p1;

/*p1的基準(zhǔn)類型為整型,即p1所指向?qū)ο蟮念愋褪钦?/

char*p2;

/*p2的基準(zhǔn)類型為字符型,即p2所指向?qū)ο蟮念愋褪亲址?/2.6.4指針變量的初始化#include<stdio.h>voidmain(){int*p;*p=5;printf("*p=%d\n",*p);}錯(cuò)誤代碼:可能引起嚴(yán)重后果不定值p指向不可預(yù)料的內(nèi)存空間*p可以表示p變量所指的變量初始化指針變量的方法主要有以下3種:inta,*p;

p=&a;

inta,*p1,*p2=&a;

p1=p2;

使用malloc函數(shù)或calloc函數(shù),給它們分配一個(gè)自由的內(nèi)存空間地址。apap1p22.6.5指針變量的訪問格式為:

*指針變量例:inta=5,*p=&a;a為整型變量,變量里存放的是5p為指針變量,變量里存放的是變量a的地址&a表示變量a的地址*p表示變量p所指向的變量,即5ap&a5*pp+1p-1++--運(yùn)算5.4數(shù)組與指針

5.4.1一維數(shù)組與指針

1、使用指針引用數(shù)組元素系統(tǒng)給一個(gè)一維數(shù)組在內(nèi)存中分配的一片連續(xù)存儲空間,C語言規(guī)定其數(shù)組名就是數(shù)組在內(nèi)存中的首地址。

使用指針引用數(shù)組元素的準(zhǔn)備工作:

inta[10],*p/*定義數(shù)組與指針變量*/

做賦值操作:p=a;p=&a[0];兩種方法效果完全一樣使用指針引用數(shù)組元素使用指針變量p指向數(shù)組a:方法一:

inta[10],*p;

p=a;方法二:

inta[10],*p=a;a[0]a[1]a[2]...a[i]...a[9]pp+1或a+1p+2或a+2p+i或a+ip+9或a+9a數(shù)組注意:指針變量p的運(yùn)算*(p+0)*(p+1)*(p+2)*(p+i)*(p+9)說明:p+i指向元素a[i]

使用指針法引用一維數(shù)組的第i個(gè)元素的方法:使用指針變量*(p+i)訪問元素a[i]。使用數(shù)組名*(a+i)訪問元素a[i]。指向數(shù)組的指針變量也可以帶下標(biāo),即:

p[i]與*(p+i)等價(jià),表示元素a[i]。例子:方法一分析inti,imax,max,a[N];for(i=0;i<N;i++)

scanf("%d",&a[i]);max=a[0];

imax=0;for(i=1;i<N;i++)

if(a[i]>max){max=a[i];

imax=i;}printf(“Max:a[%d]=%d\n",imax,max);*(a+i)*(a+i)a+i*(a+i)替代a[i]a+i指向元素a[i],即為a[i]的地址,替代&a[i]例子:方法二分析inti,imax,max,a[N];for(i=0;i<N;i++)

scanf("%d",&a[i]);max=a[0];

imax=0;for(i=1;i<N;i++)

if(a[i]>max){max=a[i];

imax=i;}printf(“Max:a[%d]=%d\n",imax,max);,*p;(p=a;p<a+N;p++)p變量指向a[1]p變量開始指向a[0],然后逐個(gè)指向數(shù)組中的各個(gè)元素。pp=a+1;,p++)*p*p三種方法的比較:方法一與老方法的下標(biāo)法執(zhí)行效率是相同的,C編譯系統(tǒng)是將a[i]轉(zhuǎn)換為*(a+i)處理,即先計(jì)算元素的地址。方法二比方法一和下標(biāo)法執(zhí)行效率高,用指針變量直接指向元素,不必每次都重新計(jì)算地址,有規(guī)律地改變地址值(p++)能大大提高程序執(zhí)行效率。用下標(biāo)法比較直觀,能直接知道是第幾個(gè)元素。使用指針法,一定要知道當(dāng)前指針指向哪個(gè)元素,否則可能得到意想不到的結(jié)果。例,輸入5個(gè)數(shù),再按倒序輸出使用指針引用數(shù)組元素,應(yīng)注意以下2個(gè)問題:若指針p指向數(shù)組a,雖然p+i與a+i、*(p+i)與*(a+i)意義相同,但注意p與a的區(qū)別:a代表數(shù)組的首地址,是不變的;p是一個(gè)指針變量,可以指向數(shù)組中的任何元素.for(p=a;a<(p+10);a++)

printf("%d",*a)指針變量可以指向數(shù)組中的任何元素,注意指針變量的當(dāng)前值。5-7.c指向數(shù)組元素的指針的一些運(yùn)算inta[10],*p=a;p++*p++*(p++)*(++p)(*p)++5a[0]8a[1]2a[2]...3a[i]...4a[9]pp&a[0]同③a[0]pa[1]66p5.4.2二維數(shù)組與指針

1.二維數(shù)組的指針例:inta[3][4];a[0][0]a[0][1]a[0][2]a[0][3]a[1][0]a[1][1]a[1][2]a[1][3]a[2][0]a[2][1]a[2][2]a[2][3]a[0][0]a[0][1]a[0][2]a[0][3]a[1][0]…a[2][3]在內(nèi)存中:二級指針常量。因?yàn)閿?shù)組名可以看成是由3個(gè)元素a[0]、a[1]、a[2]構(gòu)成的一維數(shù)組,每個(gè)元素指向該行的首地址。因此,二維數(shù)組名是一個(gè)二級指針常量。一級指針常量。a[0]可以看成是由a[0][0]、a[0][1]、a[0][2]、a[0][3]構(gòu)成的一維數(shù)組,可以將a[0]這個(gè)特殊數(shù)組名理解為指向int類型的一級指針常量。a[1]與a[0]具有同樣性質(zhì),a[1]與a[0]的偏移量是一行元素的長度。

2.使用指向元素的指針變量來引用定義一個(gè)指向二維數(shù)組元素類型的指針變量,通過指針變量來引用數(shù)組元素。voidmain(){inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12},i,*p;p=a[0]; for(i=0;i<12;i++){printf("%4d",*p++);if((i%4==0)printf("\n");}}3.使用行指針變量來引用數(shù)組元素

對于二維數(shù)組,可以定義一個(gè)指向一行(即一個(gè)一維數(shù)組)的行指針變量,行指針變量就是一個(gè)二級指針變量,其性質(zhì)與二維數(shù)組名相同。行指針的定義形式如下:

類型標(biāo)識符(*指針變量名)[元素個(gè)數(shù)];例如:int(*p)[4];定義一個(gè)指向一行有4個(gè)整型元素的行指針變量。例使用行指針變量voidmain(){inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};inti,j,(*p)[4];p=a;for(i=0;i<3;i++){for(j=0;j<4;j++)printf("%4d",*(*p+j));p++;printf("\n");}}

注意:

不要將int(*p)[4]寫成int*p[4]int*p[4]

表示定義一個(gè)包含4個(gè)元素的一維數(shù)組,每個(gè)元素為整型的指針變量。

int(*p)[4]定義的是一個(gè)指向一個(gè)為數(shù)組的行指針變量指針變量p,每執(zhí)行一次p++,指向二維數(shù)組的下一行。*p+j指向當(dāng)前行第j個(gè)元素的地址,

*(*p+j)為當(dāng)前行第j個(gè)元素的值。二維數(shù)組名a是一個(gè)行指針常量,不能進(jìn)行a++、a--的運(yùn)算,p是行指針變量,可以進(jìn)行p++等指針運(yùn)算操作。5.5字符數(shù)組與字符串5.5.1字符數(shù)組與初值化

例如:charc[10];

例如:charch[5][10];字符數(shù)組也可在定義時(shí)作初始化賦值。(1)逐個(gè)元素初始化,當(dāng)初始化數(shù)據(jù)少于數(shù)組長度,多余元素為“空”('\0'),當(dāng)初始化數(shù)據(jù)多于元素個(gè)數(shù)時(shí),將出錯(cuò)。

charc[10]={'c','','p','r','o','g','r','a','m'};chard[2][10]={{'I','','a','m','','a','','b','o','y'},{'G','o','o','d','','b','o','y'}}(2)

指定初值時(shí),若未指定數(shù)組長度,則長度等于初值個(gè)數(shù)。charc[]={'I','','a','m','','h','a','p','p','y'};

5.5.3字符串與字符數(shù)組

在C語言中沒有專門的字符串變量,通常用一個(gè)字符數(shù)組來存放一個(gè)字符串。字符串總是以‘\0’作為串的結(jié)束符。因此當(dāng)把一個(gè)字符串存入一個(gè)數(shù)組時(shí),也把結(jié)束符‘\0’存入數(shù)組,并以此作為該字符串是否結(jié)束的標(biāo)志。字符數(shù)組可以用字符串來初始化:charc[]={"Cprogram"};

或:charc[]="Cprogram";Cprogram\05.5.4字符數(shù)組的輸入輸出

字符數(shù)組的輸入輸出一般采用下面兩種方法:可用printf函數(shù)和scanf函數(shù)中使用。

1、用“%c”格式符逐個(gè)輸入輸出。

2、用“%s”格式符按字符串輸入輸出。例:

charc[8];printf("Input:");scanf("%s",c);printf("%s",c);Hello\0運(yùn)行時(shí)輸入:Helloc說明:輸出時(shí),遇'\0'結(jié)束,且輸出字符中不包含'\0'?!?s”格式輸出字符串時(shí),printf()函數(shù)的輸出項(xiàng)是字符數(shù)組名,而不是元素名。charc[]="Good!";printf("%s",c);printf("%c",c[0]);printf("%s",c[0]);

/*錯(cuò)誤*/“%s”格式輸出時(shí),即使數(shù)組長度大于字符串長度,遇‘\0’也結(jié)束。例如:charc[10]={"Good!"};printf("%s",c);

/*只輸出5個(gè)字符*/“%s”格式輸出時(shí),若數(shù)組中包含一個(gè)以上‘\0’,遇第一個(gè)‘\0’時(shí)結(jié)束。例如:charc[]={"Good!\0boy"};printf("%s",c);

/*輸出結(jié)果:Good!*/輸入時(shí),遇回車鍵、空格鍵結(jié)束,但獲得的字符中不包含回車鍵本身,而是在字符串末尾添'\0'C語言中,數(shù)組名代表該數(shù)組的起始地址,scanf()函數(shù)中不需要地址運(yùn)算符&。charstr[13];scanf("%s",str);scanf("%s",&str);

/*錯(cuò)誤的*/一個(gè)scanf函數(shù)輸入的字符串中有空格時(shí)要特別注意。例如:charstr[13];scanf(“%s”,str);運(yùn)行時(shí)輸入:Howareyou?結(jié)果只有“How”被放入str解決方案:輸入到多個(gè)字符串:charstr1[5],str2[5],str3[5];scanf("%s%s%s",str1,str2,str3);使用逐個(gè)字符輸入:

for(i=0;i<=11;i++)c[i]=getchar();c[12]='\0';

5.6字符串字符指針5.6.1指向字符串的指針例:chars[10];

s[]="Welcome";s="Welcome";C語言中使用字符指針來處理字符串的很方便。首先需要定義一個(gè)基類型為字符型的指針變量。例如:char*s;兩種賦值方法:

char*s="Welcome";char*s;s="Welcome";{}兩種方法:s變量得到的都是字符串的首地址。例:寫出程序的運(yùn)行結(jié)果。voidmain(){char*p;chars[]="ABCD";for(p=s;p<s+4;p++)printf("%s\n",p);getch();}ABCD\0spppp例:已知字符串chars1[]=“Howareyou”;將s1中的空格刪除后放入字符數(shù)組s2中。5-8.c5-9.c5.6.2使用字符串指針變量與字符數(shù)組的區(qū)別三者含義:字符串指針變量本身是一個(gè)變量,用于存放字符串的首地址。字符串本身是存放在一塊連續(xù)的內(nèi)存空間中并以‘\0’作為字符串的結(jié)束。字符數(shù)組是由若干個(gè)數(shù)組元素組成的,它可用來存放整個(gè)字符串。注意:char*ps=“CLanguage”;

char*ps;ps=“CLanguage”;

charst[]={“CLanguage”};

charst[20];st={"CLanguage"}?!獭獭獭?/p>

5.6.3字符串處理函數(shù)

用于輸入輸出的字符串函數(shù),應(yīng)包含頭文件“stdio.h”。1.字符串輸出函數(shù):

格式:puts(str);說明:①str為數(shù)組名或指針變量。

②等價(jià)于:printf(“%s\n”,str);有換行。2.字符串輸入函數(shù)

格式:gets(str);說明:①str為數(shù)組名或指針變量。

②將輸入的字符串加上結(jié)束標(biāo)志‘\0’。

③以回車最為輸入結(jié)束。使用其它字符串函數(shù)應(yīng)包含頭文件"string.h"。3.字符串連接函數(shù):strcat(str1,str2)

4.字符串拷貝函數(shù):strcpy(str1,str2)5.字符串比較函數(shù):strcmp(str1,str2)6.測字符串長度函數(shù):strlen(str)

7.字符大寫轉(zhuǎn)小寫函數(shù):strlwr(str)

8.字符小寫轉(zhuǎn)大寫函數(shù):strupr(str)

使用方法:例:strcat(str1,str2);

執(zhí)行后結(jié)果在str1中。

例:k=strlen(str);

結(jié)果在函數(shù)的返回值中,可以賦值給其他變量。5.7指針數(shù)組與多級指針變量5.7.1指針數(shù)組概念:指針數(shù)組是一個(gè)數(shù)組,該數(shù)組中的每一個(gè)元素是指針變量。定義:

類型標(biāo)識符*數(shù)組名[數(shù)組元素個(gè)數(shù)];例如:int*p[4];

定義一個(gè)指針數(shù)組,數(shù)組名p,有4個(gè)元素,每一個(gè)元素是指向整型變量的指針。注意與指向數(shù)組的指針變量的區(qū)分:int(*p)[4]定義一個(gè)指針變量,它指向有4個(gè)元素的一維數(shù)組。

指針數(shù)組的用途:處理多個(gè)字符串。先來看使用二維數(shù)組存放多個(gè)字符串:

charch[][16]={"Followme","BASIC","GreatWall","FORTRAN","ComputerDesign“}使用二維數(shù)組處理浪費(fèi)較多內(nèi)存。使用指針數(shù)組char*pc[]={"Followme","BASIC","GreatWall","FORTRAN","ComputerDesign"};說明:pc是一維數(shù)組,里面存放著5個(gè)指向字符型變量的指針。pc[0]pc[1]pc[2]pc[3]pc[4]Followme\0BASIC\0Great

Wall\0FORTRAN\0ComputerDesign\0例將若干字符串按字母順序輸出。#include"stdio.h"#include"string.h"voidmain(){char*temp;inti,j,k,n=5;char*pc[]={"Followme","BASIC","GreatWall","FORTRAN","ComputerDesign“};for(i=0;i<n-1;i++){k=i;for(j=i+1;j<n;j++)if(strcmp(pc[k],pc[j])>0)k=j;

temp=pc[i];pc[i]=pc[k];pc[k]=temp;}for(i=0;i<n;i++)printf("%s\n",pc[i]);}

if(k!=i){}5.7.2指向指針的指針

用于存放某個(gè)指針變量地址的指針變量被稱為指向指針的指針,定義形式如下:類型名**變量名;例:

int**p;

例:intx,*pc,**p;

x=5;pc=&x;p=&pc;5xpc&xp&pc5.8應(yīng)用程序舉例5.8.2數(shù)據(jù)查找1.順序查找法36845129710a[0]a[1]…………a

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論