C语言数组new
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
printf("%12d",f[i]); } }
例 用冒泡法对10个数排序
排序过程:
(1)比较第一个数与第二个数,若为逆序a[0]>a[1], 则交换;然后比较第二个数与第三个数;依次类推,直 至第n-1个数和第n个数比较为止.
第一趟冒泡排序,结果最大的数被安置: 最后一个元素位置上
(2)对前n-1个数进行第二趟冒泡排序,结果使次大的 数被安置在:
执行时输入:2 4 6 9 –1 0 7 9 10 -20↙
例 用数组求Fibonacci数列前20个数
#include <stdio.h> main() { int i;
int f[20]={1,1}; 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");
原二因维i:数n内t组存:a是[按一3行维,序4的]优;先
()
0
a[0][0]
2.数组元素在内存中相对位置的确定 a[i][j]的相对位置:i*N+j 1
a[0][1]
反过来内存中的第k个元素
2
对应a[k/N][k%N]
a[1][0]
int a[3][2];
3 a[0][0] a[0][1] a[1][0] a[1][1] 4 a[2][0] a[2][1]
fo输r出(ia=[0];i到<Na[;Ni+-1+] )
printf("%8d ",a[i]);
printf(“\n”);
§2 二维数组
元素个数L=行数M*列数N
二❖维定例数义方组i式n的:t定a义[3][4];行数
列数
数据类型floa数t组b名[2[常][量5表]达; 式][常量表达式];
1.数组元i素n的t 存c[放2顺]序[3][4];
int fm prpairnxint(tfif(n(""tMMaai,nxiniimmtubum)mvavluaeliuse%ids\n%", dm\anx+"1,)m; in); {执r}执行et行时}u时输rpnr输入i(nat入:f>(":2bM2?4ia4n6i:6mb99)u;m––}11v0a70lu9e71is09%-21d00\↙n"-,2m0i↙n+1);
❖说明: 数组不初始化,其元素值为随机数 当全部数组元素赋初值时,可不指定数组长度 只给部分数组元素赋[]={1,2,3,4,5,6}; 根据初值个数确定数组维数
一维数组的引用
➢只能逐个引用数组元素,不能一次引用整个数组
➢数组元素表示形式: 数组名[下标](0~L-1)
5
a[1][1] a[2][0] a[2][1]
float a[3][4];
二维数组元素的引用 int i=1,j=2; 形式: 数组名[下标][下a标[i]][j]=1;
二维数组元素的初始化 a[(int)(a[i][j])][2]=3;
分行初始化:
a[0][0]=sqrt(a[i][j]);
int a[3][4]={{1,2,3,4},{5,6,7,8}};
L*d 变量s有iz明eo确f(的元类素型数据类型))
变量使用前有确定的值
(=a+i*d)
一维数组的初始化
➢初始化方式
int a[5]={1,2,3,4,5};/*按照左对应关系初始化*/ 等价于:a[0]=1; a[1]=2; a[2]=3; a[3]=4; a[4]=5; /*int a[5]; a[5]={1,2,3,4,5};*/
}
例 用简单选择法对10个数排序
排序过程:
(1)首先通过n-1次比较,从n个数中找出最小的, 将 它与第一个交换—第一趟选择排序.
结果最小的数被安置在: 第一个元素位置上
(2)再通过n-2次比较,从剩余的n-1个数中找出关键 字次小的记录将它与第二个数交换.第二趟选择排序 (3)重复上述过程,共经过n-1趟排序后,排序结束
for(i=1;i<N;i++) { inftor kj==ii-t1o; n-1
f真or(j=i;j<aN[j;]j<+a+[k)]
假
ifk(=i-ji1f(!=a[kj)]<a[k]) k=j;
真 { x=a[i-1i -]1;!=a[ki-1]=a[k]假; a[k]=x;}
}a[i-1]a[k] printf("The sorted numbers:\n");
其中:下标可以是可以包含变量的整型表达式
➢注意:地址[整型表达式],不进行越界检查。
❖如:a[-100],a[L+100]
in➢t数a组[元1素0和]普,b通;变b量=具备1;相同的b性+质+,可;以将数组元素看 a做[0确]定=的2值0对;待。a[b]=8; a[a[b]]=20;
a例[8]in+t a+[1;0]; sqrt((double)(b));
mmaian#di(ne)f(in)e SIZE 10
步 1. 输骤{ 入:{pfiorn:m{pfrfiiotona(rnpiriiinatrntn=(循fti[(ni(at)a0=Stf"环[[f;(SI(E0Si""ZI<n输;ZIEEEiZtSE<nn]e入EtI]tS,e,rZii]er,1,Im,1Em r1Z0i,;00a个1Emiax+i;0n,ixm整iant++,eixtfingn)数m +e,e;tmgr)easei:gxn\rne(s;"ir:n)s\;t:n\a"n,)i";n)t; b); 2. 处理: sfocsra(cin=af0n(;if"<(% S"I% ZdE"d;,i"&+,+aa)[+i]i));; (a) 先m 令mamaxax=x=a=sm[mc0aiin]nnf;=(="xa%[[0d0]"],&; a[i]); (3b. )输}若若依出mmfp次or:aif{}pmrmni用oxmn(rf{}>/<roaaiitaixxn=/(rix*xffx*xf([[i((t[和(e=1ie==iiaif=m "l]]m]sl;([,和1M1f,semm令i"令a;m i<*e;niMaa<m/xii=mi*Sn<xamxSf<a0(]a/IxIiai<S;axZxm naZi[(aIxfm,iE=[Em [m(m Zu=ii;xi];m]inEx)m iai+[u)+n][i;+x>im]im i比n]+)a+,vm aa>[ax)+较vi[=a]alia)u)ix][(;le循m)i=u];ie)ian环s=[im ii% s);];% idn\=dn\a"[n,i"]m,;maaxx););
#include <stdio.h>
#define N 10
main()
输{入N个in数t 给aa[N[0]],i到,j,ak[,Nx-;1]
foprriin=t1f(t"oInNp-1ut %d numbers:\n“,N); for(i=0;i<N;i++)
scankf=("i-% 1 d",a+i);
❖定义方式: 数据类型 数组名[常量表达式];;
例 int a[6];
int a[10]a,b;
数组的三要素 0
a[0]
数首常数数组地量组组名址名元表,(素示是有a内地是明存址地确址的)123类型
a[1] a[2] a[3]
a元数+素组i是的元第地素i址个使用前有54确定的aa值[[45]]
变量分的配三连要续素内存: 变量内名存(字&b节可数以=表数示组地长址度)
第八章 数组
•构造数据类型之一 •数组:有序数据的集合,用数组名标识 例•元素in:t属a同[2一0]数,i据=类15型;f,l用oa数t组b名[3和0]下;c标h确ar定
§1s一t一r维in维i数gn[t数组1d0的a组0t]定a(;[用义i]一; 个下标标识(数组不元能素用的变数量组)定义数组维数)
例 求二维数m组ain中()最大元素值及其行列号
{ int a[3][4]={{1,2,3,4},
max=a[0][0]
{9,8,7,6},
for i=0 to 2
{-10,10,-5,2}};
int i,j,row=0,colum=0,max;
for j=0mtaox3=a[0][0];
真 fofro(ria=([ji0]=[;0ji]<;>j=<m2=a;xi3+;j++)+假)
int i,j,row=0,colum=0; for(i=0;i<M;i++)
for(j=0;j<N;j++) /*scanf(“%f”,&a[i][j]);(X)*/
{scanf(“%f”,&max);a[i][j]=max;} max=a[0][0]; for(i=0;i<M;i++)
for(j=0;j<N;j++) if(a[i][j]>max) { max=a[i][j];row=i;colum=j; }
s必q须rtpf(or(rin(djt=fo(0“;u%j<b1d0%l;jex+”+),)aa,a[);8]);
&b;
&a[0];printf(“%d\n”,a[j]);
()
b=a[0]>a[8]; b=a[0]&&a[8];
#程i#n序icn举lucld例uede<s<tsdtidoi.oh.>h> 例#d#读ed#f1ei0nnf个cielnu整eSdeIS数Z<IsEZt存dE1io入0.1h数0> 组,找出其中最大值和最小值
max=a[i]i[fj(]a[i][j]>max)
row=i { max=a[i][j]; colum=j row=i;
colum=j; 输出:max和ro}w,colum
printf("max=%d,row=%d, \
colum=%d\n",max,row,colum);
}
#define M 3 #define N 4 main() { float a[M][N] ,max;
int a[3][4]={{1,},{5}};
int a[][4]={{1,2,3,4},{5,6,7,8}};
按元素排列顺序初始化 : int a[3][4]={1,2,3,4,5,6,7,8}; int a[][4]={1,2,3,4,5,6,7};
程序举例 #include <stdio.h>
第n-1个元素位置 (3)重复上述过程,共经过n-1趟冒泡排序后,排序结 束
#include <stdio.h> Inp#m {##m {}fuo##m {}fiddrt输aaonid真pffpfpffpfaeeNrnaiiiioooooopffpf出cjennrrrrnniiff[ooo=cs{sfrrrrrrlnrrniiii个iiifia((ttousfnnnn=rrrl((((((nn]cc1ppiii{fi(t[ou))nn}if数((( ncprjiijiiod{aaaatttt0rree0f)t(====i==rjii(daafffftt{ktreii(rfenn=[[t给a==]=a(((((nnoffi(i(eNN000n0=[a11-NNtt[=((ffni""""[到aaN00oattiN-<N=i=(([;;;;f;;""aa=i+ITIT]]Nfft<0;[iiii([jj;;11""]iIT-[a((]safnn<<<<,,0[]hh<<iiiN11-"i;0>% % iii1(s00n<<"",[]t]h1i[>]ipp,,;]% eeiNNNN-0"N]NN;d<t;% % jj;>>ipai,jeNNiuud,,<;ja]% jdd--;;;;i<a;;tta[ssuN;,a1o1;diiiitt;;i[jja,;""tjsddji[oo++++[oiitk++][k-+.-i;;"dai,,o% % ++[i+hrr+i-i.j&a;++++=],% ""i[++++hr1;tti)&++>]"1=+1,,+iieeta)))dd)N>]aa=+))]+1,]ead]))dda[ia)+=[[-]))dann+)[i[[1ii)];n)anni[]]uuii)]);n+]u))i[uum m );+假)u;;im1m m ;+;1m bb]b1bb]ee;be;]eerrae;rssrra[srss::a[i\\s:::+i[\\\+:nni1\n+nn""1n]""",,1]=NN",))=]N);;t))=;;t);;};t;};}
例 用冒泡法对10个数排序
排序过程:
(1)比较第一个数与第二个数,若为逆序a[0]>a[1], 则交换;然后比较第二个数与第三个数;依次类推,直 至第n-1个数和第n个数比较为止.
第一趟冒泡排序,结果最大的数被安置: 最后一个元素位置上
(2)对前n-1个数进行第二趟冒泡排序,结果使次大的 数被安置在:
执行时输入:2 4 6 9 –1 0 7 9 10 -20↙
例 用数组求Fibonacci数列前20个数
#include <stdio.h> main() { int i;
int f[20]={1,1}; 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");
原二因维i:数n内t组存:a是[按一3行维,序4的]优;先
()
0
a[0][0]
2.数组元素在内存中相对位置的确定 a[i][j]的相对位置:i*N+j 1
a[0][1]
反过来内存中的第k个元素
2
对应a[k/N][k%N]
a[1][0]
int a[3][2];
3 a[0][0] a[0][1] a[1][0] a[1][1] 4 a[2][0] a[2][1]
fo输r出(ia=[0];i到<Na[;Ni+-1+] )
printf("%8d ",a[i]);
printf(“\n”);
§2 二维数组
元素个数L=行数M*列数N
二❖维定例数义方组i式n的:t定a义[3][4];行数
列数
数据类型floa数t组b名[2[常][量5表]达; 式][常量表达式];
1.数组元i素n的t 存c[放2顺]序[3][4];
int fm prpairnxint(tfif(n(""tMMaai,nxiniimmtubum)mvavluaeliuse%ids\n%", dm\anx+"1,)m; in); {执r}执行et行时}u时输rpnr输入i(nat入:f>(":2bM2?4ia4n6i:6mb99)u;m––}11v0a70lu9e71is09%-21d00\↙n"-,2m0i↙n+1);
❖说明: 数组不初始化,其元素值为随机数 当全部数组元素赋初值时,可不指定数组长度 只给部分数组元素赋[]={1,2,3,4,5,6}; 根据初值个数确定数组维数
一维数组的引用
➢只能逐个引用数组元素,不能一次引用整个数组
➢数组元素表示形式: 数组名[下标](0~L-1)
5
a[1][1] a[2][0] a[2][1]
float a[3][4];
二维数组元素的引用 int i=1,j=2; 形式: 数组名[下标][下a标[i]][j]=1;
二维数组元素的初始化 a[(int)(a[i][j])][2]=3;
分行初始化:
a[0][0]=sqrt(a[i][j]);
int a[3][4]={{1,2,3,4},{5,6,7,8}};
L*d 变量s有iz明eo确f(的元类素型数据类型))
变量使用前有确定的值
(=a+i*d)
一维数组的初始化
➢初始化方式
int a[5]={1,2,3,4,5};/*按照左对应关系初始化*/ 等价于:a[0]=1; a[1]=2; a[2]=3; a[3]=4; a[4]=5; /*int a[5]; a[5]={1,2,3,4,5};*/
}
例 用简单选择法对10个数排序
排序过程:
(1)首先通过n-1次比较,从n个数中找出最小的, 将 它与第一个交换—第一趟选择排序.
结果最小的数被安置在: 第一个元素位置上
(2)再通过n-2次比较,从剩余的n-1个数中找出关键 字次小的记录将它与第二个数交换.第二趟选择排序 (3)重复上述过程,共经过n-1趟排序后,排序结束
for(i=1;i<N;i++) { inftor kj==ii-t1o; n-1
f真or(j=i;j<aN[j;]j<+a+[k)]
假
ifk(=i-ji1f(!=a[kj)]<a[k]) k=j;
真 { x=a[i-1i -]1;!=a[ki-1]=a[k]假; a[k]=x;}
}a[i-1]a[k] printf("The sorted numbers:\n");
其中:下标可以是可以包含变量的整型表达式
➢注意:地址[整型表达式],不进行越界检查。
❖如:a[-100],a[L+100]
in➢t数a组[元1素0和]普,b通;变b量=具备1;相同的b性+质+,可;以将数组元素看 a做[0确]定=的2值0对;待。a[b]=8; a[a[b]]=20;
a例[8]in+t a+[1;0]; sqrt((double)(b));
mmaian#di(ne)f(in)e SIZE 10
步 1. 输骤{ 入:{pfiorn:m{pfrfiiotona(rnpiriiinatrntn=(循fti[(ni(at)a0=Stf"环[[f;(SI(E0Si""ZI<n输;ZIEEEiZtSE<nn]e入EtI]tS,e,rZii]er,1,Im,1Em r1Z0i,;00a个1Emiax+i;0n,ixm整iant++,eixtfingn)数m +e,e;tmgr)easei:gxn\rne(s;"ir:n)s\;t:n\a"n,)i";n)t; b); 2. 处理: sfocsra(cin=af0n(;if"<(% S"I% ZdE"d;,i"&+,+aa)[+i]i));; (a) 先m 令mamaxax=x=a=sm[mc0aiin]nnf;=(="xa%[[0d0]"],&; a[i]); (3b. )输}若若依出mmfp次or:aif{}pmrmni用oxmn(rf{}>/<roaaiitaixxn=/(rix*xffx*xf([[i((t[和(e=1ie==iiaif=m "l]]m]sl;([,和1M1f,semm令i"令a;m i<*e;niMaa<m/xii=mi*Sn<xamxSf<a0(]a/IxIiai<S;axZxm naZi[(aIxfm,iE=[Em [m(m Zu=ii;xi];m]inEx)m iai+[u)+n][i;+x>im]im i比n]+)a+,vm aa>[ax)+较vi[=a]alia)u)ix][(;le循m)i=u];ie)ian环s=[im ii% s);];% idn\=dn\a"[n,i"]m,;maaxx););
#include <stdio.h>
#define N 10
main()
输{入N个in数t 给aa[N[0]],i到,j,ak[,Nx-;1]
foprriin=t1f(t"oInNp-1ut %d numbers:\n“,N); for(i=0;i<N;i++)
scankf=("i-% 1 d",a+i);
❖定义方式: 数据类型 数组名[常量表达式];;
例 int a[6];
int a[10]a,b;
数组的三要素 0
a[0]
数首常数数组地量组组名址名元表,(素示是有a内地是明存址地确址的)123类型
a[1] a[2] a[3]
a元数+素组i是的元第地素i址个使用前有54确定的aa值[[45]]
变量分的配三连要续素内存: 变量内名存(字&b节可数以=表数示组地长址度)
第八章 数组
•构造数据类型之一 •数组:有序数据的集合,用数组名标识 例•元素in:t属a同[2一0]数,i据=类15型;f,l用oa数t组b名[3和0]下;c标h确ar定
§1s一t一r维in维i数gn[t数组1d0的a组0t]定a(;[用义i]一; 个下标标识(数组不元能素用的变数量组)定义数组维数)
例 求二维数m组ain中()最大元素值及其行列号
{ int a[3][4]={{1,2,3,4},
max=a[0][0]
{9,8,7,6},
for i=0 to 2
{-10,10,-5,2}};
int i,j,row=0,colum=0,max;
for j=0mtaox3=a[0][0];
真 fofro(ria=([ji0]=[;0ji]<;>j=<m2=a;xi3+;j++)+假)
int i,j,row=0,colum=0; for(i=0;i<M;i++)
for(j=0;j<N;j++) /*scanf(“%f”,&a[i][j]);(X)*/
{scanf(“%f”,&max);a[i][j]=max;} max=a[0][0]; for(i=0;i<M;i++)
for(j=0;j<N;j++) if(a[i][j]>max) { max=a[i][j];row=i;colum=j; }
s必q须rtpf(or(rin(djt=fo(0“;u%j<b1d0%l;jex+”+),)aa,a[);8]);
&b;
&a[0];printf(“%d\n”,a[j]);
()
b=a[0]>a[8]; b=a[0]&&a[8];
#程i#n序icn举lucld例uede<s<tsdtidoi.oh.>h> 例#d#读ed#f1ei0nnf个cielnu整eSdeIS数Z<IsEZt存dE1io入0.1h数0> 组,找出其中最大值和最小值
max=a[i]i[fj(]a[i][j]>max)
row=i { max=a[i][j]; colum=j row=i;
colum=j; 输出:max和ro}w,colum
printf("max=%d,row=%d, \
colum=%d\n",max,row,colum);
}
#define M 3 #define N 4 main() { float a[M][N] ,max;
int a[3][4]={{1,},{5}};
int a[][4]={{1,2,3,4},{5,6,7,8}};
按元素排列顺序初始化 : int a[3][4]={1,2,3,4,5,6,7,8}; int a[][4]={1,2,3,4,5,6,7};
程序举例 #include <stdio.h>
第n-1个元素位置 (3)重复上述过程,共经过n-1趟冒泡排序后,排序结 束
#include <stdio.h> Inp#m {##m {}fuo##m {}fiddrt输aaonid真pffpfpffpfaeeNrnaiiiioooooopffpf出cjennrrrrnniiff[ooo=cs{sfrrrrrrlnrrniiii个iiifia((ttousfnnnn=rrrl((((((nn]cc1ppiii{fi(t[ou))nn}if数((( ncprjiijiiod{aaaatttt0rree0f)t(====i==rjii(daafffftt{ktreii(rfenn=[[t给a==]=a(((((nnoffi(i(eNN000n0=[a11-NNtt[=((ffni""""[到aaN00oattiN-<N=i=(([;;;;f;;""aa=i+ITIT]]Nfft<0;[iiii([jj;;11""]iIT-[a((]safnn<<<<,,0[]hh<<iiiN11-"i;0>% % iii1(s00n<<"",[]t]h1i[>]ipp,,;]% eeiNNNN-0"N]NN;d<t;% % jj;>>ipai,jeNNiuud,,<;ja]% jdd--;;;;i<a;;tta[ssuN;,a1o1;diiiitt;;i[jja,;""tjsddji[oo++++[oiitk++][k-+.-i;;"dai,,o% % ++[i+hrr+i-i.j&a;++++=],% ""i[++++hr1;tti)&++>]"1=+1,,+iieeta)))dd)N>]aa=+))]+1,]ead]))dda[ia)+=[[-]))dann+)[i[[1ii)];n)anni[]]uuii)]);n+]u))i[uum m );+假)u;;im1m m ;+;1m bb]b1bb]ee;be;]eerrae;rssrra[srss::a[i\\s:::+i[\\\+:nni1\n+nn""1n]""",,1]=NN",))=]N);;t))=;;t);;};t;};}