《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配_第1頁
《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配_第2頁
《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配_第3頁
《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配_第4頁
《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配_第5頁
已閱讀5頁,還剩138頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第6章數(shù)組、字符串與動態(tài)內(nèi)存分配6.1數(shù)組概念6.2一維數(shù)組6.3多維數(shù)組6.4字符數(shù)組6.5指針數(shù)組與main函數(shù)的參數(shù)6.6內(nèi)存的動態(tài)分配與釋放《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第1頁。6.1數(shù)組概念數(shù)組:一組相同數(shù)據(jù)類型的元素按一定順序線性排列。數(shù)組的特點:(1)數(shù)組是相同數(shù)據(jù)類型的元素的集合。(2)數(shù)組中的各元素是有先后順序的。它們在內(nèi)存中按照這個順序連續(xù)存放在一起。(3)每個數(shù)組元素用整個數(shù)組的名字和它自己在數(shù)組中的位置表達,此位置被叫做下標(biāo)或索引。

a[0]a[1]a[2]

a[3]a[4]a[5]

2334-89

-901250《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第2頁。6.1數(shù)組概念數(shù)組特點:(1)數(shù)組是相同數(shù)據(jù)類型的元素的集合。(2)數(shù)組中的各元素是有先后順序的。它們在內(nèi)存中按照這個順序連續(xù)存放在一起。(3)每個數(shù)組元素用整個數(shù)組的名字和它自己在數(shù)組中的位置表達(此位置被叫做下標(biāo)或索引)。

例如,一個包含6個整型元素的數(shù)組a,定義為:

inta[6];在內(nèi)存中的順序存儲結(jié)構(gòu)如下:

a[0]a[1]a[2]

a[3]a[4]a[5]

2334-89

-901250數(shù)組下標(biāo)數(shù)組名下標(biāo)變量《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第3頁。6.1數(shù)組概念使用數(shù)組的好處:便于組織循環(huán)數(shù)組按維數(shù)分為:一維數(shù)組多維數(shù)組//求100個數(shù)據(jù)的和:inta[100]={1,2,3,4,…100}s=0;for(i=0;i<=99

;i++)s=s+a[i];《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第4頁。6.2一維數(shù)組6.1.1一維數(shù)組的聲明6.2.1一維數(shù)組的初始化6.2.3一維數(shù)組元素的表示方法6.2.4用指針訪問一維數(shù)組6.2.5函數(shù)參數(shù)為訪問一維數(shù)組的指針6.2.6一維數(shù)組綜合程序設(shè)計舉例《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第5頁。6.1.1一維數(shù)組的聲明聲明數(shù)組:指定數(shù)組名稱、數(shù)組所包含的元素的數(shù)據(jù)類型和元素的個數(shù)。聲明一維數(shù)組的語法格式:

數(shù)據(jù)類型數(shù)組名[常量表達式];常量表達式:數(shù)組元素的個數(shù)(length)符號常量或常量名組成的表達式,不能是變量[]是數(shù)組的標(biāo)志。聲明數(shù)組意味著給數(shù)組分配一組連續(xù)的存儲空間,空間的大小:length*sizeof(dataType)

。例如,inta[10];

聲明了含有10個元素的整型數(shù)組,分配10個元素的內(nèi)存空間(每個元素占4個字節(jié))。sizeof(a)=40

《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第6頁。

inta[10];10個元素:a[0],a[1],a[2],…,a[9]每個元素的數(shù)據(jù)類型a[0]a[1]a[2]a[3]…a[7]a[8]a[9]6.1.1一維數(shù)組的聲明空間的大小(字節(jié)數(shù)):10*4=40Bytes數(shù)組的元素個數(shù)(長度):1010*sizeof(int)=40sizeof(a)=40《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第7頁。6.1.1一維數(shù)組的聲明聲明數(shù)組: 數(shù)據(jù)類型數(shù)組名[常量表達式];例如:intcount=10;charcArray[count];//錯誤,元素個數(shù)count是變量constintcount=10;charcArray[count];//正確,元素個數(shù)是常量unsignedcharbArray[count+1];//正確,元素個數(shù)是常量#definelength100longlArray[legnth];//正確,元素個數(shù)是常量《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第8頁。6.2.1一維數(shù)組的初始化數(shù)組的初始化:在聲明數(shù)組的同時,給數(shù)組的每一個元素指定一個初始值。語法格式:

數(shù)據(jù)類型數(shù)組名[常量表達式]={初始化列表};或

數(shù)據(jù)類型數(shù)組名[]={初始化列表};初始化列表:用逗號分隔的一組常量值。例如:inta[5]={1,2,3,4,5};即a[0]=1,a[1]=2,a[2]=3,a[3]=4,a[4]=5《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第9頁。6.2.1一維數(shù)組的初始化例:inta[5]={1,2,3,4,5};即a[0]=1,a[1]=2,a[2]=3,a[3]=4,a[4]=5例:計算初始化列表中值的個數(shù)來確定數(shù)組元素的個數(shù)。inta[]={1,2,3,4,5};例:初始化列表中的數(shù)據(jù)個數(shù)小于數(shù)組元素的個數(shù),則編譯器給剩下的數(shù)組元素的初值0。inta[5]={1,2};即a[0]=1,a[1]=2,a[2]=0,a[3]=0,a[4]=0?!禖語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第10頁。6.2.1一維數(shù)組的初始化例如:charc[10]={'0','1','2'};即c[0]=48,c[1]=49,c[2]=50,c[3]=c[4]=…=c[9]=0?;騝[0]=‘0’,c[1]=‘1’,c[2]=‘2’,c[3]=c[4]=…=c[9]=‘\0’數(shù)組元素的賦值也可通過賦值語句進行:例如:shorts[5];s[0]=1;s[1]=2;s[2]=3;s[3]=s[2]-s[1];s[4]=s[3]-s[1]-2;《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第11頁。6.2.3一維數(shù)組元素的表示方法一維數(shù)組元素的使用:下標(biāo)變量表示法。語法格式為:數(shù)組名[下標(biāo)]下標(biāo)的取值范圍:0~length-1。訪問數(shù)組元素時,下標(biāo)不能越界。下標(biāo)是整型或者可以轉(zhuǎn)化成整型的量使用數(shù)組元素就像使用簡單變量一樣例如:inta[100];for(i=0;i<=100;i++)a[i]=i;99《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第12頁。6.2.3一維數(shù)組元素的表示方法避免下標(biāo)越界的方法:用符號名如length表示數(shù)組元素的個數(shù),用length-1作為數(shù)組下標(biāo)的下界。例如:#define

length100inta[length];for(i=0;i<=length-1

;i++)

a[i]=i;

對數(shù)組從尾向頭遍歷元素for(i=length-1;i>=0;i--)

a[i]=i;《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第13頁。例6-1從鍵盤輸入一組數(shù)放入數(shù)組中,逆序輸出數(shù)組的所有元素以及元素之和。#include<stdio.h>#definelength5voidmain(){ intarray[length]; inti,total=0;for(i=0;i<=length-1;i++)scanf("%d",&array[i]);for(i=0;i<=length-1;i++)//addeachelement'svaluetototaltotal+=array[i]; printf("Reversedarrayelements:"); for(i=length-1;i>=0;i--)

printf("%-4d",array[i]);printf("\nTotalofarrayelements:%d\n",total);}1020308034Reversedarrayelements:3480302010Totalofarrayelements:184《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第14頁。6.2.4用指針訪問一維數(shù)組一個含有n個元素的數(shù)組,在內(nèi)存將分配n個連續(xù)的存儲單元,每一個數(shù)組元素占用的內(nèi)存空間大小一樣,且與數(shù)組的數(shù)據(jù)類型相關(guān)。數(shù)組名:代表整個數(shù)組的首址(數(shù)組的第一個元素的地址)每一個數(shù)組元素有一個存儲地址(數(shù)組元素的指針)。定義一個指針變量指向數(shù)組元素(存放數(shù)組元素的地址)通過指針變量間接訪問數(shù)組元素《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第15頁。inta[10]={1,3,5,7,9,11,13,15,17,19};

int*p;p=a;//指向數(shù)組的首址等價于p=&a[0]等價于int*p=a;

或int*p=&a[0];a[0]a[1]a[9]a[2]a[3]a[4]a[5]a[6]a[7]a[8]p=&a[0]1.指向一維數(shù)組元素的指針變量《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第16頁。6.2.4用指針訪問一維數(shù)組定義一維數(shù)組元素的指針變量,語法格式:類型*變量名;類型:一維數(shù)組的數(shù)據(jù)類型。*:變量名是指針類型?!禖語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第17頁。2.對指針進行加減運算

在指針變量指向數(shù)組元素時,允許對指針進行如下的加減運算(1)p指向數(shù)組元素a[i]p+1指向后一元素a[i+1]p-1指向前一個元素a[i-1]如,a的首址2000,若p=&a[1]則p的值為2004,則p+1的值為2008,則p-1的值為2000。P=&a[i];floata[10],*p;

《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第18頁。2.對指針進行加減運算(2)如果p的初值為&a[0],則p+i或a+i:a[i]的地址p+i或a+i:指向a[i]元素

☆通過指針間接存取a[i]的形式:

*(p+i)、*(a+i)和p[i]floata[10],*p;

《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第19頁。2.對指針進行加減運算(3)對p指針變量進行加減賦值運算:p=p+i

:p指向當(dāng)前數(shù)組元素往后的第i個元素。p=p-i

:p指向當(dāng)前數(shù)組元素往前的第i個元素。p++或++p:p指向當(dāng)前數(shù)組元素的后一個元素。p—或--p:p指向當(dāng)前數(shù)組元素的前一個元素。數(shù)組名是常量指針,它始終指向數(shù)組的首址。如:

a=a+1;是錯誤的。floata[10],*p;

《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第20頁。2.對指針進行加減運算(3)

兩個指針相減,只有p1和p2都指向同一數(shù)組中的元素時才有意義

p1-p2:p2與p1之間有多少個元素例如,floata[10],*p=a;while(p-a<10){//a[9]與a[0]之間相差9個元素printf(“%f“,*p);p++};《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第21頁。

例6-2通過指針遍歷數(shù)組所有元素。#definelength5voidmain(){ inta[length]={1,2,3,4,5};inti,*p=a;

//下標(biāo)變量法遍歷數(shù)組元素

for(i=0;i<=length-1;i++)printf("%-4d",a[i]); printf("\n");

//數(shù)組名常量指針法遍歷數(shù)組元素

for(i=0;i<=length-1;i++)

printf("%-4d",*(a+i)); printf("\n");

12345123451234512345123453.通過指針引用數(shù)組元素《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第22頁。

//變量指針法遍歷數(shù)組元素,變量指針的值不變p=a

for(i=0;i<=length-1;i++)

printf("%-4d",*(p+i));printf("\n");//變量指針法遍歷數(shù)組元素,變量指針類似于數(shù)組名使用,變量指針的值不變

for(i=0;i<=length-1;i++)

printf("%-4d",p[i]);printf("\n");

//變量指針法遍歷數(shù)組元素,變量指針的值在變,不斷指向下一個元素

for(i=0;i<=length-1;i++){

printf("%-4d",*(p++)); } printf("\n");}1234512345123451234512345《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第23頁。6.2.5函數(shù)參數(shù)為訪問一維數(shù)組的指針通過函數(shù)訪問一個通用的一維數(shù)組。函數(shù)定義中,形參為:f(type*p,intn)或f(typep[],intn)f(typep[len],intn)函數(shù)調(diào)用:f(a,length)其中typea[length];f1(int

p[],intn)與f2(int

p[2],intn)的區(qū)別inta[2],b[3];f1(a,2)f1(b,3)f2(a,2)f2(b,3)錯誤《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第24頁。例6-3完成給一維數(shù)組各元素賦值為對應(yīng)元素的下標(biāo)值,將此功能定義為函數(shù)fvoid

f(int*a,intn){

//或f(inta[],intn)

inti;for(i=0;i<n;i++)

a[i]=i;printf(“%2d”,a[i]);printf("\n");}voidmain(){inta[10],b[5];f(a,10);f(b,5);}《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第25頁。6.2.6一維數(shù)組綜合程序設(shè)計舉例★數(shù)組的常用算法:排序插入修改刪除查詢《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第26頁。例6-4用冒泡排序法對數(shù)組進行增序

(從小到大)的排序。排序的規(guī)則有兩種:一種是增序(從小到大);另一種是降序(從大到小)冒泡排序法:模擬水中氣泡的排放規(guī)則,使重量“較輕”(值較?。┑臍馀莞〉缴厦?,重量“較重”(值較大)的氣泡沉到下面。

對每一趟排序,從第1個元素開始,比較相鄰元素的大小,按照規(guī)則對調(diào)兩者的位置,最終確定一個最大(或最?。┑臍馀莸奈恢?。

例如:對6個數(shù)進行冒泡排序法的過程:《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第27頁。985420895420859420854920854290854209大數(shù)沉淀,小數(shù)起泡a[0]a[1]a[2]a[3]a[4]a[5]for(i=0;i<=4;i++)if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}第1趟排序《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第28頁。854209584209548209542809542089a[0]a[1]a[2]a[3]a[4]a[5]for(i=0;i<=3;i++)if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}第2趟排序《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第29頁。542089452089425089420589a[0]a[1]a[2]a[3]a[4]a[5]for(i=0;i<=2;i++)if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}第3趟排序420589《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第30頁。420589240589204589a[0]a[1]a[2]a[3]a[4]a[5]for(i=0;i<=1;i++)if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}第4趟排序《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第31頁。204589024589a[0]a[1]a[2]a[3]a[4]a[5]for(i=0;i<=0;i++)if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}第5趟排序《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第32頁。for(i=0;i<=4;i++)if(a[i]>a[i+1]){……}for(i=0;i<=3;i++)if(a[i]>a[i+1]){……}for(i=0;i<=0;i++)if(a[i]>a[i+1]){……}……for(i=0;i<=6-pass-1;i++)if(a[i]>a[i+1]){……}for(pass=1;pass<=5;j++)

pass:趟數(shù)從1到5

size個元素時pass:趟數(shù)從1到size-1i從0到size-pass-16個元素時pass=1pass=2pass=5《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第33頁。voidbubblesort(intvalues[],intsize){intpass,j,temp;for(pass=1;pass<=size-1;pass++){ for(j=0;j<=size-1-pass;j++) if(values[j]>values[j+1]){ temp=values[j]; values[j]=values[j+1]; values[j+1]=temp; }} }將冒泡排序法定義為一函數(shù)《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第34頁。將冒泡排序法定義為一函數(shù)bubbleSort(intvalues[],intn)等同于bubbleSort(int*values,intn)《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第35頁。將打印一維數(shù)組功能定義為一函數(shù)。

voidprint(intvalues[],intsize){ inti; for(i=0;i<size;i++) printf("%4",values[i]); printf("\n");}voidmain(){ intscore1[]={10,3,56,89,80,60}; intscore2[]={78,100,45,12,78,90,3,5}; bubblesort(score1,6); print(score1,6); bubblesort(score2,8); print(score2,8);}31056608089351245787880100形參inta[]與inta[10]區(qū)別?《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第36頁。例6-5在有序的數(shù)組中,用折半查找法查找一個特定的值。在有序的數(shù)組中,二分查找法是一種比較快捷的查找方法。折半查找法:先將整個數(shù)組作為查找區(qū)間,用給定的值與查找區(qū)間的中間元素的值相比較,若相等,則查找成功;若不等,則縮小范圍,判斷該值落在區(qū)間的前一部分還是后一部分,再將其所在的部分作為新的查找區(qū)間,繼續(xù)上述過程,一直到找到該值或區(qū)間長度小于0表明查找不成功為止?!禖語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第37頁。例如:用折半查找法查找key=80元素31056608085a[0]a[1]a[2]a[3]a[4]a[5]low=3mid=(low+hight)/2hight=5a[mid]<80low=0hight=5mid=4a[mid]=80僅比較2次即找到關(guān)鍵字。折半查找法是快速查找法?!禖語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第38頁。inta[size],查找是否含有關(guān)鍵字key的元素,折半查找法的算法描述過程:1.設(shè)置查找的最初區(qū)間[low,high],low=0,high=size-1,mid=(low+high)/2;found是否找到key的標(biāo)志,初值0。2.判斷a[mid]和key之間的關(guān)系:若key=a[mid],則成功找到,置found=1,查找結(jié)束。若key<a[mid],設(shè)定下一查找范圍是左半?yún)^(qū)間[low,mid-1]。若key>a[mid],設(shè)定查找范圍是右半?yún)^(qū)間[mid+1,high]。

重復(fù)步驟2條件:(low<=high)且found==03.循環(huán)結(jié)束時,若found==1則找到,否則找不到key?!禖語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第39頁。//函數(shù)返回找到的key的下標(biāo)位置,返回-1則找不到intbinarySearch(intarray[],intkey,intsize){intlow,high,found=0,mid;intindex;low=0;high=size-1;while((found==0)&&(low<=high)){ mid=(low+high)/2; if(key==array[mid]){ found=1;index=mid; } elseif(key>array[mid]) low=mid+1; elseif(key<array[mid]) high=mid-1; }if(found)returnindex;elsereturn-1;}《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第40頁。voidmain(){ intscore1[]={3,10,56,60,80,85}; intloc,key; printf("輸入要查找的關(guān)鍵字=?"); scanf("%d",&key); loc=binarySearch(score1,key,6); if(loc==-1) printf("找不到!\n"); elseprintf("成功找到!%d的下標(biāo)位置為%d\n",key,loc); }輸入要查找的關(guān)鍵字=?80成功找到!80的下標(biāo)位置為4《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第41頁。6.3多維數(shù)組帶有一個下標(biāo)的數(shù)組叫做一維數(shù)組。

a[i]帶有兩個下標(biāo)的數(shù)組叫做二維數(shù)組。

a[i][j]帶有兩個以上的下標(biāo)的數(shù)組叫做多維數(shù)組

a[i][j][k]《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第42頁。6.3多維數(shù)組6.3.1二維數(shù)組的聲明 6.3.2二維數(shù)組的初始化 6.3.3二維數(shù)組元素的表示方法 6.3.4聲明二級指針 6.3.5用指針訪問二維數(shù)組 6.3.6函數(shù)參數(shù)為訪問二維數(shù)組的指針 6.3.7二維數(shù)組綜合程序設(shè)計舉例 《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第43頁。6.3.1二維數(shù)組的聲明二維數(shù)組常用于存放矩陣,第一維和第二維分別對應(yīng)于矩陣的行和列。二維數(shù)組聲明的格式:

類型數(shù)組名[常量表達式1][常量表達式2];常量表達式1:第一維下標(biāo)的長度常量表達式2:第二維下標(biāo)的長度類型:數(shù)組元素的數(shù)據(jù)類型《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第44頁。6.3.1二維數(shù)組的聲明例如:inta[2][3];將創(chuàng)建2行*3列的二維數(shù)組。各元素的下標(biāo)變量:在C語言中,二維數(shù)組是按行排列的。inta[2][3],每個元素占4個Bytes,整個數(shù)組占24個字節(jié)的存儲空間。二維數(shù)組看作是一個特殊的一維數(shù)組:一維數(shù)組中每一個元素又是一個一維數(shù)組。a由a[0]、a[1]

組成《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第45頁。6.3.2二維數(shù)組的初始化聲明二維數(shù)組的初始化形式:(1)分行給二維數(shù)組賦初值。例如:intb[3][2]={{1,2},{2,3},{3,4}};(2)將所有初值寫在一行中。例如:intb[3][2]={1,2,3,4,5,6};(3)只給部分元素賦初值。當(dāng){}中值的個數(shù)少于元素個數(shù)時,只給前面部分元素賦值。后面的元素初值缺省為0。例如:intb[3][2]={{1},{2},{3}};

相當(dāng)于intb[3][2]={{1,0},{2,0},{3,0}};《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第46頁。6.3.2二維數(shù)組的初始化(4)聲明數(shù)組時,第1維的下標(biāo)的長度可以不確定,但第2維的下標(biāo)的長度一定要確定。例如:intb[][4]={1,2,3,4,5,6,7,8};相當(dāng)于intb[2][4]={1,2,3,4,5,6,7,8};《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第47頁。6.3.3二維數(shù)組元素的表示方法二維數(shù)組的每個元素,雙下標(biāo)的表示格式:

數(shù)組名[下標(biāo)1][下標(biāo)2]下標(biāo)1、下標(biāo)2為非負(fù)的整型表達式。下標(biāo)不能越界例如:inta[3][4];表示元素:a[2][3]正確i=1,j=1,a[i+1][j*3]a[3][4]錯誤

a[i+2][j*3]a[i+1][j*4]《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第48頁。6.3.3二維數(shù)組元素的表示方法二維數(shù)組的遍歷訪問,需要通過二重循環(huán)逐行(或逐列)進行。例如:inta[len1][len2],按行遍歷:按列遍歷:for(row=0;row<len1;row++)for(col=0;col<len2;col++)a[row][col]

for(col=0;col<len2;col++)for(row=0;row<len1;row++)a[row][col]

《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第49頁。例6-6有一個矩陣,要打印出其每一列的最大值位置。解題思路:二維數(shù)組存放矩陣,對二維數(shù)組按列的次序掃描:對某一列col,用變量k存放這一列的最大值的行號.

開始時,假設(shè)第col列的第0行元素為最大值,k=0.該列的其它元素a[row][col]與a[k][col]值比較若當(dāng)前元素大于目前最大值,則k=此元素的行號。for(col=0;col<len2;col++){k=0;for(row=0;row<len1;row++)if(a[row][col]>a[k][col])k=row;printf("第%d列第%d行的元素為最大值。\n",col,k);} 《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第50頁。例6-6有一個矩陣,要打印出其每一列的最大值位置。定義函數(shù),用于二維數(shù)組的數(shù)據(jù)輸入:

voidinput(inta[][len2])定義函數(shù),用于二維數(shù)組輸出:

voidprint(inta[][len2])形數(shù)inta[][len2]與inta[len1][len2]區(qū)別?inta[][len2]比inta[len1][len2]適用的二維數(shù)組范圍更廣?!禖語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第51頁。#definelen13#definelen24voidinput(inta[][len2]);voidprint(inta[][len2]);voidmain(){ inta[len1][len2]; introw,col,k; //二維數(shù)組數(shù)據(jù)輸入

input(a); //二維數(shù)組輸出

printf("\n您已經(jīng)輸入的二維數(shù)組:\n"); print(a);//輸出每一列的最大值

for(col=0;col<len2;col++){ k=0; for(row=0;row<len1;row++) if(a[row][col]>a[k][col])k=row; printf("第%d列第%d行的元素為最大值。\n",col,k); } }《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第52頁。voidinput(inta[][len2]){ introw,col; for(row=0;row<len1;row++){ printf("輸入第%d行:",row); for(col=0;col<len2;col++) scanf("%d",&a[row][col]); }}voidprint(inta[][len2]){ introw,col; //二維數(shù)組輸出

for(row=0;row<len1;row++){ for(col=0;col<len2;col++) printf("%5d",a[row][col]); printf("\n"); }}《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第53頁。例6-7實現(xiàn)N×N矩陣的轉(zhuǎn)置。解題思路:矩陣的轉(zhuǎn)置是指矩陣的上下三角元素以對角線為中軸線對稱互換:即原來的i行j列元素在轉(zhuǎn)置后稱為j行i列元素。定義二維數(shù)組a[N][N]存放矩陣。for(i=0;i<N;i++)for(j=i+1;j<N;j++)

a[i][j]a[j][i];《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第54頁。例6-7實現(xiàn)N×N矩陣的轉(zhuǎn)置。隨機生成N*N個數(shù)據(jù)放入二維數(shù)組:voidrandoms(inta[][N]){ introw,col;srand((unsigned)time(NULL)); for(row=0;row<N;row++){ for(col=0;col<N;col++) a[row][col]=rand(); }}rand();生成0到32767之間的隨機數(shù)#include<stdlib.h>#include<time.h>srand((unsigned)time(NULL));《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第55頁。#include<stdio.h>#include<stdlib.h>#include<time.h>#defineN4voidmain(){ inta[N][N]; inti,j,t; voidrandoms(inta[][N]);//函數(shù)原型

voidprint(inta[][N]);//函數(shù)原型

randoms(a); printf("二維數(shù)組轉(zhuǎn)置前:\n");

print(a); for(i=0;i<N;i++){//二維數(shù)組轉(zhuǎn)置

for(j=i+1;j<N;j++){ t=a[i][j]; a[i][j]=a[j][i]; a[j][i]=t; } } printf("\n二維數(shù)組轉(zhuǎn)置后:\n");

print(a);}《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第56頁。1.聲明二級指針

type**變量名例如:inta=8;int*p=&a;//一級指針int**q=&p;6.3.4聲明二級指針《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第57頁。6.3.4聲明二級指針2.用二級指針訪問對象變量

*q代表p**q代表a**q=**q+1//a=a+1《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第58頁。6.3.5用指針訪問二維數(shù)組1.二維數(shù)組元素的地址二維數(shù)組可看做是一個一維數(shù)組:此一維數(shù)組中每一個元素又是一個一維數(shù)組。例如:inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};由3行組成:a[0]、a[1]和a[2]

《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第59頁。inta[3][4]:由3個一維數(shù)組a[0]、a[1]和a[2]組成。a[0]代表第0行,存放第0行的首址二維數(shù)組各指針之間的關(guān)系:a:是二級指針,指向二維數(shù)組的首址,其值為&a[0]或&a[0][0]*a或a[0]:代表第0行,其值為&a[0][0];**a:代表a[0][0]。

6.3.5用指針訪問二維數(shù)組《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第60頁。二維數(shù)組各指針之間的關(guān)系:(2)a+i:指向第i行(存放第i行的地址),或稱行指針,其值等于&a[i][0];*(a+i)或a[i]代表第i行,其值等于&a[i][0],即第i行第0個元素的地址;*(a+i)+j或a[i]+j:指向第i行第j個元素,其值為&a[i][j];*(*(a+i)+j):代表a[i][j]。6.3.5用指針訪問二維數(shù)組《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第61頁。二維數(shù)組各指針之間的關(guān)系:

取內(nèi)容運算符*,其結(jié)合性為自右至左:

**a相當(dāng)于*(*a)。

**a是一個二級指針:a存放a[0]的地址,a[0]存放的是a[0][0]的地址,通過a間接地訪問a[0][0]的形式是**a6.3.5用指針訪問二維數(shù)組《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第62頁。例6-8輸出二維數(shù)組的各指針值。voidmain(){inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};inti;

//請觀察二維數(shù)組的各指針的值及其之間的關(guān)系printf("a=%d,*a=%d,a[0]=%d,&a[0][0]=%d,a[0][0]=%d\n\n",a,*a,a[0],&a[0][0],a[0][0]);for(i=0;i<3;i++){ printf("a+%d=%d,*(a+%d)=%d,a[%d]=%d,",i,a+i,i,*(a+i),i,a[i]);printf("&a[%d][0]=%d,a[%d][0]=%d\n",i,&a[i][0],i,a[i][0]);

}}《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第63頁。6.3.5用指針訪問二維數(shù)組2.定義指向二維數(shù)組的指針變量,格式:

類型說明符(*指針變量名)[長度];*:表示其后的變量是指針類型。園括號()不可少,如少括號則表示的指針數(shù)組長度:等于二維數(shù)組聲明時的第二維下標(biāo)長度。類型說明符:是二維數(shù)組的數(shù)據(jù)類型。定義的指針變量名:是指向二維數(shù)組的行指針。例如:定義了一個指向第二維長度為4的二維數(shù)組指針變量p:inta[3][4];int(*p)[4];《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第64頁。6.3.5用指針訪問二維數(shù)組例如:定義了一個指向第二維長度為4的二維數(shù)組指針變量p:int(*p)[4];intb[4];p=&b;

b

pb[0]b[1]b[3]b[2]《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第65頁。例如:inta[3][4];int(*p)[4];p=a;//指向第0行p+1://指向第1行p+i;//指向第i行4.通過二維數(shù)組的行指針變量,間接訪問數(shù)組元素a[i][j]的一般形式:

*(*(p+i)+j)或p[i][j]6.3.5用指針訪問二維數(shù)組《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第66頁。例6-9通過二維數(shù)組的行指針變量,輸出二維數(shù)組元素。voidmain(){ inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; inti,j;int(*p)[4]; //定義二維數(shù)組的行指針變量

p=a; for(i=0;i<3;i++){//i表示行號

for(j=0;j<4;j++) printf("%3d",*(*(p+i)+j));printf("\n"); }}《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第67頁。例6-10將二維數(shù)組線性化成一維數(shù)組,通過一維數(shù)組的指針變量,輸出二維數(shù)組元素。解題思路:定義一維數(shù)組的指針變量

int*p;inta[m][n];

p初值為二維數(shù)組的首地址,p=a;

數(shù)組元素a[i][j],通過指針變量p的存取形式為:

*(p+i*n+j)其中n是二維數(shù)組的第二維的長度。a[i][j]元素的前面有多少個元素?有i行個元素,第i行上有j個元素《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第68頁。#include<stdio.h>voidmain(){ inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; int(*p);//定義一維數(shù)組的指針變量

inti,j; p=a;//或p=a[0];或p=&a[0][0];

for(i=0;i<3;i++){//i表示行號

for(j=0;j<4;j++) printf("%2d",*(p+i*4+j));printf("\n"); }}123456789101112

for(p=a[0];p<a[0]+12;p++){if((p-a[0])%4==0)printf(“\n”);printf(“%4d”,*p);}也可換成《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第69頁。6.3.6函數(shù)參數(shù)為訪問二維數(shù)組的指針形參:f(type(*a)[colLen)

或f(typea[][colLen)實參:f(b)其中

:typeb[len1][colLen]《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第70頁。例6-11:完成給二維數(shù)組各元素賦值為對應(yīng)元素的下標(biāo)i+j,將此功能定義為函數(shù)f。

#definecolLen4f(int(*a)[colLen],intn){

//f(inta[][colLen],intn)inti,j;for(i=0;i<n;i++)for(j=0;j<colLen;j++)a[i][j]=i+j;}《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第71頁。例6-11:完成給二維數(shù)組各元素賦值為對應(yīng)元素的下標(biāo)i+j,將此功能定義為函數(shù)f。

p(int(*a)[colLen],intn){//或p(inta[][colLen],intn)inti,j;for(i=0;i<n;i++){for(j=0;j<colLen;j++)printf("%3d",*(*(a+i)+j));printf("\n");}}voidmain(){inta[10][colLen],b[5][colLen];f(a,10);f(b,5);p(a,10);p(b,5);}《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第72頁。6.3.7二維數(shù)組綜合程序設(shè)計舉例例6-12構(gòu)造楊輝三角形。解題思路:將楊輝三角形放在二維數(shù)組yanghui中。楊輝三角形各元素的特點如下:y[i][j]=y[i-1][j-1]+y[i-1][j]當(dāng)i>0,j>0,j<i=1當(dāng)j=0或j=i《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第73頁。//生成楊輝三角形放入二維數(shù)voidmakeYangHui(int(*yanghui)[N]){inti,j; for(i=0;i<N;i++)//外循環(huán)控制行數(shù)

for(j=0;j<=i;j++){//生成第i行數(shù)據(jù)

if(j==0||j==i) yanghui[i][j]=1; elseif(j<i) yanghui[i][j]=yanghui[i-1][j-1]+yanghui[i-1][j]; elseyanghui[i][j]=0; } }y[i][j]=y[i-1][j-1]+y[i-1][j]當(dāng)i>0,j>0,j<i=1當(dāng)j=0或j=iintyanghui[][N]《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第74頁。#defineN6voidprintTriangle(int(*yanghui)[N]){//打印楊輝三角形

inti,j; for(i=0;i<N;i++){//外循環(huán)控制打印的行數(shù)

for(j=0;j<=i;j++)//內(nèi)循環(huán)控制打印第i行

printf("%d\t",*(*(yanghui+i)+j)); printf("\n"); }}voidmain(){

intyanghui[N][N];makeYangHui(yanghui);

printTriangle(yanghui);}yanghui[i][j]《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第75頁。6.4字符數(shù)組char字符型數(shù)據(jù):用一個字節(jié)的ASCII代碼存儲的。C語言的基本類型中沒有字符串類型字符串存放在字符型數(shù)組中的?!禖語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第76頁。6.4字符數(shù)組6.4.1字符數(shù)組的定義6.4.2字符數(shù)組的初始化6.4.3字符數(shù)組元素的表示方法6.4.4字符數(shù)組的輸入與輸出6.4.5使用字符串函數(shù)處理字符串6.4.6通過指針引用字符串6.4.7字符串的綜合程序設(shè)計舉例《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第77頁。6.4.1字符數(shù)組的定義用來存放字符類型的數(shù)組稱為字符數(shù)組。例如:charc[10];

定義含有10個char類型的數(shù)組元素,每個元素存放一個字符。字符數(shù)組也可以是二維或多維數(shù)組。例如:二維字符數(shù)組charc[5][10];《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第78頁。6.4.2字符數(shù)組的初始化聲明字符數(shù)組時,允許對數(shù)組元素初始化賦值。

例如:chars[10]={'C','','p','r','o','g','r','a','m'};s的內(nèi)存分配和各元素的的初值為:其中s[9]在初始化列表中沒有被賦初值,則由系統(tǒng)自動賦缺省值0或‘\0’。轉(zhuǎn)義字符‘\0’的機內(nèi)編碼值是0?!甛0’也是字符串的結(jié)尾標(biāo)志《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第79頁。6.4.2字符數(shù)組的初始化初始化時,將字符串常量賦給字符型數(shù)組。例:chars[10]="Cprogram";或

chars[]={"Cprogram"};在聲明數(shù)組后,不可用賦值語句給字符數(shù)組名賦值。例:chars[10];s=“Cprogram”;//錯誤。char*s;s=“Cprogram”;//正確《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第80頁。6.4.2字符數(shù)組的初始化定義數(shù)組時,省略數(shù)組長度,編譯系統(tǒng)會自動根據(jù)初值個數(shù)確定數(shù)組長度。例如:chars[]={'C','','p','r','o','g','r','a','m'};s的長度為9,注意這時s沒有結(jié)尾字符'\0'。例如:chars[]="Cprogram";s的長度為10,s的最后一個字節(jié)為‘\0’。用字符串方式賦值比用字符逐個賦值要多占一個字節(jié),用于存放字符串結(jié)束標(biāo)志'\0'?!禖語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第81頁。6.4.2字符數(shù)組的初始化注意:字符型數(shù)組存放字符串時,最好多留一個字節(jié)存放結(jié)尾字符'\0',這對于字符串的輸入和輸出時用數(shù)組名作為參數(shù)是必須的?!禖語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第82頁。6.4.3字符數(shù)組元素的表示方法引用字符數(shù)組的一個元素同引用一個char型的基本變量。

例6-13輸出字符數(shù)組中的各個字符和內(nèi)存存儲的Ascii代碼?!禖語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第83頁。voidmain(){ inti; chars[20]="Iamastudent."; for(i=0;i<20;i++) printf("%-4c",s[i]); printf("\n"); for(i=0;i<20;i++) printf("%-4d",s[i]);}s[15]=‘\0’s[19]=0《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第84頁。6.4.4字符數(shù)組的輸入與輸出字符數(shù)組的輸入輸出:三種方式:1.在printf函數(shù)和scanf函數(shù)中,使用格式符為”%c”,結(jié)合循環(huán)語句對數(shù)組逐個地輸入輸出每個字符。例6-14使用格式符"%c",對字符數(shù)組進行輸入/輸出。《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第85頁。6.4.4字符數(shù)組的輸入與輸出voidmain(){ inti=0,k; chars[100]; printf("輸入:"); do{ scanf("%c",&s[i]); }while(s[i++]!='\n'); //最后一個字符s[i-1]='\n' printf("輸出:"); for(k=0;k<i;k++) printf("%c",s[k]);}輸入:Stringinput.輸出:Stringinput.《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第86頁。6.4.4字符數(shù)組的輸入與輸出2.在printf函數(shù)和scanf函數(shù)中,使用格式符”%s”,對字符數(shù)組一次性輸入/輸出字符串。printf函數(shù):使用格式符“%s”,對應(yīng)的輸出數(shù)據(jù)項是一維字符數(shù)組名。例如:chars1[]="Java\nJava";printf("%s\n",s1);將輸出兩行“Java”。在執(zhí)行函數(shù)printf("%s",s1)時,按數(shù)組名s1找到首地址,然后逐個輸出數(shù)組中各個字符直到遇到字符串終止標(biāo)志'\0'為止。《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第87頁。6.4.4字符數(shù)組的輸入與輸出2.在printf函數(shù)和scanf函數(shù)中,使用格式符”%s”,對字符數(shù)組一次性輸入/輸出字符串。scanf函數(shù)使用格式符“%s”,輸入數(shù)據(jù)項是數(shù)組名。例如:charst[20];scanf("%s",st);輸入的字符串長度<=19,最后留一個字節(jié)存放`\0`。

scanf(“%s”,&st);

//error《C語言程序設(shè)計實用教程》課件第6章-數(shù)組、字符串與動態(tài)內(nèi)存分配全文共143頁,當(dāng)前為第88頁。注意:(1)scanf函數(shù)輸入字符串時,字符串中不能含有空格,否則將以空格作為輸入串的結(jié)束。例如:charst[20];scanf("%s",st);輸入“Howareyou”

則st=“How”賦給st例如:chars1[20],s2[20],s3[20];scanf("%s%s%s",s1,s2,s3);

當(dāng)輸入一行“Howareyou”,則s1=“How”,s2=“are”,s3=“you”(2)scanf語句中的輸入

溫馨提示

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

評論

0/150

提交評論