第四章 数 组
【教学目的】
掌握一维数组的定义、初始化和引用。
掌握二维数组的定义、初始化和引用。
掌握字符数组的定义、初始化和引用。
【教学内容】
如何定义一维、二维数组,正确理解数组的存储形式,在什么样的实际问题中该使用数
组结构。
正确引用数组元素,理解下标所代表的含义,掌握数组和循环的结合使用。
字符数组的初始化、输入与输出,字符数组的应用。
【教学重点和难点】
定义数组,正确理解数组名代表数组的首地址,通过数组名(首地址)结合下标,可以
任意访问数组中的任一元素。
字符串处理函数的使用,特别是函数参数的正确使用。
【问题的提出】
在介绍数组的使用之前,首先看一个例子。
【例】将从键盘输入的20 个数逆序输出。
根据前面所学的方法,可得程序如下:
#include "stdio.h"
main ( )
{float a1,a2,a3,a4,a5,……,a19,a20; /* 定义 20 个变量 */
printf ("请输入 20 个实数: ");
scanf ("%f",&a1); /* 连续 20 个输入函数语句 */
scanf ("%f",&a2);
……
scanf ("%f",&a20);
printf ("反序输出为: ",);
printf ("%f ",a20); /*连续 20 个输出函数语句 */
printf ("%f ",a19);
……
printf("%f ",a1);
}
分析:这样的程序是无法接受的,因为基本数据类型,它们通常用于解决一些简单的问
题,输入和输出的数据也是少量的。若输入的数据增加到 2000 个,在一个程序中要保存 2000
个实型数据需要定义 2000 个变量,若在各类计算机语言中仅有简单变量,是没有办法解决复
杂问题的。
试问:要存放大量类型相同的数据,该如何处理?程序如何写?如在数学问题中有一个
10 行 10 列的矩阵,该怎样存储?有 50 个字符串又该如何处理?
方法:为了解决复杂问题,C 语言中提供了构造类型的数据,本章中将介绍用数组解决
这些问题的方法。
【教学要点】
1. 一维数组的定义、初始化和引用
【例 4.1 】由键盘输入20 个数,逆序输出。
分析:在程序设计中,数组是十分有用的数据类型,是一组具有相同类型的变量,用一
个数组名标识,其中每个变量(称为数组元素)通过该变量在数组中的相对位置(称为下标)来引
用。要引用每个数组元素需要使用循环结构控制元素的下标,本程序采用数组和循环相结合,
不仅书写简洁,而且通用性强。若输入的数据个数不是 20 ,而是2000 ,所做的工作只是把符
号常量 N 的值改为2000 而已。
源程序如下:
#define N 20 /* 定义符号常量 N 为 20 */
#include "stdio.h"
main ( )
{ int a[N], k; /*定义 a 数组,长度为 20 ;数组要先定义后引用*/
printf(“input %d data:”,N);
for ( k=0; k
scanf ("%d",&a[k]);
/*数组元素的下标从 0 开始,最后一个元素的下标为 N-1 ,通过 for()循环实现依次的变
化*/
for ( k=N-1; k>=0; k-- ) /* 数组最后一个元素的下标是 N-1 */
printf ("%d ",a[k]);
}
【例 4.2 】求Fibonacci 数列前 15 个数。这个数列有如下特点:第 1,2 两个数为 0,1。
从第 3 个数开始,该数是其前面两个连续数之和,即 a[i]=a[i-1]+a[i-2] 。
分析:15个数用一个一维数组a 来处理,该数组最少可以存储 15个数。已知a[0]=0, a[1]=1 ;
后 13 个数用一重 for()循环求出。
源程序如下:
main()
{ int a[15]={0,1}; /*定义 a 数组同时赋初始值,使