资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第七章,数 组,1,C,的数,据类型,基本类型,整型,字符型,实型,(,浮点型,),枚举类型,构造类型,数组类型,结构体类型,共用体类型,指针类型,空类型,单精度型,双精度型,2,一、数组的基本概念,二、一维数组,三、二维数组,四、字符数组,主要内容,3,一、数组的基本概念,数组是一种,构造,数据类型。,数组是,有序数据,的集合。,数组中的每一个元素都属于,同一数据类型,。,用一个统一的,数组名,和,下标,唯一地确定数组中的元素。,如:,int s10,4,二、一维数组,一维数组的定义,格式,类型说明符,数组名,常量表达式,举例,int a10;,整型表达式,表达式中可以使用符号常量。,5,说明,1.,数组名的命名规则应遵循,标识符的命名规则。,2.,数组名后是,方括号,,而非圆括号。,标识符只能由字母、数字、下划线组成。且第一个字符 必须为字母或下划线,6,3.,常量表达式表示元素的个数,即数组长度。,a0,,,a1,,,a2,,,a3,,,a4,,,a5,,,a6,,,a7,,,a8,,,a9,注意,:,下标为小数时将自动取整,.,a5.2,a5.8,等价于,a5,7,4.,常量表达式中可以包含常量和符号常量,不能包含变量。,#define N 10,main(),int aN,bN+10,C2+3;,#define N 10,main(),int,n=5;,int a,n,bN+10,C2+3;,8,5.,数组名不能与其它变量名相同。,main(),int,a,;,float,a,10;,6.,允许在同一个类型说明中,说明多个数组和多个变量。,int a,b,c,d,k110,k220;,9,一维数组元素的引用,格式,数组名,下标,a0,10,2.,数组元素只能,逐个引用,。数组元素的引用与同类型的一般变量使用方式一样。,int a10;,/,定义数组,a,a0=10;a2=a0*5;scanf(“%d”,int a10;,printf(“%d”,a,);,/,一次引用整个数组,a,错误!,不能一次引用整个数组。,1.,数组元素通常也称为,下标变量,数组必须,先定义,后使用,。,说明,11,int i,a10;,for(i=0;i=0;i-),printf(“%2d”,ai);,3,.,当逐个使用数组中的每一个元素时,通常借助for,循环语句。,9 8 7 6 5 4 3 2 1 0,int i,a10;,for(i=0;i=9;i+),ai=i;,printf(%2d,ai);,0 1 2 3 4 5 6 7 8 9,12 13 14 15 16 17 18 19 20 21,?,12,4.,下标可以是整型变量或,整型表达式,。,如:,a0=a3*2,5.,区分:,int a10;,t=a7;,13,一维数组的初始化,格式,类型说明符,数组名,常量表达式,=,值,值,值,;,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;,4.,在对全部数组元素赋初值时,可以不指定数组长度(元素的个数),15,输入,10,个数,并挑选出最大值。,main(),int i,max;,int a10;,printf(input 10 numbers:n);,for(i=0;i10;i+),scanf(%d,max=a0;,for(i=1;imax)max=ai;,printf(maxmum=%dn,max);,例,7-1,一维数组程序举例,16,例,7-2,#include stdio.h,void main(),int i;,int f40=1,1;,printf(%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,for(j=1;j=9;j+),for(i=0;iai+1),t=ai;,ai=ai+1;,ai+1=t;,printf(the sorted numbers:n);,for(i=0;i=0;i-),printf(%d,ai);,或,if(aiai+1),2)对30个数排序?对60个数排序列?如何设计?,19,#include stdio.h,#define N 30,void main(),int aN;,int i,j,t;,printf(input,%d,numbers:n,N,);,for(i=0;,i,=,N-1,;i+),scanf(%d,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+),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,a23,22,3.,二维数组可看成特殊的一维数组,它的元素又是一个一维数组。,数组,a,可看成一个一维数组,有三个元素:,a0,a00,a01,a02,a03,a1,a10,a11,a12,a13,a2,a20,a21,a22,a23,23,二维数组元素的引用,格式,数组名,下标,1,下标,2,说明,1,。数组必须先定义,后使用。,24,2,。数组元素只能逐个引用,而不能一次引用整个数组。数组元素的引用与同类型的一般变量使用方式一样。,下面的程序有什么问题?,int a23;,a01=10;a23=a01*5;,scanf(“%d”,printf(“%d”,a);,25,int i,j;,float a45;,for(i=0;i=3;i+),for(j=0;j=4;j+),scanf(“%d”,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,2,3,4,5,6;,1 2 3,4 5 6,1 2 3,4 5 6,27,3,.,可以对部分元素赋初值。分行进行。,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 3,4 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,二维数组程序举例,例,1,将一个二维数组元素的行和列元素互换,存在另一个二维数组中。,29,void 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,printf(array b:n);,for(i=0;i=2;i+),for(j=0;j=1;j+),bij=aji;,printf(%5d,bij);,printf(n);,30,void main(),int a23=1,2,3,4,5,6;,int b32,i,j;,printf(array 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,的每一行中寻找最大的元素,找到之后把该值赋予数组,B,相应的元素即可。,例,2,32,int a34;,int b3,i,j,m,;,printf(array a:);,for(i=0;i=2;i+),for(j=0;j=3;j+),scanf(%d,for(i=0;i=2;i+),m,=ai0;,for(j=1;j,m,),m,=aij;,bi=,m,;,printf(narray b:n);,for(i=0;i=2;i+),printf(%5d,bi);,printf(n);,33,练习:,7.3,34,四、字符数组,(一)、,字符数组,(二)、,字符串,35,(一)、字符数组,定义,初始化,char c5=h,a,p,p,y;,char c5;,注意:,如果初值个数大于数组长度,按语法错误处理。,如果初值个数小于数组长度,只将这些字符赋给前面那元,素,其余元素自动赋空字符,(0),。,可以定义和初始化一个二维字符数组。,36,引用,main(),int i;,char,c5=h,a,p,p,y,;,for(i=0;i,字符串,2,,返回值,0,;,字符串,1,字符串,2,,返回值,0)printf(st1st2n);,if(k0)printf(st1str2)/,错!,If(strcmp(str1,str2)0)/,对!,52,#includestring.h,main(),int k;,char st=C language;,k=strlen(st);,printf(The lenght of the string is%dn,k);,测字符串长度函数,strlen,格式,:,strlen(,字符数组名,),功能,:测字符串的实际长度,(,不含,字符串结束标志,0,),并作为函数返回值。,53,转换为大,小写字母函数,Strupr,strlwr,#include stdio.h,#include string.h,main(),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:,America,57,作业:,7.2 7.5 7.13 7.15,58,
展开阅读全文