下载

1下载券

加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 07_第07章 数组

07_第07章 数组.ppt

07_第07章 数组

tianxingmeizhou
2010-12-15 0人阅读 举报 0 0 暂无简介

简介:本文档为《07_第07章 数组ppt》,可适用于工程科技领域

第七章数组第七章数组本章要点:建立数组的概念掌握一维数组和多维数组的定义掌握数组的初始化和引用掌握字符串与字符数组掌握用数组进行编程的技术。迄今为止我们使用的都是属于基本类型的数据(整型、字符型、实型)C还提供了构造类型的数据它们有数组类型、结构体类型、共用体类型。构造类型数据是由基本类型数据按一定的规则组成的因此它们又被称为“导出类型”。本章只介绍数组。数组的基本概念:数组的基本概念:、数组:一组具有相同数据类型的数据的有序的集合。、数组元素:数组中的元素。数组中的每一个数组元素具有相同的名称不同的下标可以作为单个变量使用。在定义一个数组后在内存中使用一片连续的空间依次存放数组的各个元素。、数组的下标:是数组元素的位置的一个索引或指示。、数组的维数:数组元素下标的个数。根据数组的维数可以将数组分为一维、二维、三维、多维数组。数组是同类型变量的集合,共用一个名字,用下标来区分◆每个变量称作数组元素◆按下标递增顺序在内存中存放◆使用几个下标区分变量就称是几维数组。◆一维数组与数学中的数列对应二维数组与矩阵对应。很少使用三维及三维以上的数组。一维数组的定义和引用一维数组的定义定义方式:类型说明符数组名常量表达式例:inta它表示数组名为a此数组有个元素。说明:()数组名定义规则和变量名相同()数组名的常量表达式用方括弧而不是圆括弧括起来()常量表达式表示元素的个数即数组长度。例如:a表示a数组共有个元素下标从开始分别为:a,a,a,a,a,a,a,a,a,a注意:没有a()常量表达式中可以包括常量和符号常量不能包含变量即数组的大小不能依赖于程序过程中变量的值。例如:intnscanf(“d”,n)intan是不合法的。一维数组元素的引用C语言规定只能逐个引用数组元素而不能一次引用整个数组。数组元素的表示形式为:数组名下标其中下标可以是整型常量或整型表达式。例如:a=aaa*例数组元素的引用main(){inti,afor(i=i<=i)ai=ifor(i=i>=i)printf(“d”,ai)}本例使a到a的值为~,然后按逆序输出。一维数组的初始化一维数组的初始化、在定义数组时对数组元素赋以初值方法:将初值依次写在花括号{}内。例如:inta={,,,}其中:a=,a=,a=,a=、可以只给一部分元素赋值。例如:inta={,,,,}其中:a=,a=,a=,a=,a=,a=,a=,a=,a=,a=、如果想使一个数组中全部元素值为,可以写成:inta={,,,,,,,,,}或:inta={}不能写成:inta={*}C语言不能给数组整体赋初值注意:定义成static数组不赋初值系统会自动将全部元素赋以值。(此处后面有介绍)、在对全部数组元素赋初值时可以不指定数组长度。例如:inta={,,,,}可以写成:inta={,,,,}但是如果被定义的数组长度与提供初值的个数不相同时则数组长度不能省略。例如:inta={,,,,}只初始化了前个元素后个元素为。一维数组程序举例一维数组程序举例例用数组来处理求Fibonacci数列问题。main(){intiintf={,}for(i=i<i)fi=fififor(i=i<i){if(i==)printf(“n”)printf(“d”,fi)}}例用冒泡法对个数排序(由小到大)。冒泡法:对将进行排序的数相邻两个数进行比较如果满足次序要求保持两者位置不变否则交换位置第一次比较第二次比较第三次比较第四次比较第五次比较第一次冒泡排序的结果n个数经过一次冒泡排序后最大数(最小数)将被交换到最后位置但前面n数仍然无序。下一次排序最后一位不必参加排序。第一次冒泡排序算法结论:如果有n个数参加冒泡排序则要进行n趟比较。在第j趟比较中有nj个数参加排序要进行nj次两两比较。本例中第趟有个数参加排序进行了次比较。第一次比较第二次比较第三次比较第四次比较第二次冒泡排序的结果第二次冒泡排序main(){intainti,j,tprintf(“inputnumbers:n”)for(i=i<i)scanf(“d”,ai)printf(“n”)for(j=j<j){for(i=i<ji){if(ai>ai){t=aiai=aiai=t}}}printf(“thesortednumbers:n”)for(i=i<i)printf(“d”,ai)}二维数组的定义和引用二维数组的定义和引用二维数组的定义二维数组定义的一般形式:类型说明符数组名常量表达式常量表达式例:floata,b此句定义了一个名为a的行列的实数数组和一个名为b的行列的实数的数组。注意:不能写成:floata,,b,在C语言中可以把二维数组看成特殊的一维数组即把把一行看成一个元素这些特殊的元素组成以一个特殊的一维数组。比如:我们可以把二维数组a看成一个由a,a,a元素组成的数组每个元素又由四个元素组成例如a由a,a,a,a组成。二维数组的存放顺序:在C语言中二维数组中的元素是按行存放的。例如:a的存放形式为二维数组是多维数组的基础。其它多维数组的定义和元素存放形式类似二维数组。二维数组的引用二维数组的引用二维数组的元素的表示形式为:数组名下标下标例如:a表示的是a二维数组的第行第列的元素。此处我们要特别注意下标不要超界。注意:)下标可以是整型表达式如a*)不能写成a,的形式二维数组的初始化二维数组的初始化()按行给二维数组赋初值。例如:inta={{,,,},{,,,},{,,,}}()可以将所有数据写在一个花括号内系统将按数组排列顺序对各元素赋初值。例如:inta={,,,,,,,,,,,}()可以对部分元素赋初值。例如:inta={{},{},{}}它的作用是只对每行第一列赋初值其他元素自动为结果为:也可以对各行中的某一元素赋初值其他元素自动为:inta={{},{,},{,,}}结果为:()如果对全部元素都赋初值则定义数组时对第一维的长度可以不指定但第二维的长度不能省。例如:inta={,,,,,,,,,,,}可以写成:inta={,,,,,,,,,,,}二维数组程序举例二维数组程序举例例将二维数组行和列元素互换存到另一个二维数组中。main(){inta={{,,},{,,}}intb,i,jprintf(“arraya:n”)for(i=i<=i){for(j=j<=j){printf(“d”,aij)bji=aij}printf(“n”)}printf(“arrayb:n”)for(i=i<=i){for(j=j<=j)printf(“d”,bij)printf(“n”)}}例有一个X的矩阵要求编程求出其中最大的那个元素的值以及其所在的行号和列号main(){inti,j,row=,colum=,maxinta={{,,,},{,,,},{,,,}}max=afor(i=i<=i){for(j=j<=j){if(aij>max){max=aijrow=icolum=j}}printf(“max=d,row=d,colum=dn”,max,row,colum)}字符数组字符数组字符数组的定义字符数组的定义类似前面的数组定义。例如:charcc=‘S’c=‘U’c=‘S’c=‘E’上句的作用为:定义C为字符数组包含个元素。赋值后的状态为:在C语言中字符型和整型是互相通用的因此上述定义句可以写为:intc也可以定义和初始化一个二维字符数组方法类似前述。例如:chardiamond={{‘’,‘’,‘*’},{‘’,‘*’,‘’,‘*’},{‘*’,‘’,‘’,‘’,‘*’},{‘’,‘*’,‘’,‘*’},{‘’,‘’,‘*’}}字符数组的引用可以引用字符数组中的一个元素得到一个字符。例输出一个字符串main(){charc={‘I’,‘’,‘a’,‘m’,‘’,‘a’,‘’,‘b’,‘o’,‘y’}intifor(i=i<i)printf(“c”,ci)printf(“n”)}例输出一个main(){chardiamond={{‘’,‘’,‘*’},{‘’,‘*’,‘’,‘*’},{‘*’,‘’,‘’,‘’,‘*’},{‘’,‘*’,‘’,‘*’},{‘’,‘’,‘*’}}inti,jfor(i=i<i){for(j=j<j)printf(“c”,diamondij)printf(“n”)}}运行结果为:********字符串和字符结束标志在C语言中将字符串作为字符数组来处理。为了测定字符串的实际长度C语言规定了一个“字符结束标志”以字符‘’代表由它前面的字符组成字符串。系统字符串常量也自动加一个‘’作为结束符。例如“CProgram”共有个字符但在内存中占个字节最后一个字节‘’是由系统自动加上的。结束标志不会产生附加的操作或增加有效字符只起一个供辨别的标志。另一种方法用字符串常量来使字符数组初始化。例如charc={“Iamhappy”}也可以省略花括弧直接写成charc=“Iamhappy”(注意字符串的两端是用双引号而不是单引号括起来的)。注意:上述字符串占用的空间长度是而不是。因为字符串常量的最后由系统加上一个‘’。上述的初始化与下面的初始化等价。charc={‘I’,‘’,‘a’,‘m’,‘’,‘h’,‘a’,‘p’,‘p’,‘y’,‘’}而不与下面的等价:charc={‘I’,‘’,‘a’,‘m’,‘’,‘h’,‘a’,‘p’,‘p’,‘y’}前者的长度为后者的长度为。需要说明的是:字符数组并不要求它的最后一个字符为’’甚至可以不包含’’像以下这样写完全是合法的charc={‘C’,‘h’,‘i’,‘n’,‘a’}是否需要加上’’,完全根据需要决定。系统对字符串常量自动加上一个’’因此为了使处理方法一致便于测定字符串的实际长度以及在程序中作相应的处理在字符数组也常常人为加上一个’’如:charc={‘C’,‘h’,‘i’,‘n’,‘a’,‘’}字符数组的输入输出字符数组的输入输出字符数组的输入输出可以有两种方法:()逐个字符输入输出。用格式符“c”输入或输出一个字符。如:main(){charc={‘I’,‘’,‘a’,‘m’,‘’,‘a’,‘’,‘b’,‘o’,‘y’}intifor(i=i<i)printf(“c”,ci)printf(“n”)}()将整个字符串一次输入或输出。用“s”格式符。如:charc={“china”}printf(“s”,c)注意:输出字符不包括结束符’’用“s”格式符输出字符串时printf函数中的输出项是字符数组名而不是字符元素名。比如不能写成:printf(“s”,c)正确写法为:printf(“s”,c)如果数组长度大于字符串实际长度也只输出到遇’结束。如果一个字符数组中含一个以上的’’则遇到第一个’’输出就结束。、可以用scanf函数输入一个字符串例如:scanf(“s”,c)注意:scanf函数中输入项如果是字符数组名不能再加地址因为C程言中数组名代表该数组的起始地址(首地址)。字符串处理函数字符串处理函数在C的函数库中提供了一些用来处理字符串的函数使用方便。几乎所有版本的C都提供这些函数。下面是几种常用的函数。puts(字符数组)作用:将一个字符串(以’’结束的字符序列)输出到终端。puts函数用的不多。puts函数输出字符串中可以包含转义字符。gets(字符数组)作用:从终端输入一个字符串到字符数组并且得到一个函数值。该函数值是字符数组的起始地址。如执行下面的函数:gets(str)从键盘输入:Computer将输入的字符串”Computer”送给字符数组str(请注意送给数组的共有个字符而不是个字符)函数值为字符数组str的起始地址。注意:用puts和gets函数只能输入或输出一个字符串strcat(字符数组,字符数组)作用是:连接两个字符数组中的字符串把字符串接到字符串的后面结果放在字符数组中函数调用后得到一个函数值字符数组的地址。例如:charstr={“People’sRepubnicof”}charstr={“China”}printf("s",strcat(str,str))输出:People’sRepublicofChina连接前后的状况见下图所示。说明:()字符数组必须足够大以便容纳连接后的新字符串。()连接前两个字符串的后面都有一个’’连接时将字符串后面的’’取消只在新串最后保留一个’’。strcpy(字符数组字符串)作用:将字符串复制到字符数组中去例如:charstr,str={“China”)strcpy(strl,str)执行后,str的状态如图所示。说明:()字符数组必须定义得足够大长度不应小于字符串的长度()“字符数组”必须写成数组名形式(如str)“字符串”可以是字符数组名也可以是一个字符串常量。如:strcpy(str,“China”)()复制时连同字符串后面的’’一起复制到字符数组中。()不能用赋值语句将一个字符串常量或字符数组直接给一个字符数组。下面两行都是不合法的:str={“China”}str=str而只能用strcpy函数处理。用赋值语句只能将一个字符赋给一个字符型变量或字符数组元素。()可以用strncpy函数将字符串中前面n个字符复制到字符数组中去。例如:strncpy(str,str,)strcmp(字符串字符串)作用:比较字符串和字符串。例如:strcmp(str,str)strcmp(”China”,”Korea”)strcmp(str,“Beijing”)字符串比较规则:对两个字符串自左至右逐个字符相比。按ASCII码值大小比较直到出现不同的字符或遇到“\“为止。如全部字符相同则认为相等若出现不相同的字符则以第一个不相同的字符的比较结果为准。例如:“A”<“B”,“computer”>“compare”,“CHINA”>“CANADA”比较的结果由函数值带回。()如果字符串=字符串函数值为()如果字符串>字符串函数值为一正整数。()如果字符串<字符串函数值为一负整数。注意:对两个字符串比较不能用以下形式if(str==str)printf(“yes”)而只能用if(strcmp(str,str)==)printf(“yes”)strlen(字符数组)作用:测试字符串长度的函数·函数的值为字符串中的实际长度不包括‘\’在内。如:charstr=“china”printf(“d”,strlen(str))输出结果不是也不是而是。也可以直接测字符串常量的长度如strlen(“china”)strlwr(字符串)作用是将字符串中的大写字母换成小写字母。strupr(字符串)作用是将字符串中的小写字母换成大写字母。强调:库函数并非C语言本身的组成部分而是人们为使用方便而编写、提供大家使用的公共函数·时系统捉供的函数数量和函数名、函数功能都不尽相同使用时要小心心要时查一下库函数手册。当然有一些基本的函数。(包括函数名和函数功能)不同的系统所提供的是相同的这就为程序的通用性提供了基础。字符数组应用举例字符数组应用举例例输入一行符统计其中有多少个单词单词之间用空格分隔开·解题的思路:单词间的数目由空格出现的次数决定(连续的空格做为出现一次空格开头的空格不统计在内)如果测出某一个字符为非空格而它的前面的字符是空格则表示“新的单词开始”此时使num(单词数)累加.如果当前字符为非空格而其前面的字符也是非空格则意味着仍然是原来那个单词的继续num不应再累加.前面一个字符是否空格可以从一个标志变量word的值看出若word=则表示前一个字符是空格如果word=,则意味前一个字符为非空格。程序中变量i作为循环变量num用来统计单词个数word作为单词的标志算法见下图:#include<stdioh>main(){charstringinti,num=,word=charcgets(string)for(i=(c=stringi)!=‘’i){if(c==‘‘){word=}elseif(word==){word=num}}printf(“Therearedwordsinthelinen”,num)}例有个字符串要求找出其中最大者。今设一个二维的字符数组str大小为X即有行列每一行可以容纳个可以把str,str,str看作个一维字符数组可以把它们如同一维数组那样进行处理可以用gets函数分别读入。经过二次比较可以得到最大者把它放入一维数组string中。main(){charstringcharstrintifor(i=i<i)gets(stri)if(strcmp(str,str)>)strcpy(string,str)elsestrcpy(string,str)if(strcmp(str,string)>)strcpy(string,str)printf(“nthelargeststringis:nsn”,string)}

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/40

07_第07章 数组

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利