C语言第5章:相同类型数据集合课件_第1页
C语言第5章:相同类型数据集合课件_第2页
C语言第5章:相同类型数据集合课件_第3页
C语言第5章:相同类型数据集合课件_第4页
C语言第5章:相同类型数据集合课件_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第5章同类型数据集合主要内容数组与数组元素、一维数组、二维数组、多维数组、字符数组字符串处理函数指向字符串的指针变量5.1数组与数组元素的概念 由若干类型相同的数据按一定顺序存储所形成的有序集合,称为数组(Array)。通常,用某个名字标识这个集合,这个名字称为数组名。构成数组的每个数据项称为数组的元素(Element),同一数组中的元素必须具有相同的数据类型。数组定义的一般形式为:

类型标识符数组名[常量表达式1][常量表达式2]……;(1)数组的下标必须使用整型常量或整型常量表达式。C语言中不允许用变量作为下标,对数组进行动态定义。例如, #defineN10 intnScore[N];

intn=3; intnScore[n];/*不正确的定义方式*/ (2)C语言规定数组的下标都是从0开始的。 (3)数组的存储结构:数组一经定义,系统则根据数组的数据类型为每一个元素安排相同长度的、连续的存储单元,而且,C语言的数组在内存中是按行存放的,即存完第一行后存第二行,然后存第三行,······,以此类推。 (4)用sizeof来计算类型长度。

说明(1)数组名命名规则和变量名相同,遵循标识符命名规则。(2)数组名后是用方括弧括起来的常量表达式,不能用圆括弧。下面用法不对:如inta(10);是不对的。(3)常量表达式表示元素的个数,即数组长度。(4)常量表达式中可以包括普通常量和符号常量,不能包含变量。也就是说,C不允许对数组的大小作动态定义,即数组的大小不依赖于程序运行过程中变量的值。

说明例5-1查看数组nArray[10]的内存占用情况。

问题分析通过不同的输出方式,能够看到数组名(nArray)和&数组元素(&nArray[0])等表示的含义。数组名nArray表示数组的首地址,同数组nArray[0]的地址相同。不同的数组类型在内存中占有的字节数不同。

程序实现5.2.2一维数组的初始化1.在数组定义时初始化数据类型数组名[数组元素个数]={值1,值2,…,值n};或数据类型数组名[]={值1,值2,…,值n};2.用赋值语句初始化用赋值语句初始化是在程序执行时实现的。例5-2用赋值语句初始化数组nNum[10],然后按逆序输出数组nNum[10]中元素。

问题分析输入一组数,值为0~9,然后按逆序输出。

程序实现5.2.4一维数组程序举例

例5-4编写程序,每名学生有四门课考试成绩,用一维数组实现计算每个学生的平均成绩。

问题分析由于该例题只要求计算平均成绩,因此可以用4个整型数组存放数学、物理、英语和计算机的成绩,用一个实型数组存放每个学生的平均成绩。程序可按如下步骤实现:1)输入数据,把数学、物理、英语、计算机成绩分别存放在数组nMath,nPhysics,nEnglish,nComputer中。2)计算平均成绩,将结果放在dAverage数组中。3)输出结果。

解决方案5.3相同类型数据的二维及多维存储5.3.1二维数组的定义

二维数组定义的一般形式是:

类型说明符数组名[常量表达式1][常量表达式2];二维数组在内存中的存储:

问题分析可设一个二维数组nScore[5][3]存放五个人三门课的成绩。再设一个一维数组nAver[3]存放所求得各科平均成绩,设变量nAverage为全组各科总平均成绩。

程序实现5.3.3二维数组元素的引用二维数组引用的一般形式是:

数组名[下标1][下标2];例5-6一个电脑公司销售两种规格的磁盘:3英寸和5英寸,每一片磁盘可以有以下4种容量:单面双密;双面双密;单面高密;双面高密。用一个二维表格可以很好的表述磁盘的价格。要求将表格存入一个二维数组,并按表格的行列格式实现表格的分行打印。

问题分析可以使用多个赋值语句,完成把这些价格存入一个表格的任务。用嵌套for循环打印输出结果。输出时用转移字符’\t’控制对齐,行号变化时必须插入一个’\n’以输出回车换行。为了在输出中增添描述性标题,只需简单地在首行数值打印之前打印一行标题,在首列数值打印前打印一列标题即可。

程序实现5.3.4多维数组的初始化和引用 (1)多维数组的定义及初始化类型说明符数组名[常量表达式1][常量表达式2]…[常量表达式n];(2)多维数组的引用数组名[e1][e2][e3];5.3.5数组程序举例

例5-7有一个3×4的矩阵,编写程序找出值为最大的元素及其所在的行号和列号。

问题分析对于矩阵,用二维数组来描述会很方便。求矩阵中值最大的元素,可以这样实现:定义一个变量nMax并初始化为nArr[0][0],用双重循环访问矩阵中所有的元素,将每个元素和nMax相比较,用大于nMax值的元素替换nMax中原有的值,同时记录下来该元素的行列下标。循环结束后,输出nMax和所记录的下标值。该问题解决方法可以用下面的流程图5-14来表示。

解决方案5.4字符类型数据集合的存储用来存放字符的数组称为字符数组。字符数组允许在类型说明时作初始化赋值。如,

charc[10]={'c','','p','r','o','g','r','a','m'}; 赋值后c[0]~c[8]分别被赋值,c[9]未赋值,由系统自动赋予0值。当对全体元素赋初值时,也可以省去长度说明。如,

charc[]={'c','','p','r','o','g','r','a','m'};这时C数组的长度自动定为9。

注意:字符串整体输入/输出时(1)输出字符不包括’\0’(2)输出字符串时,输出项是字符数组名,输出时遇到‘\0’结束;(3)输入多个字符串时,以空格分隔;输入单个字符串时其中不能有空格。(4)C语言允许用字符串的方式对数组作初始化赋值。例如:charc[]={'c','','p','r','o','g','r','a','m'};可写为:charc[]={"Cprogram"};或去掉{}写为:charc[]="Cprogram";

例5-8字符数组和字符串的的初始化和输出。

程序实现2.字符串输入函数gets()原型:char*gets(char*string);头文件:#include<stdio.h>功

能:从终端输入一个字符串到内存中指定地址参数:输入字符串在内存中的存储地址指针说明:返回值为字符数组的起始地址gets(字符数组名);一般形式:例5-10gets()函数简单应用举例。

程序实现3.字符串连接函数strcat()原型:char*strcat(char*dest,char*src);头文件:#include<string.h>功能:把src所指字符串添加到dest结尾处(覆盖dest结尾处的'\0')并添加'\0'参数:dest-合并时的目标字符串,src-合并时的追加到目标字符串上的源字符串说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳 src的字符串,返回指向dest的指针。strcat(字符数组名1,字符数组名2);一般形式:

注意:本程序把初始化赋值的字符数组与动态赋值的字符串连接起来。要注意的是,字符数组1应定义足够的长度,否则不能全部装入被连接的字符串。

5.字符串比较函数strcmp()原型:intstrcmp(char*s1,char*s2);头文件:#include<string.h>

功能:比较字符串s1和s2。参数:s1-第1个字符串,s2-第2个字符串说明:当s1<s2时,返回值<0当s1=s2时,返回值=0当s1>s2时,返回值>0strcmp(字符数组名1,字符数组名2);一般形式:例5-13strcmp()函数简单应用举例。

本程序中把输入的字符串和数组st2中的串比较,比较结果返回到k中,根据k值再输出结果提示串。当输入为dbase时,由ASCII码可知“dBASE”大于“CLanguage”故k>0,输出结果“st1>st2”。

程序实现5.测字符串长度函数strlen()

原型:intstrlen(const

charstring[]);头文件:#include<string.h>

功能:统计字符串string中字符的个数。参数:字符数组名说明:所计算的字符串长度不包括’\0’在内。strlen(字符数组名);一般形式:5.7综合应用实例问题描述:学生成绩档案管理要对学生的各门课程成绩、姓名、学号等信息进行增、删、改、查的相应操作。要求用数组来实现数据的存储。这两个实例的讲解要根据教师讲课的需要及课时安排,自行从书中选取(1)一维数组 一维数组的声明形式,初始化方法,其在内存中是如何存储的,怎样去使用以达到预期的效果等。(2)二维及多数组二维数组是一维数组的扩展,虽然访问是平面式的,但在内存中仍然是一维

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论