第六章 一维数组教案.docx
- 文档编号:4420867
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:21
- 大小:139.72KB
第六章 一维数组教案.docx
《第六章 一维数组教案.docx》由会员分享,可在线阅读,更多相关《第六章 一维数组教案.docx(21页珍藏版)》请在冰豆网上搜索。
第六章一维数组教案
第6章一维数组的定义和使用
龚宇洁
教学内容:
一维数组的定义和使用
教学对象:
11移动通信
课时:
2课时
教学目标:
1.知识和技能目标:
掌握一维数组的定义和使用的基本规则;理解数组的内存与地址,会利用编译工具查看内存分配;能利用一维数组解决简单的实际问题
2.能力培养目标:
通过以上内容的学习,提高学生解决实际问题的能力。
3.情感和态度目标:
通过对以上内容的学习过程,激发学习C语言编程的兴趣。
教学重点:
一维数组的定义及使用
一维数组的内存和地址
教学难点:
一维数组的内存与地址
利用VC调试工具查看变量、变量的地址以及内存
教学过程:
导入新课:
2min
用基本数据类型可以解决所有问题吗?
例如:
对学生的成绩按由高到低的次序进行排序。
3名?
stud01,stud02,stud03
一般的解决方法,定义三个变量,两两进行比较,进行交换就可以完成从大到小的排序
300名?
stud001,stud02,……stud300?
要去定义300个变量吗?
肯定不合适。
我们可以用数组来实现
数组:
是具有一定顺序关系的若干相同类型变量的集合,用数组名标识
1.学习新课:
①一维数组的定义和使用3min
定义方式:
数据类型数组名[常量表达式];
例inta[6];表示有6个元素,元素是类型是整型,数组名是a。
数据类型:
可以是C语言里面提供的任意数据类型,int,float,char……
floatstu[300];
数组名:
一定要是合法的标示符,(合法标示符,字母,数字,下划线组成,首字节只能输字母或者下划线,不可以是C语言里面的关键字,数组名不可以是int)
常量表达式:
定义时数组的长度必须是常量,不能用变量定义数组的长度
inti=15;
intdata[i];()
2一维数组元素的使用5min
数组必须先定义,后使用
通过数组名和下标的方式来表示数组名
例如inta[6];//a[0]表示第一个元素,a[1]表示第二个元素。
……a[5]表示第5个元素。
注意越界,a[6]越界
不能一次使用全部数组的元素,只能逐个引用数组元素。
例如:
不能一次性对一整个数组进行赋值,只能对一个个元素进行赋值
inta[10];
a=10;()
a[0]=10;a[1]=10;a[2]=10
数组的一些操作常常和for语句以前使用
例如;一个长度为10的数组,全部赋值为1
inta[10];
for(j=0;j<11;j++)
{a[j]=10;}
提问:
以上程序存在问题,请指出
越界了,定义的数组大小是10,最后一个元素应该是a[9]
3一维数组在内存中的分配(难点)8min
移动专业是一个比较偏硬件的专业,任何的移动硬件设备,都是需要软件支持的。
软件开发很多都是对硬件进行编程,目前在通信的企业中,都是用C语言来完成对硬件的编程。
对硬件编程一定要弄清楚内存和地址。
弄清楚了内存和地址,才能帮助我们学习好后续的指针。
编译时分配空闲的连续内存
内存字节数=数组大小×每元素的字节
inta[6];
(板书)
分配了6*4=24个内存
内存跟每个人的家一样,都有一个住址,一个门牌号,
内存也由门牌号,称为内存地址,例如a[0]的地址是0x0002,因为分给数组的内存是连续分配的,a[1]相当于在它的隔壁,一个元素占了4个字节,所以a[1]的地址是0x0006.
提问charch[10];分配了多大的内存?
假如ch[0]分配的地址是0x0002,ch[1]分配的地址是什么?
4一维数组的输入输出8min
回忆,提问:
一般类型数据的输入输出
inta;
scanf(“%d”,&a);//&为取地址符,意义是往a所在的地址输入一个数
printf(“%d”,a);
数组的输入输出:
intx[10];
scanf("%d",&x[0]);//为第0个元素输入值
printf("%d",x[0]);//输出第0个元素的值
for(i=0;i<10;i++)//循环为数组的每一个元素输入值
{
scanf("%d",&x[i]);
//&为取地址符,意义是往a[i]这个元素所在的地址输入一个数
}
for(i=0;i<10;i++)//循环输出数组的每一个元素的值
{
printf("%d",x[i]);
}
&是一种运算符,取地址符(重难点),
a&b,这时,&符号是“按位与”例如10&11==10
&a,这时,&表示“取地址”
(板书)
&a[0]==0x0002,&a[0]表示a[0]这个元素所占内存的地址
&a[1]==0x0006,&a[1]表示a[1]这个元素所占内存的的地址
&a[2]==0x000a,&a[2]表示a[2]这个元素所占内存的的地址
a==0x0002,a表示数组所占内存的首地址,其值就是&a[0]
scanf("%d",&a);往a所在的地址输入一个数
scanf("%d",&x[i]);往想x[i]这个元素的地址输入一个数
这里要强调输入时,要指明为某个元素输入,还要在前面加上取地址符&
在学习指针之前,只有scanf函数会用到&
5做书上P88的练习题,加强学生对于数组、数组元素的表示,数组元素的地址等基本知识的理解(提问)4min
6如何运用VC调试工具观察内存分配状况(难点:
帮助理解内存分配,在程序出现问题时,可以利用这种方法查找问题,在实际编程应用中很常用)5min
打来一段关于数组的程序,演示过程:
只有在调试的过程中才能去查看,
1,设置断点
2,点击Go,开始调试
3,点击打开调试窗口中的Memory和watch
4,执行下一步(单步执行)——F10
在watch中查看数组元素的值和元素所在的地址:
在watch中输入x,回车,这是系统随机分配的,例如0x0012ff58,表示分配给数组x的内存的首地址
在watch中输入x[0],回车,表示第0个元素的值,例如从键盘输入的是10
在watch中输入&x[0],回车,表示第0个元素所在地址的值0x0012ff58,和x相同,因为数组的首地址,就是第一个元素的地址
在watch中输入x[1],回车,表示第1个元素的值,例如从键盘输入的是20
在watch中输入&x[1],回车,表示第1个元素所在地址的值0x0012ff5c,在第0个元素的地址数上加了4,因为1个元素占4个字节
(板书)
添加设置断点——F9
点击Go
点击打开调试栏中的Memory和watch窗口
执行下一步(单步执行)——F10
Memory显示的是内存的分配状况,
Watch用于查看,某个变量当前的值或者这个变量所在的地址
练习1:
要求编程实现从键盘输入一个整型数组,并输出。
要求,用调试工具观察数组元素内存分配情况15min
根据学生的操作情况,找出共性问题,有针对性的重新演示一遍5min
练习2:
读10个整数存入数组,找出其中最大值和最小值。
要求,用调试工具观察程序中关键变量的变换
学生思考方法5min
讲思路,带学生画流程图(虚线内部的是循环体)5min
步骤:
1.输入:
for循环输入10个整数
2.处理:
(a)先令max=min=x[0]
(b)依次用x[i]和max,min比较(循环)
若max 若min>x[i],令min=x[i] 3.输出: max和min 学生完成本题练习10min 根据学生的操作情况,找出共性问题,进行讲解。 给学生演示最终结果,用调试工具的watch窗口,观察关键变量min和max的变化5min 3.课堂小结: 10min 本节课学习了一维数组基本的使用规则,如何定义,如何使用,以及使用时要注意的问题,例如数组定义时,数组的长度必须是个常量,使用数组元素时,要注意越界的问题。 数组内存的分配,取地址符的含义,是为了后续学习,字符串,指针打下基础, 利用VC调试工具查看变量,以及变量的地址。 可以更快的帮助我们找出程序中很难找到的一些逻辑问题。 (因为在实际编程过程中,写代码和调试代码所花的时间是50: 50的,所以一定要学会如何调试程序,即找出程序中存在的问题) 作业: P852 后续: 掌握了一维数组的基本知识,以及调试方式,后续会解决一些更复杂的实际问题, (1) 课题: 一维数组的定义和使用 课型: 实训 周次: 6 课时: 4 授课时间: 地点: 教学目标: (结合岗位知识、能力、素质目标确定) 1,掌握一维数组的定义和使用的基本规则; 2,理解数组的内存与地址,会利用编译工具查看内存分配; 3,能利用一维数组解决简单的实际问题 教学重难点: 教学重点: 一维数组的定义及使用 一维数组的内存和地址 教学难点: 一维数组的内存与地址 利用VC调试工具查看变量、变量的地址以及内存 教学过程: 导入新课: 2min 用基本数据类型可以解决所有问题吗? 例如: 对学生的成绩按由高到低的次序进行排序。 3名? stud01,stud02,stud03 一般的解决方法,定义三个变量,两两进行比较,进行交换就可以完成从大到小的排序 300名? stud001,stud02,……stud300? 要去定义300个变量吗? 肯定不合适。 我们可以用数组来实现 数组: 是具有一定顺序关系的若干相同类型变量的集合,用数组名标识 2.学习新课: ①一维数组的定义和使用3min 定义方式: 数据类型数组名[常量表达式]; 例inta[6];表示有6个元素,元素是类型是整型,数组名是a。 数据类型: 可以是C语言里面提供的任意数据类型,int,float,char…… floatstu[300]; 数组名: 一定要是合法的标示符,(合法标示符,字母,数字,下划线组成,首字节只能输字母或者下划线,不可以是C语言里面的关键字,数组名不可以是int) 常量表达式: 定义时数组的长度必须是常量,不能用变量定义数组的长度 inti=15; intdata[i];() 7一维数组元素的使用5min 数组必须先定义,后使用 通过数组名和下标的方式来表示数组名 例如inta[6];//a[0]表示第一个元素,a[1]表示第二个元素。 ……a[5]表示第5个元素。 注意越界,a[6]越界 不能一次使用全部数组的元素,只能逐个引用数组元素。 例如: 不能一次性对一整个数组进行赋值,只能对一个个元素进行赋值 inta[10]; a=10;() a[0]=10;a[1]=10;a[2]=10 数组的一些操作常常和for语句以前使用 例如;一个长度为10的数组,全部赋值为1 inta[10]; for(j=0;j<11;j++) {a[j]=10;} 提问: 以上程序存在问题,请指出 越界了,定义的数组大小是10,最后一个元素应该是a[9] 8一维数组在内存中的分配(难点)8min 移动专业是一个比较偏硬件的专业,任何的移动硬件设备,都是需要软件支持的。 软件开发很多都是对硬件进行编程,目前在通信的企业中,都是用C语言来完成对硬件的编程。 对硬件编程一定要弄清楚内存和地址。 弄清楚了内存和地址,才能帮助我们学习好后续的指针。 编译时分配空闲的连续内存 内存字节数=数组大小×每元素的字节 inta[6]; (板书) 分配了6*4=24个内存 内存跟每个人的家一样,都有一个住址,一个门牌号, 内存也由门牌号,称为内存地址,例如a[0]的地址是0x0002,因为分给数组的内存是连续分配的,a[1]相当于在它的隔壁,一个元素占了4个字节,所以a[1]的地址是0x0006. 提问charch[10];分配了多大的内存? 假如ch[0]分配的地址是0x0002,ch[1]分配的地址是什么? 9一维数组的输入输出8min 回忆,提问: 一般类型数据的输入输出 inta; scanf(“%d”,&a);//&为取地址符,意义是往a所在的地址输入一个数 printf(“%d”,a); 数组的输入输出: intx[10]; scanf("%d",&x[0]);//为第0个元素输入值 printf("%d",x[0]);//输出第0个元素的值 for(i=0;i<10;i++)//循环为数组的每一个元素输入值 { scanf("%d",&x[i]); //&为取地址符,意义是往a[i]这个元素所在的地址输入一个数 } for(i=0;i<10;i++)//循环输出数组的每一个元素的值 { printf("%d",x[i]); } &是一种运算符,取地址符(重难点), a&b,这时,&符号是“按位与”例如10&11==10 &a,这时,&表示“取地址” (板书) &a[0]==0x0002,&a[0]表示a[0]这个元素所占内存的地址 &a[1]==0x0006,&a[1]表示a[1]这个元素所占内存的的地址 &a[2]==0x000a,&a[2]表示a[2]这个元素所占内存的的地址 a==0x0002,a表示数组所占内存的首地址,其值就是&a[0] scanf("%d",&a);往a所在的地址输入一个数 scanf("%d",&x[i]);往想x[i]这个元素的地址输入一个数 这里要强调输入时,要指明为某个元素输入,还要在前面加上取地址符& 在学习指针之前,只有scanf函数会用到& 10做书上P88的练习题,加强学生对于数组、数组元素的表示,数组元素的地址等基本知识的理解(提问)4min 11如何运用VC调试工具观察内存分配状况(难点: 帮助理解内存分配,在程序出现问题时,可以利用这种方法查找问题,在实际编程应用中很常用)5min 打来一段关于数组的程序,演示过程: 只有在调试的过程中才能去查看, 5,设置断点 6,点击Go,开始调试 7,点击打开调试窗口中的Memory和watch 8,执行下一步(单步执行)——F10 在watch中查看数组元素的值和元素所在的地址: 在watch中输入x,回车,这是系统随机分配的,例如0x0012ff58,表示分配给数组x的内存的首地址 在watch中输入x[0],回车,表示第0个元素的值,例如从键盘输入的是10 在watch中输入&x[0],回车,表示第0个元素所在地址的值0x0012ff58,和x相同,因为数组的首地址,就是第一个元素的地址 在watch中输入x[1],回车,表示第1个元素的值,例如从键盘输入的是20 在watch中输入&x[1],回车,表示第1个元素所在地址的值0x0012ff5c,在第0个元素的地址数上加了4,因为1个元素占4个字节 (板书) 添加设置断点——F9 点击Go 点击打开调试栏中的Memory和watch窗口 执行下一步(单步执行)——F10 Memory显示的是内存的分配状况, Watch用于查看,某个变量当前的值或者这个变量所在的地址 练习1: 要求编程实现从键盘输入一个整型数组,并输出。 要求,用调试工具观察数组元素内存分配情况15min 根据学生的操作情况,找出共性问题,有针对性的重新演示一遍5min 练习2: 读10个整数存入数组,找出其中最大值和最小值。 要求,用调试工具观察程序中关键变量的变换 学生思考方法5min 讲思路,带学生画流程图(虚线内部的是循环体)5min 步骤: 1.输入: for循环输入10个整数 2.处理: (a)先令max=min=x[0] (b)依次用x[i]和max,min比较(循环) 若max 若min>x[i],令min=x[i] 3.输出: max和min 学生完成本题练习10min 根据学生的操作情况,找出共性问题,进行讲解。 给学生演示最终结果,用调试工具的watch窗口,观察关键变量min和max的变化5min 3.课堂小结: 10min 本节课学习了一维数组基本的使用规则,如何定义,如何使用,以及使用时要注意的问题,例如数组定义时,数组的长度必须是个常量,使用数组元素时,要注意越界的问题。 数组内存的分配,取地址符的含义,是为了后续学习,字符串,指针打下基础, 利用VC调试工具查看变量,以及变量的地址。 可以更快的帮助我们找出程序中很难找到的一些逻辑问题。 (因为在实际编程过程中,写代码和调试代码所花的时间是50: 50的,所以一定要学会如何调试程序,即找出程序中存在的问题) 作业: P852 后续: 掌握了一维数组的基本知识,以及调试方式,后续会解决一些更复杂的实际问题, (2) 课题: 数组的排序 课型: 实训 周次: 七 课时: 4 授课时间: 地点: 教学目标: (结合岗位知识、能力、素质目标确定) 1,利用一维数组掌握冒泡排序,选择排序 2,查找指定元素,顺序查找和二分法查找 教学重难点: 1,冒泡排序和选择排序的思想, 2,顺序查找和二分法查找 教学过程: 1,冒泡法排序 讲解冒泡排序的核心思想,演示完成升序 学生自行联系,并修改为降序 2,选择排序 讲解选择排序的核心思想,演示完成升序 学生自行联系,并修改为降序 3,顺序查找 讲解思路,学生完成代码 4,二分法查找 讲解思路,学生完成代码 课题: 字符数组 课型: 实训 周次: 8 课时: 4 授课时间: 地点: 教学目标: (结合岗位知识、能力、素质目标确定) 1,编程实现从键盘上输入的字符流中,统计字符的个数,因为字母的个数,和其他字符的个数 2,编程统计从键盘输入的字符流中,单词的个数 教学重难点: 1,字符数组的输入输出 2,掌握字符,字符型数组,字符串的区别于联系 3,顺序查找和二分法查找 教学过程: 课题: 关于字符串的函数 课型: 实训 周次: 9 课时: 4 授课时间: 地点: 教学目标: (结合岗位知识、能力、素质目标确定) 1,掌握字符串处理函数,strcpy,strcat,strlen,strcmp 2,掌握各个字符串函数的具体实现方法 教学重难点: 1,利用字符型数组处理字符串,完成复制,连接,比较,计算字符长度的操作, 2,Strlen和sizeof的区别 教学过程: 1,字符串拷贝函数strcpy 格式: strcpy(字符数组1,字符串2) 功能: 将字符串2,拷贝到字符数组1中去 返值: 返回字符数组1的首地址 说明: 字符数组1必须足够大,>字符串2 字符数组1必须是数组名形式(str1), 字符串2可以是字符数组名或字符串常量。 拷贝时‘\0’一同拷贝 不能使用赋值语句为一个字符数组赋值 具体实现: 学生编程完成 2,字符串连接函数strcat 格式: strcat(字符数组1,字符数组2) 功能: 把字符数组2连到字符数组1后面 返值: 返回字符数组1的首地址 说明: 字符数组1必须足够大 连接前,两串均以‘\0’结束; 连接后,串1的‘\0’取消,新串最后加‘\0’。 具体实现: 学生编程完成 3,字符串比较函数strcmp 格式: strcmp(字符串1,字符串2) 功能: 比较两个字符串 比较规则: 对两串从左向右逐个字符比较(ASCII码), 直到遇到不同字符或‘\0’为止。 返回值: 返回int型整数。 其值是ASCII码的差值 若字符串1<字符串2,返回负整数 若字符串1>字符串2,返回正整数 若字符串1==字符串2,返回零 说明: 字符串比较不能用“==”,必须用strcmp,虽然编译无错,但结果不对 具体实现: 学生编程完成 4,字符串长度函数strlen 格式: strlen(字符数组) 功能: 计算字符串长度 返值: 返回字符串实际长度,不包括‘\0’在内 课题: 二维数组 课型: 实训 周次: 10 课时: 4 授课时间: 地点: 教学目标: (结合岗位知识、能力、素质目标确定) 1,矩阵置换,将一个2行3列的矩阵置换为3行2列矩阵 2,统计多个学生的多科成绩的总分和平均分,5个学生的3科成绩,计算每个同学的总分和平均分 教学重难点: 重点: 二维数组的声明, 二维数组的赋值与输出 难点: 二维数组的内存分配, 数组每一行首地址的表示 教学过程: 1,讲解二维数组的定义,表示,存储,初始化,赋值 课题: 字符型数组 课型: 实训 周次: 10 课时: 4 授课时间: 地点: 教学目标: (结合岗位知识、能力、素质目标确定) 3,矩阵置换,将一个2行3列的矩阵置换为3行2列矩阵 4,统计多个学生的多科成绩的总分和平均分,5个学生的3科成绩,计算每个同学的总分和平均分 教学重难点: 重点: 二维数组的声明, 二维数组的赋值与输出 难点: 二维数组的内存分配, 数组每一行首地址的表示 教学过程: 1,讲解二维数组的定义,表示,存储,初始化,赋值 课题: 函数的调用,文件组织结构,值传递和地址传递 课型: 实训 周次: 12 课时: 4 授课时间: 地点: 教学目标: (结合岗位知识、能力、素质目标确定) 3,掌握函数的声明、定义、调用 4,用函数计算两个数的和 5,编程: 设x取值为区间[1,20]的整数,求函数f(x)=x-sin(x)-cos(x)的最大值,要求使用自定义函数实现f(x)功能。 6,单独用文件定义和声明函数,使用多源文件构成程序 7,值传递和地址传递的区别 教学重难点: 3,函数的声明、定义、调用, 4,C程序多文件的构成 5,参数的值传递和地址传递 教学过程: 1,简单介绍值传递和地址传递 数组元素作函数实参——值传递 数组名可作函数参数——地址传递 2,用函数思想实现对任何n个数进行排序(包括升序、降序、选择法、冒泡法) 回忆冒泡排序和选择排序的思想 将之前的完成的代码改成利用函数实现(关键代码可以发给学生) 演示步骤 3,汉诺塔问题 将A上n-1个盘子借助C移到B。 把A上剩下一个盘子送到C 将n-1个盘子从B借助A移到C 因此,可以用两个函数分别实现上面两类操作, 用hanoi函数实现第一类操作,hanoi(n,a,b,c)将n个盘从a→c借助b 用move函数实现第2类操作。 move(x,y)将1个盘x→y座,x
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第六章 一维数组教案 第六 数组 教案