内容正文:
第7章 数组
本章内容
7.1概述
7.2一维数组
7.3 二维数组
7.4 字符数组与字符串
7.5 数组作为函数参数
7.6 综合案例
7.1概述
数组的概念
一组具有相同类型和名称的变量的集合
数组元素的数据类型
在C语言中,数组元素的数据类型必须相同
数组的维数
数组c[10]是一维数组,数组s[3][4]是二维数组
数组的长度
数组的每一维都有一个非零的长度
7.2一维数组
7.2.1一维数组的定义
7.2.2一维数组的初始化
7.2.3一维数组的引用
7.2.4一维数组应用
7.2.1一维数组的定义
一维数组定义的一般形式为:
存储类型说明符 类型标识符 数组名[常量表达式];
例如:
static int a[10];
float b[10];
注意以下几点:
存储类型说明符可以是静态型(static)、自动型(auto)和外部型(extern)。默认为auto类型。
数组的类型实际上是指数组元素的取值类型。对于同一个数组,其所有元素的数据类型都是相同的。
数组名应该符合C语言标识符的命名规则。
数组名不能与其它变量名相同
方括号中常量表达式表示数组元素的个数
方括号中只能用常数、符号常数或常量表达式,不能用变量
7.2.2一维数组的初始化
一维数组初始化赋值的一般形式为:
类型说明符 数组名[常量表达式]={值1,值2,……值n};
例如:
int a[10]={0,1,2,3,4,5,6,7,8,9};
注意以下几点:
可以只给部分元素赋初值 ,其他元素值自动为0
只能给元素逐个赋值,不能给数组整体赋值
如对数组所有元素赋初值,则数组长度说明可以省略
注意:如果只给一个数组部分元素赋初值,数组长度说明不能省略
在为数组元素赋初值时,值的个数不能超过数组元素的长度
如果不对自动(auto)数组初始化,则其初始值为系统分配给数组各元素的内存单元中的原始值,是一个不可预知的数
7.2.3一维数组的引用
数组元素的一般形式为:
数组名[下标]
注意:
C语言中,数组名实质上是数组的首地址,是一个常量地址,不能对它进行赋值
输出数组元素值,需要通过循环的方式
程序举例
【例7.1】随机生成10个随机整数,放入数组,范围为0~100,输出数组内容。
#include "stdio.h"
#include "time.h"
main()
{
int i,a[10];
srand(time(NULL)); /*产生随机数种子*/
for(i=0;i<10;i++)
a[i]=rand()%100; /*生成100以内的随机整数,并赋给各个数组元素*/
for(i=0;i<10;i++) /*利用for循环输出数组元素的内容*/
printf("%5d",a[i]);
printf("
");
}
7.2.4一维数组应用
【例7.2】从键盘上输入10个整数,放入数组中,输出这10个数中的最大值、最小值和它们对应的下标。
【例7.3】生成10个随机整数,并放入数组中,将数组元素首尾对调,并输出对调前后数组元素的值。
7.2.4一维数组应用
【例7.4】随机生成10个数放入数组,对数组中的整数用冒泡法进行排序,并输出排序前后数组元素的值。
#include "stdio.h"
#include "time.h"
main()
{
int i,j,a[10],t;
srand(time(NULL));
/*生成并输出排序前的数组元素*/
printf("
Before sort:");
for(i=0;i<10;i++)
{
a[i]=rand()%100;
printf("%5d",a[i]);
}
/*数组元素排序*/
for(i=0;i<9;i++) /*共需9趟比较*/
for(j=0;j<9-i;j++) /*第i趟共需9-i次比较*/
if(a[j]>a[j+1]) /*如果前面的元素比后面的元素大,对调两个元素的值*/
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
/*输出排序后的数组元素*/
printf("
After sort:");
for(i=0;i<10;i++)
printf("%5d",a[i]);
printf("
");
}
7.3 二维数组
7.3.1 二维数组的定义
7.3.2 二维数组的初始化
7.3.3 二维数组的引用
7.3.1 二维数组的定义
二维数组定义的一般形式是:
存储类型说明符 类型标识符 数组名[常量表达式1][常量表达式2];
例如: