工學《C語言程序設(shè)計》第5章-數(shù)組、字符串、指針課件_第1頁
工學《C語言程序設(shè)計》第5章-數(shù)組、字符串、指針課件_第2頁
工學《C語言程序設(shè)計》第5章-數(shù)組、字符串、指針課件_第3頁
工學《C語言程序設(shè)計》第5章-數(shù)組、字符串、指針課件_第4頁
工學《C語言程序設(shè)計》第5章-數(shù)組、字符串、指針課件_第5頁
已閱讀5頁,還剩155頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第5章數(shù)組、字符串、指針第5章數(shù)組、字符串、指針本章要求:1、掌握C語言數(shù)組在內(nèi)存中的存儲形式2、掌握一維數(shù)組和二維數(shù)組的定義及使用3、掌握使用指針處理數(shù)組的方法4、掌握使用字符數(shù)組及指針處理字符串數(shù)據(jù)的方法5、掌握與數(shù)組有關(guān)的基本算法(如排序、查找、插入、刪除等)的程序設(shè)計本章要求:1、掌握C語言數(shù)組在內(nèi)存中的存儲形式重點:一維數(shù)組、二維數(shù)組的定義與使用方法,使用指針訪問數(shù)組和字符串的方法。難點:二維數(shù)組與指針;與數(shù)組有關(guān)的常用算法(排序、查找與插入等)。重點:5.1數(shù)組概述例.輸入10個數(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中只能存放一個整數(shù)

需要10個變量的內(nèi)存空間才可以保留10個整數(shù)5.1數(shù)組概述例.輸入10個數(shù),求出他們的平均數(shù)。并如果使用:a1,a2,a3,a4,a5,a6,a7,a8,a9,a10這10個變量,代碼: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);………..

/*實際程序是不能這樣寫*/如果使用:a1,a2,a3,a4,a5,a6,a7,a8,a思考:發(fā)現(xiàn):如果不是10個數(shù),而是100,1000,甚至是10000,此時按上面方法編寫程序就非常冗長。

如果可以使用循環(huán)來編寫,程序可以簡潔許多。要使用循環(huán):必須使用ai(i=1,2…10)的形式來代表a1,a2…a10在C語言中使用“數(shù)組”來實現(xiàn):a[i]a[0]a[1]…a[9]思考:發(fā)現(xiàn):如果不是10個數(shù),而是100,1000,甚至是1#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個元素的一維數(shù)組aa[0]a[1]…a[9]a[i]a[i]a[i]a[i]#include<stdio.h>聲明有10個元素的一維數(shù)在程序設(shè)計中,為了處理方便,把具有相同類型的若干變量按有序的形式組織起來。這些按序排列的同類數(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ù)的存儲單元在程序設(shè)計中,為了處理方便,把具有相同類型的若干變量按有序5.2一維數(shù)組只有一個下標變量的數(shù)組,稱為一維數(shù)組。

5.2.1一維數(shù)組定義

一般形式為:

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

其中:類型說明符是任一種基本數(shù)據(jù)類型或構(gòu)造數(shù)據(jù)類型,數(shù)組名是用戶定義的標識符;方括號中的常量表達式表示數(shù)據(jù)元素的個數(shù),也稱為數(shù)組的長度。5.2一維數(shù)組只有一個下標變量的數(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]相當于聲明了5個整型變量例如:a[0]a[1]a[2]a[3]a[4]相當于聲明了5說明:數(shù)組的所有元素的數(shù)據(jù)類型都是相同的。數(shù)組取名規(guī)則應(yīng)符合標識符的規(guī)定,數(shù)組名不能與同一函數(shù)中其它變量名相同:

inta;floata[10];

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

是錯誤的。說明:數(shù)組的所有元素的數(shù)據(jù)類型都是相同的。5.2.2一維數(shù)組的初始化1、數(shù)組聲明時初始化

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

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

相當于a[0]=0;a[1]=1;...a[9]=9;

5.2.2一維數(shù)組的初始化1、數(shù)組聲明時初始化

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

用賦值語句初始化是在程序執(zhí)行過程中實現(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*/2、使用賦值語句初始化用賦值語句初始化是在程序執(zhí)行過5.2.3數(shù)組元素的引用

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

數(shù)組名[下標]

其中,的下標只能為整型常量或整型表達式。若為小數(shù)時,C編譯將自動取整。5.2.3數(shù)組元素的引用數(shù)組元素是組成數(shù)組的基本單說明:intn=3,a[10];

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

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

printf("%d",a);

正確代碼。引用數(shù)組元素的時候,可以用變量。錯誤代碼。最大下標為9,沒有a[10]元素。錯誤代碼。不能用一個語句輸出整個數(shù)組。說明:intn=3,a[10];

a[n]=5;a[n+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個數(shù),再按倒序輸出5-1.c5.2.4一維數(shù)組的基本操作可通過循環(huán)給數(shù)組元素輸入數(shù)據(jù)求數(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;}及其下標求最大、最小值以及排序算法中的最大、最小值確定都可以采用類似方法:把第一個元素假想為當前找到的最大、最小值,在后續(xù)的比較中進行更新。5-2.c求數(shù)組中最大元素#defineN10p=0;a[%d]一維數(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.c一維數(shù)組的倒置for(i=0;i<N/2;i++)00245.2.5一維數(shù)組的應(yīng)用舉例例:如果要統(tǒng)計0~9,10~19,20~29,….80~89,90~99分數(shù)段及100分的人數(shù)。

編程分析:a數(shù)組用來存放20個學生成績;另用數(shù)組bn來存各分數(shù)段的人數(shù):bn[0]存0~9分的人數(shù),bn[1]存10~19分的人數(shù),…bn[9]存90~99分的人數(shù),bn[10]存100分的人數(shù)。5-4.c5.2.5一維數(shù)組的應(yīng)用舉例例:如果要統(tǒng)計0~9,10~一維數(shù)組的應(yīng)用舉例:

5.8.1排序問題(教材P.166)數(shù)據(jù)的排序就是將一批數(shù)據(jù)由小大到(升序)或由大到?。ń敌颍┻M行排列。常用的有選擇法、冒泡法。首先要將需要排序的數(shù)據(jù)放到數(shù)組中,這樣,便于我們排序。一維數(shù)組的應(yīng)用舉例:

5.8.1排序問題(教材P.166)1.選擇法排序算法描述:從剩下的元素集中找一個最小的元素依次放到第i個位置。i從0開始原始數(shù)據(jù):869327第一輪后:269387第二輪后:239687第三輪后:236987第四輪后:2367

89第五輪后:236789a[0]a[1]a[2]a[3]a[4]a[5]8693276個數(shù)需要經(jīng)歷5輪選擇(i=0~4)每一輪做的工作:從第i個到最后一個中找一個最小的。與第i個交換。放到a[i]這個位置。1.選擇法排序算法描述:從剩下的元素集中找一個最小的元素依次代碼: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個到最后一個中找一個最小的。與第i個交換。6個數(shù)需要經(jīng)歷5輪選擇(i=0~4)5-5.c代碼:for(i=0;i<5;i++)i<N-1;2.冒泡法排序(升序)算法描述第一輪:8693268932689326839268329①②③④

683296382963289①②③第二輪:5個數(shù)共4輪即可…2.冒泡法排序(升序)算法描述86666①②代碼:

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個數(shù)需要經(jīng)歷4輪選擇(i=0~3)5-6.c代碼:for(i=0;i<4;i++)i<N-5.3二維數(shù)組與多維數(shù)組5.3.1二維數(shù)組的聲明二維數(shù)組說明的一般形式是:

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

floatb[4][4];

charc[5][10];

5.3二維數(shù)組與多維數(shù)組5.3.1二維數(shù)組的聲明inta[3][4];

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

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

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

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

二維數(shù)組初始化也是在類型說明時給各下標變量賦以初值。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é)果是完全相同的。5.3.3二維數(shù)組的初始化二維數(shù)組初始化說明:inta[3][3]={{1},{2},{3}};inta[][3]={1,2,3,4,5,6,7,8};100200300123456780說明:inta[3][3]={{1},{2},{3}};15.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”);}5.3.4二維數(shù)組的基本操作二維數(shù)組的操作一般需要使用二重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]

如果不是方陣,則要定義另一個數(shù)組。b[j][i]=a[i][j]2.求最大元素及其所在的行和列編程基本思路與在一維數(shù)5.3.6多維數(shù)組的聲明和引用

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

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

2.6.1地址與指針的概念

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

2.6.1地址與指針的概念數(shù)據(jù)存放2.6.3指針變量的定義

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

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

int*p,x;

/*p是指針變量,x是整型變量*/指針所指對象的類型稱為指針的基準類型。

int*p1;

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

char*p2;

/*p2的基準類型為字符型,即p2所指向?qū)ο蟮念愋褪亲址?/2.6.3指針變量的定義指針變量定義的一般形式:

2.6.4指針變量的初始化#include<stdio.h>voidmain(){int*p;*p=5;printf("*p=%d\n",*p);}錯誤代碼:可能引起嚴重后果不定值p指向不可預(yù)料的內(nèi)存空間*p可以表示p變量所指的變量2.6.4指針變量的初始化#include<stdio初始化指針變量的方法主要有以下3種:inta,*p;

p=&a;

inta,*p1,*p2=&a;

p1=p2;

使用malloc函數(shù)或calloc函數(shù),給它們分配一個自由的內(nèi)存空間地址。apap1p2初始化指針變量的方法主要有以下3種:inta,*p;

p2.6.5指針變量的訪問格式為:

*指針變量例:inta=5,*p=&a;a為整型變量,變量里存放的是5p為指針變量,變量里存放的是變量a的地址&a表示變量a的地址*p表示變量p所指向的變量,即5ap&a5*p2.6.5指針變量的訪問格式為:

*指針變量ap+1p-1++--運算p+1p-15.4數(shù)組與指針

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

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

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

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

做賦值操作:p=a;p=&a[0];兩種方法效果完全一樣5.4數(shù)組與指針5.4.1一維數(shù)組與指針

1、使用指使用指針引用數(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的運算*(p+0)*(p+1)*(p+2)*(p+i)*(p+9)使用指針引用數(shù)組元素使用指針變量p指向數(shù)組a:a[0]a[1說明:p+i指向元素a[i]

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

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

printf("%d",*a)指針變量可以指向數(shù)組中的任何元素,注意指針變量的當前值。5-7.c例,輸入5個數(shù),再按倒序輸出使用指針引用數(shù)組元素,應(yīng)注意以下指向數(shù)組元素的指針的一些運算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]66p指向數(shù)組元素的指針的一些運算inta[10],*p=a;55.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)存中:5.4.2二維數(shù)組與指針1.二維數(shù)組的指針a[0][二級指針常量。因為數(shù)組名可以看成是由3個元素a[0]、a[1]、a[2]構(gòu)成的一維數(shù)組,每個元素指向該行的首地址。因此,二維數(shù)組名是一個二級指針常量。一級指針常量。a[0]可以看成是由a[0][0]、a[0][1]、a[0][2]、a[0][3]構(gòu)成的一維數(shù)組,可以將a[0]這個特殊數(shù)組名理解為指向int類型的一級指針常量。a[1]與a[0]具有同樣性質(zhì),a[1]與a[0]的偏移量是一行元素的長度。二級指針常量。因為數(shù)組名可以看成是由3個元素a[0]、a[1[工學]《C語言程序設(shè)計》第5章___數(shù)組、字符串、指針課件

2.使用指向元素的指針變量來引用定義一個指向二維數(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");}}2.使用指向元素的指針變量來引用定義一個指向二維數(shù)組元素類3.使用行指針變量來引用數(shù)組元素

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

類型標識符(*指針變量名)[元素個數(shù)];例如:int(*p)[4];定義一個指向一行有4個整型元素的行指針變量。3.使用行指針變量來引用數(shù)組元素對于二維例使用行指針變量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]

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

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

*(*p+j)為當前行第j個元素的值。二維數(shù)組名a是一個行指針常量,不能進行a++、a--的運算,p是行指針變量,可以進行p++等指針運算操作。注意:不要將int(*p)[4]寫成int*p[4]5.5字符數(shù)組與字符串5.5.1字符數(shù)組與初值化

例如:charc[10];

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

charc[10]={'c','','p','r','o','g','r','a','m'};5.5字符數(shù)組與字符串5.5.1字符數(shù)組與初值化chard[2][10]={{'I','','a','m','','a','','b','o','y'},{'G','o','o','d','','b','o','y'}}(2)

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

chard[2][10]={{'I','','a',5.5.3字符串與字符數(shù)組

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

或:charc[]="Cprogram";Cprogram\05.5.3字符串與字符數(shù)組在C語言中沒有專門5.5.4字符數(shù)組的輸入輸出

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

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

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

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

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

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

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

/*錯誤的*/“%s”格式輸出時,若數(shù)組中包含一個以上‘\0’,遇第一個‘一個scanf函數(shù)輸入的字符串中有空格時要特別注意。例如:charstr[13];scanf(“%s”,str);運行時輸入:Howareyou?結(jié)果只有“How”被放入str解決方案:輸入到多個字符串:charstr1[5],str2[5],str3[5];scanf("%s%s%s",str1,str2,str3);使用逐個字符輸入:

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

一個scanf函數(shù)輸入的字符串中有空格時要特別注意。例如:運5.6字符串字符指針5.6.1指向字符串的指針例:chars[10];

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

char*s="Welcome";char*s;s="Welcome";{}兩種方法:s變量得到的都是字符串的首地址。5.6字符串字符指針5.6.1指向字符串的指針例:寫出程序的運行結(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.c例:寫出程序的運行結(jié)果。voidmain()ABCD\0s5.6.2使用字符串指針變量與字符數(shù)組的區(qū)別三者含義:字符串指針變量本身是一個變量,用于存放字符串的首地址。字符串本身是存放在一塊連續(xù)的內(nèi)存空間中并以‘\0’作為字符串的結(jié)束。字符數(shù)組是由若干個數(shù)組元素組成的,它可用來存放整個字符串。注意:char*ps=“CLanguage”;

char*ps;ps=“CLanguage”;

charst[]={“CLanguage”};

charst[20];st={"CLanguage"}?!獭獭獭?.6.2使用字符串指針變量與字符數(shù)組的區(qū)別三者含義:√

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

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

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

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

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

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

③以回車最為輸入結(jié)束。5.6.3字符串處理函數(shù)用于輸入輸出的字使用其它字符串函數(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ù)的返回值中,可以賦值給其他變量。使用其它字符串函數(shù)應(yīng)包含頭文件"string.h"。3.字符5.7指針數(shù)組與多級指針變量5.7.1指針數(shù)組概念:指針數(shù)組是一個數(shù)組,該數(shù)組中的每一個元素是指針變量。定義:

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

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

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

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

Wall\0FORTRAN\0ComputerDesign\0使用指針數(shù)組char*pc[]={"Followme例將若干字符串按字母順序輸出。#include"stdio.h"#include"string.h"voidmain(){char*temp;inti,j,k,n=5;char*pc[]={"Followme","BASIC","GreatWall","FORTRAN","ComputerDesign“};例將若干字符串按字母順序輸出。#include"stdfor(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){}for(i=0;i<n-1;i++)if(k!=5.7.2指向指針的指針

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

int**p;

例:intx,*pc,**p;

x=5;pc=&x;p=&pc;5xpc&xp&pc5.7.2指向指針的指針用于存放某個指針5.8應(yīng)用程序舉例5.8.2數(shù)據(jù)查找1.順序查找法36845129710a[0]a[1]…………a[9]4x用循環(huán)結(jié)構(gòu)比較:xVsa[i](循環(huán)變量i最大為9)還有一個循環(huán)結(jié)束的條件:找到了:x=a[i]5.8應(yīng)用程序舉例5.8.2數(shù)據(jù)查找3684512971#defineN10voidmain(){inta[N]={12,34,1,3,67,89,28,61,9,87};intindex,x,i;printf("inputthenumber:\n");scanf("%d",&x);for(i=0;i<N;i++)if(x==a[i])break;if(i>=N)printf(“Notfound!\n");elseprintf(“ItistheNO.%d!\n",i);}思考:如果數(shù)據(jù)中有相同的數(shù)據(jù),要求將所有數(shù)據(jù)都查找出來,如何修改?5-10.c#defineN10思考:如果數(shù)據(jù)中有相同的數(shù)據(jù),要求將2.折半查找法(只能對有序數(shù)列進行查找)124910152635363954596871757779959699bottopmid=(bot+top)/2比較:xVsa[mid]的情況①x=a[mid]則找到②x<a[mid]則到前半部分找,則bot不變,top=mid-1③x>a[mid]則到后半部分找,則top不變,bot=mid+126xtopbotmid循環(huán)結(jié)束的條件:①找到了:x=a(mid)②bot>top25bottopmidbottopmid此時bot=top=mid而x>a(mid)則bot=mid+1則bot>top0123456789101112131415161718192.折半查找法(只能對有序數(shù)列進行查找)1249101526#defineN10voidmain(){inta[N]={1,4,7,13,16,19,28,36,49,60};intmid,bot,top,x,i;scanf("%d",&x);bot=0;top=N-1;while(bot<=top){mid=(top+bot)/2;if(x==a[mid])break;elseif(x<a[mid])top=mid-1;elsebot=mid+1;}if(bot>top)printf("Notfound!\n");elseprintf("ItistheNO.%d!\n",mid);5-11.c#defineN105-11.c5.8.3插入法12561016254895994x①確定插入的位置p:for(p=0;p<n;p++)if(x<a[p])break;p0100a[0]a[1]…………a[9]②移位和插入for(i=n;i>p;i--)a[i]=a[i-1],a[p]=x;

5.8.3插入法12561016254895994x①確此時q為最后一個元素地址①確定插入的位置p:for(p=0;p<n;p++)if(x<a[p])break;②移位和插入for(i=n;i>p;i--)a[i]=a[i-1],a[p]=x;下標法:intp;①確定插入的位置:for(p=a;p<q;p++)if(x<*p)break;②移位和插入for(q=a+N;q>p;q--)*q=*(q-1),*p=x;指針法:int*p,*q;此時q為最后一個元素地址①確定插入的位置p:②移位和插入下5.8.4字符串的處理1.簡單加密和解密2.統(tǒng)計文本單詞的個數(shù)5.8.4字符串的處理1.簡單加密和解密[工學]《C語言程序設(shè)計》第5章___數(shù)組、字符串、指針課件第5章數(shù)組、字符串、指針第5章數(shù)組、字符串、指針本章要求:1、掌握C語言數(shù)組在內(nèi)存中的存儲形式2、掌握一維數(shù)組和二維數(shù)組的定義及使用3、掌握使用指針處理數(shù)組的方法4、掌握使用字符數(shù)組及指針處理字符串數(shù)據(jù)的方法5、掌握與數(shù)組有關(guān)的基本算法(如排序、查找、插入、刪除等)的程序設(shè)計本章要求:1、掌握C語言數(shù)組在內(nèi)存中的存儲形式重點:一維數(shù)組、二維數(shù)組的定義與使用方法,使用指針訪問數(shù)組和字符串的方法。難點:二維數(shù)組與指針;與數(shù)組有關(guān)的常用算法(排序、查找與插入等)。重點:5.1數(shù)組概述例.輸入10個數(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中只能存放一個整數(shù)

需要10個變量的內(nèi)存空間才可以保留10個整數(shù)5.1數(shù)組概述例.輸入10個數(shù),求出他們的平均數(shù)。并如果使用:a1,a2,a3,a4,a5,a6,a7,a8,a9,a10這10個變量,代碼: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);………..

/*實際程序是不能這樣寫*/如果使用:a1,a2,a3,a4,a5,a6,a7,a8,a思考:發(fā)現(xiàn):如果不是10個數(shù),而是100,1000,甚至是10000,此時按上面方法編寫程序就非常冗長。

如果可以使用循環(huán)來編寫,程序可以簡潔許多。要使用循環(huán):必須使用ai(i=1,2…10)的形式來代表a1,a2…a10在C語言中使用“數(shù)組”來實現(xiàn):a[i]a[0]a[1]…a[9]思考:發(fā)現(xiàn):如果不是10個數(shù),而是100,1000,甚至是1#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個元素的一維數(shù)組aa[0]a[1]…a[9]a[i]a[i]a[i]a[i]#include<stdio.h>聲明有10個元素的一維數(shù)在程序設(shè)計中,為了處理方便,把具有相同類型的若干變量按有序的形式組織起來。這些按序排列的同類數(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ù)的存儲單元在程序設(shè)計中,為了處理方便,把具有相同類型的若干變量按有序5.2一維數(shù)組只有一個下標變量的數(shù)組,稱為一維數(shù)組。

5.2.1一維數(shù)組定義

一般形式為:

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

其中:類型說明符是任一種基本數(shù)據(jù)類型或構(gòu)造數(shù)據(jù)類型,數(shù)組名是用戶定義的標識符;方括號中的常量表達式表示數(shù)據(jù)元素的個數(shù),也稱為數(shù)組的長度。5.2一維數(shù)組只有一個下標變量的數(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]相當于聲明了5個整型變量例如:a[0]a[1]a[2]a[3]a[4]相當于聲明了5說明:數(shù)組的所有元素的數(shù)據(jù)類型都是相同的。數(shù)組取名規(guī)則應(yīng)符合標識符的規(guī)定,數(shù)組名不能與同一函數(shù)中其它變量名相同:

inta;floata[10];

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

是錯誤的。說明:數(shù)組的所有元素的數(shù)據(jù)類型都是相同的。5.2.2一維數(shù)組的初始化1、數(shù)組聲明時初始化

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

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

相當于a[0]=0;a[1]=1;...a[9]=9;

5.2.2一維數(shù)組的初始化1、數(shù)組聲明時初始化

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

用賦值語句初始化是在程序執(zhí)行過程中實現(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*/2、使用賦值語句初始化用賦值語句初始化是在程序執(zhí)行過5.2.3數(shù)組元素的引用

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

數(shù)組名[下標]

其中,的下標只能為整型常量或整型表達式。若為小數(shù)時,C編譯將自動取整。5.2.3數(shù)組元素的引用數(shù)組元素是組成數(shù)組的基本單說明:intn=3,a[10];

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

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

printf("%d",a);

正確代碼。引用數(shù)組元素的時候,可以用變量。錯誤代碼。最大下標為9,沒有a[10]元素。錯誤代碼。不能用一個語句輸出整個數(shù)組。說明:intn=3,a[10];

a[n]=5;a[n+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個數(shù),再按倒序輸出5-1.c5.2.4一維數(shù)組的基本操作可通過循環(huán)給數(shù)組元素輸入數(shù)據(jù)求數(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;}及其下標求最大、最小值以及排序算法中的最大、最小值確定都可以采用類似方法:把第一個元素假想為當前找到的最大、最小值,在后續(xù)的比較中進行更新。5-2.c求數(shù)組中最大元素#defineN10p=0;a[%d]一維數(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.c一維數(shù)組的倒置for(i=0;i<N/2;i++)00245.2.5一維數(shù)組的應(yīng)用舉例例:如果要統(tǒng)計0~9,10~19,20~29,….80~89,90~99分數(shù)段及100分的人數(shù)。

編程分析:a數(shù)組用來存放20個學生成績;另用數(shù)組bn來存各分數(shù)段的人數(shù):bn[0]存0~9分的人數(shù),bn[1]存10~19分的人數(shù),…bn[9]存90~99分的人數(shù),bn[10]存100分的人數(shù)。5-4.c5.2.5一維數(shù)組的應(yīng)用舉例例:如果要統(tǒng)計0~9,10~一維數(shù)組的應(yīng)用舉例:

5.8.1排序問題(教材P.166)數(shù)據(jù)的排序就是將一批數(shù)據(jù)由小大到(升序)或由大到?。ń敌颍┻M行排列。常用的有選擇法、冒泡法。首先要將需要排序的數(shù)據(jù)放到數(shù)組中,這樣,便于我們排序。一維數(shù)組的應(yīng)用舉例:

5.8.1排序問題(教材P.166)1.選擇法排序算法描述:從剩下的元素集中找一個最小的元素依次放到第i個位置。i從0開始原始數(shù)據(jù):869327第一輪后:269387第二輪后:239687第三輪后:236987第四輪后:2367

89第五輪后:236789a[0]a[1]a[2]a[3]a[4]a[5]8693276個數(shù)需要經(jīng)歷5輪選擇(i=0~4)每一輪做的工作:從第i個到最后一個中找一個最小的。與第i個交換。放到a[i]這個位置。1.選擇法排序算法描述:從剩下的元素集中找一個最小的元素依次代碼: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個到最后一個中找一個最小的。與第i個交換。6個數(shù)需要經(jīng)歷5輪選擇(i=0~4)5-5.c代碼:for(i=0;i<5;i++)i<N-1;2.冒泡法排序(升序)算法描述第一輪:8693268932689326839268329①②③④

683296382963289①②③第二輪:5個數(shù)共4輪即可…2.冒泡法排序(升序)算法描述86666①②代碼:

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個數(shù)需要經(jīng)歷4輪選擇(i=0~3)5-6.c代碼:for(i=0;i<4;i++)i<N-5.3二維數(shù)組與多維數(shù)組5.3.1二維數(shù)組的聲明二維數(shù)組說明的一般形式是:

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

floatb[4][4];

charc[5][10];

5.3二維數(shù)組與多維數(shù)組5.3.1二維數(shù)組的聲明inta[3][4];

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

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

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

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

二維數(shù)組初始化也是在類型說明時給各下標變量賦以初值。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é)果是完全相同的。5.3.3二維數(shù)組的初始化二維數(shù)組初始化說明:inta[3][3]={{1},{2},{3}};inta[][3]={1,2,3,4,5,6,7,8};100200300123456780說明:inta[3][3]={{1},{2},{3}};15.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”);}5.3.4二維數(shù)組的基本操作二維數(shù)組的操作一般需要使用二重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]

如果不是方陣,則要定義另一個數(shù)組。b[j][i]=a[i][j]2.求最大元素及其所在的行和列編程基本思路與在一維數(shù)5.3.6多維數(shù)組的聲明和引用

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

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

2.6.1地址與指針的概念

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

2.6.1地址與指針的概念數(shù)據(jù)存放2.6.3指針變量的定義

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

類型符*標識符;說明:

溫馨提示

  • 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

提交評論