第九章 T9 数组和字符串.ppt_第1页
第九章 T9 数组和字符串.ppt_第2页
第九章 T9 数组和字符串.ppt_第3页
第九章 T9 数组和字符串.ppt_第4页
第九章 T9 数组和字符串.ppt_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

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

文档简介

1、数组和字符串,第九章,2012年2月22日星期三,回顾,循环嵌套 break语句 continue语句,2012年2月22日星期三,目标,数组的概念 一维数组与应用 二维数组与应用 字符串与数组,2012年2月22日星期三,数组的概念,为什么使用数组 学生成绩的排序与查询 如何存放一串字符 这些数据的特点是: 具有相同的数据类型 使用过程中需要保留原始数据 实质:内存中一片连续的存储空间,并且在其中只能存放同一种数据类型的数据,C语言为这些数据,提供了一种构造数据类型:数组。所谓数组就是一组具有相同数据类型的数据的有序集合。,2012年2月22日星期三,数组的分类,数组的概念,stu234 表

2、示有2张表,每张 都是3行4列,一行数据 Rate0=1.5,一张表 Stu10=92,2012年2月22日星期三,一维数组与应用,一维数组定义格式 类型说明符 数组名常量表达式; 例如: int arr6; 表示定义了一个整型数组,数组名为arr,该数组有个元素 说明:( 1)int: 类型说明符,规定了数组中每个元素都为int 类型 ()arr: 数组名,定名规则和变量名相同,遵循标识符定名规则 ():常量表达式,说明该数组元素的个数为,2012年2月22日星期三,注意: 在定义数组时,需要指定数组中元素的个数,方括弧中的常量表达式用来表示元素的个数,即数组长度。 定义数组的时候,常量表达

3、式中可以包括常量和符号常数,但不能包含变量。也就是说,C语言不允许对数组的大小作动态定义,即数组的大小不依赖于程序运行过程中变量的值。,一维数组与应用,例如: int n; scanf(“%d,,2012年2月22日星期三,一维数组与应用,()内存为该数组开辟了一段连续的存储空间,存储单元的个数为,每个存储单元用“数组名下标”作为标志,下标从开始。因此最大下标比元素个数少。即 ()“数组名下标”相当于一个普通变量名,可以像普通变量名一样引用其中的数据,对数组元素输入输出,2012年2月22日星期三,一维数组与应用,数组元素的初始化 格式一:int arr6=1,2,3,4,5,6; 说明:()

4、赋值元素用括起来,内的元素称为初值列表 ()各元素用逗号隔开 ()初始元素的个数不能超出数组的长度,arr0,arr1,arr2,arr3,arr4,arr5,5,4,3,1,2,6,2012年2月22日星期三,格式二:int arr6=1,2; 说明:初始元素的个数小于数组长度时,未指定值的数组元素自动填充。数值类型填充,字符类型填充空格,1,2,0,0,0,0,一维数组与应用,2012年2月22日星期三,格式三:int a=1,2,3,4,5,6; 等价于 int a6=1,2,3,4,5,6; 说明:如果数组在定义时对它的元素全部赋值,可以省略数组长度,但是如果没有为数组变量赋初值,则在

5、定义数组变量时不能省略数组的大小。 注意:除了在定义数组变量时用初值列表为数组赋值外,不能对数组变量做整体赋值,下面的用法是错误的: int a6; a=1,2,3,4,5,6;或者a=1,2,3,4,5,6;,一维数组与应用,2012年2月22日星期三,一维数组在内存中的存放 定义数组后,内存会为该数组开辟一段连续的存储空间,对数组初始化,初值列表按顺序存入该数组中,则首先要找到该数组的起始地址,即第一个存储单元的地址。也称为数组的首地址 例:int a10; 该数组有10个存储单元,第一个存储单元的地址为 for(i=0;i=9;i+)/输入 scanf(“%d”, ,一维数组与应用,20

6、12年2月22日星期三,实型:main() float a10; int i; for(i=0;i=9;i+)/输入 scanf(“%f”, ,一维数组与应用,2012年2月22日星期三,字符型:main() char a10; int i; for(i=0;i=9;i+)/输入 scanf(“%c”, ,一维数组与应用,2012年2月22日星期三,注意:()输入数据时,逐个输入,用回车结束输入.对于整型和实型数组,可使用空格、TAB、回车作为间隔符。字符型数组根据输入格式决定输入方式(空格也是字符)。 ()如果所赋的值有某种规律,可使用表达式完成赋值,不用输入函数 例:数组中存放自然数、奇数

7、、偶数,一维数组与应用,2012年2月22日星期三,例:数据检索:查找最大(小)值 main() int a10,i,max; for(i=0;i=9;i+) /循环输入10个数 scanf(“%d”, ,一维数组与应用,2012年2月22日星期三,例3:数据插入: (将输入的数据插在指定位置之前) 算法: 输入插入位置(元素下标) 插入位置后的各数组元素逐个后移 输入插入的数据 例4:数据删除:删除指定位置(下标)的数据 算法: 输入删除位置(元素下标) 删除位置后的各数组元素逐个前移 例5:数据修改:修改指定位置(下标)的数据 算法: 输入修改位置(元素下标) 输出该位置的数据 对该位置的

8、元素重新赋值,一维数组与应用,2012年2月22日星期三,一维数组与应用,例6:排序(1)选择法 #include main() int a10; int i,j,t; printf(input 10 numbers :n); for (i=0;i10;i+) scanf(%d,for(i=0;iaj) t=ai;ai=aj; aj=t; printf(the sorted numbers :n); for(i=0;i10;i+) printf(%d ,ai); printf(n); ,2012年2月22日星期三,一维数组与应用,例6:排序(2)起泡法 #include main() int

9、a10; int i,j,t; printf(input 10 numbers :n); for (i=0;i10;i+) scanf(%d,for(i=0;iaj+1) t=aj;aj=aj+1; aj+1=t; printf(the sorted numbers :n); for(i=0;i10;i+) printf(%d ,ai); printf(n); ,2012年2月22日星期三,二维数组定义格式 类型说明符 数组名常量表达式1常量表达式2 ; 例如: int a34; 表示定义了一个整型数组,数组名为a,该数组有3行4列,12个元素 说明:()int: 类型说明符,规定了数组中每个

10、元素都为int 类型 ()a: 数组名,定名规则和变量名相同,遵循标识符定名规则 ()3和4:常量表达式,说明该数组元素的个数为3*4个,二维数组与应用,2012年2月22日星期三,二维数组与应用,(4)内存为该数组开辟了一段连续的存储空间,存储单元的个数为12,每个存储单元用“数组名行下标列下标”作为标志,行下标和列下标都从开始。其逻辑结构如下,2012年2月22日星期三,(5)“数组名行下标列下标”相当于一个普通变量名,可以像普通变量名一样引用其中的数据 (6)实质:在内存中同一维数组一样占一系列连续的存储单元,按行存放。即先顺序存放第一行的元素,再存放第二行的元素,二维数组与应用,a34

11、数组存放的顺序,2012年2月22日星期三,地址 值 数组元素,a00 a01 a02 a10 a11 a12,12ff68 12ff6c 12ff70 12ff74 12ff78 12ff7c,例如:整型数组 a23= 1,2,3, 4,5,6;,1 2 3,4 5 6,二维数组与应用,2012年2月22日星期三,我们可以把二维数组看作是一种特殊的一维数组:它的元素又是一个一维数组。 例如:可以把a看作是一个一维数组,它有3个元素:a0、a1、a2,每个元素又是一个包含4个元素的一维数组。 a0、a1、a2 可看作每行的数组名,即每行的首地址 a = a0 = 格式二:可以将所有数据写在一个

12、花括号内,同一维数组一样。此时按数组排列的顺序对各元素赋初值。 例如: int a34=1,2,3,4,5,6,7,8,9,10,11,12;,二维数组与应用,2012年2月22日星期三,格式三:可以对部分元素赋初值。未赋值元素自动补0 例如:int a34=1,5,9;,1 0 0 0 5 0 0 0 9 0 0 0,也可以对各行中的某一元素赋初值,如 int a34=1,0,6,0,0,11;,1 0 0 0 0 6 0 0 0 0 11 0,1 0 0 0 5 6 0 0 0 0 0 0,也可以只对某几行元素赋初值。如: int a34=1,5,6;,二维数组与应用,2012年2月22日

13、星期三,格式四:如果对全部元素都赋初值,则定义数组时对第一维的长度可以不指定,但第二维的长度不能省。 例如:int a34=1,2,3,4,5,6,7,8,9,10,11,12;它等价于:int a4=1,2,3,4,5,6,7,8,9,10,11,12;,在定义时也可以只对部分元素赋初值而省略第一维的长度,但应分行赋初值。 例如:int a4=0,0,3,0,10;,0 0 3 0 0 0 0 0 0 10 0 0,二维数组与应用,2012年2月22日星期三,二维数组基本操作 对二维数组操作常采用嵌套循环,由于二维数组在内存中是按行存储的,一般常把二维数组的行下标作为外循环的控制变量,把列下

14、标作为内循环的控制变量。,二维数组与应用,2012年2月22日星期三,二维数组的输入输出 main() int a34,i,j; for(i=0;i3;i+) /输入 for(j=0;j4;j+) scanf(%d, ,二维数组与应用,2012年2月22日星期三,二维数组与应用,将一个二维数组行和列元素互换,存到另一个二维数组中。,分析 b00 = a00 b10 = a01 b20 = a02 b01 = a10 b11 = a11 b21 = a12,array a: 1 2 3 4 5 6 array b: 1 4 2 5 3 6,2012年2月22日星期三,二维数组与应用,有一个34的

15、矩阵,要求编程序求出其中值最大的那个元素的值,以及其所在的行号和列号 #include main() int i,j,row=0,colum=0,max; int a34=1,2,3,4, 9,8,7,6, -10,10,-5,2; max=a00;,for (i=0;imax) max=aij; row=i; colum=j; printf(max=%d, row=%d, colum=%dn, max,row,colum); ,2012年2月22日星期三,二维数组与应用,假设有一个5行5列的数组score55,要求输入5行3列的数据后,求出每行的和与平均值 解题步骤 输入5行3列的数据 求出

16、每行的和与平均值 将和与平均值存入数组 输出所有数据,和,平均,2012年2月22日星期三,字符串,一、字符串与字符数组的关系 1、字符串组成:由双引号引起来的一串字符组成 例:”student” “123” “a” “good” 2、字符串存放:C规定字符串要存放在字符型数组中 char array10=“good”; 3、 字符串结束标志:C规定字符串以0作为字符串的结束标志 例:字符串”good”在内存中的存放 注:字符串占用的内存要比实际字符多一个字节,2012年2月22日星期三,4、字符串与字符数组的区别 字符数组并不要求它的最后一个字符为0,甚至可以不包含0。 例如:char c5

17、=C,h,I,n,a; 但是由于系统对字符串常量自动加一个0 。因此,为了使处理方法一致,在字符数组中也常人为地加上一个0 。 例如:char c6=C,h,I,n,a,0; 等价于 char c6=“china”; /系统自动给字符串加0,字符串,2012年2月22日星期三,二、字符串定义与初始化 1、定义:char 数组名常量表达式; 例:char string6; 2、初始化: 格式一:char string6=“hello”; 格式二:char string6=“hello”; 格式三:char string=“hello”; 注: 定义数组长度时要大于字符串实际字符的个数 0不需要人

18、为添加,系统会自动添加,字符串,2012年2月22日星期三,三、字符串的输入输出 1、格式输入输出 scanf(“%s”,输入字符的起始位置); printf(“%s”,输出字符的起始位置); 例: char string15; scanf(“%s”,string); /从首地址开始输入 printf(“%s”,string); /从首地址开始输出 /string 等价于 gets(s); puts(s);,字符串,2012年2月22日星期三,四 字符串函数 1、strcmp(字符串1,字符串2); 功能:比较字符串1和字符串2,比较的结果由函数值带回。 (1) 如果字符串1=字符串2,函数值

19、为0。 (2) 如果字符串1字符串2,函数值为一正整数。 (3) 如果字符串1字符串2,函数值为一负整数。 参数:字符串1和字符串2可以是字符型数组名或字符串常数 例:int i; i=strcmp(“jinan”,”laiwu”); printf(“%d”,i);,字符串,2012年2月22日星期三,字符串,注意: (1)比较时依次对字符串1和字符串2对应位置上的字符逐对进行比较当出现第一对不相同字符时,就以它们ASCII码值的大小决定字符串的大小,(2)对于字符串的比较统一使用strcmp(s1,s2),不使用关系运算符(,=),2012年2月22日星期三,2、strlen(字符串); (

20、1)功能:求字符串长度函数,即字符串中实际字符的个数,不包括0 (2)参数:参数可以是字符型数组名或字符串常数. 例1:char s10=“hello”; printf(“%d”,strlen(s); 例2: printf(“%d”,strlen(”hello”);,字符串,2012年2月22日星期三,3、strcpy(字符串1,字符串2); (1)功能:将字符串2复制到字符串1中,函数返回字符串1. (2)参数:字符串1必须是字符型数组名,字符串2可以是字符 型数组名或字符串常量 例1:char s110,s2=“hello”; strcpy(s1,s2); puts(s1); 例2: ch

21、ar s110; strcpy(s1,”thanks”); puts(s1);,字符串,2012年2月22日星期三,注:使用strcpy的注意事项 (1)字符数组1必须定义得足够大,以便容纳被复制的字符 串。字符数组1的长度不应小于字符串2的长度。 (2)复制时连同字符串后面的0一起复制到字符数组1中。 4、strcat(字符串1,字符串2); 功能:将字符串2连接到字符串1的末尾,连接时将字符 串1末尾的0覆盖 参数:字符串1必须是字符型数组名,字符串2可以是字符 型数组名或字符串常量,字符串,2012年2月22日星期三,例1:char s150=“good good study”; char s2=“day day up”; strcat(s1,s2); puts(s1

温馨提示

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

评论

0/150

提交评论