您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 《C语言程序设计与数据结构》课件第07章数组
C语言程序设计与数据结构第7章数组C语言程序设计与数据结构要求:掌握一维数组的定义及应用;掌握二维数组的的定义及应用应用;掌握字符数组及字符串处理函数的应用;掌握数组在函数中的应用及常用的查找、排序方法。重点:一维数组及二维数组的应用;数组在函数中的应用及常用的排序方法。C语言程序设计与数据结构主要内容7.1一维数组7.2二维数组7.3字符数组7.4数组在函数中的应用7.5折半查找7.6数组元素排序7.7典型习题分析解答C语言程序设计与数据结构7.1一维数组7.1.1一维数组的定义与初始化7.1.1.1一维数组的定义一维数组的定义格式为:类型说明符数组名[常量表达式];说明:(1)数组的类型指数组元素的取值类型。对于上例,即说明该数组a中的10个元素都是整型。(2)数组名必须是合法标识符,也就是说必须符合标识符的命名规则;(3)数组名不能与同一程序中的其它变量同名;(4)若用方括号中的整数n来表示数组元素的总数,则数组的第一个元素的下标为0(称为数组下标的下界),最后一个为n-1(称为数组下标的上界)。对于上例,数组中含有10个元素,分别是:a[0],a[1],a[2],……,a[9]。(5)不能在方括号中用变量来表示元素的个数。(6)允许在同一个说明中,说明相同类型的多个数组和多个变量。(7)可以使用在编译预处理#define中定义的符号常量。C语言程序设计与数据结构7.1.1.2一维数组的初始化初始化赋值的一般形式为:类型说明符数组名[常量表达式]={值,值……值};其中在{}中的各数据值即为各元素的初值,各值之间用逗号间隔。例如:inta[10]={0,1,2,3,4,5,6,7,8,9};说明:(1)可以只给部分元素赋初值。当{}中值的个数少于元素个数时,只给前面部分元素赋值。例如:inta[10]={0,1,2,3,4};表示只给a[0]~a[4]这5个元素赋值,而后5个元素自动赋0值。(2)能给元素逐个赋值,但不能给数组整体赋值。例如给十个元素全部赋1值,只能写为:inta[10]={1,1,1,1,1,1,1,1,1,1};而不能写为:inta[10]=1;(3)如给全部元素赋值,则在数组说明中,可以不给出数组元素的个数。例如:inta[5]={1,2,3,4,5};可写为:inta[]={1,2,3,4,5};C语言程序设计与数据结构7.1.2一维数组元素的引用数组元素引用的一般形式为:数组名[下标]其中的下标只能为整型常量或整型表达式。如果为小数时,C编译将自动取整。例如,a[6],b[i+j],b[i++]都是合法的数组元素。数组元素通常也称为下标变量。必须先定义数组,才能使用下标变量。在C语言中只能逐个地使用下标变量,而不能一次引用整个数组。例如,单独使用一个下标变量:inta[10];a[7]=6;C语言程序设计与数据结构7.1.3一维数组元素的赋值数组定义之后,如果不对其进行初始化,则其值可通过赋值语句获或者可从键盘、文件等读取获得。现以从键盘接收数据为例:【例7.1】从键盘输入十个数据给数组a赋值,然后把数组a的值复制到数组b中。main(){inta[10],b[10],i;for(i=0;i10;i++)scanf(%d,&a[i]);for(i=0;i10;i++)b[i]=a[i];for(i=0;i10;i++)printf(%d,b[i]);}C语言程序设计与数据结构7.1.4顺序查找顺序查找即为从数组的一端开始,逐个进行数组元素的值和给定值x的比较,若某个元素的值和给定值x相等,则查找成功;反之,若直至最后一个数组元素,其值和给定值x都不相等,则表明数组中没有所查的数据,查找不成功。【例7.2】已知存放在a数组中的数据两两不相同,在a数组中查找和x值相同的元素的位置。若找到,输出该值和其在a数组中的位置;若没找到,输出相应的提示信息。#defineN100main(){inta[N],x,n,i,flag=-1;printf(Inputn:\n);scanf(%d,&n);for(i=0;in;i++)scanf(%d,&a[i]);printf(Inputx:\n);scanf(%d,&x);C语言程序设计与数据结构for(i=0;in;i++)if(a[i]==x){flag=i;break;}if(flag!=-1)printf(%dindexis%d,x,flag+1);elseprintf(%ddonntbefounded!\n,x);对于上例,也可以通过设监视哨的方法对数组倒着查找,代码见课本。C语言程序设计与数据结构7.2二维数组二维数组:数组元素是双下标变量的数组。二维数组的数组元素可以看作是排列为行列的形式(矩阵)。二维数组也用统一的数组名标识,第一个下标表示行,第二个下标表示列。下标从0开始。7.2.1二维数组的定义与初始化7.2.1.1二维数组的定义二维数组定义的一般形式是:类型说明符数组名[常量表达式1][常量表达式2];其中常量表达式1表示第一维下标的长度,常量表达式2表示第二维下标的长度。例如:inta[3][4];说明了一个三行四列的数组,数组名为a,其下标变量的类型为整型。该数组的下标变量共有3×4个,即:a[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]如何在一维存储器中存放二维数组,可有两种方式:一种是按行排列,即放完一行之后顺次放入第二行。另一种是按列排列,即放完一列之后顺次放入第二列。在C语言中,二维数组是按行排列的。C语言程序设计与数据结构7.2.1.2二维数组的初始化二维数组可按行分段赋值,也可按行连续赋值。二维数组的初始化的几种常见形式:(1)分行给二维数组所有元素赋初值例如:inta[2][4]={{1,2,3,4},{5,6,7,8}};(2)不分行给二维数组所有元素赋初值例如:inta[2][4]={1,2,3,4,5,6,7,8};(3)给二维数组所有元素赋初值,二维数组第一维的长度可以省略(编译程序可计算出长度)例如:inta[][4]={1,2,3,4,5,6,7,8};或:inta[][4]={{1,2,3,4},{5,6,7,8}};(4)对部分元素赋初值例如:inta[2][4]={{1,2},{5}};C语言程序设计与数据结构7.2.2二维数组元素的引用定义了二维数组后,就可以引用该数组的所有元素。引用形式:数组名[下标1][下标2]例如:a[1][2]表示a数组第二行第三列的元素。下标变量和数组说明在形式中有些相似,但这两者具有完全不同的含义。数组说明的方括号中给出的是某一维的长度,即可取下标的最大值;而数组元素中的下标是该元素在数组中的位置标识。C语言程序设计与数据结构7.2.3二维数组元素的赋值同一维数组一样,若二维数组定义之后,不对其进行初始化,则其值可通过赋值语句获得,或者可从键盘、文件等读取获得。现以从键盘接收数据为例:【例7.3】通过键盘给3×3的二维数组输入数据,第一行赋1,2,3,第二行赋10,20,30,第三行输入100,200,300,然后输出此二维数组。main(){inta[3][3],i,j;for(i=0;i3;i++)for(j=0;j3;j++)scanf(%d,&a[i][j]);for(i=0;i3;i++){for(j=0;j3;j++)printf(%4d,a[i][j]);printf(\n);}}C语言程序设计与数据结构7.3字符数组用来存放字符型数据的数组称为字符数组。字符数组中的一个元素存放一个字符。7.3.1字符数组的定义、初始化字符数组的定义与前面介绍的数值数组定义相同。其定义格式为:char数组名[下标总数];例如:charc[10]={‘c’,‘’,‘p’,‘r’,‘o’,‘g’,‘r’,‘a’,’m’};赋值后各元素的值为:c[0]的值为‘c’,c[1]的值为‘’,c[2]的值为‘p’,……,c[8]的值为‘m’,其中c[9]未赋值,系统自动赋予’\0’值。当对全体元素赋初值时也可以省去长度说明。例如:charc[]={‘c’,‘’,‘p’,‘r’,‘o’,‘g’,‘r’,‘a’,’m’};这时C数组的长度自动定为9。另外,我们还可以将一个字符串赋给一个字符数组。字符串,是指若干有效字符的序列。如:”a”,”abc”。注意:由于系统在存储字符串常量时,会在串尾自动加上1个结束标志,所以无需人为地再加1个。C语言程序设计与数据结构7.3.2字符串处理函数字符串标准函数的原型在头文件string.h中。1.输出字符串──puts()函数(1)调用方式:puts(字符数组)(2)函数功能:把字符数组中所存放的字符串,输出到标准输出设备中去,并用‘\n’取代字符串的结束标志‘\0’。所以用puts()函数输出字符串时,不要求另加换行符。(3)使用说明:①字符串中允许包含转义字符,输出时产生一个控制操作。②该函数一次只能输出一个字符串,而printf()函数也能用来输出字符串,且一次能输出多个。【例7.5】下列程序的输出结果是:#includestdio.hmain(){charc[]=BASIC\ndBASE;puts(c);}运行结果为:BASICdBASEC语言程序设计与数据结构2.输入字符串──gets()函数(1)调用方式:gets(字符数组)(2)函数功能:从标准输入设备(stdin)──键盘上,读取1个字符串(可以包含空格),并将其存储到字符数组中去。(3)使用说明1)gets()读取的字符串,其长度没有限制,编程者要保证字符数组有足够大的空间,存放输入的字符串。2)该函数输入的字符串中允许包含空格,而在scanf()函数中使用%s接收字符串时,空格做为字符串的结束标志。【例7.6】#includestdio.hmain(){charst[15];printf(inputstring:\n);gets(st);puts(st);}输入:cprogram显示:cprogramC语言程序设计与数据结构3.字符串比较──strcmp()函数(1)调用方式:strcmp(字符串1,字符串2)其中“字符串”可以是串常量,也可以是1维字符数组。(2)函数功能:比较两个字符串的大小。如果:字符串1=字符串2,函数返回值等于0;字符串1字符串2,函数返回值负整数;字符串1字符串2,函数返回值正整数。(3)使用说明①如果一个字符串是另一个字符串从头开始的子串,则母串为大。②不能使用关系运算符“==”来比较两个字符串,只能用strcmp()函数来处理。【例7.7】#includestring.hmain(){intk;charst1[15],st2[]=CLanguage;printf(inputastring:\n);gets(st1);k=strcmp(st1,st2);if(k==0)printf(st1=st2\n);if(k0)printf(st1st2\n);if(k0)printf(st1st2\n);}C语言程序设计与数据结构4.拷贝字符串──strcpy()函数(1)调用方式:strcpy(字符数组1,字符数组2)(2)函数功能:将“字符数组2”完整地复制到“字符数组1”中,字符数组中原有内容被覆盖。(3)使用说明:①字符数组必须定义得足够大,以便容纳复制过来的字符串。复制时,连同结束标志'\0'一起复制。②不能用赋值运算符“=”将一个字符串直接赋值给一个字符数组,只能用strcpy()函数来处理。【例7.8】#includestring.hmain(){charst1[15],st2[]=CLanguage;strcpy(st1,st2);puts(st1);printf(\n);}运行结果为:CLanguageC语言程序设计
本文标题:《C语言程序设计与数据结构》课件第07章数组
链接地址:https://www.777doc.com/doc-3375443 .html