第七章数组和指针;7.1数组及数组元素
7.1.1一维数组;[例7.1]用气泡法完成对10个数从小到大排序。
第一趟扫描找到了最小的数存入a[0],其过程如下:
a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]a[10]
;;main()
{inta[11],i,j,t;
printf(“inputtennumbers:\n”);
for(i=1;i11;i++)scanf(“%d”,a[i]);
printf(“\n”);
for(i=1;i10;i++)
for(j=10;ji;j--)
if(a[j-1]a[j])
{t=a[j];a[j]=a[j-1];a[j-1]=t;}
printf(“thesortednumbers:\n”);
for(i=0;i11;i++)printf(“%d”,a[i]);
};上述程序有许多值得改进的地方。
(1)在9趟由底向上的扫描中,可能最后几趟已无任何交换发生,程序应能做到,一旦发现某趟扫描中无任何交换时就会终止;
(2)在每趟扫描中,上趟扫描中最后一次交换的位置k是至关重要的,因为当jk时,将再也没有任何交换发生,从而应该在此结束此趟扫描;
(3)为使算法具有对称性,扫描的方向有两种可能的选择,一是使轻气泡上浮,一是使重气泡下沉。;例:用选择法排序。即先将10个数中最小的数与a[0]对换;再将a[1]到a[9]中最小的数与a[1]对换;每比较一轮,找出一个未经排序的数中最小的一个。共应比较9轮。;7.1.2二维数组;[例7.2]将4×4的矩阵转置并输出。;7.1.3多维数组;1.同一个数组中的所有元素占用一组连续的存储空间;
2.数组的存储分配按行进行;
3.数组名字表示该数组的首元素地址。
对于一维数组而言,各元素按下标次序依次存放,
如a[0],a[1],a[2],…等等。且有:
a[0]:
a[1]:
a[2]:;数组中任一元素a[i]的地址可表示为:
a[i]=a+i*sizeof(元素类型)
其中sizeof(元素类型):求每个元素占用存储空间的字节数。例如:charch[10];inta[10];
设ch=FFE0,a=FFEA则
ch[0]=FFE0+0*1=FFE0a[0]=FFEA+0*2=FFEA
ch[1]=FFE0+1*1=FFE1a[1]=FFEA+1*2=FFEC
┇┇
ch[9]=FFE0+9*1=FFE9a[9]=FFEA+9*2=FFFC
C语言不对下标是否越界进行检查,C语言编译程序将实际指向分配给数组x的存储空间以外的存储区域。;二维数组:按行存放
例如:intx[2][3]/*它有2×3个数组元素*/
x[0][0]x[0][1]x[0][2]
x[1][0]x[1][1]x[1][2]
其存储分配顺序为:
x[0][0]?x[0][1]?x[0][2]?x[1][0]?x[1][1]?x[1][2]
x[0][0]
x[0][1]
x[0][2]
x[1][0]
x[1][1]
x[1][2];C中的二维数组可以看作是一种特殊的一维数组。
例如floata[3][4];
a[0]a[0][0]a[0][1]a[0][2]a[0][3]
a-a[1]a[1][0]a[1][1]a[1][2]a[1][3]
a[2]a[2][0]a[2][1]a[2][2]a[2][3]
二维数组元素a[i][j]的地址可以这样得到:
a[i][j]=a[i]+j*sizeof(a[0][0])
=a+i*sizeof(a[0])+j*sizeof(a[0][0])
=a+i*16+j*4
例:a[1][2]=a+1*16+2*4=a+24;;7.3数组的初始化;在对全部数组元素初始化时,可以不指定数组的长度。例如:
staticinta[5]={1,2,3,4,5};
可以写成:statici
您可能关注的文档
最近下载
- 人教版道德与法治三年级下册第3课《一切靠劳动》 课件.pptx VIP
- 建设银行供应链金融业务的战略突破与创新发展.docx
- 大赛独家代理授权合作协议范文.docx VIP
- 抗高压药物行业调研报告.pptx
- 人教版中考数学知识点总结.pdf VIP
- 宣贯培训(2026年)《GBT 39559.2-2020城市轨道交通设施运营监测技术规范 第2部分:桥梁》.pptx VIP
- 来实SEAM-LOK75直立锁边板手册-BlueScope.PDF VIP
- Formel-Q-V8(质量能力-软件).pdf VIP
- 《300MW汽轮发电机组厂用电设计论文》.doc VIP
- 《工程伦理》教案全套-教学设计.docx
原创力文档

文档评论(0)