江西理工大学信息工程学院教案
C语言程序设计(A)
课程名称:C语言程序设计(A) 教学内容:数组
教材章节: 第7章 授课学时:共2学时?
教学目的:
掌握数组的定义、初始化和数组元素的引用
掌握数组下标越界问题
掌握数组的应用,学会利用数组处理数据的能力
掌握查找、排序数组
具备较好的批量数据处理能力和编程应用能力
教学内容(7.1-7.4节): 是否重、难点
一维数组的定义和引用、初始化 掌握 重点
二维数组的定义和引用、初始化 掌握 重点
字符数组的定义 掌握 重点
字符串与字符数组、常用的字符串处理函数 了解 难点
教学设计:
亚瑟·叔本华(德国哲学家)说:单个的人是软弱无力的,就像漂流的鲁滨逊一样,只有同别人在一起,他才能完成许多事业。通过名人名句引出使用数组的必要性。
这一讲的教学内容较多,如果面面俱到全部讲完,教学安排的时间肯定是不够的,因此,课堂上主要以讲解一维数组、二维数组的基本概念为主,应用主要放在经典算法的章节中进行消化。
一维数组
定义的一般格式:
类型说明符 数组名[数组长度];
接着以图的形式分析数组及数组元素。
例如:
int a[10];
表示定义了一个名为a的数组,数组大小为10。即a数组有10个元素,分别是a[0]、a[1]、a[2]、a[3]、a[4]、a[5]、a[6]、a[7]、a[8]、a[9]。每个元素的数据类型为整型数据,编译时系统会在内存中分配10个连续的整型数据存储单元给a数组,见图1所示。
图1 数组在内存中的存储形式
特别要强交待数组下标从0开始,下限为n-1。
下标越界带来的严重问题。
一维数组的初始化
全部赋值:int a[10]={1,2,3,4,5,6,7,8,9,10};
部分赋值:int a[10]={1,2,3,4,5};
特别注意:未赋值的元素默认为0。
未赋值三种情况:int a[10];
特别注意:未赋值的元素与未赋值的变量一样,其值为不确定的值。
2.二维数组
二维数组定义的一般格式:
类型说明符 数组名[第1维长度][第2维长度];
第1维长度:表示二维数组第1维的大小,即二维数组的行数;
第2维长度:表示二维数组第2维的大小,即二维数组的列数;
第1维长度、第2维长度都必须是常量表达式。
例如:
int a[3][4];
表示定义了一个整型数组a,表示有3行4列,共12个整型元素。
float b[4][5];
表示定义了一个单精度浮点型数组b,表示有4行5列,共20个浮点型元素。
C语言存储二维数组是按行存放的,即在内存中先顺序存放第一行的元素,再存放第二行的元素,依此类推。图2表示a[3][4]数组在内存中的存放顺序。
a[0][0]
a[0][1]
a[0][2]
a[0][3]
a[1][0]
a[1][1]
a[1][2]
a[1][3]
a[2][0]
a[2][1]
a[2][2]
a[2][4]
图2 二维数组存储示意图
二维数组的初始化
二维数组的初始化有以下四种形式:
按行完全初始化
int a[3][4]={ {1,2,3,4},{5,6,7,8},{9,10,11,12}};
在大括号中的每对大括号表示一行数据,每行数据按顺序赋值给对应的元素。
按行部分初始化
int a[3][4]={ {1,2},{7,8,5,6},{10}};
每对内大括号表示一行数据,根据一维数组初始化概念可知未赋值的元素默认为0。因此,第一行{1,2}表示a[0][0]的值为1,a[0][1]的值为2,a[0][2]和a[0][3]的值为0。其余行同理。
给全部元素初始化
int a[3][4]={ 1,2,3,4,5,6,7,8,9,10 };
像这种没有内大括号的初始化形式,系统会按行给每个元素赋初始值,则每个元素的值为:a[0][0]=1, a[0][1]=2, a[0][2]=3, a[0][3]=4, a[1][0]=5, a[1][1]=6, a[1][2]=7, a[1][3]=8, a[2][0]=9, a[2][1]=10, a[2][2]=0, a[2][3]=0。
省略第1维长度的初始化
int a[3][4]={ 1,2,3,4,5,6,7,8,9,10,11,12};
也可写成:
int a[][4]={ 1,2,3,4,5,6,7,8,9,10,11,12};
若给全部元素初始化时,二维数组的第1维的长度可省略,编