《第7章数组V1.0.ppt》由会员分享,可在线阅读,更多相关《第7章数组V1.0.ppt(58页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1C的数的数据类型据类型基本类型基本类型整型整型字符型字符型实型实型(浮点型浮点型)枚举类型枚举类型构造类型构造类型数组类型数组类型结构体类型结构体类型共用体类型共用体类型指针类型指针类型空类型空类型单精度型单精度型双精度型双精度型2一、数组的基本概念一、数组的基本概念二、一维数组二、一维数组三、二维数组三、二维数组四、字符数组四、字符数组3 数组是一种数组是一种构造构造数据类型。数据类型。数组是数组是有序数据有序数据的集合。的集合。数组中的每一个元素都属于数组中的每一个元素都属于同一数据类型同一数据类型。用一个统一的用一个统一的数组名数组名和和下标下标唯一地确定数组中的元素。唯一地确定数组中
2、的元素。如:如:int s104一维数组的定义一维数组的定义格式格式类型说明符类型说明符 数组名数组名常量表达式常量表达式举例举例int a10;整型表达式,表达式中可以整型表达式,表达式中可以使用符号常量。使用符号常量。5说明说明1.数组名的命名规则应遵循数组名的命名规则应遵循标识符的命名规则。标识符的命名规则。2.数组名后是数组名后是方括号方括号,而非圆括号。,而非圆括号。标识符只能由字母、数字、标识符只能由字母、数字、下划线组成。且第一个字符下划线组成。且第一个字符 必须为字母或下划线必须为字母或下划线63.常量表达式表示元素的个数,即数组长度。常量表达式表示元素的个数,即数组长度。a0
3、,a1,a2,a3,a4,a5,a6,a7,a8,a9注意注意:下标为小数时将自动取整下标为小数时将自动取整.a5.2,a5.8等价于等价于a574.常量表达式中可以包含常量和符号常量,不常量表达式中可以包含常量和符号常量,不能包含变量。能包含变量。#define N 10main()int aN,bN+10,C2+3;#define N 10main()int n=5;int an,bN+10,C2+3;85.5.数组名不能与其它变量名相同。数组名不能与其它变量名相同。main()int a;float a10;6.6.允许在同一个类型说明中,说明多个数组和多个变量。允许在同一个类型说明中,
4、说明多个数组和多个变量。int a,b,c,d,k110,k220;9一维数组元素的引用一维数组元素的引用格式格式数组名数组名下标下标a0102.数组元素只能数组元素只能逐个引用逐个引用。数组元素的引用与同类型的一。数组元素的引用与同类型的一般变量使用方式一样。般变量使用方式一样。int a10;/定义数组定义数组aa0=10;a2=a0*5;scanf(“%d”,&a5);printf(“%d”,a5);int a10;printf(“%d”,a);/一次引用整个数组一次引用整个数组a,错误!错误!不能一次引用整个数组。不能一次引用整个数组。1.1.数组元素通常也称为数组元素通常也称为下标变
5、量下标变量,数组必须数组必须先定义,后使用先定义,后使用。说明说明11int i,a10;for(i=0;i=0;i-)printf(“%2d”,ai);3.当逐个使用数组中的每一个元素时,通常借助当逐个使用数组中的每一个元素时,通常借助for循环语句。循环语句。9 8 7 6 5 4 3 2 1 0int i,a10;for(i=0;i=9;i+)ai=i;printf(%2d,ai);0 1 2 3 4 5 6 7 8 912 13 14 15 16 17 18 19 20 21?124.下标可以是整型变量或整型表达式。如:a0=a3*25.区分:int a10;t=a7;13一维数组的初
6、始化一维数组的初始化格式格式 类型说明符类型说明符 数组名数组名 常量表达式常量表达式 =值,值值,值值值;int a10=0,1,2,3,4,5,6,7,8,9;14说明说明1.定义数组时,对数组元素赋初值。定义数组时,对数组元素赋初值。2.可以只给一部分数组元素赋初值。可以只给一部分数组元素赋初值。3.要想使数组中全部元素数据为要想使数组中全部元素数据为0,则采用如下形式。,则采用如下形式。int a10=0,1,2,3,4,5,6,7,8,9;int a10=0,1,2,3,4;int a10=0,0,0,0,0,0,0,0,0,0;或或int a10=0;int a=0,1,2,3,4
7、;4.在对全部数组元素赋初值时,可以不指定数组长度在对全部数组元素赋初值时,可以不指定数组长度(元素的个数)(元素的个数)15 输入输入10个数,并挑选出最大值。个数,并挑选出最大值。main()int i,max;int a10;printf(input 10 numbers:n);for(i=0;i10;i+)scanf(%d,&ai);max=a0;for(i=1;imax)max=ai;printf(maxmum=%dn,max);例例7-1一维数组程序举例一维数组程序举例16例例7-2#include stdio.hvoid main()int i;int f40=1,1;print
8、f(%12d%12d,f0,f1);for(i=2;i40;i+)fi=fi-2+fi-1;if(i%5=0)printf(n);printf(%12d,fi);求Fibonacci数列的前40个数17 例例7-3用冒泡法对用冒泡法对10个个数排序。数排序。(由(由小小到大到大)void main()int a10;int i,j,t;printf(input 10 numbers:n);for(i=0;i10;i+)scanf(%d,&ai);for(j=1;j=9;j+)for(i=0;iai+1)t=ai;ai=ai+1;ai+1=t;printf(the sorted numbers:
9、n);for(i=0;i=0;i-)printf(%d,ai);或或 if(aiai+1)2)对)对30个数排序?对个数排序?对60个数排序列?如何设计?个数排序列?如何设计?19#include stdio.h#define N 30void main()int aN;int i,j,t;printf(input%d numbers:n,N);for(i=0;i=N-1;i+)scanf(%d,&ai);for(j=0;j=N-1;j+)for(i=0;iai+1)t=ai;ai=ai+1;ai+1=t;printf(the sorted numbers:n);for(i=0;i=N-1;i
10、+)printf(%d,ai);20二维数组的定义二维数组的定义格式格式类型说明符类型说明符 数组名数组名常量表达式常量表达式1 常量表达式常量表达式2举例举例int a34;21说明说明1。二维数组中元素的排列顺序是:。二维数组中元素的排列顺序是:先行后列先行后列。因此,可以把二维数组看成是一个矩阵。因此,可以把二维数组看成是一个矩阵。2。二维数组元素仍然是从。二维数组元素仍然是从a00开始。开始。int a34;a00,a01,a02,a03 a10,a11,a12,a13 a20,a21,a22,a23223.二维数组可看成特殊的一维数组,它的元素又是一个一维数组。数组a可看成一个一维数
11、组,有三个元素:a0 a00,a01,a02,a03 a1 a10,a11,a12,a13 a2 a20,a21,a22,a2323二维数组元素的引用二维数组元素的引用格式格式数组名数组名下标下标1 下标下标2说明说明1。数组必须先定义,后使用。数组必须先定义,后使用。24n2。数组元素只能逐个引用,而不能一次引用。数组元素只能逐个引用,而不能一次引用整个数组。数组元素的引用与同类型的一般变整个数组。数组元素的引用与同类型的一般变量使用方式一样。量使用方式一样。n下面的程序有什么问题?下面的程序有什么问题?int a23;a01=10;a23=a01*5;scanf(“%d”,&a11);pr
12、intf(“%d”,a);25int i,j;float a45;for(i=0;i=3;i+)for(j=0;j=4;j+)scanf(“%d”,&aij);3.二维数组输入二维数组输入/输出的一般格式。输出的一般格式。int i,j;float a45;for(i=0;i4;i+)for(j=0;j5;j+)printf(“%d”,aij);printf(”n”);26二维数组的初始化二维数组的初始化说明说明1。分行给二维数组赋初值。分行给二维数组赋初值。2。按数组的排列顺序对各数组元素赋初值。按数组的排列顺序对各数组元素赋初值。int a23=1,2,3,4,5,6;int b23=1,
13、2,3,4,5,6;1 2 34 5 6 1 2 34 5 6 273.可以对部分元素赋初值。分行进行。可以对部分元素赋初值。分行进行。int c34=1,5,9;4。在对全部数组元素赋初值时,数组第一维的长。在对全部数组元素赋初值时,数组第一维的长度可以不指定。度可以不指定。int e 3=1,2,3,4,5,6;int d34=1,5,6,0,9,7;int f 4=0,0,3,0,0,10;1 0 0 0 5 6 0 0 0 9 7 0 1 2 34 5 6 0 0 3 0 0 0 0 0 0 10 0 0 1 0 0 0 5 0 0 0 9 0 0 0 28二维数组程序举例二维数组程序
14、举例例例1将一个二维数组元素的行和列元素互换,存在另一将一个二维数组元素的行和列元素互换,存在另一个二维数组中。个二维数组中。29void main()int b32,i,j,a23;printf(“input array a:n);for(i=0;i=1;i+)for(j=0;j=2;j+)scanf(%d,&aij);printf(array b:n);for(i=0;i=2;i+)for(j=0;j=1;j+)bij=aji;printf(%5d,bij);printf(n);30void main()int a23=1,2,3,4,5,6;int b32,i,j;printf(arra
15、y a:n);for(i=0;i=1;i+)for(j=0;j=2;j+)printf(%5d,aij);bji=aij;printf(n);printf(array b:n);for(i=0;i=2;i+)for(j=0;j=1;j+)printf(%5d,bij);printf(n);31 在在二维数组二维数组a中选出各行最大的元素组成一个一维数组中选出各行最大的元素组成一个一维数组b。a=(3 16 87 65 4 32 11 108 10 25 12 37)b=(87 108 37)思路思路:在数组在数组A A的每一行中寻找最大的元素,找到之后把该值赋予数组的每一行中寻找最大的元素,找
16、到之后把该值赋予数组B B相应的元素即可。相应的元素即可。例例232int a34;int b3,i,j,m;printf(array a:);for(i=0;i=2;i+)for(j=0;j=3;j+)scanf(%d,&aij);for(i=0;i=2;i+)m=ai0;for(j=1;jm)m=aij;bi=m;printf(narray b:n);for(i=0;i=2;i+)printf(%5d,bi);printf(n);33n练习:7.334(一)、(一)、字符数组字符数组(二)、(二)、字符串字符串35定义定义初始化初始化char c5=h,a,p,p,y;char c5;注意
17、:注意:如果初值个数大于数组长度,按语法错误处理。如果初值个数大于数组长度,按语法错误处理。如果初值个数小于数组长度,只将这些字符赋给前面那元如果初值个数小于数组长度,只将这些字符赋给前面那元素,其余元素自动赋空字符素,其余元素自动赋空字符(0)。可以定义和初始化一个二维字符数组。可以定义和初始化一个二维字符数组。36引用引用main()int i;char c5=h,a,p,p,y;for(i=0;i1字符串字符串2 2,返回值,返回值00;字符串字符串11字符串字符串2 2,返回值,返回值00)printf(st1st2n);if(k0)printf(st1str2)/错!nIf(strc
18、mp(str1,str2)0)/对!52#includestring.hmain()int k;char st=C language;k=strlen(st);printf(The lenght of the string is%dn,k);测字符串长度函数测字符串长度函数strlen格式格式:strlen(strlen(字符数组名字符数组名)功能功能:测字符串的实际长度:测字符串的实际长度(不含不含字符串结束标志字符串结束标志00)并作为函数返回值。并作为函数返回值。53转换为大转换为大小写字母函数小写字母函数 Strupr strlwr#include stdio.h#include st
19、ring.hmain()char str1=HOW are YOU;printf(%sn,strlwr(str1);printf(%s,strupr(str1);54 字符数组应用举例:55例:输入例:输入5个字符串,输出其中长度最大者。个字符串,输出其中长度最大者。#include main()char string20;char str520;int i;for(i=0;i=5;i+)gets(stri);string=str0;for(i=0;istring)string=stri;printf(the largest string is:%cn,string);思考:请找出程序中的错误!56#include#include main()char string20;char str520;int i;for(i=0;i5;i+)gets(stri);strcpy(string,str0);for(i=1;istrlen(string)strcpy(string,stri);printf(the largest string is:%sn,string);Russa France America Krea China The largest string is:America57作业:作业:7.2 7.5 7.13 7.1558
限制150内