C语言程序设计第8章数组课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《C语言程序设计第8章数组课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 数组 课件
- 资源描述:
-
1、C语言程序设计第8章 数组 n一维数组的声明、初始化和使用一维数组的声明、初始化和使用 n数组的运算、作为函数参数的使用数组的运算、作为函数参数的使用 n字符串字符串、多维数组、多维数组 11/14/202218.1 8.1 数组概述数组概述n程序程序=算法算法+数据结构数据结构nPASCAL程序设计语言发明者程序设计语言发明者Niklaus Wirth曾经说过曾经说过 n简单数据类型的变量简单数据类型的变量n仅能描述一个单独的数据仅能描述一个单独的数据n描述能力十分有限描述能力十分有限 n如何描述一群有联系的数据集合?如何描述一群有联系的数据集合?n数组数组n属于构造类型属于构造类型n是相同
2、数据类型数据的集合是相同数据类型数据的集合n元素元素 n组成数组的这些数据组成数组的这些数据n任何类型任何类型(简单类型、构造类型简单类型、构造类型)11/14/202228.1 8.1 数组概述数组概述n数组特点数组特点n其所有元素其所有元素数目固定数目固定n其所有元素其所有元素类型相同类型相同n其所有元素其所有元素顺序存放顺序存放 n数组作用数组作用n集中管理集中管理n将相关的同类型数据集中用一个标识符(数组名)表示将相关的同类型数据集中用一个标识符(数组名)表示n元素顺序存放,但可随机定位元素顺序存放,但可随机定位n用若干个数字序号(下标)来区别各数组元素用若干个数字序号(下标)来区别各
3、数组元素n例如定义例如定义float score30,可表述,可表述30位学生成绩位学生成绩 n用数组具有什么好处?用数组具有什么好处?11/14/202238.1 8.1 数组概述数组概述n问题问题n计算全班计算全班30位同学某门课程的平均成绩位同学某门课程的平均成绩 n解决方法解决方法n设置设置30个个float型变量来记录成绩型变量来记录成绩n设置一个有设置一个有30个个float型元素的数组来记录成绩型元素的数组来记录成绩n问题分析问题分析n参与运算的平均成绩,其数据类型都相同参与运算的平均成绩,其数据类型都相同(符合数组特点符合数组特点)n30位同学属于一个班,用数组可把位同学属于一
4、个班,用数组可把30个成绩表示成一个整体个成绩表示成一个整体n用数组的优点用数组的优点n便于循环处理n提高效率,便于书写、检查、修改(对海量数据效果更明显)11/14/202248.2 8.2 一维数组一维数组n维数维数 n标识一个数组元素所需要使用的下标的个数标识一个数组元素所需要使用的下标的个数 n一维数组一维数组n只有一个下标只有一个下标n可用于表示一个线性的数据队列可用于表示一个线性的数据队列n 使用数组的要求使用数组的要求n先声明数组先声明数组n对它进行初始化,然后才能使用对它进行初始化,然后才能使用11/14/202258.2.1 8.2.1 一维数组的声明一维数组的声明n要解决三
5、个问题要解决三个问题n确定数组的数据类型确定数组的数据类型n给数组定义一个名字,以便在程序中使用给数组定义一个名字,以便在程序中使用n指明数组的大小,即数组中元素的个数指明数组的大小,即数组中元素的个数 n声明形式声明形式n存储类型说明符存储类型说明符 类型修饰符类型修饰符 类型说明符类型说明符 数组数组名名常量表达式常量表达式=初值表初值表;n存储类型说明符:存储类型说明符:extern、static n类型修饰符:类型修饰符:const、volatile n数组名:是一个标识符,是一个地址常量,用以表数组名:是一个标识符,是一个地址常量,用以表示数组中打头元素的地址示数组中打头元素的地址
6、11/14/202268.2.1 8.2.1 一维数组的声明一维数组的声明n例例8.1 具有基本数据类型的一维数组的声明具有基本数据类型的一维数组的声明n#define SIZE 10nint array5;ndouble d5,eSIZE;nchar nameSIZE*5;n 错误例子错误例子nunsigned int size;nchar strsize,buffer2*size;n 错误原因错误原因n数组的大小一经说明就不能改变数组的大小一经说明就不能改变n长度说明不是长度说明不是常量常量表达式,在编译之前就必须明确确定表达式,在编译之前就必须明确确定11/14/202278.2.1 8
7、.2.1 一维数组的声明一维数组的声明例例8.2 采用类型修饰符的一维数组的声明采用类型修饰符的一维数组的声明nstatic int y10;n数组数组y中的每一个成员都是静态整型成员中的每一个成员都是静态整型成员nextern double s2;n作了一个外部双精度型数组的引用性声明作了一个外部双精度型数组的引用性声明n应该在另外的源文件中通过应该在另外的源文件中通过double s2;来定义来定义s数组,这样第数组,这样第2个声明语句才有意义个声明语句才有意义11/14/202288.2.2 8.2.2 一维数组的使用一维数组的使用nC提供的各种操作符提供的各种操作符 n针对基本数据类型
8、的变量针对基本数据类型的变量n数组数组n是构造数据类型是构造数据类型n但其元素是基本数据类型的变量但其元素是基本数据类型的变量n访问数组访问数组n不需设计专门的数组操作符不需设计专门的数组操作符n方法:数组名方法:数组名下标表达式下标表达式n例例int a5,j=2;n5个元素依次是个元素依次是a0,a1,a2,a3,a4naj+2、a+j、aj-、a5*j-7 n错误写法:错误写法:aj-3、a2*j+1 11/14/20229例例8.3 8.3 使用一维数组计算学生使用一维数组计算学生的平均成绩。的平均成绩。1.#include stdio.h2.void main(void)3.4.in
9、t score30,i,sum=0;5.double average;6.printf(input the scores please:n);7.for(i=0;i30;i+)8.scanf(“%d”,&scorei);/*将键盘输入的成绩赋给各个将键盘输入的成绩赋给各个数组元素数组元素*/9.for(i=0;i30;i+)10.sum+=scorei;/*求学生成绩的累加和求学生成绩的累加和*/11.average=sum/30.0;/*计算平均成绩计算平均成绩*/12.printf(sum=%dn,sum);13.printf(average=%lfn,average);14.11/14/
10、2022108.2.3 8.2.3 一维数组的初始化一维数组的初始化n显式初始化值的个数与说明长度相同显式初始化值的个数与说明长度相同nint x5=0,1,2,3,4;nint y5=0,1,2,3,4,5;错误:初值个数大于数组长度错误:初值个数大于数组长度n有初始化值时,长度说明可缺省有初始化值时,长度说明可缺省n数组长度由初值个数确定数组长度由初值个数确定nint y=1,2,3,4,5,6,7,8;n初始化值的个数可以小于说明长度,但只能缺省最后初始化值的个数可以小于说明长度,但只能缺省最后连续元素的初值连续元素的初值nint z10=0,1,2,3,4;/*前前5个下标变量赋值个下
11、标变量赋值*/nint u9=,1,2;错误:缺省错误:缺省u0,u2不是最后连续不是最后连续元素元素11/14/202211例例8.8 8.8 观察局部数组、静态数组观察局部数组、静态数组和外部数组的缺省初值的程序和外部数组的缺省初值的程序 1.#include stdio.h2.double s2;3.void main(void)4.5.int a2,i;6.static int b2;7.for(i=0;i2;i+)8.printf(s%d=%dn,i,si);9.printf(a%d=%dn,i,ai);10.printf(b%d=%dn,i,bi);11.12.n程序的运行结果如下
12、:程序的运行结果如下:s0=0,a0=64,b0=0 s1=0,a1=3129,b1=0n结论:结论:外部数组外部数组s和静态数组和静态数组b的元素的缺省初值都是的元素的缺省初值都是0 局部数组局部数组a的初值则是随的初值则是随机的机的 11/14/2022128.2.4 8.2.4 一维数组的存储结构一维数组的存储结构n存放方法存放方法n各个元素从数组名标明的起始地址开始在内各个元素从数组名标明的起始地址开始在内存中连续存放存中连续存放 n例如例如int a5;n这里是这里是16位机,位机,1个个int变量占变量占2个字节空间个字节空间数组元素 a0a1a2a3a4元素地址 a+0a+1a+
13、2a+3a+4&a0&a1&a2&a3&a411/14/202213例例8.9 8.9 观察一维数组的存储情观察一维数组的存储情况的程序况的程序 1.#include stdio.h2.#define SIZE 33.void main(void)4.5.int xSIZE=1,3,5,k;6.char sSIZE+1=ABC;7.float fSIZE=1.414,3.1415,5.25;8.printf(the value of x is 0 x%xn,x);9.for(k=0;kSIZE;k+)10.printf(x%d=%dt addr=0 x%xn,xk,&xk);n程序运行结果如下
14、:程序运行结果如下:the value of x is 0 xffc8 x0=1 addr=0 xffc8 x1=3 addr=0 xffca x2=5 addr=0 xffcc11/14/202214例例8.9 8.9 观察一维数组的存储情观察一维数组的存储情况的程序况的程序 11.k=0;12.printf(nthe value of s is 0 x%xn,x);13.while(sk)14.printf(s%d=%ct addr=0 x%xn,sk,&sk),k+;15.printf(s%d+X=%ct addr=0 x%xn,sk+X,&sk);16.printf(nthe valu
15、e of f is 0 x%xn,f);17.for(k=0;kSIZE;k+)18.printf(f%d=%ft addr=0 x%xn,fk,&fk);19.n程序运行结果如下:程序运行结果如下:the value of s is 0 xffce s0=A addr=0 xffce s1=B addr=0 xffcf s2=C addr=0 xffd0s3+X=X addr=0 xffd1the value of f is 0 xffd2f0=1.414000 addr=0 xffd2f1=3.141500 addr=0 xffd6f2=5.250000 addr=0 xffda11/14
16、/2022158.2.5 8.2.5 一维数组的运算一维数组的运算nC提供的各种操作符提供的各种操作符 n赋值运算、各种算术运算、赋值运算、各种算术运算、+、-n针对基本数据类型的变量针对基本数据类型的变量n可针对可针对int、float、以及、以及double类型数组中类型数组中元素元素n合法操作合法操作 nint x3=1,2,3,y3=4,5,6,z3,k=1;nz0=x0+y0;nz1=x0+y3;nzk=+x0+-yk+;nz1=x0+yx1;n不允许两个数组直接相加不允许两个数组直接相加nz=x+y;编译时给出提示编译时给出提示“cannot add two pointers”11
17、/14/202216数组的直接相加数组的直接相加 n例例8.10 n设设5个同学修了高等数学个同学修了高等数学普通物理、程序设计普通物理、程序设计语言并取得了成绩,现计算三门课总分、平均分,语言并取得了成绩,现计算三门课总分、平均分,每门课的总分、平均分,每个同学的总分、平均每门课的总分、平均分,每个同学的总分、平均分分1.#include stdio.h2.#define SIZE 53.void main(void)4.5.int mathSIZE=91,67,88,78,81;6.int physicsSIZE=87,79,81,86,67;7.int programmingSIZE=8
18、6,81,85,92,87;/*3个数组依次存放数学、物理、程序设计的成绩个数组依次存放数学、物理、程序设计的成绩*/11/14/202217例例8.108.108.int course_sum3=0,0,0;9.double course_even3;/*分别为各门课程总分、平均分数分别为各门课程总分、平均分数组组*/10.int student_sum5=0,0,0,0,0;11.double student_even5;/*分别为各位同学总分、平均分数分别为各位同学总分、平均分数组组*/12.int sum=0;13.double even;/*分别为全部课程的总分、平均分分别为全部课程
19、的总分、平均分*/14.int i;15.for(i=0;i5;i+)16.course_sum0+=mathi;17.course_sum1+=physicsi;18.course_sum2+=program mingi;19./*计算各门课程的总分计算各门课程的总分*/20.for(i=0;i3;i+)21.course_eveni=course_su mi/5.0;22.sum+=course_sumi;23./*计算各门课平总分计算各门课平总分*/24.even=sum/(3.0*SIZE);/*计算全部课程的平均分计算全部课程的平均分*/11/14/202218例例8.108.102
20、5.for(i=0;i5;i+)/*计算每个学生的总分、平均分计算每个学生的总分、平均分*/26.student_sumi=mathi+physicsi+programmingi;27.student_eveni=student_sumi/3.0;28.29.printf(三门课程的总分三门课程的总分:%dn,sum);30.printf(三门课程的平均分三门课程的平均分:%lfn,even);n程序的运行结果如下程序的运行结果如下 三门课程的总分三门课程的总分:1236 三门课程的平均分三门课程的平均分:82.40000011/14/202219例例8.108.1031.for(i=0;i3
21、;i+)32.printf(course_sum%d=%dn,i,course_sumi);33.printf(course_even%d=%lfn,i,course_eveni);34.n程序的运行结果如下程序的运行结果如下 course_sum0=405 course_even0=81.000000 course_sum1=400 course_even1=80.000000 course_sum2=431 course_even2=86.200000 11/14/202220例例8.108.1035.for(i=0;i=n-1n一遍循环中未发生交换,即已排一遍循环中未发生交换,即已排好序
22、好序11/14/202226例例8.12 8.12 冒泡排序冒泡排序1.void bubble_sort(int a,int n)/*形参用形式数组形参用形式数组a*/2.3.int i,j,t,k;int flag=1;4.for(i=0;(in-1)&flag;i+)*共进行共进行n-1轮轮冒泡冒泡*/5.6.flag=0;7.for(j=0;jaj+1)/*对两两相邻的元素进行比较对两两相邻的元素进行比较*/9.t=aj,aj=aj+1,aj+1=t;10.flag=1;11.12.13.11/14/2022278.3 8.3 字符数组字符数组8.3.1 字符数组的声明和使用字符数组的声
23、明和使用n字符数组字符数组n元素的数据类型为元素的数据类型为char或或wchar_t n声明格式声明格式n与前面讨论的一维数组相同与前面讨论的一维数组相同nchar s81;n字符串字符串n用一对双引号界定的一个字符序列用一对双引号界定的一个字符序列nC语言没有规定字符串类型语言没有规定字符串类型n用一个字符数组来存放字符序列,并且在末尾加一个空字用一个字符数组来存放字符序列,并且在末尾加一个空字符符0来构造字符串来构造字符串 11/14/2022288.3 8.3 字符数组字符数组n字符串的存储字符串的存储 n字符串的长度字符串的长度n字符串的长度字符串的长度=字符串的存储长度字符串的存储
24、长度1 n设计字符数组的最小长度设计字符数组的最小长度n应该等于该字符串的存储长度应该等于该字符串的存储长度n或字符数组的最小长度应该等于该字符串的长度加或字符数组的最小长度应该等于该字符串的长度加1 n字符数组的使用字符数组的使用 n通过下标来访问字符数组中的具体字符元素通过下标来访问字符数组中的具体字符元素 W u h a n 011/14/2022291.#include stdio.h2.void main(void)3.char Capital27,Lowercase27;4.int i,delt=a-A;5.Capital0=A;6.Lowercase0=Capital0+delt
25、;7.for(i=1;i0?great12.then:strcmp(s1,s2)0?great14.then:strcmp(s1,s3)0?great16.then:strcmp(s1,s4)0?less then:equal to,s4);17.n运行结果:运行结果:car is great then bus.car is less then truck.car is equal to car.11/14/202236例例8.17 8.17 字符串的连接函数字符串的连接函数 1.char*strcat(char t,char s)2.int j=0,k=0;3.while(tj+!=0)4.
展开阅读全文