《C语言程序设计与数据结构》课件第07章.ppt
《《C语言程序设计与数据结构》课件第07章.ppt》由会员分享,可在线阅读,更多相关《《C语言程序设计与数据结构》课件第07章.ppt(39页珍藏版)》请在三一文库上搜索。
1、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 一维数组的定义 一维数组
2、的定义格式为: 类型说明符 数组名 常量表达式; 说明: (1) 数组的类型指数组元素的取值类型。对于上例,即说明该数组a中的10个元素都是整型。 (2) 数组名必须是合法标识符,也就是说必须符合标识符的命名规则; (3) 数组名不能与同一程序中的其它变量同名; (4) 若用方括号中的整数n来表示数组元素的总数,则数组的第一个元素的下标为0(称为数组下标的下界),最后一个为n-1(称为数组下标的上界)。对于上例,数组中含有10个元素,分别是:a0,a1,a2,a9。 (5) 不能在方括号中用变量来表示元素的个数。 (6) 允许在同一个说明中,说明相同类型的多个数组和多个变量。 (7) 可以使用
3、在编译预处理#define中定义的符号常量。,C语言程序设计与数据结构,7.1.1.2 一维数组的初始化,初始化赋值的一般形式为: 类型说明符 数组名常量表达式=值,值值; 其中在 中的各数据值即为各元素的初值,各值之间用逗号间隔。 例如: int a10= 0,1,2,3,4,5,6,7,8,9 ; 说明: (1)可以只给部分元素赋初值。 当 中值的个数少于元素个数时,只给前面部分元素赋值。 例如: int a10=0,1,2,3,4; 表示只给a0a4这5个元素赋值,而后5个元素自动赋0值。 (2)能给元素逐个赋值,但不能给数组整体赋值。 例如给十个元素全部赋1值,只能写为: int a1
4、0=1,1,1,1,1,1,1,1,1,1; 而不能写为: int a10=1; (3)如给全部元素赋值,则在数组说明中, 可以不给出数组元素的个数。 例如: int a5=1,2,3,4,5; 可写为: int a=1,2,3,4,5;,C语言程序设计与数据结构,7.1.2 一维数组元素的引用,数组元素引用的一般形式为: 数组名下标 其中的下标只能为整型常量或整型表达式。如果为小数时,C编译将自动取整。例如,a6,bi+j,bi+都是合法的数组元素。 数组元素通常也称为下标变量。必须先定义数组,才能使用下标变量。在语言中只能逐个地使用下标变量,而不能一次引用整个数组。例如,单独使用一个下标变
5、量: int a10; a7=6;,C语言程序设计与数据结构,7.1.3 一维数组元素的赋值,数组定义之后,如果不对其进行初始化,则其值可通过赋值语句获 或者可从键盘、文件等读取获得。现以从键盘接收数据为例: 【例7.1】从键盘输入十个数据给数组a赋值,然后把数组a的值复制到数组b中。 main( ) int a10,b10,i; for(i=0;i10;i+) scanf(“ %d“, ,C语言程序设计与数据结构,7.1.4 顺序查找,顺序查找即为从数组的一端开始,逐个进行数组元素的值和给定值x的比较,若某个元素的值和给定值x相等,则查找成功;反之,若直至最后一个数组元素,其值和给定值x都不
6、相等,则表明数组中没有所查的数据,查找不成功。 【例7.2】已知存放在a数组中的数据两两不相同,在a数组中查找和x值相同的元素的位置。若找到,输出该值和其在a数组中的位置;若没找到,输出相应的提示信息。 #define N 100 main() int aN,x,n,i,flag=-1; printf(“Input n:n“); scanf(“%d“,C语言程序设计与数据结构,for(i=0;in;i+) if(ai=x) flag=i; break; if(flag!=-1) printf(“%d index is %d“,x,flag+1); else printf(“%d donnt b
7、e founded!n“,x); 对于上例,也可以通过设监视哨的方法对数组倒着查找,代码见课本。,C语言程序设计与数据结构,7.2 二维数组,二维数组:数组元素是双下标变量的数组。二维数组的数组 素可以看作是排列为行列的形式(矩阵)。二维数组也用统一的数组名 标识,第一个下标表示行,第二个下标表示列。下标从0开始。 7.2.1 二维数组的定义与初始化 7.2.1.1 二维数组的定义 二维数组定义的一般形式是: 类型说明符 数组名常量表达式1常量表达式2; 其中常量表达式1表示第一维下标的长度,常量表达式2 表示第二维下标的长度。 例如: int a34; 说明了一个三行四列的数组,数组名为a,
8、其下标变量的类型为整型。该数组的下标变量共有34个,即: a00,a01,a02,a03 a10,a11,a12,a13 a20,a21,a22,a23 如何在一维存储器中存放二维数组,可有两种方式:一种是按行排列, 即放完一行之后顺次放入第二行。另一种是按列排列, 即放完一列之后 顺次放入第二列。在语言中,二维数组是按行排列的。,C语言程序设计与数据结构,7.2.1.2 二维数组的初始化,二维数组可按行分段赋值,也可按行连续赋值。 二维数组的初始化的几种常见形式: (1)分行给二维数组所有元素赋初值 例如:int a24=1,2,3,4,5,6,7,8; (2)不分行给二维数组所有元素赋初值
9、 例如:int a24=1,2,3,4,5,6,7,8; (3)给二维数组所有元素赋初值,二维数组第一维的长度可 以省略(编译程序可计算出长度) 例如:int a4=1,2,3,4,5,6,7,8; 或:int a4=1,2,3,4,5,6,7,8; (4)对部分元素赋初值 例如:int a24=1,2,5;,C语言程序设计与数据结构,7.2.2 二维数组元素的引用,定义了二维数组后,就可以引用该数组的所有元素。引用形式: 数组名下标1下标2 例如:a12 表示a数组第二行第三列的元素。 下标变量和数组说明在形式中有些相似,但这两者具有完全不同的含义。数组说明的方括号中给出的是某一维的长度,即
10、可取下标的最大值;而数组元素中的下标是该元素在数组中的位置标识。,C语言程序设计与数据结构,7.2.3 二维数组元素的赋值,同一维数组一样,若二维数组定义之后,不对其进行初始化,则其值可通过赋值语句获得,或者可从键盘、文件等读取获得。现以从键盘接收数据为例: 【例7.3】通过键盘给33的二维数组输入数据,第一行赋1,2,3,第二行赋10,20,30,第三行输入100,200,300,然后输出此二维数组。 main( ) int a33,i,j; for(i=0;i3;i+) for(j=0;j3;j+) scanf(“%d“, ,C语言程序设计与数据结构,7.3 字符数组,用来存放字符型数据的
11、数组称为字符数组。字符数组中的一个元素存放一个字符。 7.3.1 字符数组的定义、初始化 字符数组的定义与前面介绍的数值数组定义相同。其定义格式为: char 数组名下标总数; 例如: char c10=c, ,p,r,o,g,r,a,m; 赋值后各元素的值为:c0的值为c,c1的值为 ,c2的值为p, ,c8的值为m,其中c9未赋值,系统自动赋予0值。 当对全体元素赋初值时也可以省去长度说明。 例如:char c=c, , p, r, o, g, r, a,m; 这时C数组的长度自动定为9。 另外,我们还可以将一个字符串赋给一个字符数组。 字符串,是指若干有效字符的序列。如:”a”,”abc
12、”。 注意:由于系统在存储字符串常量时,会在串尾自动加上1个结束标志,所以无需人为地再加1个。,C语言程序设计与数据结构,7.3.2 字符串处理函数,字符串标准函数的原型在头文件string.h中。 1.输出字符串puts()函数 (1)调用方式:puts(字符数组) (2)函数功能:把字符数组中所存放的字符串,输出到标准输出设备中去,并用n取代字符串的结束标志0。所以用puts()函数输出字符串时,不要求另加换行符。 (3)使用说明: 字符串中允许包含转义字符,输出时产生一个控制操作。 该函数一次只能输出一个字符串,而printf()函数也能用来输出字符串,且一次能输出多个。 【例7.5】下
13、列程序的输出结果是: #include main( ) char c =“BASICndBASE“; puts(c); 运行结果为:BASIC dBASE,C语言程序设计与数据结构,2输入字符串gets()函数 (1)调用方式:gets(字符数组) (2)函数功能:从标准输入设备(stdin)键盘上,读取1个字符串(可以包含空格),并将其存储到字符数组中去。 (3)使用说明 1)gets()读取的字符串,其长度没有限制,编程者要保证字符数组有足够大的空间,存放输入的字符串。 2)该函数输入的字符串中允许包含空格,而在scanf()函数中使用%s接收字符串时,空格做为字符串的结束标志。 【例7.
14、6】 #include main( ) char st15; printf(“input string:n“); gets(st); puts(st); 输入:c program 显示:c program,C语言程序设计与数据结构,3字符串比较strcmp()函数 (1)调用方式:strcmp(字符串1 ,字符串2) 其中“字符串”可以是串常量,也可以是1维字符数组。 (2)函数功能:比较两个字符串的大小。 如果:字符串1=字符串2,函数返回值等于0; 字符串1字符串2,函数返回值正整数。 (3)使用说明 如果一个字符串是另一个字符串从头开始的子串,则母串为大。 不能使用关系运算符“”来比较两
15、个字符串,只能用strcmp() 函数来处理。 【例7.7】 #include main( ) int k; char st115,st2=“C Language“; printf(“input a string:n“); gets(st1); k=strcmp(st1,st2); if(k=0) printf(“st1=st2n“); if(k0) printf(“st1st2n“); if(k0) printf(“st1st2n“);,C语言程序设计与数据结构,4.拷贝字符串strcpy()函数 (1)调用方式:strcpy(字符数组1, 字符数组2) (2)函数功能:将“字符数组2”完整
16、地复制到“字符数组1”中,字符数组中原有内容被覆盖。 (3)使用说明: 字符数组必须定义得足够大,以便容纳复制过来的字符串。复制时,连同结束标志0一起复制。 不能用赋值运算符“”将一个字符串直接赋值给一个字符数组,只能用strcpy()函数来处理。 【例7.8】 #include main( ) char st115,st2=“C Language“; strcpy(st1,st2); puts(st1);printf(“n“); 运行结果为:C Language,C语言程序设计与数据结构,5连接字符串strcat()函数 (1)调用方式:strcat(字符数组, 字符串) (2)函数功能:把
17、“字符串”连接到“字符数组”中的字符串尾端,并存储于“字符数组”中。“字符数组”中原来的结束标志,被“字符串”的第一个字符覆盖,而“字符串”在操作中未被修改。 (3)使用说明 由于没有边界检查,编程者要注意保证“字符数组”定义得足够大,以便容纳连接后的目标字符串;否则,会因长度不够而产生问题。 连接前两个字符串都有结束标志0,连接后“字符数组”中存储的字符串的结束标志0被舍弃,只在目标串的最后保留一个0。 【例7.9】把初始化赋值的字符数组与动态赋值的字符串连接起来。 #include main( ) char st130=“My name is “; /*注意长度为30*/ char st2
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C语言程序设计与数据结构 语言程序设计 数据结构 课件 07
链接地址:https://www.31doc.com/p-2152614.html