jin7第七章数组与字符串.ppt
《jin7第七章数组与字符串.ppt》由会员分享,可在线阅读,更多相关《jin7第七章数组与字符串.ppt(62页珍藏版)》请在三一办公上搜索。
1、2023/11/7,1,第七章 数组与字符串,李 书 涛,2023/11/7,2,目 录,1 一维数组2 多维数组3 字符数组4 字符串处理函数5 字符数组应用实例6 本章小结,第 七 章 数组与字符串,2023/11/7,3,C 中定义了在基本数据类型基础上的构造数据类型(数组,结构体,共同体等)。,变量先定义,再使用,如果变量个数少,且彼此独立时,可以用:int a,b,c;a=5;b=10;c=23;printf(“%d,%d,%d”,a,b,c);,当变量个数比较多,并且有内在的关系时,例如:全班有30个人,每人一个成绩。定义:int a1,a2,a30?不方便!,第七章 数组与字符串
2、,数组的基本概念,2023/11/7,4,数组是一组有序数据的集合。,在这一组有序数据的集合中,各个元素属于同一个类型,用统一的名称标识这一组数,用下标唯一地确定这组数中的每一个值。,数组的特性,2023/11/7,5,数组的三要素,数组,数组是有限个相同数据类型数据分量的有序集合。,相同的数据类型(定义数组时规定),有限的成员个数(定义数组时规定),彼此有序的排列(引用数组元素时的下标),int a5,int a5;a0=1;a1=2;.,1 一维数组,1 一维数组,2023/11/7,6,格式:,类型 标识符 长度;,int a10;,所有元素为同一类型,变量名,即数组名,数组中所含元素的
3、个数,int a10;由10个整数组成的数组,共同拥有数组名:,a,数组长度必须是整型量,int a2*3;,int an,n=10;,一.一维数组的定义,原则,数组必须先定义,再使用。,数组中的元素必须逐一引用。,方法:通过数组名及其元素的下标逐一引用。,定义:类型 数组名N int a10;,引用:数组名下标,下标范围从 0 到 N-1,a0,a1,a9为数组a中的所有元素。,二.一维数组元素的引用,说明,下标表示了元素在数组中的位置下标可以用表达式 a2*3相当于a6,(a6是数组中第?个元素),?,2023/11/7,8,变量在使用之前必须使其有值。,如果没有初值,会怎样?,数组初始化
4、的方法:,在说明语句 int a4;中赋值,称赋初值,又称数组初始化。,可以对静态或外部存储类型的数组进行初始化。,三.一维数组的初始化,如果不赋初值,里面也会有一个不确定值。,2023/11/7,9,数据类型 数组名 常量表达式=初始化数据;,1.定义数组时,对全部元素赋值 int a5=1,2,3,4,5;,用 包括所有初值,用逗号分隔各数值。,2.对部分元素赋值,按顺序给前2个元素赋值,float x5=1.9,2.0;,x0=1.9;x1=2.0;其余元素为,?,若要对数组的全部元素初始化,则可省略数组说明中的大小。int a=1,2,3,4;,在数组说明的同时进行初始化的格式,202
5、3/11/7,10,要求,C规定,只有静态数组(static)才能初始化,(第7章内容),Turbo C中,允许为数组(非静态)初始化。区别:static int a5=1,2,3;后两个元素值为0。int a5=1,2,3;后两个元素为随机数。,int i,a10=1,2,3,4,5,6,7,8,9,10;for(i=0;i10;i+)printf(“%d,”,a i);,通过数组名和下标引用数组中的每一个数据,运行结果:1,2,3,4,5,6,7,8,9,10,初值的个数不能超过定义的数组长度,2023/11/7,11,有一个数组,内有10个数,求出最小的数和它的下标,然后将它与数组中的第
6、一个数对换。,int a10;,a0,a i,a9,i=?,定义两个临时变量 min(保存最小数)和 k(保存下标)。,假定第一个元素就是最小的:min=a0,k=0。,思路,用min与数组中的每一个元素ai比较,若ai比min小,将ai赋给min,将下标i赋给k,否则,继续比较。,实例分析,2023/11/7,12,26,min=a0,i=1i=2i=3i=4i=5i=6i=7i=8i=9,1326 min=a1 k=1,循环,313 min=a2 k=2,683 min和k的值不变,13,3,203 min和k的值不变,13 min=a5,k=5,71 min和k的值不变,1,&min,5
7、31 min和k的值不变,121 min和k的值不变,651 min和k的值不变,min=1k=5,ak=a0a0=min,比 较 过 程,2023/11/7,13,main()int i,a10,min,k;for(i=0;iai)min=ai;k=i;ak=a0;a0=min;for(i=0;i10;i+)printf(“%4d,”,ai);printf(“%d,%dn”,k,min);,循环输入10个数,循环找出最小的,交换数据,输出数组,输出最小值和原始下标,找数程序,2023/11/7,14,当一个一维数组中的每个元素本身又是一个一维数组时,该数组为一个二维数组。,一、二维数组的定义
8、,1.格式:类型 标识符长度1长度2;,2.二维数组元素需要两个下标表示:例:int a34表示数组a中有3行4列共12个数据。,3.二维数组在存储空间中是按行优先存储。,int a34;,行,列,第一行,最后一个元素,矩阵,2 多维数组,2 多维数组,2023/11/7,15,原则:,逐一引用,数组名下标1下标2下标1从0到长度N1-1下标2从0到长度N2-1,方法:,格式:标识符N1N2,int a42,a00.a31共8个数据,(对本例,决不可能有元素a42),三、二维数组的初始化,方法:1.对全部元素赋初值,分行,各用一个 int a23=1,2,3,4,5,6;,二、二维数组的引用,
9、2023/11/7,16,int a23=1,2,3,4,5,6;,1,2,3,4,5,6.,3.对部分元素赋初值,注意区别:,(1)int a23=1,2,3;,(2)int a23=1,2,3;,(3)int a23=0,1,2,3;,当为全部元素赋值时,一维长度可省略,int a 3=1,2,3,4,5,6;类似可以推广到三维或多维数组。,2.整体赋值,系统自动分行,2023/11/7,17,用数组定义 int a?a111=?,四、三维数组举例,2 3 4,2023/11/7,18,若定义int a34,则对a的正确引用是:A)a 2 4 B)a 1,3 C)a(2)(1)D)a 1+
10、1 0,以下二维数组说明方式中正确的是:A)int a3;B)float a(3,4);C)double a14;D)float a(3)(4);,引用,假设二维数组a有m列,则计算任一元素aij在数中的位置的公式为:i*m+j+1即a00位于数组的第一个位置上。,i*m+j+1,例题分析,2023/11/7,19,main()int i,j,a55,k;k=2;for(i=0;i5;i+)/*按行循环*/for(j=0;j5;j+)/*按列循环*/if(j=i)a i j=1;/*下三角*/else a i j=k+;/*上三角*/for(i=0;i5;i+)for(j=0;j5;j+)pr
11、intf(“%4d”,a i j);printf(“n”);/*输出一行后换行*/,例题:不用输入,自动生成下列矩阵,1 2 3 4 51 1 6 7 81 1 1 9 101 1 1 1 111 1 1 1 1,元素值为 1,按行递增,2023/11/7,20,int a10,已经赋值,如何进行从小到大排序?,1.选择排序2.冒泡排序3.插入排序,找出数组中最小的,与第一个元素对换,再在其余的元素中重复上述操作。,顺序比较相邻两元素的大小,若左边元素比右边的大,则交换,否则不交换,比较需进行多次。,假定第一个元素是合适的,取出第二个元素与之比较,若小,插到前面;否则,位置不变,再将第三个元素
12、与前面两个比较,放到有序序列中合适的位置,依次类推.,五、应用实例,2023/11/7,21,冒泡排序,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,第1轮9次,第2轮8次,排序思路:从底部开始,顺序比较相邻两元素的大小,若左边元素比右边的大,则交换,否则不交换,比较需进行多轮。,共需N-1=9 轮,每轮 10-i 次,i=19,例:int a10;即N=10,冒泡排序过程如下:,2023/11/7,22,有一数组:(9,7,18,3,4,10,8),将它从小到大排序。,7,9,3,4,10,8,18,第一轮比较结束,较小的数向前移动,较大的数向后移动。,冒泡排序,也可以从头部开
13、始,顺序比较相邻两元素,2023/11/7,23,7,3,4,9,8,10,18,第二轮比较结束,第二轮比较,2023/11/7,24,3,4,7,8,9,10,18,第三轮比较结束,(4)3,4,7,8,9,10,18,排序完毕,第三轮比较,(5)3,4,7,8,9,10,18,(6)3,4,7,8,9,10,18,第四轮比较结束,第五轮比较结束,第六轮比较结束,2023/11/7,25,main()int i,j,t,a10;printf(Input 10 number:n);for(i=0;iaj+1)t=aj;aj=aj+1;aj+1=t;/*交换数据*/printf(The sort
14、ed numbers:n);for(i=0;i=9;i+)/*输出排序后数据*/printf(“%4d”,ai);printf(“nn”);,冒泡排序程序,2023/11/7,26,一、C中的字符数据,字符数据,字符常量字符变量字符串常量,a,An,t,char c;,“Turbo C”,二、字符数据的输入和输出,char c,d;scanf(“%c”,char c=a,d=b;printf(“%c”,c);putchar(d);,3 字符数组,3 字符数组 7.3.1 字符数据,2023/11/7,27,一、数组中的各个元素均为字符变量,二、每个元素只能存放一个字符,例:char c20=a
15、,b,c,.;c0=a,c1=b,.最后一个元素:c19,其中字符的个数不得多于20,字符串,用字符数组可以存放长度不同的字符串,串:用双引号“”括起来的字符或转义符序列。串长:字符串中所包含的字符数。串结束标记:C中的串以0结束。0称为串结束标记。,7.3.2 字符串数据,2023/11/7,28,字符串在字符数组中一个字符占用一个字节。字符串实际占有的存储单元数量等于字符串长度+1。要定义一个存放字符串“CHINA”的字符数组c,应定义为:char c6;,数组c在内存中实际存放情况,0是在字符串存入字符数组时由系统自动填加的,并不是字符串本身的一部分,在计算串长的时候不包括0。,字符串在
16、数组中的存储格式,2023/11/7,29,1.为每一个元素赋初值 char c6=a,b,c,d,e,f;,2.C中可以使用字符串常量为字符数组初始化,可有三种格式。,char ch6=“CHINA”;char ch6=“CHINA”;/*省略*/char ch=“CHINA”;/*省略说明中字符串长度值*/,7.3.3 字符数组的初始化,2023/11/7,30,1.字符串在内存中,系统自动加上0,作为字符串结束标记,字符串所占字节数为串中字符个数+1 char c6=“abcde”;该串共占6个字节。,2.程序中系统根据0来判断字符串是否结束,而不是通过数组长度。例如:char c6=“
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- jin7 第七 数组 字符串

链接地址:https://www.31ppt.com/p-6510370.html