第六章 一维数组教案Word文件下载.docx
《第六章 一维数组教案Word文件下载.docx》由会员分享,可在线阅读,更多相关《第六章 一维数组教案Word文件下载.docx(21页珍藏版)》请在冰豆网上搜索。
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
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("
x[0]);
//输出第0个元素的值
for(i=0;
i<
10;
i++)//循环为数组的每一个元素输入值
{
scanf("
x[i]);
为取地址符,意义是往a[i]这个元素所在的地址输入一个数
}
i++)//循环输出数组的每一个元素的值
printf("
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]
a);
往a所在的地址输入一个数
往想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
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<
x[i],令max=x[i]
若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,能利用一维数组解决简单的实际问题
教学重难点:
2.学习新课:
7一维数组元素的使用5min
8一维数组在内存中的分配(难点)8min
9一维数组的输入输出8min
10做书上P88的练习题,加强学生对于数组、数组元素的表示,数组元素的地址等基本知识的理解(提问)4min
11如何运用VC调试工具观察内存分配状况(难点:
5,设置断点
6,点击Go,开始调试
7,点击打开调试窗口中的Memory和watch
8,执行下一步(单步执行)——F10
(2)
数组的排序
七
1,利用一维数组掌握冒泡排序,选择排序
2,查找指定元素,顺序查找和二分法查找
1,冒泡排序和选择排序的思想,
2,顺序查找和二分法查找
1,冒泡法排序
讲解冒泡排序的核心思想,演示完成升序
学生自行联系,并修改为降序
2,选择排序
讲解选择排序的核心思想,演示完成升序
3,顺序查找
讲解思路,学生完成代码
4,二分法查找
字符数组
8
1,编程实现从键盘上输入的字符流中,统计字符的个数,因为字母的个数,和其他字符的个数
2,编程统计从键盘输入的字符流中,单词的个数
1,字符数组的输入输出
2,掌握字符,字符型数组,字符串的区别于联系
3,顺序查找和二分法查找
关于字符串的函数
9
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必须足够大
连接前,两串均以‘\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
1,矩阵置换,将一个2行3列的矩阵置换为3行2列矩阵
2,统计多个学生的多科成绩的总分和平均分,5个学生的3科成绩,计算每个同学的总分和平均分
重点:
二维数组的声明,
二维数组的赋值与输出
难点:
二维数组的内存分配,
数组每一行首地址的表示
1,讲解二维数组的定义,表示,存储,初始化,赋值
字符型数组
3,矩阵置换,将一个2行3列的矩阵置换为3行2列矩阵
4,统计多个学生的多科成绩的总分和平均分,5个学生的3科成绩,计算每个同学的总分和平均分
函数的调用,文件组织结构,值传递和地址传递
12
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