资源描述
授课题目第四章数组(2)二维数组学习必备欢迎下载C语言程序设计课程教案表课时安排授课时间2教学目的和要求1掌握:二维数组的定义与使用方法。教学内容1基本内容:(1)二维数组的定义和使用方法2重点:二维数组的引用讲课进程和时间分配1、引入(5分钟)在C语言中,数组的元素还可以是数组,这样就构成二维数组,所以二维数组可以堪称是“数组的数组”。照此办理,还可以构成三维,四维数组(称多维数组)等等,二维数组是多维数组中最简单,最常用的数组,它代表多维数组的基本特征。2、二维数组的定义(10分钟)如前面所说,可以把二维数组看作是一种特殊的一维数组:它的元素又是一个一维数组如:inta34;可以将a数组看作是一个一维数组,它有3个元素:a0、a1、a2,每个元素又是一个包含4个元素的一维数组。图在纸上:可以理解为:inta04,a14,a24,此处把a0,a1,a2看作一维数组名。说明:在这里为什么这么说呢?以后讲到指针的时候更便于理解二维数组的存储:二维数组从概念上可理解为行-列矩阵,但存储器是一维的,需按一定规则转换,在内存中:C语言中,二维数组中元素排列的顺序是按行存放,不同的语言它的排列顺序是不一样的,Fotran是按列存放的。如:见纸上也就是说:数组元素的实际存放顺序是:右边下标比左边下标变化得快!3、二维数组的引用(5分钟)注意下标的最大取值,即:要注意数组定义和数组元素引用的区别,引用时候它的最大取值要比定义时少1如定义:inta34;则下标下限值是a00,下标上限值是a23,4、二维数组的初始化(按行存放)(15分钟)(1)按存放顺序赋初值如:intx23=1,2,3,4,5,6;结果为:x00=1,x01=2,x02=3,x10=4,x11=5,x12=6(2)按行赋初值如:intx23=1,2,3,4,5,6;结果同上。(3)部分赋初值如:staticintx23=1,2,4;/*以存放顺序赋*/结果为:x00=1,x01=2,x02=4,x10=0,x11=0,x12=0如:staticintx23=1,2,4;/*以行赋*/结果为:x00=1,x01=2,x02=0,x10=4,x11=0,x12=0如:staticintx23=6,2,5,0,6;/*以行赋*/x00=6,x01=2,x02=0,x10=5,x11=0,x12=6说明:想给第二行第三个元素赋值为0的话不能写成5,6或者是5,6而应人为写上0.(4)省略第一维长度staticintx3=1,2,3,4,5,6,7;学习必备欢迎下载结果为:x00=1,x01=2,x02=3,x10=4,x11=5,x12=6,x20=7,x21=0,x22=0注意:不能省略第二维的长度。为什么?如果省略的话,就不知道一行有几个元素,给定这几个元素究竟应该如何赋值就不知道了,所以能省第一维,不能省第二维,因为省的话系统不能确定,这样就产生二义性了。5、二维数组程序举例(20分钟)例1:二维数组的输入与输出一般二维数组的处理用二重循环来实现用循环变量的值控制数组元素的下标,因为数组是一个整体,要想取出其中每一个个体的话,就得用下标来控制。#includevoidmain()inta33,I,j;for(i=0;i=2;i+)for(j=0;j=2;j+)scanf(“%d”,&aij);for(i=0;j=2;i+)for(j=0;j=2;j+)printf(“%5d”,aij);printf(“n”);上述程序为学生详细分析一下。for(i=0;i=2;i+)for(j=0;j=2;j+)scanf(“%d”,&aji);分析输出结果与上述有何不同,未修改时先给每行赋值,修改后是先给每列赋值for(i=0;j=2;i+)for(j=0;j=2;j+)if(i+j)%2)修改为if(i+j)%2=0)printf(“%5d”,aij);for(i=0;i=字符个数+1(字符串后面自动加上一个0)例字符数组初始化#includevoidmain()chara7=a,p,p,l,e;charb7=”apple”;charc7;staticcharx7;inti;for(i=0;i=6;i+)printf(“%6d%6d%6d%6dn”,ai,bi,ci,xi);显示结果:9797-230112112750108108800101101-2000510001230学习必备欢迎下载c数组的各个元素的值是随机的。X数组用static说明,系统给它赋初值0.例用一个字符串给字符数组赋初值,然后打印出各元素的ASCII编码值#includevoidmain()charstr=”Thisisastring!”;inti=0;while(stri!=0)printf(“%c=%dn”,stri,stri);i+printf(“%c=%dn”,stri,stri);输出结果:T=84H=104I=105S=115=32注意几个问题:用字符串给字符数组赋初值,系统自动加上空字符0(终结符)空格字符的AscII编码为320空字符ASCII编码为0两者均无法直接打印出来。3)字符串的引用与输入输出对于字符数组,在程序中既可以逐个引用字符串中的单个字符(数组元素)也可以一次引用整个字符串(数组),这点在数值数组中是不可以的!1、逐个字符数组元素输入输出:用%c格式符描述。例:scanf(“%c”,&ai);printf(“%c%c%c”,a0,a2,a3);2、整个字符串(数组)输入输出,用%s格式符描述如:chara=”china”scanf(“%s”,a);printf(“%s”,a);a前没地址符,因为数组名就代表数组的起始地址注意1:用%s输出,无论数组元素有多少个只要遇到“0”便结束。如:charstar34=”*”,“*”,“*”;printf(“%sn%sn%sn”,star0,star1,star2);说明:star0代表第一行首地址。结果为:*注意2:%s要求的是地址,对一维数组,数组名就是地址;对二维数组,只写行下标时是地址。如chara6;scanf(“%s”,a);输入数据:china如:charstr15,str25,str35输入数据:howareyou?用%s输入串时遇到空格或回车就默认前一个字符串输入结束。也可以定义一个二维数组voidmain()学习必备欢迎下载chars35;scanf(”%s%s%s”,s0,s1,s2);8、总结(5分钟)讨论、思考题、作业:实验指导书习题参考资料(含参考书、文献等):叶斌陈世强.C语言程序设计.北京:科学出版社授课类型:理论课讨论课实验课练习课其他教学方式:传统授课双语讨论示教指导其他教学资源:多媒体模型实物挂图音像其他
展开阅读全文