C语言程序设计ppt-第8章-数组.ppt
《C语言程序设计ppt-第8章-数组.ppt》由会员分享,可在线阅读,更多相关《C语言程序设计ppt-第8章-数组.ppt(65页珍藏版)》请在三一办公上搜索。
1、2023/11/7,华中科技大学计算机学院,1,C语言程序设计,第8章 数组 一维数组的声明、初始化和使用 数组的运算、作为函数参数的使用 字符串、多维数组,2023/11/7,华中科技大学计算机学院,2,8.1 数组概述,程序=算法+数据结构PASCAL程序设计语言发明者Niklaus Wirth曾经说过 简单数据类型的变量仅能描述一个单独的数据描述能力十分有限 如何描述一群有联系的数据集合?数组属于构造类型是相同数据类型数据的集合元素 组成数组的这些数据任何类型(简单类型、构造类型),2023/11/7,华中科技大学计算机学院,3,8.1 数组概述,数组特点其所有元素数目固定其所有元素类型
2、相同其所有元素顺序存放 数组作用集中管理将相关的同类型数据集中用一个标识符(数组名)表示元素顺序存放,但可随机定位用若干个数字序号(下标)来区别各数组元素例如定义float score30,可表述30位学生成绩 用数组具有什么好处?,2023/11/7,华中科技大学计算机学院,4,8.1 数组概述,问题计算全班30位同学某门课程的平均成绩 解决方法设置30个float型变量来记录成绩设置一个有30个float型元素的数组来记录成绩问题分析参与运算的平均成绩,其数据类型都相同(符合数组特点)30位同学属于一个班,用数组可把30个成绩表示成一个整体用数组的优点便于循环处理提高效率,便于书写、检查、
3、修改(对海量数据效果更明显),2023/11/7,华中科技大学计算机学院,5,8.2 一维数组,维数 标识一个数组元素所需要使用的下标的个数 一维数组只有一个下标可用于表示一个线性的数据队列 使用数组的要求先声明数组对它进行初始化,然后才能使用,2023/11/7,华中科技大学计算机学院,6,8.2.1 一维数组的声明,要解决三个问题确定数组的数据类型给数组定义一个名字,以便在程序中使用指明数组的大小,即数组中元素的个数 声明形式存储类型说明符 类型修饰符 类型说明符 数组名常量表达式=初值表;存储类型说明符:extern、static 类型修饰符:const、volatile 数组名:是一个
4、标识符,是一个地址常量,用以表示数组中打头元素的地址,2023/11/7,华中科技大学计算机学院,7,8.2.1 一维数组的声明,例8.1 具有基本数据类型的一维数组的声明#define SIZE 10int array5;double d5,eSIZE;char nameSIZE*5;错误例子unsigned int size;char strsize,buffer2*size;错误原因数组的大小一经说明就不能改变长度说明不是常量表达式,在编译之前就必须明确确定,2023/11/7,华中科技大学计算机学院,8,8.2.1 一维数组的声明,例8.2 采用类型修饰符的一维数组的声明static
5、int y10;数组y中的每一个成员都是静态整型成员extern double s2;作了一个外部双精度型数组的引用性声明应该在另外的源文件中通过double s2;来定义s数组,这样第2个声明语句才有意义,2023/11/7,华中科技大学计算机学院,9,8.2.2 一维数组的使用,C提供的各种操作符 针对基本数据类型的变量数组是构造数据类型但其元素是基本数据类型的变量访问数组不需设计专门的数组操作符方法:数组名下标表达式例int a5,j=2;5个元素依次是a0,a1,a2,a3,a4aj+2、a+j、aj-、a5*j-7 错误写法:aj-3、a2*j+1,2023/11/7,华中科技大学计
6、算机学院,10,例8.3 使用一维数组计算学生的平均成绩。,#include stdio.hvoid main(void)int score30,i,sum=0;double average;printf(input the scores please:n);for(i=0;i30;i+)scanf(“%d”,/*将键盘输入的成绩赋给各个数组元素*/,for(i=0;i30;i+)sum+=scorei;/*求学生成绩的累加和*/average=sum/30.0;/*计算平均成绩*/printf(sum=%dn,sum);printf(average=%lfn,average);,2023/1
7、1/7,华中科技大学计算机学院,11,8.2.3 一维数组的初始化,显式初始化值的个数与说明长度相同int x5=0,1,2,3,4;int y5=0,1,2,3,4,5;错误:初值个数大于数组长度有初始化值时,长度说明可缺省数组长度由初值个数确定int y=1,2,3,4,5,6,7,8;初始化值的个数可以小于说明长度,但只能缺省最后连续元素的初值int z10=0,1,2,3,4;/*前5个下标变量赋值*/int u9=,1,2;错误:缺省u0,u2不是最后连续元素,2023/11/7,华中科技大学计算机学院,12,例8.8 观察局部数组、静态数组和外部数组的缺省初值的程序,#includ
8、e stdio.hdouble s2;void main(void)int a2,i;static int b2;for(i=0;i2;i+)printf(s%d=%dn,i,si);printf(a%d=%dn,i,ai);printf(b%d=%dn,i,bi);,程序的运行结果如下:s0=0,a0=64,b0=0 s1=0,a1=3129,b1=0结论:外部数组s和静态数组b的元素的缺省初值都是0 局部数组a的初值则是随机的,2023/11/7,华中科技大学计算机学院,13,8.2.4 一维数组的存储结构,存放方法各个元素从数组名标明的起始地址开始在内存中连续存放 例如int a5;这里
9、是16位机,1个int变量占2个字节空间,2023/11/7,华中科技大学计算机学院,14,例8.9 观察一维数组的存储情况的程序,#include stdio.h#define SIZE 3void main(void)int xSIZE=1,3,5,k;char sSIZE+1=ABC;float fSIZE=1.414,3.1415,5.25;printf(the value of x is 0 x%xn,x);for(k=0;kSIZE;k+)printf(x%d=%dt addr=0 x%xn,xk,程序运行结果如下:the value of x is 0 xffc8 x0=1 ad
10、dr=0 xffc8 x1=3 addr=0 xffca x2=5 addr=0 xffcc,2023/11/7,华中科技大学计算机学院,15,例8.9 观察一维数组的存储情况的程序,k=0;printf(nthe value of s is 0 x%xn,x);while(sk)printf(s%d=%ct addr=0 x%xn,sk,程序运行结果如下:the value of s is 0 xffce s0=A addr=0 xffce s1=B addr=0 xffcf s2=C addr=0 xffd0,s3+X=X addr=0 xffd1the value of f is 0 x
11、ffd2f0=1.414000 addr=0 xffd2f1=3.141500 addr=0 xffd6f2=5.250000 addr=0 xffda,2023/11/7,华中科技大学计算机学院,16,8.2.5 一维数组的运算,C提供的各种操作符 赋值运算、各种算术运算、+、-针对基本数据类型的变量可针对int、float、以及double类型数组中元素合法操作 int x3=1,2,3,y3=4,5,6,z3,k=1;z0=x0+y0;z1=x0+y3;zk=+x0+-yk+;z1=x0+yx1;不允许两个数组直接相加z=x+y;编译时给出提示“cannot add two pointe
12、rs”,2023/11/7,华中科技大学计算机学院,17,数组的直接相加,例8.10 设5个同学修了高等数学普通物理、程序设计语言并取得了成绩,现计算三门课总分、平均分,每门课的总分、平均分,每个同学的总分、平均分#include stdio.h#define SIZE 5void main(void)int mathSIZE=91,67,88,78,81;int physicsSIZE=87,79,81,86,67;int programmingSIZE=86,81,85,92,87;/*3个数组依次存放数学、物理、程序设计的成绩*/,2023/11/7,华中科技大学计算机学院,18,例8.
13、10,int course_sum3=0,0,0;double course_even3;/*分别为各门课程总分、平均分数组*/int student_sum5=0,0,0,0,0;double student_even5;/*分别为各位同学总分、平均分数组*/int sum=0;double even;/*分别为全部课程的总分、平均分*/int i;,for(i=0;i5;i+)course_sum0+=mathi;course_sum1+=physicsi;course_sum2+=program mingi;/*计算各门课程的总分*/for(i=0;i3;i+)course_eveni=
14、course_su mi/5.0;sum+=course_sumi;/*计算各门课平总分*/even=sum/(3.0*SIZE);/*计算全部课程的平均分*/,2023/11/7,华中科技大学计算机学院,19,例8.10,for(i=0;i5;i+)/*计算每个学生的总分、平均分*/student_sumi=mathi+physicsi+programmingi;student_eveni=student_sumi/3.0;printf(三门课程的总分:%dn,sum);printf(三门课程的平均分:%lfn,even);,程序的运行结果如下 三门课程的总分:1236 三门课程的平均分:8
15、2.400000,2023/11/7,华中科技大学计算机学院,20,例8.10,for(i=0;i3;i+)printf(course_sum%d=%dn,i,course_sumi);printf(course_even%d=%lfn,i,course_eveni);,程序的运行结果如下 course_sum0=405 course_even0=81.000000 course_sum1=400 course_even1=80.000000 course_sum2=431 course_even2=86.200000,2023/11/7,华中科技大学计算机学院,21,例8.10,for(i=
16、0;i5;i+)printf(student_sum%d=%dn,i,student_sumi);printf(student_even%d=%lfn,i,student_eveni);,程序的运行结果如下 student_sum0=264 student_even0=88.000000 student_sum1=227 student_even1=75.666667 student_sum2=254 student_even2=84.666667,student_sum3=256student_even3=85.333333student_sum4=235student_even4=78.3
17、33333,2023/11/7,华中科技大学计算机学院,22,8.2.6 一维数组作为函数参数,参数的传递 传值 传地址 数组作为函数参数 采用的是参数传址 传送的是数组的地址 或传送数组元素的地址 还需传送数组元素的个数,2023/11/7,华中科技大学计算机学院,23,例8.11 一维数组作为函数参数的例子,#include stdio.hvoid fun(int y,int n);/*y是形式数组*/void main(void)int k,x5=1,2,3,4,5;fun(x,3);fun(void fun(int y,int n),子函数需给出形式数组的声明和形式数组中元素的个数 调
18、用函数实参的值是数组x的起始地址参数传递,2023/11/7,华中科技大学计算机学院,24,例8.12 对n个整数采用冒泡法对其排序,分析输入n个数存放在一数组中,便于循环处理排序是将一个数据元素任意的序列按照一定的规则排列成为一个有序的序列void bubble_sort(int a,int n)对an表示的n个整数进行排序处理main()输入n个数;输出n个数检验排序效果,调用bubble_sortsort对n个数排序;,2023/11/7,华中科技大学计算机学院,25,例8.12 冒泡排序,第一遍 从下标为0的元素开始,对两两相邻的元素进行比较如果前一个元素大于后一个元素,就交换这两个元
19、素的值循环n-1次比较在第一遍循环后不仅把最大整数移到数组最末尾(其下标为n-1)(像冒泡)还尽量把较大值往后挪,例如“31”还剩前面n-1个数需排序,2023/11/7,华中科技大学计算机学院,26,例8.12 冒泡排序,第2遍对前n-1个数,与第1遍一样循环处理还剩前n-2个数未排序第i遍对前n-i+1个数,与第1遍一样循环处理还剩前n-i个数未排序大循环结束时机(对i)i=n-1一遍循环中未发生交换,即已排好序,2023/11/7,华中科技大学计算机学院,27,例8.12 冒泡排序,void bubble_sort(int a,int n)/*形参用形式数组a*/int i,j,t,k;
20、int flag=1;for(i=0;(iaj+1)/*对两两相邻的元素进行比较*/t=aj,aj=aj+1,aj+1=t;flag=1;,2023/11/7,华中科技大学计算机学院,28,8.3 字符数组,8.3.1 字符数组的声明和使用字符数组元素的数据类型为char或wchar_t 声明格式与前面讨论的一维数组相同char s81;字符串用一对双引号界定的一个字符序列C语言没有规定字符串类型用一个字符数组来存放字符序列,并且在末尾加一个空字符0来构造字符串,2023/11/7,华中科技大学计算机学院,29,8.3 字符数组,字符串的存储 字符串的长度字符串的长度=字符串的存储长度1 设计
21、字符数组的最小长度应该等于该字符串的存储长度或字符数组的最小长度应该等于该字符串的长度加1 字符数组的使用 通过下标来访问字符数组中的具体字符元素,2023/11/7,华中科技大学计算机学院,30,#include stdio.hvoid main(void)char Capital27,Lowercase27;int i,delt=a-A;Capital0=A;Lowercase0=Capital0+delt;for(i=1;i26;i+)Capitali=Capitali-1+1;Lowercasei=Lowercasei-1+1;Capital26=0;Lowercase26=Capit
22、al26;printf(%sn,Capital);printf(%sn,Lowercase);,例8.13 产生大写和小写的26个英文字母字符串,程序运行结果如下:ABCDEFGHIJKLMN OPQRSTUVWXYZ abcdefghijklmnop qrstuvwxyz,2023/11/7,华中科技大学计算机学院,31,8.3.2 字符数组的初始化,通过初始化列表 char s18=W,u,h,a,n,0;0必须在初始化列表中显示给出 用字符串初值 char s228=Computer Science;末尾将自动加上一个0第三种方法 数组长度未明显给出char s3=Computer En
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 ppt 数组
链接地址:https://www.31ppt.com/p-6504042.html