第一篇:c语言 二维数组与指针 教案
讲授
9.6二维数组和指针
2课时
掌握二维数组的地址表示方法 掌握指向数组元素的指针变量
掌握指向数组元素的指针变量
掌握用指向由m个元素组成的一维数组的指针变量
指向一维数组的指针变量
无
作业见后 一、二维数组的地址
例:定义二维数组int a[3][4]={{1,3,5,7},{9,11,13,15},{17,19,21,23}};
则二维数组a是数组的数组,由3个一维数组所组成的,即3个元素:a[0],a[1],a[2]。而每个元素又是一个一维数组。
二、指向二维数组元素的指针变量
1、指向数组元素的指针变量
例1 用指向元素的指针变量输出二维数组元素的值 #include
{ int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};
int *p;
for(p=a[0];p {if((p-a[0])%4==0)printf(″\n″); printf(″%4d″,*p); } }用指向由m个元素组成的一维数组的指针变量 例2 输出二维数组任一行任一列元素的值 #include int(*p)[4],i,j; p=a; scanf(“i=%d,j=%d”,&i,&j); printf(“a[%d,%d]=%d\n”,i,j,*(*(p+i)+j)); } 注意: 指向一维数组的指针变量的定义格式应写成:基类型(*p)[N] 上述语句int(*p)[4],代表p是一个指针变量,它指向包含4个整型元素的一维数组。*p两侧的小括号不可少,如果写成*p[4],由于[]运算级别高于*,*p[4]是指针数组。 p=a;表明p指向数组a中的第0行,此时p+1不是指向a[0][1],而是指向a[1],p的增值以一维数组的长度为单位,p+1地址就增加了8个字节。*(p+i)+j是a[i][j]的地址,这里的i是以一维数组的长度为单位,j则是以数组元素的长度为单位的。 复习 新授 讲授 复习默写 1、选择排序的基本思想 2、从键盘输入5个整数,使用选择法从小到大排序,编程实现。 一、二维数组的地址 例:定义二维数组int a[3][4]={{1,3,5,7},{9,11,13,15},{17,19,21,23}}; 则二维数组a是数组的数组,由3个一维数组所组成的,即3个元素:a[0],a[1],a[2]。而每个元素又是一个一维数组。设二维数组的首行的首地址为2000,则: 二、指向二维数组元素的指针变量 1、指向数组元素的指针变量 例1 用指向元素的指针变量输出二维数组元素的值 #include { int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23}; int *p; for(p=a[0];p {if((p-a[0])%4==0)printf(″\n″); printf(″%4d″,*p); } } 注意:上例中如果对p赋值p=a[0];不能写成 p=a;因为此时a 是行指针,而p是列指针只能指向一个整型变量,a[0]是第0行的数组名,即第0行的首地址就是a[0][0]的地址。请学生思考上述赋值语句还可以写成什么? p=*a;p=&a[0][0];用指向由m个元素组成的一维数组的指针变量 例2 输出二维数组任一行任一列元素的值 #include int(*p)[4],i,j; p=a; scanf(“i=%d,j=%d”,&i,&j); printf(“a[%d,%d]=%d\n”,i,j,*(*(p+i)+j)); } 注意: 指向一维数组的指针变量的定义格式应写成:基类型(*p)[N] 上述语句int(*p)[4],代表p是一个指针变量,它指向包含4个整型元素的一维数组。*p两侧的小括号不可少,如果写成*p[4],由于[]运算级别高于*,*p[4]是指针数组。 小结 作业 p=a;表明p指向数组a中的第0行,此时p+1不是指向a[0][1],而是指向a[1],p的增值以一维数组的长度为单位,p+1地址就增加了8个字节。*(p+i)+j是a[i][j]的地址,这里的i是以一维数组的长度为单位,j则是以数组元素的长度为单位的。 例3: int(*t)[4],a[3][4]={{1,3,5,7}, {11,13,15,17},{21,23,25,27}};t = a;printf(“%d,%d”, **t, t[1][2]);t++;t++;printf(“%d”, **t); 运行结果:1,1521 【课堂小练习】 1、[2010.3.27]若有:int(*p)[3];则正确的是(D)A)定义了基类型为int的三个指针变量 B)p是基类型为int的具有三个元素的指针数组 C)定义了名为*p,具有三个元素的整型数组 D)定义了一个名为p的指针变量,它可以指向每行有三个整数元素的二维数组 2、输入:1 2 3<回车>,则输出结果是 int a[3][2]={0},(*p)[2],i,j;p=a;for(i=0;i<2;i++){ scanf(“%d”,p);p++;} for(i=0;i<3;i++)for(j=0;j<2;j++)printf(“%d”,a[i][j]); 1、二维数组的地址 2、指向数组元素的指针变量 3、指向一维数组的指针变量 1、整理课堂笔记 2、完成深入研究整型指针练习题 《二维数组》说课稿 一、教学目标 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、鼓励与提倡解决问题的多样性,引导学生在与他人的交流中去选择合适的策略,丰富自己的思维方式,获得成功的体验和不同的发展。 3、引导学生将所学计算机知识应用到其他学科中去,使学生觉得计算机有很用,同时也培养了学生逻辑思维能力。 C语言程序设计实验七:函数、数组、指针 1、程序运行后,用户任意输入一个字符串,求出字符串长度,然后输出字符串内容及个 数。不能使用strlen函数。 求字符串长度函数的函数原型必须如下: int MyStrLenPt(char *str) 若输入:nihao123! 则输出:nihao123!:9 chars2、编写一个对一维数组进行排序的程序。 要求: 写两个函数,一个主函数,一个sort函数。在主函数中完成数组的输入和输出,通过调 用sort函数对数组进行排序。 sort函数的原型为:voidsort(int*p, intn); 说明: (1)请大家按学号来坐,便于考勤和管理。 (2)请珍惜宝贵的实验时间!不要做与实验无关的事情,比如聊QQ、上网或打游戏。 (3)直接把C语言代码粘贴到相应的实验题目下方,上交实验报告时只交word文档。 (4)文档名称:班级+学号后2位+姓名+实验编号,例如11电1班12张山实验七.doc。 C语言字符串指针变量与字符数组的区别 用字符数组和字符指针变量都可实现字符串的存储和运算。但是两者是有区别的。在使用时应注意以下几个问题: 1)字符串指针变量本身是一个变量,用于存放字符串的首地址。而字符串本身是存放在以该首地址为首的一块连续的内存空间中并以 作为串的结束。字符数组现金网96y.org是由于若干个数组元素组成的,它可用来存放整个字符串。 2)对字符串指针方式 char *ps=C Language; 可以写为: char *ps; ps=C Language; 而对数组方式: static char st[]={C Language}; 不能写为: char st[20]; st={C Language}; 而只能对字符数组的各元素逐个赋值。 从以上几点可以看出字符串指针变量与字符数组在使用时的区别,同时也可看出使用指针变量更加方便。 前面说过,当一个指针变量在未取得确定地址前使用是危险的,容易引起错误。但是博彩娱乐棋牌q07i5.org对指针变量直接赋值是可以的。因为C系统对指针变量赋值时要给以确定的地址。 因此,char *ps=C Langage; 或者 char *ps; ps=C Language; 都是合法的。 C语言——运用一维数组和二维数组输出杨辉三角 **********一维数组********** #include #define n 10 int main() { } int a[n]={1,1},i,j;printf(“%5dn%5d%5dn”,1,a[0],a[1]);for(i=1;i **********二维数组********** #include int main() { int a[30][30]={0},i,j,n=10; for(i=0;i<=n-1;i++) a[i][0]=1; for(i=1;i<=n-1;i++) for(j=1;j<=i;j++) a[i][j]=a[i-1][j-1]+a[i-1][j]; for(i=0;i<=n-1;i++) { for(j=0;j<=i;j++) printf(“%5d”,a[i][j]); printf(“n”); } return 0; }第二篇:C语言《二维数组》说课稿(写写帮整理)
第三篇:C语言程序设计实验七:函数、数组、指针
第四篇:C语言字符串指针变量与字符数组的区别
第五篇:C语言运用一维数组和二维数组输出杨辉三角