版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言程序设计教案第6章数组授课内容第6章数组任课教师授课形式理实一体任课班级教学方法本节采用以教师为主导,在教学过程中同时采用提问法、讨论法和互动式教学方法。教学重点(1)理解数组的概念。(2)掌握数组声明。(3)掌握数组赋值。教学难点数组解决实际问题。教学目标教学目标(1)熟练掌握一维数组的定义、初始化及数组元素的引用。(2)能够根据实际情况恰当地运用一维数组解决实际问题。技能目标能够根据实际情况运用一维数组、二维数组解决实际问题。素质目标(1)学习数组的定义,即具备相同的数据类型的数的有序集合,明白物以类聚、人以群分的道理,要懂得朋友对个人的影响是相当大的,要谨慎交友。(2)数组元素在数组中的排列序号是确定的,各个元素必须按照自己的序号在程序中出现和运算。人生也同样需要按部就班。(3)将杂乱无章的数据元素,通过一定的方法按关键字顺序排列的过程叫排序。人们通过认识客观世界,认识各种事物和对象的组成要素、相互联系、结构功能及它们的发展演变规律,即事物的有序性,来促成事物不断从无序向有序方向转化。同样每个人的人生也是有序的。思政目标鼓励学生与正能量的人交往,树立正确的交友观和价值观,国家安全与信息安全,树立远大的理想和抱负。教学步骤及内容教学步骤及内容教学步骤及内容教学步骤及内容教学步骤及内容教学步骤及内容教学步骤及内容教学步骤及内容:教学过程:复习旧课导出新课讲授新课6.1一维数组6.1.1引出问题在实际的生产生活中,对数据的处理要求多种多样。对同一个小组3名学生可以用整型变量p1、整型变量p2和整型变量p3来表示这3个学生的政治面貌。输出这些学生的政治面貌时,可以使用以下语句:printf("%c%c%c",p1,p2,p3);但是对一个班级的30个学生来说,就需要定义30个变量,显得十分繁琐。简便解决这类问题的方法就是使用数组来表示。数组是指一组类型相同的变量,它使用一个数组名标识,每个数组元素都是通过数组名和元素的相对位置(下标)来引用的,数据元素在内存中占有连续的内存单元。学生的政治面貌属于同一数据类型,政治面貌都是字符型变量,可通过不同的标号来区分这30个学生,该标号称为下标。下标的变化是有规律的,可使用循环来处理这些数据。例如,for(i=0;i<30;i++) printf("%c",p[i]);6.1.2一维数组的定义数组元素属于同一数据类型,先后次序确定,用数组名和下标标识。一维数组是指具有一个下标的数组。一维数组用于存储一行或一列的数据,一维数组定义一般格式如下:类型标识符数组名[元素个数];其中,类型标识符是对数组元素类型的定义,可以是int型、float型、char型以及后面章节要学习到的指针、结构体和共用体等各种复合数据类型。每个数组的元素类型是一致的,即所定义的数组类型一致;数组名的命名同样要遵守标识符的命名规范;“[]”为数组定义的分界符号。元素个数一般是常量,由它确定数组的大小,因为数组元素所占的内存单元大小是由数组元素类型和元素个数决定的。例如,定义“inta[5];”,该数组元素的数据类型为int整型。数组名为a,是数组存储区的首地址,即存放数组第一个元素的地址。数组的大小为5。数组元素的下标是从0开始的,而不是从1开始的,数组的元素最大下标值为元素个数-1。数组a的元素为:a[0],a[1],a[2],a[3],a[4]。数组可分为静态数组和动态数组。静态数组是指在运行时元素的个数不可以改变;动态数组则是允许在运行时改变元素的个数。在说明一个数组后,系统会在内存中分配一段连续的空间用于存放数组元素。编译时分配连续内存字节数=数组元素个数*sizeof(元素数据类型)。6.1.3一维数组元素的引用C语言规定只能逐个引用数组元素,而不能一次引用整个数组。一维数组的引用格式如下:数组名[下标];其中,下标表示数组中的某一个元素的顺序号,必须是整型常量、整型变量或整型表达式。例如,a[3]、a[3+2]、a[i]、a[i++]、a[i+j]。在引用一维数组元素时要注意以下4个问题。(1)引用时,下标值若不是整型,C语言系统会自动取整。例如,a[5.6]相当于a[5]。(2)下标从0开始,而不是从1开始。(3)若数组的元素个数为n,则下标表达式的范围是从0到n-1,共n个整数,引用时的下标不能超过或等于定义时的下标值,若超出这个范围就称为数组下标越界。例如,inta[5];a[5]=23;C语言对数组不进行越界检查,因此,编译时没有错误提示,使用时要注意。(4)数组元素可以像普通数据一样进行赋值和算术运算以及输入和输出操作。6.1.4一维数组的初始化数组的初始化是指在定义数组的同时,给其数组元素赋初值。数组初始化是在编译阶段进行的,这样就会减少程序的运行时间,从而提高程序效率。主要有以下3种情况。(1)全部初始化。将各个数组元素的初值放在一对大括号中,数值的个数与数组元素的个数一一对应。赋值时,从左向右依次将大括号内的每个数赋给数组中的对应元素。例如,inta[6]={0,1,2,3,4,5};等价于a[0]=0,a[1]=1,a[2]=2,a[3]=3,a[4]=4,a[5]=6。(2)部分初始化。可对部分元素赋初值,此时,未赋值元素将自动初始化为0。例如,inta[6]={0,1,2,3};等价于a[0]=0,a[1]=1,a[2]=2,a[3]=3,a[4]=0,a[5]=0。inta[6]={0,3,0,0,7};该数组共6个元素,其中:a[1]=3,a[4]=7,其余元素的初值都为0。等价于a[0]=0,a[1]=3,a[2]=0,a[3]=0,a[4]=7,a[5]=0。(3)若对全部元素赋初值,则可省略数组下标。例如,inta[]={0,1,2,3,4,5};等价于inta[6]={0,1,2,3,4,5};6.1.5数组元素的输入与输出scanf()函数和printf()函数不能一次处理整个数组的多个元素,只能通过循环语句逐个处理,当下标i取不同值时,a[i]代表不同的数组元素。6.1.6一维数组的应用通过下列一维数组经典案例的学习,读者需要掌握数组常用操作的编程方法。与此同时,这些实例中有关数组的操作语句可以直接或间接嵌入其他应用程序中作为预制件使用。6.2二维数组6.2.1二维数组的定义二维数组主要用于存放矩阵形式的数据,如二维表格等。其一般格式如下:类型标识符数组名[常量表达式式1][常量表达式2];其中,常量表达式1是数组元素的行数,常量表达式2是数组元素的列数。数据元素个数为常量表达式1×常量表达式2。与一维数组相同,下标值从0开始。例如,定义“inta[3][4];”该数组元素的数据类型为整型,数组名为a,数组的大小为3×4=12个。二维数组的下标在两个方向上变化,下标变量在数组中的位置处于一个平面之中,而不是像一维数组那样只是一个向量,然而,内存是连续编址的,也就是说,内存单元是按一维线性排列的。在内存中存放二维数组,一般是按行序优先进行排列,即存放完一行之后,顺序放入第二行,以此类推。二维数组a[3][4]可以看成由3个元素组成的一维数组,每个元素a[i]又是包含4个元素的一维数组。数组在内存中按行顺序先存放a[0]行,再存放a[1]行,最后存放a[2]行。每行中的4个元素也依次存放。数组a为整型数据类型,为每个元素占2字节的内存空间。6.2.2二维数组元素的引用和一维数组元素的引用一样,二维数组元素也是通过数组名和下标来引用的,只是这里需要两个下标。二维数组元素引用的格式如下:数组名[行下标表达式][列下标表达式]例如,inta[2][3];a[1][2]=5;将第2行第3个元素赋值为5。在引用二维数组元素时要注意以下3个问题。(1)下标同一维数组一样,可以是整型常量或是整型表达式。行下标表达式的取值范围为0~行数-1,列下标表达式的取值范围为0~列数-1。(2)对基本数据类型的变量所能进行的各种操作,也都适合于同类型的二维数组元素。(3)要引用二维数组的全部数据,就要遍历二维数组,通常应使用二层嵌套的for循环:一般常把二维数组的行下标作为外循环的控制变量,把列下标作为内循环的控制变量。6.2.3二维数组的初始化二维数组的初始化也是在类型说明时给各个下标变量赋初值。主要有以下3种情况。(1)分行初始化。例如,inta[2][3]={{1,2,3},{4,5,6}};等价于a[0][0]=1,a[0][1]=2,a[0][2]=3,a[1][0]=4,a[1][1]=5,a[1][2]=6。也可以按行连续赋值。例如,inta[2][3]={1,2,3,4,5,6};(2)部分初始化。例如,inta[2][3]={{1},{2,3}};等价于a[0][0]=1,a[0][1]=0,a[0][2]=0,a[1][0]=2,a[1][1]=3,a[1][2]=0。(3)若对全部元素赋初值,行数可以省略,但列数不能默认。例如,inta[2][3]={1,2,3,4,5,6};等价于inta[][3]={1,2,3,4,5,6};6.2.4二维数组的应用6.3字符数组6.3.1字符数组的定义字符数组是数组元素类型为字符型的数组,字符数组中的每一个元素均为字符类型。字符数组包括一维字符数组和二维字符数组。一维字符数据一般格式如下:char数组名[常量表达式];例如,定义“chars[10];”该数组元素的类型为字符型,数组名为s,数组的长度为10。定义“charstr[3][5];”该数组元素的数据类型为字符型,数组名为str,数组的大小为3×5=15个。6.3.2字符数组的初始化字符数组同样允许在定义时进行初始化赋值。字符数组初始化的过程与数值型数组初始化的过程类似。主要有以下4种情况。1.逐个字符赋值例如,charch[5]={'C','H','I','N','A'};等价于a[0]='C',a[1]='H',a[2]='I',a[3]='N',a[4]='A'。2.用字符串常量赋值把字符串存入一个数组时,结束符\0一起存入数组,并以此作为该字符串的结束标志。因此,计算字符数组长度时,至少为字符串长度加1.例如,charch[6]={"CHINA"};等价于a[0]='C',a[1]='H',a[2]='I',a[3]='N',a[4]='A',a[5]='\0'。3.若字符数组为全部显式赋值,则字符数组的长度可以由初值确定例如,charch[5]={'C','H','I','N','A'};编译系统会计算出该字符数组ch的长度是5。4.部分初始化,其中未赋值的元素会自动赋值为“\0”例如,charch[5]={'C','H','I'};等价于a[0]='C',a[1]='H',a[2]='I’',a[3]='\0',a[4]='\0'。6.3.3字符数组的应用6.3.4字符串C语言没有提供专门的字符串数据类型,可以通过字符数组来处理字符串。但必须在字符数组末尾加上串结束符“\0”,以此作为该字符串是否结束的标志。1.字符数组的初始化字符数组的初始化有两种方法。(1)用字符常量初始化数组。用字符常量给字符数组赋初值时,要用大括号将赋值的字符常量括起来。例如,charstr[6]={'C','H','I','N,'A','\0'};该数组str[6]被初始化为“CHINA”,最后一个元素的赋值'\0'可以省略。(2)用字符串常量初始化数组。例如,charstr[6]={"CHINA"};等价于charstr[6]="CHINA";2.字符串的结束标志“\0”计算字符数组长度时,至少为字符串长度加1。例如,“CHINA”共5个字符,在内存占6字节,字符串自身长度为5。字符在内存中以字符的ASCII码形式存放。3.字符数组的输入输出字符数组的输入输出主要有两种方式。(1)逐个字符输入输出。格式化输入输出函数可以输入输出任何类型的数据。若要输入输出字符,使用格式符%c。从键盘读取一个字符:scanf("%c",数组元素地址);向显示器输出一个字符:printf("%c",数组元素地址);使用字符输入输出函数。getchar()函数为字符输入函数,调用格式为:getchar();putchar()函数为字符输出函数,调用格式为:putchar(字符名);(2)整个字符串一次输入输出。利用格式化输入输出函数输出字符串,使用格式符%s。从键盘读取一串字符:scanf("%s",数组名);向显示器输出一串字符:printf("%s",数组名);使用字符串输入输出函数。gets()函数为字符串输入函数,调用格式为:gets(字符串数组名)。puts()函数为字符串输出函数,调用格式为:puts(字符串数组名)。6.3.5常用字符串处理函数C语言函数库提供了丰富的函数集,需要在程序开头添加预编译命名:#include<string.h>1.字符串长度—strlen()函数strlen()函数是返回字符串的实际长度(不包含字符串结束标志'\0')并作为函数返回值。strlen()函数一般格式如下:strlen(字符数组名)2.字符串连接—strcat()函数strcat()函数把字符数组2中的字符串连接到字符数组1中字符串的后面,并删除字符串1后面的串结束标志'\0',新串以字符数组2的'\0'作为结束标志。返回值是字符数组1的首地址。strcat()函数一般格式如下:strcat(字符数组1,字符数组2)3.字符串拷贝—strcpy()函数strcpy()函数把字符数组2中的字符串拷贝到字符数组1中。串结束标志'\0'也一同拷贝。字符数组2,也可以是一个字符串常量,这时相当于把一个字符串赋予一个字符数组。返回值是字符数组1的首地址。strcpy()函数一般格式如下:strcpy(字符数组1,字符数组2)4.字符串比较—strcmp()函数strcmp()函数将两个数组中的字符串从左至右逐个比较,比较字符的ASCII码大小,直到遇到不同字符或'\0'为止。返回值是int型整数。(1)若字符串1=字符串2,返回值为0。(2)若字符串1>字符串2,返回正整数。(3)若字符串1<字符串2,返回负整数。strcmp()函数一般格式如下:strcmp(字符数组1,字符数组2)6.3.6字符串处理函数的应用6.4常见错误分析6.4.1数组下标越界在定义数组时,将定义的“元素个数”误认为是“可使用的最大下标值”就会出现下标越界问题。6.4.2二维数组的引用错误初学者很容易将数学中的用法习惯性地用于C程序中。6.4.3给字符数组赋值字符串初学者由于看到数组初始化的情形,就以为能够把字符串赋给一个数组。6.5回文字符串应用实战6.5.1实战背景回文串,是一种特殊的字符串,它从左往右读和从右往左读是一样的。6.5.2实战目的(1)掌握字符数组定义、输入输出使用方法。(2)字符串处理函数gets()函
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度车场租赁及停车场绿化美化服务协议4篇
- 科技引领下的宇宙探索进展
- 二零二五年度车辆融资租赁合同违约责任答辩状样本8篇
- 二零二五年度车辆买卖合同含车辆绿色环保认证3篇
- 二零二五年度草坪围栏施工与城市排水系统配套合同2篇
- 2025年度个人知识产权代理佣金协议4篇
- 二零二五年度橱柜衣柜模块化设计生产合同4篇
- 2025年度个人车位买卖合同范本(写字楼)3篇
- 高效体育训练学生体能提升的秘密武器
- 2025年度绿色有机牛奶产销一体化合作合同范本4篇
- 第八讲 发展全过程人民民主PPT习概论2023优化版教学课件
- 实体瘤疗效评价标准RECIST-1.1版中文
- 王崧舟:学习任务群与课堂教学变革 2022版新课程标准解读解析资料 57
- 企业新春茶话会PPT模板
- GB/T 19185-2008交流线路带电作业安全距离计算方法
- 2022年上海市初中毕业数学课程终结性评价指南
- DIC诊治新进展课件
- 公路工程施工现场安全检查手册
- 1汽轮机跳闸事故演练
- 礼品(礼金)上交登记台账
- 普通高中英语课程标准词汇表
评论
0/150
提交评论