C语言 第六章 数组

第六章 数组

一维数组

1
2
3
4
5
6
7
8
9
10
11
// 定义数组的长度
int a[5];

// 数组也是变量,必须先定义,后使用,不能与其他变量名、数组名重名

// 定义时赋初值
int x[5] = {1,2,3,4,5};

// 常用编程套路,数组与循环结合
for(i=0; i<元素个数; i++)
对a[i]的操作

一维数组的运用

已知10名同学的考试成绩,请编程统计及格人数,并计算10名同学成绩的平均分。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#inlcude <stdio.h>
#include <stdlib.h>
#define N 5

int main()
{
float b[N] = {58.0, 69.0, 92.1, 33.3, 50.1, 66.5, 12.5, 63.4, 68.4, 10.1}, sum, avg;
int i, pass;
sum = 0; pass=0;
for(i=0; i<N; i++)
{
sum += b[i];
if(b[i]>= 60)
pass++;
}
avg = sum / N;

printf("通过考试人数为: %d\n", pass);
printf("平均分数为: %5.1f", avg);
}
1
printf("%5.1f", fa);

5表示输出数字长度为五位

1表示输出数字的小数后1位

注意

1
2
3
4
5
6
int a[5];int i=3;
a[i]=1; 引用数组时,下标可以是常量
int x[i]; 定义数组时不能用变量表示元素个数
a[i++]=2; a[3]=2;之后i由3变为4
下标必须为整数
不能一次引用整个数组

一位数组的初始化

1
2
3
4
5
6
7
8
9
10
11
int a[5] = {5, 10};
// 如果数组长度多于初始化值得时候,数组中未赋值的元素将默认赋值为0,相当于
int a[5] = {5, 10, 0, 0, 0};

// 对字符型数组,后面元素自动赋'\0'实质上仍是赋值0
char s[4] = {'a', 'b'};

// 数组初始化另一种写法,C会自动计算数组长度
int a[] = {1,2,3,4,5};
// 相当于
int a[5] = {1,2,3,4,5};

程序例

1
2
3
4
1. 编程删除数组b中下标为2的元素
b[5] = {99, 60, 75, 86, 92};
修改后
b[5] = {99, 60, 86, 92, 92};
1
2
3
4
2. 编程在数组b中的下标为2的元素之前,插入新元素100
b[10] = {99, 60, 75, 86, 92};
修改后
b[10] = {99, 60, 100, 75, 86, 92};
1
2
3
4
3. 选择排序,将数组b从小到大排序
b[5] = {99, 60, 75, 86, 92};
排序后
b[5] = {60, 75, 86, 92. 99};

二维数组

二维数组又为特殊的一维数组,它的每个元素又是一维数组

1
2
3
4
二维数组的定义
数组类型 数组名[行数][列数]
int a[2][3];
int型的变量名为a的数组,23

二维数组在内存中的存储形式

硬件存储器(内存)是连续的和线性的,二维表形式的二维数组在内存中是线性存储和按行排列

注意

任何情况下,都不能省略列数(即不能省略第二个[] 内的数);

在能判断出行数时,可省略行数(即可省略第一个[]内的数);

1
2
3
int a[2][3];
a = {1,2,3,4,5}
// 只有定义时赋初值才能用 ={} 的形式,故上述写法错误