一、教学内容:
一维数组,二维数组定义及使用。
二、教学目标:
掌握一维,二维数组,掌握冒泡排序法。
三、重点,难点:
数据排序算法及数组应用。
第 6章 数 组数组的概念数组是有序数组的集合。数组中的每一个元素都属于同一个数据类型。用一个统一的数组名和下标来唯一的确定数组中的元素。
下面我们先来学习一维数组的有关知识。
(一)一维数组
1 一维数组的定义
2 一维数组元素的初始化
3 一维数组元素的引用
4 一维数组应用举例数组同变量一样,也必须先定义,后使用 。
一维数组是只有 1个下标的数组,定义形式如下:
数据类型 数组名 [常量表达式 ];
( 1),数据类型,是指数组元素的数据类型 。
( 2) 数组名,与变量名一样,必须遵循标识符命名规则 。
( 3)“常量表达式”必须用方括号括起来,指的是数组的元素个数(又称数组长度),它是一个整型值,其中可以包含常数和符号常量,但不能包含变量。
注意,C语言中不允许动态定义数组 。
1.一维数组的定义
( 4) 数组元素的下标,是元素相对于数组起始地址的偏移量,所以从 0开始顺序编号 。
( 5) 数组名中存放的是一个地址常量,它代表整个数组的首地址 。 同一数组中的所有元素,按其下标的顺序占用一段连续的存储单元 。
[Return]
2.一维数组元素的初始化初始化格式,
数据类型 数组名 [常量表达式 ]= {初值表 }
( 1) 如果对数组的全部元素赋以初值,定义时可以不指定数组长度 ( 系统根据初值个数自动确定 ) 。 如果被定义数组的长度,与初值个数不同,则数组长度不能省略 。
( 2),初值表,中的初值个数,可以少于元素个数,
即允许只给部分元素赋初值 。
例如,int a[5]={0,1,2,3,4}
[Return]
3,一维数组元素的引用引用数组中的任意一个元素的形式:
数组名 [下标表达式 ]
1.,下标表达式,可以是任何非负整型数据,取值范围是 0~( 元素个数 -1) 。
特别强调,在运行 C语言程序过程中,系统并不自动检验数组元素的下标是否越界 。 因此在编写程序时,保证数组下标不越界是十分重要的 。
2,一个数组元素,实质上就是一个变量,它具有和相同类型单个变量一样的属性,可以对它进行赋值和参与各种运算 。
3,在 C语言中,数组作为一个整体,不能参加数据运算,只能对单个的元素进行处理 。
[Return]
例,从键盘上任意输入 10个整数,要求按从小到大的顺序在屏幕上显示出来 。
排序的方法有很多,本题采用冒泡法 。
冒泡法的基本思想,通过相邻两个数之间的比较和交换,使排序码
( 数值 ) 较小的数逐渐从底部移向顶部,排序码较大的数逐渐从顶部移向底部 。 就像水底的气泡一样逐渐向上冒,故而得名 。
由 A[n]~A[1]组成的 n个数据,进行冒泡排序的过程可以描述为:
( 1) 首先将相邻的 A[n]与 A[n-1]进行比较,如果 A[n]的值小于 A[n-
1]的值,则交换两者的位置,使较小的上浮,较大的下沉;接着比较
A[n-1]与 A[n-2],同样使小的上浮,大的下沉 。 依此类推,直到比较完
A[2]和 A[1]后,A[1]为具有最小排序码 ( 数值 ) 的元素,称第一趟排序结束 。
( 2) 然后在 A[n]~A[2]区间内,进行第二趟排序,使剩余元素中排序码最小的元素上浮到 A[2];重复进行 n-1趟后,整个排序过程结束 。
4.一维数组的应用为了讲题方便我们举 5个数的例子。
a[0] a[1] a[2] a[3] a[4]
9 8 5 4 2
第一趟的结果 8 5 4 2 9 4次第二趟的结果 5 4 2 8 9 3次第三趟的结果 4 2 5 8 9 2次第四趟的结果 2 4 5 8 9 1次冒泡排序法流程图
#define NUM 10 /*定义符号常量 ( 数据个数 N) */
main()
{ int data[NUM]; /*定义 1个 1维整型数组 data*/
int i,j,temp; /*定义循环变量和临时变量 */
printf("Please input 10 numbers:\n");
for(j=0; j<NUM; j++)
scanf("%d",&data[j]);
for(j=0; j<NUM-1; j++) /*外循环:控制比较趟数 */
for(i=1; i<NUM-j; i++) /*内循环:进行每趟比较 */
if(data[i]>data[i+1]) /*如果 data[j]大于 data[i+1],交换两者的位置 */
{temp=data[j];
data[i]=data[i+1];
data[i+1]=temp;
};
printf("\nthe result of sort:\n");
for(i=0; i<NUM; i++)
printf("%d ",data[i]);
}
(四) 二 维数组的定义和引用
1 二 维数组的定义
2 二维数组元素的引用
3 二维数组元素的初始化
4 二 维数组应用举例
1,二 维数组的定义二维数组的定义方式如下:
数据类型 数组名 [行常量表达式 ][列常量表达式 ] [,数组名
2[行常量表达式 2][列常量表达式 2]……];
1.数组元素在内存中的排列顺序为“按行存放”,即先顺序存放第一行的元素,再存放第二行,以此类推。
2,设有一个 m*n的数组 x,则第 i行第 j列的元素 x[i][j]在数组中的位置为,i*n+j( 注意,行号、列号均从 0开始计数)。
例如,float a[3][4],b[4][6]
[Return]
2,二维数组元素的引用引用二维数组元素的形式为:
数组名 [行下标表达式 ][列下标表达式 ]
1.,行下标表达式,和,列下标表达式,,都应是整型表达式或符号常量 。
2.,行下标表达式,和,列下标表达式,的值,都应在已定义数组大小的范围内 。 假设有数组 x[3][4],则可用的行下标范围为 0~2,列下标范围为 0~3。
3,对基本数据类型的变量所能进行的操作,也都适合于相同数据类型的 2维数组元素 。
[Return]
3,二 维数组元素的初始化
1,按行赋初值数据类型 数组名 [行常量表达式 ][列常量表达式 ]= {{第 0行初值表 },{第 1行初值表 },……,{最后 1行初值表 }};
赋值规则:将,第 0行初值表,中的数据,依次赋给第 0行中各元素;将,第 1行初值表,中的数据,依次赋给第 1行各元素;以此类推 。
2,按 2维数组在内存中的排列顺序给各元素赋初值数据类型 数组名 [行常量表达式 ][列常量表达式 ]= {初值表 };
赋值规则:按 2维数组在内存中的排列顺序,将初值表中的数据,依次赋给各元素 。
如果对全部元素都赋初值,则“行数”可以省略。 注意,只能省略“行数”。
[Return]
例 1,给一个 2* 3的二维数组各元素赋值,并输出全部元素的值 。
for(i=0; i<Row; i++) /*外循环:控制 2维数组的行 */
for(j=0; j<Col; j++) /*内循环:控制 2维数组的列 */
{printf("please input array[%2d][%2d]:",i,j);
scanf("%d",&array[i][j]); /*从键盘输入 a[i][j]的值 */
}
printf("\n");
/*输出 2维数组 array*/for(i=0;i<Row;i++)
{ for(j=0;j<Col;j++)
printf("%d\t",array[i][j]);
printf("\n");
}
下面我们来看两道关于二维数组的例题。
例 2.将一个二维数组行和列元素互换。
main()
{
for(i=0;i<=1;i++)
{
for(j=0;j<=2;i++)
{ printf(“%5d”,a[i][j] );
b[j][i]=a[i][j];
}
printf(“\n”);
}
}
课后小结:
通过本节学习,同学们掌握了一维,二维数组的定义及使用,以后处理多个相同类型的数据就应该考虑使用数组。并且要掌握冒泡排序法。
一维数组,二维数组定义及使用。
二、教学目标:
掌握一维,二维数组,掌握冒泡排序法。
三、重点,难点:
数据排序算法及数组应用。
第 6章 数 组数组的概念数组是有序数组的集合。数组中的每一个元素都属于同一个数据类型。用一个统一的数组名和下标来唯一的确定数组中的元素。
下面我们先来学习一维数组的有关知识。
(一)一维数组
1 一维数组的定义
2 一维数组元素的初始化
3 一维数组元素的引用
4 一维数组应用举例数组同变量一样,也必须先定义,后使用 。
一维数组是只有 1个下标的数组,定义形式如下:
数据类型 数组名 [常量表达式 ];
( 1),数据类型,是指数组元素的数据类型 。
( 2) 数组名,与变量名一样,必须遵循标识符命名规则 。
( 3)“常量表达式”必须用方括号括起来,指的是数组的元素个数(又称数组长度),它是一个整型值,其中可以包含常数和符号常量,但不能包含变量。
注意,C语言中不允许动态定义数组 。
1.一维数组的定义
( 4) 数组元素的下标,是元素相对于数组起始地址的偏移量,所以从 0开始顺序编号 。
( 5) 数组名中存放的是一个地址常量,它代表整个数组的首地址 。 同一数组中的所有元素,按其下标的顺序占用一段连续的存储单元 。
[Return]
2.一维数组元素的初始化初始化格式,
数据类型 数组名 [常量表达式 ]= {初值表 }
( 1) 如果对数组的全部元素赋以初值,定义时可以不指定数组长度 ( 系统根据初值个数自动确定 ) 。 如果被定义数组的长度,与初值个数不同,则数组长度不能省略 。
( 2),初值表,中的初值个数,可以少于元素个数,
即允许只给部分元素赋初值 。
例如,int a[5]={0,1,2,3,4}
[Return]
3,一维数组元素的引用引用数组中的任意一个元素的形式:
数组名 [下标表达式 ]
1.,下标表达式,可以是任何非负整型数据,取值范围是 0~( 元素个数 -1) 。
特别强调,在运行 C语言程序过程中,系统并不自动检验数组元素的下标是否越界 。 因此在编写程序时,保证数组下标不越界是十分重要的 。
2,一个数组元素,实质上就是一个变量,它具有和相同类型单个变量一样的属性,可以对它进行赋值和参与各种运算 。
3,在 C语言中,数组作为一个整体,不能参加数据运算,只能对单个的元素进行处理 。
[Return]
例,从键盘上任意输入 10个整数,要求按从小到大的顺序在屏幕上显示出来 。
排序的方法有很多,本题采用冒泡法 。
冒泡法的基本思想,通过相邻两个数之间的比较和交换,使排序码
( 数值 ) 较小的数逐渐从底部移向顶部,排序码较大的数逐渐从顶部移向底部 。 就像水底的气泡一样逐渐向上冒,故而得名 。
由 A[n]~A[1]组成的 n个数据,进行冒泡排序的过程可以描述为:
( 1) 首先将相邻的 A[n]与 A[n-1]进行比较,如果 A[n]的值小于 A[n-
1]的值,则交换两者的位置,使较小的上浮,较大的下沉;接着比较
A[n-1]与 A[n-2],同样使小的上浮,大的下沉 。 依此类推,直到比较完
A[2]和 A[1]后,A[1]为具有最小排序码 ( 数值 ) 的元素,称第一趟排序结束 。
( 2) 然后在 A[n]~A[2]区间内,进行第二趟排序,使剩余元素中排序码最小的元素上浮到 A[2];重复进行 n-1趟后,整个排序过程结束 。
4.一维数组的应用为了讲题方便我们举 5个数的例子。
a[0] a[1] a[2] a[3] a[4]
9 8 5 4 2
第一趟的结果 8 5 4 2 9 4次第二趟的结果 5 4 2 8 9 3次第三趟的结果 4 2 5 8 9 2次第四趟的结果 2 4 5 8 9 1次冒泡排序法流程图
#define NUM 10 /*定义符号常量 ( 数据个数 N) */
main()
{ int data[NUM]; /*定义 1个 1维整型数组 data*/
int i,j,temp; /*定义循环变量和临时变量 */
printf("Please input 10 numbers:\n");
for(j=0; j<NUM; j++)
scanf("%d",&data[j]);
for(j=0; j<NUM-1; j++) /*外循环:控制比较趟数 */
for(i=1; i<NUM-j; i++) /*内循环:进行每趟比较 */
if(data[i]>data[i+1]) /*如果 data[j]大于 data[i+1],交换两者的位置 */
{temp=data[j];
data[i]=data[i+1];
data[i+1]=temp;
};
printf("\nthe result of sort:\n");
for(i=0; i<NUM; i++)
printf("%d ",data[i]);
}
(四) 二 维数组的定义和引用
1 二 维数组的定义
2 二维数组元素的引用
3 二维数组元素的初始化
4 二 维数组应用举例
1,二 维数组的定义二维数组的定义方式如下:
数据类型 数组名 [行常量表达式 ][列常量表达式 ] [,数组名
2[行常量表达式 2][列常量表达式 2]……];
1.数组元素在内存中的排列顺序为“按行存放”,即先顺序存放第一行的元素,再存放第二行,以此类推。
2,设有一个 m*n的数组 x,则第 i行第 j列的元素 x[i][j]在数组中的位置为,i*n+j( 注意,行号、列号均从 0开始计数)。
例如,float a[3][4],b[4][6]
[Return]
2,二维数组元素的引用引用二维数组元素的形式为:
数组名 [行下标表达式 ][列下标表达式 ]
1.,行下标表达式,和,列下标表达式,,都应是整型表达式或符号常量 。
2.,行下标表达式,和,列下标表达式,的值,都应在已定义数组大小的范围内 。 假设有数组 x[3][4],则可用的行下标范围为 0~2,列下标范围为 0~3。
3,对基本数据类型的变量所能进行的操作,也都适合于相同数据类型的 2维数组元素 。
[Return]
3,二 维数组元素的初始化
1,按行赋初值数据类型 数组名 [行常量表达式 ][列常量表达式 ]= {{第 0行初值表 },{第 1行初值表 },……,{最后 1行初值表 }};
赋值规则:将,第 0行初值表,中的数据,依次赋给第 0行中各元素;将,第 1行初值表,中的数据,依次赋给第 1行各元素;以此类推 。
2,按 2维数组在内存中的排列顺序给各元素赋初值数据类型 数组名 [行常量表达式 ][列常量表达式 ]= {初值表 };
赋值规则:按 2维数组在内存中的排列顺序,将初值表中的数据,依次赋给各元素 。
如果对全部元素都赋初值,则“行数”可以省略。 注意,只能省略“行数”。
[Return]
例 1,给一个 2* 3的二维数组各元素赋值,并输出全部元素的值 。
for(i=0; i<Row; i++) /*外循环:控制 2维数组的行 */
for(j=0; j<Col; j++) /*内循环:控制 2维数组的列 */
{printf("please input array[%2d][%2d]:",i,j);
scanf("%d",&array[i][j]); /*从键盘输入 a[i][j]的值 */
}
printf("\n");
/*输出 2维数组 array*/for(i=0;i<Row;i++)
{ for(j=0;j<Col;j++)
printf("%d\t",array[i][j]);
printf("\n");
}
下面我们来看两道关于二维数组的例题。
例 2.将一个二维数组行和列元素互换。
main()
{
for(i=0;i<=1;i++)
{
for(j=0;j<=2;i++)
{ printf(“%5d”,a[i][j] );
b[j][i]=a[i][j];
}
printf(“\n”);
}
}
课后小结:
通过本节学习,同学们掌握了一维,二维数组的定义及使用,以后处理多个相同类型的数据就应该考虑使用数组。并且要掌握冒泡排序法。