C语言《二维数组》说课稿(精选5篇)
一、教学目标
1、通过本次课教学,学生能进一步理解二维数组的定义,二维数组的引用的方法;
2、掌握二维数组的初始化
3、技能目标:培养学生逻辑思维能力、综合运用知识的能力和自主学习能力;
二、教材分析
选用教材为李腾编著的《编程语言基础——C语言》,该教材由国防科技大学出版社出版,教材特点如下:
1、在内容上体现科学性、时代性、实用性,编排上面向应用,理论与实践有机结合;
2、采用案例教学法等教学手段,各章节均有案例,贯穿整个课程进行难点讲解,以实际应用作为突破口,使学生能够真实体验到知识的实际应用,提高兴趣,促进理解;教学与项目开发融为一体,浅显易懂,符合中职学生认知规律。
3、实验实训环节结合教学内容,实验项目丰富。课程设计中案例学生熟悉。本节课教学内容参考教材第4章的4.2节:二维数组。
三、学生分析
本课程的教学对象是中职学生,他们文化基础较差,计算机专业知识薄弱,C语言程序设计是他们学习的第一门计算机语言类课程,学习时较困难,入门较慢。本次课的教学内容中数组的概念他们容易理解,简单的一维数组对他们不太难,但涉及二维数组的编程较为困难。
另外,中职学生对于上机实际操作要比学习理论知识更为有兴趣;简单的实验项目都能完成,但解决实际应用问题的能力也较差。因此,在教学中通过演示让学生有感性认识,提高学习兴趣;通过提出问题让学生讨论议一议,主动思考如何解决;通过一个教学任务让学生动手做一做。
四、教学重点、难点及解决办法
1、本次课教学重点 1)二维数组的定义; 2)二维数组元素的引用;
在教学过程的叙述中,要抓住教学的重点、最能体现教学理念的内容和最能展示教学艺术的环节,作较为详细的叙述。
2、本次课教学难点 1)二维数组的初始化 2)二维数组的实际应用
3、难点解决办法
1)通过演示让学生有感性认识,并从一维数组入手,逐步引入二维数组的概念,弱化实用性不强的细节;
2)围绕字符数组进行难点讲解,以实际应用作为突破口,使学生能理解二维数组在实际中的应用,提高学习兴趣;
3)针对难点设置上机实际操作内容,进一步掌握二维数组程序设计方法。4)在实验实训过程中布置任务项目,通过实践环节进一步理解和掌握重点难点,达到学习目的。
五、教学理念、方法及手段
本次课采用理(论)实(践)一体化教学理念通过任务驱动(项目教学)、讲练结合等教学手段。
1、任务驱动:通过书上实例这一任务,掌握二维数组程序设计认方法。并掌握相应知识点,突出重点,分解难点。
2、讲练结合:授课地点为计算机实验室,采用边讲边练的教学互动形式。教学过程中,适当安排学生在计算机上进行进行实际程序设计,通过运行调试自己设计的程序,让学生亲自观察和体验程序设计的成功感受,加深知识的理解。
六、教学设计(时间分配)
1、任务提出,演示成果程序,明确目标,提出要求。(3分钟)(1)演示程序成果,在屏幕上输入源程序,并运行。
(2)任务分析:完成本次课的任务所需知识―――二维数组的应用。
2、知识回顾(3分钟)
数组的概念,一维数组的定义,一维数组元素的引用,一维数组的初始化,注意事项。
3、上机实训1(3分钟)
简单程序:用一维数组编程,实现在屏幕上显示1,2,3……10。
(上机技能训练的操作、指导、辅导过程,以学生实际操作动手为主,教师进行辅导指导、师生共同探讨完成,应充分体现学生的主体地位)思考提问:如何输出一个表格。
4、导入新课(6分钟)
(1)通过练习1,分析在屏幕上输出中存在的问题。(2)二维数组的定义,引用与初始化。
5、上机实训2,(6分钟)输出一个二维表: 1 5 9 11 12
6、上机实训3:4.6编程将数组a[3][4]转置(8分钟)(1)调试程序时要注意观察程序运行情况。程序出错原因,提醒以后编程时注意。
7、上机实训4,从键盘输入年、月、日,计算该日是这一年的第几天(10分钟)
8、课堂小结及作业(5分钟)
9、Question & Answer(1-2分钟)
七、学法指导
1、鼓励学生自主探索和合作交流。引导学生自主地从事观察、分析、交流等活动,使学生形成对计算机语言知识有效的学习策略。
2、鼓励与提倡解决问题的多样性,引导学生在与他人的交流中去选择合适的策略,丰富自己的思维方式,获得成功的体验和不同的发展。
情境描述:定义一个二维数组int a[3][4]={1, 3, 5, 7, 2, 6, 9, 8, 0, 4, 6, 2}, 该数组为3“行”4“列”, 共12个元素, 分别为:
为什么可以输出为4行3列的样式?
1 二维数组的基本知识
1.1二维数组的定义
二维数组定义的一般形式是:
类型说明符数组名[常量表达式1][常量表达式2]
其中“常量表达式1”表示第一维下标的长度, “常量表达式2”表示第二维下标的长度。
例如:
int a[3][4];
即定义了一个二维的数组, 数组名为a;其元素的数据类型为整型;第一维下标的长度是3, 第二维下标的长度是4;该数组共有12个元素, 通常写成容易接受的形式:
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][3]
1.2二维数组的存储
二维数组在概念上是二维的, 其下标在两个方向上变化。但是, 存储器却是一维连续编址的, 也就是说存储器单元是按一维线性排列的。
如何在一维存储器中存放二维数组?在C语言中, 将二维数组作为按行存放, 即放完一行之后放入第二行, 以此类推。例如:二维数组a[3][4], 先存放a[0]行的四个元素:a[0][0], a[0][1], a[0][2], a[0][3], 再存放a[1]行的四个元素:a[1][0], a[1][1], a[1][2], a[1][3], 最后存放a[2]行的四个元素:a[2][0], a[2][1], a[2][2], a[2][3]。即这12个元素在内存中的存储为:
通常情况下, 我们习惯书写成:
这里的按行存储的“行”实际上是“第一维”的意思, 不是几何意义上的“行”。
2 二维数组的输出样式
2.1 main ()
说明:以数组的第一维下标为主、第二维下标为辅输出, 第一维下标变化时换行。
2.2 main ()
说明:以数组的第一维下标为主、第二维下标为辅输出, 第一维下标变化时无换行。
2.3 main ()
说明:以数组的第二维下标为主、第一维下标为辅输出, 第二维下标变化时换行。
2.4 void main ()
说明:以数组的第一维下标为主、第二维下标为辅输出, 第一维下标变化时无换行。
3 日常生活中的行和列
在日常生活中, 横向 (水平方向) 为行, 纵向 (垂直方向) 为列, 是几何意义上的行和列。
在前面的“二、二维数组的输出样式”中:
第一种输出样式为3行4列
第二种输出样式为1行12列
第三种输出样式为4行3列
第四种输出形式为1行12列
4 总结
通常情况下, 我们定义了一个二维数组int a[3][4], 该数组的第一维下标为3, 第二维下标为4。习惯上称数组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][3]) 。这里的“行”, 准确地说是“第一维下标”, 不是几何意义上的“行”。
二维数组的输出样式多种多样, 可以说千变万化。程序的输出结果是几行几列, 由实际代码决定。, 这里的“行”, 准确地说是几何意义上的“行”。前面“二、二维数组的输出样式”, 就是例证。
综上所述:定义一个二维数组int a[3][4], 该数组的第一维下标为3, 第二维下标为4。习惯上称数组a是一个3“行”4“列”的数组, 这里的“行”和“列”是“第一维下标”和“第二维下标”的意思, 不是几何意义上的行和列。该数组实际的输出样式是几行几列是由实际的代码处理得到的, 这里的行和列是几何意义上的行和列, 也就是通过屏幕输出得到的。这是两个不同情境下的“行”, 不是一个意义, 更不能混为一谈。
摘要:二维数组的定义与输出样式, 是广大编程爱好者学习C语言过程中常常遇到的一个易混淆的知识点。本文通过将相近概念置于不同情境, 进行意义辨析, 帮助读者厘清二者的关系。
问题描述:
在全局声明的数组与在局部声明的数组有着不同的效果。
首先来看一个程序:
#include
#include
#define MAX 10
char a[MAX];
int main()
{
int i;
char b[MAX];
char *c=(char *)malloc(MAX * sizeof(char));
printf(“ Array a: ”);
for(i=0;i
printf(“%d ”,a[i]);
printf(“ Array b: ”);
for(i=0;i
printf(“%d ”,b[i]);
printf(“ Array c: ”);
for(i=0;i
printf(“%d ”,c[i]);
printf(“ Done”);
free(c);
return 1;
}
编译运行结果:
程序主要功能是打印字符数组的Ascii码。可以发现全局数组a和动态生成的数组c有着相同的结果,而局部声明的数组b确被分配了随机的数值,也许这就是问题的所在。
解决方案:
#include
#include
#define MAX 10
char a[MAX]={0};
int main()
{
int i;
char b[MAX]={0};
char *c=(char *)malloc(MAX * sizeof(char));
printf(“ Array a: ”);
for(i=0;i
printf(“%d ”,a[i]);
printf(“ Array b: ”);
for(i=0;i
printf(“%d ”,b[i]);
printf(“ Array c: ”);
for(i=0;i
printf(“%d ”,c[i]);
printf(“ Done”);
free(c);
return 1;
}
运行结果:
在数组的初始化中,假设初始化的数值个数小于数组的大小,则全部用0来填充,
这里通过初始化一个值,就可以给数组一个确定的结果。
(在不同系统和不同的编译器可能会出现不同的结果)
还有一个小问题就是C语言中空格的问题,看下面的程序。
#include
#include
#define MAX 10
int main()
{
int i;
char b[MAX]={0};
gets(b);
printf(“ Array b: ”);
for(i=0;i
printf(“%d ”,b[i]);
printf(“ Done”);
return 1;
}
在这里,我输入了“ int”(三个空格+int),打印的结果如上图。
b中前三个记录了空格的Ascii码,即32。
b中后面没有使用的空间依然是0。
打完收工。
写一个函数,用于比较两个字符串的比较(string_compare).
程序分析:
(1)主要思想:传入两个字符串后,比较这两个字符串中的每个元素,如果第一次比较就不相等,就不要让它进入到下面的比较中,这样一来,将它返回一个相减的值(即:两数组中开始不相等的那两个元素相减,返回值(int类型),是ASCII码值相减)。进入比较的过程中时,相等就返回0;其他情况都返回那个相减的值。
(2)主要方式:定义指针数组,并对其初始化。然后照上面的思想,进行代码的实现。
代码如下:
在C语言中对数组和指针的困惑多数都来自这句话,说数组和指针“等价”不表示它们相同, 甚至也不能互换。它的意思是说数组和指针的算法定义可以用指针方便的访问数组或者模拟数组。
特别地,等价的基础来自这个关键定义:
一个T 的数组类型的左值如果出现在表达式中会蜕变为一个指向数组第一个成员的指针(除了三种例外情况); 结果指针的类型是T的.指针。
这就是说, 一旦数组出现在表达式中, 编译器会隐式地生成一个指向数组第一个成员地指针, 就像程序员写出了&a[0] 一样,
例外的情况是, 数组为sizeof 或&操作符的操作数, 或者为字符数组的字符串初始值。
作为这个这个定义的后果, 编译器并那么不严格区分数组下标操作符和指针。在形如a[i] 的表达式中, 根据上边的规则, 数组蜕化为指针然后按照指针变量的方式如p[i] 那样寻址, 如问题6.2 所述, 尽管最终的内存访问并不一样。如果你把数组地址赋给指针:
p = a;
【C语言《二维数组》说课稿】推荐阅读:
c语言之指针数组函数09-21
c语言数组输入与输出12-15
中班语言说课稿09-29
小班语言游戏说课稿10-27
中班语言绘本说课稿11-20
大班语言《盲人摸象》说课稿11-30
中班语言活动―诗歌《家》说课稿12-19
二维设计基础教案12-18
大班语言活动《聪明的乌龟》说课稿07-03
大班语言说课稿《彩色的雨》10-10