当前位置:首页 >> 理学 >>

崔C第5章数组教案学生-1(2009.3.23)


C 第 5 章数组教案

(2009.3.23) (2009.3.25) (2009.3.30) (2009.4.1)

数组( 第 5 章 数组(P128~165) ~ )
(一)教学(6 学时) 基本要求: 1.掌握一维数组、字符串等概念、初始化和输入输出方法,了解二维数组的使用方法。 2.熟练掌握一维数组的逆置、移动、查找、插入、删除、排序、统计等算法。 3.熟练掌握字符串有关操作。 重点:一维数组的逆置、移动、查找、插入、删除、排序、统计等算法及字符串处理。 难点:一维数组有关算法;字符串有关操作;二维数组应用。 进度: 第 1 讲(3 学时) 一维数组概念及数组元素的逆序存放、查找、删除、插入、排序等算法。 第 2 讲(3 学时) 字符数组和字符串概念及其使用。 二维数组。 例题操作:
进度 第1讲 例题 P129 例 5.1~5.12 一维数组及其应用。 有关算法:逆置、移动、查找、插入、删除、排序、统计等。 第2讲 P141 例 5.13~5.18 P146 例 5.19~5.22 字符串概念及其使用。 二维数组及其应用。 知识点

(二)实验(4 学时) 题目:数组应用 目的: 学习构建一维数组及数组中数据的移动、查找、插入、删除等算法。 学习字符串有关操作。 二维数组及其应用。 重点:一维数组的应用和字符串有关操作。 难点:一维数组中数据的移动、查找、插入、删除、排序等算法和字符串操作。 内容:
进度 第1讲 题目 补充题 5.1 补充题 5.2 P160 训练 5.1 补充题 5.3 第2讲 补充题 5.4 P162 训练 5.3 P162 训练 5.3 扩展 P163 训练 5.4 知识点 一维数组的建立和查找操作 一维数组的建立、数据移动和插入操作 一维数组的建立、查找、数据移动和插入 一维数组的建立、数据移动和删除操作 求字符串长度 字符串连接 字符串比较 二维数组及其应用 文件名 BC5-1 BC5-2 XL5-1 BC5-3 BC5-4 XL5-3 XL5-3-k XL5-4

(三)课后作业 阅读教材第 5 章。其中例 5.1~5.12 中有关逆置、移动、查找、插入、删除、排序、 统计等算法。例 5.13~5.18 中有关字符串概念及其应用的例题。例 5.19~5.29

C 第 5 章数组教案

(2009.3.23) (2009.3.25) (2009.3.30) (2009.4.1)

中有关提高部分例题。 练习: P163 习题 5 基础部分 1~8(不交) 。 上机题(交)
题目 P161 训练 5.2 P164 习题 5 基础部分 10 统计 字符选择法排序 知识点 XL5-2 XT5-10 文件名

C 第 5 章数组教案

(2009.3.23) (2009.3.25) (2009.3.30) (2009.4.1)

上机训练-1 第 5 章 上机训练
【补充题 5.1(交) 】一维数组的建立和查找操作。 (文件名 BC5-1) (1)建立一维数组 1)定义一个名为 a 的一维数组,含 10 个元素,每个元素都是整型。 2)从键盘输入 10 个互不相同的整数存放在该数组中。 3)输出该数组。 (2)查找相同值(参考教材 P136【例 5.8】 ) 1)通过键盘给变量 x 输入值。 2)在数组中查找与 x 值相同的元素,若找到用 k1 记录该元素的下标。 3)如果找到输出下标值 k1,否则输出没有找到的信息。 (3)查找最小值(参考教材 P137【例 5.9】 ) 1)查找该数组中值最小的元素,并用 k2 记录最小值元素的下标。 2)输出最小值和最小值下标 k2。 1.目标: (1)学习定义一维数组、给数组元素输入值和输出数组元素值的方法。 (2)掌握在数组中查找元素的方法。 2.步骤: (1)定义和建立一维数组 1)定义含 10 个整型元素的一维数组 a: int a[10]; 2)定义程序中用到的各整型变量:int i=0,x=0,k1=-1,k2=0; i :循环控制变量 x :待查找值 k1 :查找相同值信息的标志,初值为-1,如果找到则为找到元素的下标值。 k2 :查找到的最小值的下标 3)通过键盘使数组每个元素得到值。
printf("输入 10 个不相同的整数: "); for ( i=0; i<10; i++ ) scanf("%d",&a[i]); /* 为每个元素输入值 */ /* 输出每个元素值 */

4)输出该数组。
for ( i=0; i<10; i++ ) printf("\n"); printf ("%2d",a[i]);

(2)查找相同值 1)通过键盘键入需查找值 x。
printf("输入查找值 x: "); scanf("%d",&x); /* 输入需查找的值 */ /* 将 x 与数组元素依次比较 */ /* 如果找到值相同元素,用 k1 记录该元素下标值 i */

2)在数组中查找与 x 值相同的元素,若找到用 k1 记录该元素的下标值。
for( i=0; i<10; i++ ) if( x==a[i] ) k1=i; if( k1!=-1 ) else

3)如果找到输出下标值 k1,否则输出没有找到的信息。
printf("找到! 下标值为:%d \n",k1); /* k1≠-1 说明找到了值相同元素 */ /* k1 为-1 说明没有找到 */ printf("没找到%d! \n",x);

(3)查找最小值

C 第 5 章数组教案

(2009.3.23) (2009.3.25) (2009.3.30) (2009.4.1)

1)查找该数组中值最小的元素,并用 k2 记录最小值的下标值。
k2=0; for ( i=1; i<10; i++ ) if ( a[k2]>a[i]) /* 假设 0 下标元素当前值最小,用 k2 记录其下标值 */ /* 将当前值最小元素 a[k2]与其余元素依次比较 */ k2=i; /* 只要找到小于 a[k2]的元素,就用 k2 记录其下标值 i */ /* 输出最小值和最小值下标 */

2)输出最小值和最小值下标 k2。
printf ("最小值是:%d 下标为:%d\n",a[k2],k2);

3.提示: (1)查找相同值:变量 k1 在此题中作为查找相同值信息的标志,查找有两种可能,如果没 有找到,k1 保持初值-1,如果找到,k1 则为找到的数组元素的下标值。 (2)查找最小值:注意 注意不必用 min 记录当前最小值元素,只要用 k2 记住当前最小值元素 注意 的下标就可以了。

运行结果:

找到相同值

没有找到相同值

C 第 5 章数组教案

(2009.3.23) (2009.3.25) (2009.3.30) (2009.4.1)

【补充题 5.2(交) 】一维数组的建立和插入操作。 (文件名 BC5-2) 已有定义:int a[11]={1,2,3,4,5,6,7,8,9,10}; 要求在数组下标 j(0≤j≤10)处插入 100,j 值通 过键盘输入。 说明: (1)要完成插入操作,务必在定义数组时多开辟若干存储单元用于存放插入的数据。 (2)在做插入操作之前,应该先将插入点及其后各数组元素值向数组尾部方向移动一位。 移动必须从最后一个元素开始,依次向数组首部方向进行。请看图示: 例如:j=3 为插入点
a 1 a[0] 插入前数组示意图 a 1 a[0] 2 ① j=3 3 ③ k 100 4 5 6 7 8 9 10 a[10] 2 3 4 5 6 7 8 9 10 a[10]

从后开始移动 ②

插入过程示意图 a 1 a[0] 插入后数组示意图 2 3 j=3 100 4 5 6 7 8 9 10 a[10]

1.目标: (1)熟悉一维数组的定义、学习数组初始化的方法。 (2)学习在一维数组中确定插入点和将数插入到数列中的方法。 2.步骤: (1)定义变量和一维数组 1)定义和初始化一维数组 a:int a[11]={1,2,3,4,5,6,7,8,9,10}; /* 定义并初始化 */ 说明:因为是插入操作,定义数组时要多开辟一个存储单元用于存放插入的数据。因此 这里定义一个含 11 个整型元素的一维数组 a,只给前 10 个元素设置了初值。 2)定义变量 i 和 j,初值为 0。 i :循环控制变量 j :插入点位置 (2)输出插入操作前的数组 a,注意:只有前 10 个是有效数据
printf("插入操作前的数组:\n"); for ( i=0; i<10; i++ ) printf("\n"); printf("%4d",a[i]);

(3)通过键盘输入 j 值确定插入点

C 第 5 章数组教案

(2009.3.23) (2009.3.25) (2009.3.30) (2009.4.1)

printf("请输入 j(0≤j≤10): " ); scanf("%d",&j);

(4)移动数据:将下标 j(含 j)及其后各数组元素值向数组尾部方向移动一位。移动必须 从最后一个元素开始,依次向数组首部方向进行。
for ( i=10; i>=j+1; i-- ) a[i]=a[i-1];

说明: 1)当 0≤j<10 时,需要移动数据,执行 for 循环,从数组最后一个元素起至下标 j 元素 止,将该区间的数据依次向右移动一位。 2)若 j=10 时,不需要移动数据,for 循环一次都不执行。 (5)插入数据:在下标 j 位处插入 100 a[j]=100; (6)输出插入操作后的数组 a(注意:插入 100 后数组 a 中已有 11 个有效数据)
printf(" 插入操作后的数组:\n"); for ( i=0; i<11; i++ ) printf("%4d",a[i]); /* 多输出一位 */

3.提示:插入操作完成后,数组元素总个数将增加,输出数据时要注意。

运行结果:

插在首部

C 第 5 章数组教案

(2009.3.23) (2009.3.25) (2009.3.30) (2009.4.1)

插在中间

插在尾部

【P160 训练 5.1】若已有按降序排列的数列 20、18、16、14、12、10、8、6、4、2,现要 求将键盘输入的一个数 k,插入到该数列中,要求按原来的排序规律插入。 (文件名 XL5-1) 说明: (1)定义数组时必须多开辟存储单元用于存放插入的数据。 (2)若要保证插入后原数组仍按降序排列,应该先找到插入点。 (3)在做插入操作之前,应该先将插入点及其后各数组元素值向数组尾部方向移动一位。 移动必须从最后一个元素开始,依次向数组首部方向进行。 下图以 k=15 为数据插在数列当中的例子
a 20 a[0] 插入前数组示意图 a 20 a[0] ① j=3 18 16 14 12 10 ③ k 15 8 6 4 2 a[10] 18 16 14 12 10 8 6 4 2 a[10]

从后开始移动 ②

插入过程示意图 a 20 a[0] 插入后数组示意图 18 16 j=3 15 14 12 10 8 6 4 2 a[10]

C 第 5 章数组教案

(2009.3.23) (2009.3.25) (2009.3.30) (2009.4.1)

1.目标: (1)熟悉一维数组的定义和初始化方法。 (2)掌握寻找插入点和将一个数插入到数列中的方法。 2.步骤: (1)定义变量和一维数组 1)定义和初始化一维数组 a
int a[11]={20,18,16,14,12,10,8,6,4,2}; /* 定义并初始化 */

说明:因为是插入操作,定义数组时要多开辟一个存储单元用于存放插入的数据。因此这里 定义一个含 11 个整型元素的一维数组 a,只给前 10 个元素设置了初值。 2)定义整型变量 i、j、k,初值均为 0。 i :循环控制变量 j :插入点下标值 k :插入值 (2)输出插入操作前的数组 a (3)通过键盘输入插入值 k (4)通过 while 循环查找插入点 j

说明: 1)解释 while 循环的判断条件:a[j]>=k && j<10 当在数组 a 中没有找到比 k 小的元素同时查找还在数组的有效范围内(0<j<10) , 执行循环,继续查找。 一旦找到一个比 k 小的元素 (即 a[j]<k) 或者始终没有找到比 k 小的元素 (即 j =10) , 循环将终止。 2)举例说明: 若 k 为 24:因 a[0]值小于 k,循环一次不执行,j=0 为插入点,数据插在首部。 若 k 为 15:当 j 为 0、1、2 时,a[j]值都大于 k,循环继续;a[3]小于 k,循环终止, 找到插入点 j=3。 若 k 为 1:在原数列中始终没有找到比 k 小的元素,循环终止时 j=10,数据直接插 在尾部。 (5)移动数据:将下标 j(含 j)及其后各数组元素值向数组尾部方向移动一位。移动必须 从最后一个元素开始,依次向数组首部方向进行。

说明: 1)当 0≤j<10 时,为了将数据插在数列当中,需要向右移动数据。执行 for 循环,可从 数组最后一个元素起至下标 j 元素止,将该区间的数据依次向右移动一位。 2)若 j=10 时,不需要移动数据,for 循环一次都不执行,数据直接插在尾部。 (6)插入数据:在下标 j 位处插入 k

(7)输出插入操作后的数组 a 3.提示

C 第 5 章数组教案

(2009.3.23) (2009.3.25) (2009.3.30) (2009.4.1)

(1)while 后的表达式 a[j]>=k && j<10 不能只写 a[j]>k,因为结束 while 循环的条件有两 个:当找到第一个比 k 小的元素或者没有找到比 k 小的元素。 (2)插入操作完成后,数组元素总个数将增加,输出操作要注意。
根据提示填写代码完善程序 #include <stdio.h> main( { ) /* 请填定义数组 a 并初始化 */ /* 输出插入操作前的数组 */ printf(" 插入操作前的数组:\n"); /* 请填输出插入操作前数组 a */ printf("\n"); /* 插入操作 */ printf("输入插入值 k:"); /* 请填给插入值 k 输入值 */ /* 请填 ① 查找插入点 */ /* 请填 ② 移动数据 */ /* 请填 ③ 插入数据 */ /* 输出插入操作后的数组 */ printf(" 插入操作后的数组:\n"); /* 请填输出插入操作后数组 a */ printf("\n"); }

int i=0,j=0,k=0;

运行结果:

插在首部

插在中间

C 第 5 章数组教案

(2009.3.23) (2009.3.25) (2009.3.30) (2009.4.1)

插在尾部

【补充题 5.3】已有定义 int a[10]={1,2,3,4,5,6,7,8,9,10};,要求从一维数组 a 中删除下标为 k 的元素值,k 值通过键盘输入(0≤k≤9) ,可参考教材 P138【例 5.10】(文件名 BC5-3) 。 说明: (1)删除操作实际是移动数据的操作,应先确定删除点。 (2)从删除点开始,依次将各元素右侧数据向左侧移动一位。
a 1 a[0] 2 3 k=3 4 a[3] 删除前数组示意图 a 1 a[0] 2 3 k=3 5 a[3] 删除后数组示意图 6 7 8 9 10 10 a[9] 5 6 7 8 9 10 a[9]

此元素不输出!

1.目标: (1)熟悉数组的定义、初始化、输出的方法。 (2)掌握如何将一个值从数列确定位置处删除。 2.步骤: (1)定义变量和一维数组 a 1)按题目所述定义一维数组 a 并初始化。 2)定义循环控制变量 i 和变量 k(删除元素下标值) ,初值为 0。 (2)输出删除操作前的 a 数组 1)提示输出 2)输出删除操作前的数组 a (3)确定删除点:输入 k 1)提示输入被删元素下标值 k 2)输入被删元素下标值 k 3)输出被删元素下标值 k (4)移动数据:从 k 位元素开始,依次将右侧数据向左侧移动一位
for(i=k; i<9; i++) a[i]=a[i+1];

说明: 1)删除从下标为 k 的元素开始,至数组最后一个元素止,执行 for 循环依次将其右侧

C 第 5 章数组教案

(2009.3.23) (2009.3.25) (2009.3.30) (2009.4.1)

元素值向左侧移动一位,原位置处元素值即被覆盖。 (5)输出删除操作后的 a 数组 1)提示输出删除操作后的数组 2)输出删除操作后的数组 a,元素总个数应减 1。 3.提示: (1)可参考 P138【例 5.10】完成删除值的操作,注意,删除从下标为 k 的元素开始。 (2)输出删除操作后的数组 a 时,元素总个数应减 1。 运行结果:

删除下标为 0 元素

删除下标为 3 元素

删除最后元素


相关文章:
更多相关标签: