您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > 12-《C语言程序设计》教案-第四章-数组(2)—二维数组
《C语言程序设计》课程教案表授课题目第四章数组(2)——二维数组课时安排2授课时间教学目的和要求1.掌握:二维数组的定义与使用方法。教学内容1.基本内容:(1)二维数组的定义和使用方法2.重点:二维数组的引用讲课进程和时间分配1、引入(5分钟)在C语言中,数组的元素还可以是数组,这样就构成二维数组,所以二维数组可以堪称是“数组的数组”。照此办理,还可以构成三维,四维数组(称多维数组)等等,二维数组是多维数组中最简单,最常用的数组,它代表多维数组的基本特征。2、二维数组的定义(10分钟)如前面所说,可以把二维数组看作是一种特殊的一维数组:它的元素又是一个一维数组如:inta[3][4];可以将a数组看作是一个一维数组,它有3个元素:a[0]、a[1]、a[2],每个元素又是一个包含4个元素的一维数组。图在纸上:可以理解为:inta[0][4],a[1][4],a[2][4],此处把a[0],a[1],a[2]看作一维数组名。说明:在这里为什么这么说呢?以后讲到指针的时候更便于理解二维数组的存储:二维数组从概念上可理解为行-列矩阵,但存储器是一维的,需按一定规则转换,在内存中:C语言中,二维数组中元素排列的顺序是——按行存放,不同的语言它的排列顺序是不一样的,Fotran是按列存放的。如:见纸上也就是说:数组元素的实际存放顺序是:右边下标比左边下标变化得快!!!3、二维数组的引用(5分钟)注意下标的最大取值,即:要注意数组定义和数组元素引用的区别,引用时候它的最大取值要比定义时少1如定义:inta[3][4];则下标下限值是a[0][0],下标上限值是a[2][3],4、二维数组的初始化(按行存放)(15分钟)(1)按存放顺序赋初值如:intx[2][3]={1,2,3,4,5,6};结果为:x[0][0]=1,x[0][1]=2,x[0][2]=3,x[1][0]=4,x[1][1]=5,x[1][2]=6(2)按行赋初值如:intx[2][3]={{1,2,3},{4,5,6}};结果同上。(3)部分赋初值如:staticintx[2][3]={1,2,4};/*以存放顺序赋*/结果为:x[0][0]=1,x[0][1]=2,x[0][2]=4,x[1][0]=0,x[1][1]=0,x[1][2]=0如:staticintx[2][3]={{1,2},{4}};/*以行赋*/结果为:x[0][0]=1,x[0][1]=2,x[0][2]=0,x[1][0]=4,x[1][1]=0,x[1][2]=0如:staticintx[2][3]={{6,2},{5,0,6}};/*以行赋*/x[0][0]=6,x[0][1]=2,x[0][2]=0,x[1][0]=5,x[1][1]=0,x[1][2]=6说明:想给第二行第三个元素赋值为0的话不能写成{5,,6}或者是{5,,6}而应人为写上0.(4)省略第一维长度staticintx[][3]={1,2,3,4,5,6,7};结果为:x[0][0]=1,x[0][1]=2,x[0][2]=3,x[1][0]=4,x[1][1]=5,x[1][2]=6,x[2][0]=7,x[2][1]=0,x[2][2]=0注意:不能省略第二维的长度。为什么?如果省略的话,就不知道一行有几个元素,给定这几个元素究竟应该如何赋值就不知道了,所以能省第一维,不能省第二维,因为省的话系统不能确定,这样就产生二义性了。5、二维数组程序举例(20分钟)例1:二维数组的输入与输出一般二维数组的处理用二重循环来实现用循环变量的值控制数组元素的下标,因为数组是一个整体,要想取出其中每一个个体的话,就得用下标来控制。#includestdio.hvoidmain(){inta[3][3],I,j;for(i=0;i=2;i++)for(j=0;j=2;j++)scanf(“%d”,&a[i][j]);for(i=0;j=2;i++){for(j=0;j=2;j++)printf(“%5d”,a[i][j]);printf(“\n”);}}上述程序为学生详细分析一下。for(i=0;i=2;i++)for(j=0;j=2;j++)scanf(“%d”,&a[j][i]);分析输出结果与上述有何不同,未修改时先给每行赋值,修改后是先给每列赋值for(i=0;j=2;i++){for(j=0;j=2;j++)if((i+j)%2)修改为if((i+j)%2==0)printf(“%5d”,a[i][j]);}for(i=0;i=2;i++)printf(“%5”,a[i][i]);输出主对角线数据考虑输出次对角线数据,打印上三角的各数据例将一个二维数组行和列元素互换,存到另一个二维数组中(转置)算法:1a数组初始化(或赋值)并输出;2用二重循环进行转置b[j][i]=a[i][j];输出b数组对于n*n的二维数组,可以在同一个数组进行矩阵转置操作思路对于主对角线的元素进行二二交换7、二维数组练习(5分钟)8、字符数组(30分钟)(1)字符数组的定义在C语言中,没有专门的字符串变量,而是将字符串存入字符数组中来处理;即用一个一维数组来存放一个字符串,(我们讲了数组是若干元素的集合)每个元素存放一个字符。字符数组是数组的一个特殊情况,但它的定义方法与上述介绍的类似;引用方法可以与上述介绍相同,也有其独特的引用方法。(它到底有什么独特的呢,我们接下来进行学习比较)定义形式:char数组名[exp][exp]如:charc[5];c[0]=’h’;c[1]=’a’;c[2]=’p’;c[3]=’p’;c[4]=’y’;由于字符型与整型是互相通用的,因此上面定义也可改为:intchar[5];c[0]=’h’;c[1]=’a’;c[2]=’p’;c[3]=’p’;c[4]=’y’;(2)字符数组的初始化1)按元素赋staticcharc[10]={‘s’,’t’,’o’,’r’,’e’};注意staticcharc[10];则c[0],c[1],。。。c[9]初值均为‘\0’但若charc[10];则c[0],c[1],。。。c[9]的值是未知的注意:在C语言中,讲字符串作为字符数组来处理,即用一个一维数组来存放一个字符串。如c[10]存放字符串“store”。为了测定实际字符串长度,C语言规定了一个“字符串结束标志”,即‘\0’。即遇到字符‘\0’时,表示字符串结束。由此可以看出字符数组的长度与实际字符串的长度是两码事,当然字符串的长度可以小于等于字符数组长度,但是你不能超过它的长度。2)使用字符串常量给字符数组赋初值例如:charc[6]={“china”};或charc[6]=“china”;或charc[]=“china”;见纸上注意:以字符串方式赋值时,必须保证数组元素个数=字符个数+1(字符串后面自动加上一个‘\0’)例字符数组初始化#includestdio.hvoidmain(){chara[7]={‘a’,’p’,’p’,’l’,’e’};charb[7]={”apple”};charc[7];staticcharx[7];inti;for(i=0;i=6;i++){printf(“%6d%6d%6d%6d\n”,a[i],b[i],c[i],x[i]);}}显示结果:9797-230112112750108108800101101-2000510001230c数组的各个元素的值是随机的。X数组用static说明,系统给它赋初值0.例用一个字符串给字符数组赋初值,然后打印出各元素的ASCII编码值#includestdio.hvoidmain(){charstr[]=”Thisisastring!”;inti=0;while(str[i]!=’\0’){printf(“%c=%d\n”,str[i],str[i]);i++}printf(“%c=%d\n”,str[i],str[i]);}输出结果:T=84H=104I=105S=115=32注意几个问题:用字符串给字符数组赋初值,系统自动加上空字符’\0’(终结符)‘’空格字符的AscII编码为32‘\0’空字符ASCII编码为0两者均无法直接打印出来。3)字符串的引用与输入输出对于字符数组,在程序中既可以逐个引用字符串中的单个字符(数组元素)也可以一次引用整个字符串(数组),这点在数值数组中是不可以的!!!1、逐个字符数组元素输入输出:用%c格式符描述。例:scanf(“%c”,&a[i]);printf(“%c%c%c”,a[0],a[2,a[3]]);2、整个字符串(数组)输入输出,用%s格式符描述如:chara[]=”china”scanf(“%s”,a);printf(“%s”,a);a前没地址符,因为数组名就代表数组的起始地址注意1:用%s输出,无论数组元素有多少个只要遇到“\0”便结束。如:charstar[3][4]={{”*”},{“**”},{“***”}};printf(“%s\n%s\n%s\n”,star[0],star[1],star[2]);说明:star[0]代表第一行首地址。结果为:******注意2:%s要求的是地址,对一维数组,数组名就是地址;对二维数组,只写行下标时是地址。如chara[6];scanf(“%s”,a);输入数据:china如:charstr1[5],str2[5],str3[5]输入数据:howareyou?用%s输入串时遇到空格或回车就默认前一个字符串输入结束。也可以定义一个二维数组voidmain(){chars[3][5];scanf(”%s%s%s”,s[0],s[1],s[2]);}8、总结(5分钟)讨论、思考题、作业:实验指导书习题参考资料(含参考书、文献等):叶斌陈世强.C语言程序设计.北京:科学出版社授课类型:理论课讨论课□实验课□练习课□其他□教学方式:传统授课双语□讨论□示教□指导□其他□教学资源:多媒体模型□实物□挂图□音像□其他□
本文标题:12-《C语言程序设计》教案-第四章-数组(2)—二维数组
链接地址:https://www.777doc.com/doc-5392380 .html