大学C语言基础自学课件--第7章_第1页
大学C语言基础自学课件--第7章_第2页
大学C语言基础自学课件--第7章_第3页
大学C语言基础自学课件--第7章_第4页
大学C语言基础自学课件--第7章_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

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

文档简介

第七章数组,内容提要:一维数组二维数组字符数组应用举例,回顾,我们前面使用的数据类型都属于基本类型(整型、实型、字符型),其存储特点是:每个变量单独存储,亦称简单变量,如:x=a;y1=0;y2=-2*x;个变量之间独立存放,无任何联系。,构造类型的基本概念,构造类型:是由基本类型构造而成的。(如数组、结构体、共同体、梅举型),在C语言中,变量类型除了前面介绍的几种基本类型之外,还有另外一些复杂的类型,合称为构造类型。,构造类型的每一个分量是一个变量,它可以是简单类型或者构造类型。,构造类型的分量占用相邻的存储空间。,数组是构造数据类型之一数组:具有相同类型的,在存储空间上连续的一组元素的集合。元素:属同一数据类型,用数组名和下标来唯一确定,合法标识符,表示元素个数,:数组运算符单目运算符优先级(1)左结合不能用(),7.1一维数组一维数组的定义定义方式:数据类型数组名常量表达式;,例inti=15;intdatai;(不能用变量定义数组长度),定义即提供四个方面的信息:名、类型、维数、长度,从而分配空间。,例如:inta10表示数组名是,它是维数组,数组元素的类型是,数组有个元素。,a,整型,10,一,一维数组的引用数组必须先定义,后使用只能逐个引用数组元素,不能一次引用整个数组数组元素表示形式:数组名下标其中:下标可以是常量或整型表达式,如果数组长度为n,则元素的最大下标为n-1,注意:定义数组时用到的“数组名常量表达式”和引用数组元素时用到的“数组名下标”是有区别的。例如inta10;t=a6;,下标从0开始,例inta10;printf(“%d”,a);,/*定义数组长度为10*/,/*引用a数组中序号为6的元素。此时6不代表数组长度*/,例intdata5;,data0、data1、data2、data3、data4;,printf(“%dt”,aj);,例7.1数组元素的引用#includevoidmain()inti,a10;for(i=0;i=0;i-)printf(%d,ai);printf(n);,运行结果如下:9876543210程序使a0到a9的值为09,然后按逆序输出。,数组元素的下标常用循环变量来控制,注意:在一维数组引用过程中要防止下标越界问题。如“inta10”定义的数组a,数组a中不包括a10元素,下标为10已经越界。对于数组下标越界问题,C语言编译系统不进行检测,即不进行错误报告,只是会造成程序运行结果的错误。,C编译程序怎么管理一个数组呢?,用连续的内存单元存放各个元素,如:inta5:其内存中存储为:,a0a1a2a3a4,每个数据元素占用的字节数,就是基类型的字节数一个元素占4个字节,一维数组的存储,数组名表示内存首地址,是地址常量,一维数组的初始化初始化方式,在定义数组时,为数组元素赋初值(在编译阶段使之得到初值),inta5=1,2,3,4,5;等价于:a0=1;a1=2;a2=3;a3=4;a4=5;,说明:数组不初始化,其元素值为随机数如果想使一个数组中全部元素值为0或,可以写成:inta10=0;charb5=,当全部数组元素赋初值时,可不指定数组长度,只给部分数组元素赋初值,inta=1,2,3,4,5,6;编译系统根据初值个数确定数组长度,如inta5=6,2,3;等价于:a0=6;a1=2;a2=3;a3=0;a4=0;,如:1、inta4=1、2、3、4、5、6;2、inta4;a1=1;a22;a33;a44;3、intan;,数据多于元素个数,且数据间没用逗号隔开,错,错,错,不能使用变量,下标要从0开始,例数组的初始化#includestdio.hvoidmain()inti;inta5=1,2,3,4,5;intb5=1,2,3;intc=1,2,3,4,5;intd5=0;inte5;for(i=0;i5;i+)printf(%d,ai);printf(n);for(i=0;i5;i+)printf(%d,bi);printf(n);for(i=0;i5;i+)printf(%d,ci);printf(n);for(i=0;i5;i+)printf(%d,di);printf(n);for(i=0;i5;i+)printf(%d,ei);printf(n);,12345123001234500000-858993460-858993460-858993460-858993460-858993460,inti,a5=1,2,3,4,5,b5=1,2,3,c=1,2,3,4,5,d5=0,e5;,例7.2用数组求Fibonacci数列(斐波纳契数列)前20个数,#includemain()inti;intf20=;for(i=2;i20;i+)for(i=0;i20;i+)if(i%5=0)printf(n);printf(%12d,fi);,if语句用来控制换行,每行输出5个数据。,1,1,fi=fi-2+fi-1;,例7.3用起泡法对10个数排序(由小到大)。,起泡法的思路是:将相邻两个比较,将小的调到前头。,经过第一趟(共5次比较与交换)后,最大的数9已“沉底”。然后进行对余下的前面5个数第二趟比较,,如果有n个数,则要进行n-1趟比较。在第1趟比较中要进行n-1次两两比较,在第j趟比较中要进行n-j次两两比较。,经过第二趟(共4次比较与交换)后,得到次大的数8。,由前面的分析可知:要排序的数必须放在数组中用二重循环控制排序过程外循环j控制比较趟数(n-1趟)内循环i控制一趟比较的次数(n-j),程序流程图如下:,#includemain()inta11,i,j,t;printf(Input10numbers:n);for(i=1;iaj+1)t=aj;aj=aj+1;aj+1=t;printf(Thesortednumbers:n);for(i=1;i11;i+)printf(%d,ai);,7.2二维数组及多维数组二维数组的定义定义方式:数据类型数组名常量表达式常量表达式;,例inta34;floatb25;inta3,4;,行数,列数,元素个数=行数*列数,在C语言中,数组的元素还可以是数组,这样就构成二维数组,所以二维数组可以看成是“数组的数组”。,可以用于存放有行有列的数据表格,引用二维数组元素的一般形式:数组名行下标列下标,二维数组的引用,如:inta23;定义了一个2行3列的二维整型数组a,它的各元素为a00,a01,a02,a10,a11,a12,总共有六个元素。,注意:不要写成a1,2,a2-1,2*2-2形式,又如:a2-12*2-1b12=a13/2,注意:在使用数组元素时,下标的最大取值。即注意数组定义和数组元素引用的区别,如:inta34;/*定义a为34的数组*/则下标下限值是a00下标上限值是a23,例inta34;,每个元素ai由包含4个元素的一维数组组成,二维数组a是由3个元素组成,二维数组理解:我们可以把二维数组看作是一种特殊的一维数组:它的元素又是一个一维数组。,数组元素的存放顺序原因:内存是一维的二维数组:按行存放,二维数组元素的初始化分行初始化:,按元素排列顺序初始化,第一维的大小按以下规则决定:(1)当初值的个数能被第二维的常量表达式的值除尽时,所得的商就是第一维的大小。(2)当初值的个数不能被第二维的常量表达式的值除尽时,则:第一维的大小=所得的商+1。,程序举例,例将二维数组输入与输出,#includemain()inta33,i,j;for(i=0;i=2;i+)for(j=0;j=2;j+)scanf(%d,一般二维数组的处理用二重循环实现,用循环变量的值控制数组元素的下标。,#includemain()inta33,i,j;for(i=0;i=2;i+)for(j=0;j=2;j+)scanf(%d,123456789,123,789,456,147258369,算法:1、a数组初始化并输出2、用二重循环进行转置bji=aij3、输出b数组,例7.4将二维数组行列元素互换,存到另一个数组中(转置)。,printf(arrayb:n);for(j=0;j=2;j+)for(i=0;i=1;i+)printf(%5d,bji);printf(n);,例7.5有一个34的矩阵,求其中最大元素值及其行列号,#includemain()inta34=1,2,3,4,9,8,7,6,-10,10,-5,2;inti,j,row=0,colum=0,max;max=a00;for(i=0;imax)max=aij;row=i;colum=j;printf(max=%d,row=%d,colum=%dn,max,row,colum);,作业:7.47.6,7.3字符数组,内容提要:字符数组的定义字符数组的初始化字符数组的引用字符串的字符串结束标志字符数组的输入与输出字符串处理函数字符数组的应用,一、字符数组的定义,用来存放字符数据的数组是字符数组。,例intc10,ch34;,在C语言中没有专门的字符串变量,而是将字符串存入字符数组来处理。用一个一维数组存放一个字符串,每个元素存放一个字符。P142字符数组是数组的一个特殊情况,它的定义方法与前面介绍的类似,引用方法可以与前面介绍的相同,但也有其独特的引用方法。,二、字符数组的初始化,逐个字符赋值P1417.3.2用字符串常量P1427.3.4无字符串变量,用字符数组存放字符串,字符串结束标志:0,注:以字符串方式赋值时,必须保证数组元素个数字符个数+1。(后面自动加一个0)chara5=“hello”;,例charc10,ch34;,一、字符数组的定义,用来存放字符数据的数组是字符数组。,例charc10,ch34;,二、字符数组的初始化,逐个字符赋值用字符串常量,三、字符数组的引用,例:#includevoidmain()chara10=I,a,m,h,a,p,p,y,b10;inti;for(i=0;i10;i+)scanf(%c,四、字符串的输入与输出,逐个字符I/O:(数组元素)%c整个字符串I/O:(数组)%s,例用%cmain()charstr5;inti;for(i=0;i0)strcpy(string,str3);printf(nThelargeststringis:n%sn,string);,#includemain()i

温馨提示

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

评论

0/150

提交评论