所谓数组(Array),就是一系列数据的集合。这些数据具有相同的类型,并且在内存中挨着存放,彼此之间没有缝隙。换句话说,数组用来存放多份数据,但是它有两个要求:
- 这些数据的类型必须相同;
- 这些数据在内存中必须连续存储。
1、数组的概念和定义
- 数组是一种数据结构,用于存储一组相同类型的数据
- 数组中的元素在内存中是连续存放的。
- 数组通过下标来访问元素,下标从0开始。
int arr5={1, 2, 3, 4, 5};
2、数组的声明和初始化
数组的声明
数组声明格式:数组类型 数组名数组的大小
数组的大小必须是正整数。
数组大小不能为负数,且数组一旦声明,大小就不能改变。
int a10; 合法,最创建的数组声明
int a3+3; 合法3+3的结果是一个确定的正整数
define X 10 int aX; 合法,X是一个符号常量。
int n=10, an; 不合法,n是一个变量
数组的初始化:
全部初始化:
int arr5={1 ,2 ,3 ,4, 5,};
部分初始化:
int arr5={1, 2};
没有初始化时,数组的默认值(通常为未定义)。
- int a5={1, 2, 3, 4, 5}; 合法,完全初始化
- int a5={1, 2, 3}; 合法,部分初始化
- int a\[\]={1, 2, 3, 4, 5, 6}; 合法,数组的大小由初始化元素个数决定
- int a5=(1, 2, 3, 4, 5); 不合法,数组的大小由初始化完全初始化
- int a5={1, 2, 3, 4, 5, 6}; 不合法,初始化的元素个数大于数组本身大小。
真题
以下能对一维数组a进行初始化的语句是:
A、int a5=(0, 1, 2, 3, 4,);
B、int a(a)={};
C、int a3={0, 1 ,2};
D、int a{5}={10*1};
正确答案:C
在c语言中对一维整形数组的正确定义为:
A、int a(10); B、int n=10,a10
C、int n;an; D、#define N 10
int aN;
正确答案是:D
3、数组元素的访问
- 使用下标访问数组中的元素:array下标。
- 下标是从0开始,并且下标是一个整数。
- 下标越界将导致未定义行为。
真题
已知:int a10; 则对a数组元素的正确引用是:
A、a10 B、a3.5 C、a(5) D、a0
正确答案是:D
若有以下数组说明,则i=10;aa\[i]元素数值是:
int a12={1, 4, 7, 10, 2, 5, 8, 11, 3, 6, 9, 12};
A、10 B、9 C、6 D、5
正确答案是:C
4、二维数组
二维数组可以看作是"数组的数组",即一个包含多个一维数组的数组。
它用来表示矩阵或表格等二位数据。
二维数组的声明格式:数据类型 数据名行数列数;
二维数组的初始化
- int arr23={{1, 2, 3}, {4, 5, 6}}; 合法,第一行的元素是1,2,3,第二行的元素是4, 5, 6
- int arr23={1, 2, 3,4, 5, 6}; 合法,第一行的元素是1,2,3,第二行的元素是4, 5, 6
- int arr23={1, 2, 3, 4}; 合法,第一行的元素是1,2,3,第二行的元素是4, 0, 0
- int arr\[\]3={1, 2, 3, 4}; 合法,行数可以根据初始化元素的个数推断出来
- int arr2\[\]={1, 2, 3, 4, 5}; 不合法,列数必须指定
真题
求一维数组a10中各元素的平均值,并输出小于平均值的元素。
假定数组内容为:1.2 7 5 1.8 1.6 0.8 4 1.0 6 2.2
cpp
#include <stdio.h>
int main()
{
float a[10] = {1.2, 7, 5, 1.8, 1.6, 0.8, 4, 1.0, 6, 2.2};
float sum = 0.0;
float avg = 0.0;
for (int i =0; i<10; i++)
{
sum += a[i];
}
avg=sum /10;
printf("avg= %f\n", avg);
for (int i =0; i<10; i++)
{
if (a[i] < avg)
{
printf("%4.1f\n", a[i]);
}
}
return 0;
}
输出:
avg= 3.060000
1.2
1.8
1.6
0.8
1.0
2.2