C语言第8章-数组和字符串.ppt
《C语言第8章-数组和字符串.ppt》由会员分享,可在线阅读,更多相关《C语言第8章-数组和字符串.ppt(77页珍藏版)》请在三一办公上搜索。
1、1,第8章 数组与字符串,苏州市职业大学 计算机工程系,C 语言程序设计,2,第8章 数组与字符串,本章重点介绍:8.1 一维数组8.2 二维数组8.3 字符数组与字符串8.4动态分配与void类型指针,3,4,引言,简单变量:如a,b2,x3,day,sum,如同一个姓名代表一个人一样,变量间没有任何联系。有一些变量可以归结为同一类型,如s1,s2,s3,s4,s5,s10代表同一个班中10个学生每个学生的成绩。这些变量都用相同的名字,只是下角标有所区别,即用相同的名字不同的下标代表同一类型的一组数据,这种变量称为下标变量。C语言中同样也可以用下标变量,只是把下标用方括号括起来。即s1,s2
2、,s10,这就是数组类型变量。,5,什么构造类型?所谓构造类型是指由基本类型数据按一定的规则组成的,是用户自己按规则定义的。数组是构造类型之一。在数学中我们学过数列、矩阵的概念,数列通常表示为:a1、a2、a3、.、an 矩阵通常表示为:,6,在C语言中表示数组和矩阵的方法是:数组:a0、a1、a2、a3、a4、a5其中 a:称为数组名。方括号中的数:称为下标 下标是一个数时,也就是数列,称为一维数组。下标是两个数时,也就是矩阵,称为二维数组。还有三维数组、四维数组等。,7,第8章 数组与字符串,一个人N门课的成绩怎样存储和处理?一个班N门课的成绩怎样存储和处理?.,这些数据的特点:具有相同的
3、数据类型。为了方便地使用这些数据,C语言提供了一种构造数据类型:数组。例如:存储学生成绩用实型数组 score5其中:score是数组名。该数组可以存放5个成绩,分别用下标变量表示:score0,score1,score4。下标变量也称为数组元素。,8,引言,数组的特点:1、数组是有序数据的集合;2、数组中的每一个元素都属于同一个数据类型;3、用一个统一的数组名和下标来唯一的确定数组中的元素。,9,8.1 一维数组,例如:int a10;float score5;“数据类型”:是数组元素的数据类型。“数组名”:遵循C语言标识符规则。“常量表达式”:表示数组中有多少个元素,即数组的长度。它可以是
4、整型常量、整型常量表达式或符号常量。,8.1.1 一维数组的定义,数据类型 数组名常量表达式;,10,以下数组定义是正确的:#define N 10float score1N,score2N;int num10+N;char c26;,以下数组定义是不正确的:int array(10);int n;float scoren;double ba.d;char str;,8.1.1 一维数组的定义(续),11,数组在内存的存放,数组下标从0开始。一维数组的数组元素在内存里按顺序存放。数组名代表数组的首地址,即score的值与score0 的地址值相同。,score数组,12,8.1.2 数组元素的
5、引用,格式:,例如:输入学生成绩 for(i=0;i5;i+)scanf(%f,例如:fibn=fibn-1+fibn-2;,下标表达式的值必须是整型表达式。,数组名下标表达式,13,8.1.2 数组元素的引用(续),说明:下标从0开始(下界为0),数组的最大下标(上界)是数组长度减1。例如:int a10;scanf(%d,/*下标越界*/,C编译系统不做越界检查,如果引用的数组元素超出数组范围会破坏其他变量的值。,14,8.1.2 数组元素的引用(续),是下标运算符,引用数组元素时,根据数组的首地址和下标数,计算出该元素的实际地址,取出该地址的内容进行操作。,如引用 score2:(1)计
6、算 2000+2*4=2008(2)取出2008的内容,15,合法标识符,表示元素个数引用时下标从0开始,:数组运算符单目运算符,例 int a6;,编译时分配连续内存内存字节数=数组大小*sizeof(元素数据类型),数组名表示内存首地址,是地址常量,一维数组的定义定义方式:类型说明符 数组名常量表达式;,返回,16,main()int i,a10;for(i=0;i=0;i-)printf(“%d”,ai);,一维数组的引用数组必须先定义,后使用只能逐个引用数组元素,不能一次引用整个数组数组元素表示形式:数组名下标其中:下标可以是常量或整型表达式例8.1 数组元素的引用,运行结果:9 8
7、7 6 5 4 3 2 1 0,17,8.1.3 一维数组的初始化,初始化:在定义数组时给数组元素赋初值。,1在定义数组时,对全部数组元素赋初值 例如:int a5=0,1,2,3,4;此时可以省略数组长度,例如:int a=0,1,2,3,4;2在定义数组时,对部分数组元素赋初值 例如:int a5=1,2,3;系统为其余元素赋 0。3当初值的个数多于数组元素的个数时,编译出错 例如:int a5=0,1,2,3,4,5;,18,8.1.4 一维数组应用举例,【例8.1】将10个人的成绩输入计算机后按逆序显示。#define N 10main()int i;float scoreN;for(
8、i=0;i=0;i-)printf(%8.1f,scorei);,运行情况如下:67 74 89 92 34 67 83 95 73 78 78.0 73.0 95.0 83.0 67.0 34.0 92.0 89.0 74.0 67.0,19,【例8.2】用数组求Fibonacci数列前20个数,分析:定义一个含有20个元素的数组f,即 int f20;其中 f0=1,f1=1,fn=fn-1+fn-2(n2)用一个循环结构:让循环变量n从 2到 20,循环体为 fn=fn-1+fn-2 程序如面所示:,lt16,20,f0,f1,f2,f3,f4,f5,f19,.,1,1,f19,0,1,
9、4,5,2,3,19,#include main()int i;int f20=1,1;for(i=2;i20;i+)fi=fi-2+fi-1;for(i=0;i20;i+)if(i%5=0)printf(n);printf(%12d,fi);,21,【例8.4】冒泡法排序(从小到大)。,排序过程:(1)比较第一个数与第二个数,若为逆序a0a1,则交换;然后比较第二个数与第三个数;依次类推,直至第n-1个数和第n个数比较为止第一趟起泡排序,结果最大的数被安置在最后一个元素位置上(2)对前n-1个数进行第二趟起泡排序,结果使次大的数被安置在第n-1个元素位置(3)重复上述过程,共经过n-1趟起泡
10、排序后,排序结束,22,例,38 49 65 76 13 27 30 97,第一趟,38 49 65 13 27 30 76,第二趟,38 49 13 27 30 65,第三趟,38 13 27 30 49,第四趟,13 27 30 38,第五趟,13 27 30,第六趟,49 38 65 97 76 13 27 30,初始关键字,n=8,13,76,76,76,27,30,13,65,27,65,30,65,13,13,49,49,30,49,27,38,27,38,30,38,13 27,第七趟,38,49,76,97,97,97,97,27,13,27,30,23,冒泡法排序(续),从上
11、述过程可以看到:n个数要比较n-1趟,而在第j趟比较中,要进行n-j次两两比较。,24,#include main()int a11,i,j,t;printf(Input 10 numbers:n);for(i=1;iai+1)t=ai;ai=ai+1;ai+1=t;printf(The sorted numbers:n);for(i=1;i11;i+)printf(%d,ai);,25,以6个数:3、7、5、6、8、0为例。思路:第一趟:将第一个数依次和后面的数比较,如果后面的某数小于第一个数,则两个数交换,比较结束后,第一个数则是最小的数。第二趟:将第二个数依次和后面的数比较,如果后面的某
12、数小于第二个数,则两个数交换,比较结束后,第二个数则是次小的数;。,【例8.5】选择法排序(从小到大)。,26,【例8.5】选择法排序(续),27,#define N 5main()int aN;int i,j,t;for(i=0;iai)t=aj;aj=ai;ai=t;printf(The sorted numbers:n);,程序运行情况如下:96 78 65 86 40The sorted numbers:40 65 78 86 96,28,8.2 二维数组,数据类型 数组名常量表达式1常量表达式2;,例如:float x23;,8.2.1 二维数组的定义,int a3,4,b(3,4)
13、,c,d(3)(4);,29,地址 值 数组元素,二维数组元素在内存中的排列顺序:按行存放,30,例 int a34;,二维数组理解,每个元素ai由包含4个元素的一维数组组成,二维数组a是由3个元素组成,31,x0是数组名,是元素x00的地址,x1是数组名,是元素x10的地址,二维数组可看作是一种特殊的一维数组,x0-x00,x01,x02,x1-x10,x11,x12,例如,可以把x数组看作是包含二个元素的一维数组,每个元素又是一个含有三个元素一维数组。,32,a34=3;/*下标越界*/a1,2=1;/*应写成 a12=1;*/,8.2.2 二维数组元素的引用,例:int a34;a00=
14、3;a01=a00+10;,数组名行下标表达式列下标表达式,数组元素的表示形式:,33,8.2.3 二维数组的初始化,例:int a23=1,2,3,4,5,6;,1按行赋初值,例:int a23=1,2,3,4,5,6;初始化后结果:1 2 3 4 5 6,2按数组元素在内存中排列的顺序对各元素赋初值,3给部分元素赋初值,例:int a23=1,4;初始化后结果:1 0 0 4 0 0,34,8.2.3 二维数组的初始化(续),4数组初始化时,行长度可省,列长度不能省 例如:int a3=1,2,3,4,5,6,7;int b4=1,4,5;初始化结果:,a 结果:a0:1 2 3 a1:4
15、 5 6a2:7 0 0,b 结果:b0:1 0 0 0b1:4 5 0 0,35,下面对二维数组的定义都是错误的:,8.2.3 二维数组的初始化(续),float x3=1.0,2.0,3.0,4.0,5.0,8.0;,int a,b 2,c3;,int m24=1,2,3,4,5,6,7,8,9;/*编译出错,初值个数多于数组元素的个数*/,36,8.2.4 二维数组应用举例,【例8.6】给一个4行3列的二维数组输入/出数据。main()int a43,i,j,k;for(i=0;i4;i+)for(j=0;j3;j+)scanf(%d,程序运行情况如下:1 2 34 5 67 8 910
16、 11 121 2 34 5 67 8 910 11 12,37,二维数组元素的引用形式:数组名下标下标二维数组元素的初始化分行初始化:,按元素排列顺序初始化,38,程序举例,【例8.6】将二维数组行列元素互换,存到另一个数组中。,39,8.2.4 二维数组应用举例(续),【例8.7】有一个NM矩阵,编程序求出其中绝对值最大的那个元素的值及其所在的行、列位置。,图8.4 查找最大元素,40,#include math.h#define N 4#define M 5main()int i,j,row,colum,max,aNM;/*输入数据*/max=a00;row=colum=0;for(i=
17、0;imax)max=abs(aij);row=i;colum=j;/*输出数据*/,程序运行情况如下:34 56 12 67 2312 67 43 98 5465 45 66 16 2437 83 25 64 19max=98,row=1,colum=3,41,8.3 字符数组与字符串,字符数组:可以存放若干个字符,也可以存放字符串。,8.3.1 基本概念,字符串:字符串的末尾必须有0字符,它的ASCII码值为0。,不是字符串,是字符串,42,再例如:char a35;a数组是一个二维的字符数组,可以存放15个字符或3个长度不大于4的字符串。,8.3.2 字符数组的定义,例如:char s1
18、0;s数组是一维字符数组,它可以存放10个字符或一个长度不大于9的字符串。,注意:字符串只能存放在字符数组中。,43,8.3.3 字符数组的初始化,1用字符常量赋初值例如:char c5=C,h,i,n,a;,再例如:char c6=C,h,i,n,a,0;,是字符串,不是字符串,44,8.3.3 字符数组的初始化(续),再例如:char a310=basic,pascal,c;,2用字符串常量赋初值,例如:char str10=a string;或char str10=a string;,是字符串吗?,45,8.3.3 字符数组的初始化(续),例如:char s37=s,t,r,i,n,g;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 数组 字符串
链接地址:https://www.31ppt.com/p-6504265.html