数组

为什么需要用数组
对于有些数据,只用简单的数据类型是不够的,难以反映出 数据的特点,也难以有效地进行处理。 
例如: 
记录一个教学班50名学生期末考试的成绩,如果每个学生有一个成 绩,需要求这50名学生的平均成绩并统计成绩高于平均成绩的学生人数。

如果用简单变量来存储,则需要s1,s2,s3,……,s50共50个变量分别 存储每个学生各自一门课程的成绩。如果需要存储成绩的课程不止 一门,则需要定义的单个变量名将更多。这在实际编程过程中将会 很不方便。
基本概念:
数组:具有一定顺序关系的若干相同类型数据的集合, 为构造数据类型之一。 
数组名:为该数据集合起的一个名字 。 
数组元素:组成数组的数据。属同一数据类型,用数组 名和下标确定。

一维数组的定义和引用

在这里插入图片描述
在这里插入图片描述

一维数组的初始化 

初始化是指在定义数组时,为数组元素赋初值 (在编译阶段使之得到初值) 
初始化方式
int a[5]={1,2,3,4,5}; 等价于:a[0]=1; a[1]=2; a[2]=3; a[3]=4; a[4]=5;
说明:
数组不初始化,其元素值为随机数 
可以只给部分数组元素赋初值,其余的自动赋以0 值 
当全部数组元素赋初值时,可不指定数组长度
如 int a[5]={6,2,3}; 等价于: a[0]=6; a[1]=2;a[2]=3; a[3]=0; a[4]=0;
int a[]={1,2,3,4,5,6};
编译系统根据初值个数确定数组长度
在这里插入图片描述

在这里插入图片描述
例 用简单选择法对10个数排序
排序过程:
(1)首先通过n-1次比较,从n个数中找出最小的,将它与第 一个数交换—第一趟选择排序,结果最小的数被安置 在第一个元素位置上
(2)再通过n-2次比较,从剩余的n-1个数中找出关键字次小 的记录,将它与第二个数交换—第二趟选择排序
(3)重复上述过程,共经过n-1趟排序后,排序结束
在这里插入图片描述

例 用冒泡法对n个数排序(由小到大)
排序过程:
(1)比较第一个数与第二个数,若为逆序a[0]>a[1],则交换;然后比较第二个数与第三个数;依次类推,直至第n-1个数和第n个数比较为止——第一趟冒泡排序, 结果最大的数被安置在最后一个元素位置上
(2)对前n-1个数进行第二趟冒泡排序,结果使次大的数被 安置在第n-1个元素位置
(3)重复上述过程,共经过n-1趟冒泡排序后,排序结束
今设n=6,本例a[0]不用,只用a[1]-a[6], 定义数组长度为7。
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二维数组的引用

引用形式: 数组名[下标] [下标]

二维数组元素的初始化
1.分行初始化
(1)全部初始化:
在这里插入图片描述
(2)部分初始化:
在这里插入图片描述
(3)第一维长度省略初始化
在这里插入图片描述
2.按元素排列顺序初始化
(1)全部初始化
在这里插入图片描述
(2)部分初始化

在这里插入图片描述
(3)第一维长度省略初始化

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

数组作为函数的参数

(1)数组元素作函数实参——值传递
(2)数组名作函数参数
地址传递 
在主调函数与被调函数分别定义数组,且类型应一致 
形参数组大小(多维数组第一维)可不指定 
形参数组名是地址变量
用数组名作函数参数的说明:
1. 如果函数实参是数组名,形参也应为数组名,形参不能声 明为普通变量。实参数组与形参数组类型应一致,如不一致, 结果将出错。
2. 数组名代表数组首元素的地址,并不代表数组中的全部 元素。
3. 用数组名作函数实参时,不是把实参数组的值传递给形参, 而只是将实参数组首元素的地址传递给形参。在调用函数时, 将实参数组首元素的地址传递给形参数组名。这样,实参数 组和形参数组就共占同一段内存单元。改变形参数组元素的 值将同时改变实参数组元素的值。
4. 用变量作函数参数时,只能将实参变量的值传给形参变量, 在调用函数过程中如果改变了形参的值,对实参没有影响, 即实参的值不因形参的值改变而改变。
(3)二维数组名作为函数的参数
如果用二维数组名作为实参和形参,在对形参数组声明时: 必须指定第二维(即列)的大小,且应与实参的第二维 的大小相同。
第一维的大小可以指定,也可以不指定
如 int array[3][10]; //形参数组的两个维都指定 或
int array[][10]; //第一维大小省略
二者都合法而且等价。但是不能把第二维的大小省略。
下面的形参数组写法不合法
int array[][]; //不能确定数组的每一行有多少列元素
int array[3][]; //不指定列数就无法确定数组的结构
在第二维大小相同的前提下,形参数组的第一维可以 与实参数组不同。
例如, 实参数组定义为int score[5][10];
而形参数组可以声明为
int array[3][10]; //列数与实参数组相同,行数不同
int array[8][10];
这时形参二维数组与实参二维数组都是由相同类型和 大小的一维数组组成的,实参数组名score代表其首元 素(即第一行)的起始地址,系统不检查第一维的大小。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值