C语言使用教程5

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第5章同类型数据集合主要内容数组与数组元素、一维数组、二维数组、多维数组、字符数组字符串处理函数指向字符串的指针变量5.1数组与数组元素的概念•由若干类型相同的数据按一定顺序存储所形成的有序集合,称为数组(Array)。通常,用某个名字标识这个集合,这个名字称为数组名。构成数组的每个数据项称为数组的元素,同一数组中的元素必须具有相同的数据类型。同一数组中的数组元素在内存中占据的地址空间是连续的。•数组定义的一般形式为:类型标识符数组名[常量表达式1][常量表达式2]……;数组首地址(1)数组的下标必须使用整型常量或整型常量表达式。C语言中不允许用变量作为下标,对数组进行动态定义。例如,#defineN10intnScore[N];intn=3;intnScore[n];/*不正确的定义方式*/(2)C语言规定数组的下标都是从0开始的。说明(3)数组的存储结构:数组一经定义,系统则根据数组的数据类型为每一个元素安排相同长度的、连续的存储单元,而且,C语言的数组在内存中是按行存放的,即存完第一行后存第二行,然后存第三行,······,以此类推。(4)数组元素的作用相当于简单变量。(5)用sizeof来计算类型长度。a[0][0]a[2]][3]存储示意图a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]说明5.2数组与数组元素的概念5.2.1一维数组的定义一维数组定义的一般形式为:类型说明符数组名[常量表达式];6的低位字节4的高位字节422的低位字节FF6CFF70FF78FF7Ca[0]a[1]a[2]a[3]a[4]……78的高位字节78的低位字节6的高位字节6的低位字节23的高位字节23的低位字节4的低位字节2的高位字节2的低位字节FF74数组在内存中的首地址即a=FF6Cinta[5]={2,4,23,6,78};inta[5];例5-1查看数组nArray[10]的内存占用情况。问题分析通过不同的输出方式,能够看到数组名(nArray)和&数组元素(&nArray[0])等表示的含义。数组名nArray表示数组的首地址,同数组nArray[0]的地址相同。不同的数组类型在内存中占有的字节数不同。程序实现5.2.2一维数组的初始化数据类型数组名[数组元素个数]={值1,值2,…,值n};或数据类型数组名[]={值1,值2,…,值n};2.用赋值语句初始化用赋值语句初始化是在程序执行时实现的。1.在数组定义时初始化•定义数组时对数组元素赋初值:inta[5]={1,2,3,4,5};•只给部分元素赋初值•对全部元素赋初值时,可以不指定长度:inta[]={1,2,3,4,5};inta[5]={1,2,3};inta[5]={0};其余元素初值为零程序实现例5-2用赋值语句初始化数组nNum[10],然后按逆序输出数组nNum[10]中元素。问题分析输入一组数,值为0~9,然后按逆序输出。•引用形式–数组名[下标]•说明–下标即可以是整型常量或整型表达式,也可以是含有已赋值的整型变量或整型变量表达式–数组下标范围为0~(N-1)(N为数组长度)–注意:防止数组下标越界•举例–a[0]=a[5]+a[j]*3;5.2.3一维数组的引用例:intdata[5];data[5]=10;C语言对数组不作越界检查,使用时要注意只能逐个对数组元素进行操作(字符数组例外)输入方法:inta[10],i;输入第i个数组元素:scanf(%d,&a[i]);输入整个数组元素:for(i=0;i10;i++)scanf(%d,&a[i]);输出方法:输出第i个数组元素:printf(%d,a[i]);输出整个数组元素:for(i=0;i10;i++)printf(%d,a[i]);一维数组的输入和输出例5-3求数组nAarr[10]中各元素的和。#includestdio.h/*求数组中各元素的和*/voidmain(){inti,nArr[10],nSum;nSum=0;printf(请输入10个整数:\n);for(i=0;i10;i++)scanf(%d,&nArr[i]);for(i=0;i10;i++)nSum+=nArr[i];printf(nSumis%d\n,nSum);}程序实现5.2.4一维数组程序举例例5-4编写程序,每名学生有四门课考试成绩,用一维数组实现计算每个学生的平均成绩。问题分析由于该例题只要求计算平均成绩,因此可以用4个整型数组存放数学、物理、英语和计算机的成绩,用一个实型数组存放每个学生的平均成绩。程序可按如下步骤实现:1)输入数据,把数学、物理、英语、计算机成绩分别存放在数组nMath,nPhysics,nEnglish,nComputer中。2)计算平均成绩,将结果放在dAverage数组中。3)输出结果。解决方案例5-4编写程序,每名学生有四门课考试成绩,用一维数组实现计算每个学生的平均成绩。程序实现5.3相同类型数据的二维及多维存储•5.3.1二维数组的定义二维数组定义的一般形式是:类型说明符数组名[常量表达式1][常量表达式2];二维数组在内存中的存储:inta[3][2]a[0][1]a[1][0]a[1][1]a[2][0]a[2][1]014523a[0][0]a[0][0]a[0][1]a[1][0]a[1][1]a[2][0]a[2][1]a[0]a[1]a[2]行数列数元素个数=行数*列数例:inta[3][4];20089201011201213201415200012002320045200067a[0][0]a[0][1]a[0][2]a[0][3]a[1][0]a[1][1]a[1][2]a[1][3]a[2][0]a[2][1]a[2][2]a[2][3]每个元素a[i]由包含4个元素的一维数组组成二维数组a是由3个元素组成a[0]a[1]a[2]行名014523a[0][1]a[0][2]a[0][3]a[1][0]a[1][1]a[0][0]a[1][3]a[2][0]a[2][1]a[2][2]a[2][3]a[1][2]6789a[0]a[1]a[2]二维数组理解5.3.2二维数组的初始化分行初始化:例inta[2][3]={{1,2,3},{4,5,6}};a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]123456全部初始化按元素排列顺序初始化例inta[2][3]={{1,2},{4}};a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]120400部分初始化例inta[][3]={{1},{4,5}};a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]100450第一维长度省略初始化例inta[2][3]={1,2,3,4,5,6};a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]123456全部初始化例inta[2][3]={1,2,4};a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]124000部分初始化例inta[][3]={1,2,3,4,5};a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]123450第一维长度省略初始化在声明二维数组形参时,不能省略数组第二维的长度二维数组的输入和输出数组的输入和输出只能逐个对数组元素进行操作(字符数组例外)intb[2][3],i,j;输入方法:输入第i行第j列元素:scanf(“%d”,&a[i][j]);输入整个数组元素:for(i=0;i2;i++)for(j=0;j3;j++)scanf(“%d”,&a[i][j]);输出方法:输出第i行第j列元素:printf(“%d”,a[i][j]);输出整个数组元素:for(i=0;i2;i++)for(j=0;j3;j++)printf(“%d”,a[i][j]);例5-5用二维数组实现如下表5-2所示的计算每门课的平均分数。问题分析可设一个二维数组nScore[5][3]存放五个人三门课的成绩。再设一个一维数组nAver[3]存放所求得各科平均成绩,设变量nAverage为全组各科总平均成绩。程序实现/*用二维数组解决求学生平均成绩问题*/#includestdio.h#includestdlib.hvoidmain(){inti,j,nSum=0,nAverage,nAver[3];intnScore[5][3]={{80,75,92},{61,65,71},{59,63,70},{85,87,90},{76,77,85}};for(i=0;i3;i++){for(j=0;j5;j++)nSum=nSum+nScore[j][i];nAver[i]=nSum/5;nSum=0;}nAverage=(nAver[0]+nAver[1]+nAver[2])/3;printf(math:%d\nclanguag:%d\ndFoxpro:%d\n,nAver[0],nAver[1],nAver[2]);printf(total:%d\n,nAverage);}#includestdio.h#includestdlib.hvoidmain(){inti,j,nSum=0,nAverage,nAver[3];intnScore[3][5]={{80,61,59,85,76},{75,65,63,87,77},{92,71,70,90,85}};for(i=0;i3;i++){for(j=0;j5;j++)nSum=nSum+nScore[i][j];nAver[i]=nSum/5;nSum=0;}nAverage=(nAver[0]+nAver[1]+nAver[2])/3;printf(math:%d\nclanguag:%d\ndFoxpro:%d\n,nAver[0],nAver[1],nAver[2]);printf(total:%d\n,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字符类型数据集合的存储•字符串–一串以'\0'结尾的字符在C语言中被看作字符串–用双引号括起的一串字符是字符串常量,C语言自动为其添加'\0'终结符–C语言并没有为字符串提供任何专门的表示法,完全使用字符数组和字符指针来处理•字符数组–每个元素都是字符类型的数组字

1 / 57
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功