第七章数组 在程序设计中,为了处理方便,把具有相同类 型的若干变量按有序的形式组织起来。这些按序排 列的同类数据元素的集合称为数组。在C语言中, 数组属于构造数据类型。用一个统一的数组名和下 标来唯一地确定数组中的元素
第七章 数组 在程序设计中,为了处理方便,把具有相同类 型的若干变量按有序的形式组织起来。这些按序排 列的同类数据元素的集合称为数组。在C语言中, 数组属于构造数据类型。用一个统一的数组名和下 标来唯一地确定数组中的元素
7.1维数组的定义和引用 7.1.1一维数组的定义方式 在C语言中使用数组必须先进行定义。 维数组的定义方式为: 类型说明符数组名常量表达式]; 其中:数组名是用户定义的数组标识符。 方括号中的常量表达式表示数据元素的个数,也 称为数组的长度。 例如:inta[10] float b[10]. c[20] char ch[20] 说明: )数组的类型实际上是指数组元素的取值类型。对于同一 个数组,其所有元素的数据类型都是相同的 2)数组名的书写规则应符合标识符的书写规定
7.1 一维数组的定义和引用 7.1.1 一维数组的定义方式 在C语言中使用数组必须先进行定义。 一维数组的定义方式为: 类型说明符 数组名[常量表达式]; 其中:数组名是用户定义的数组标识符。 方括号中的常量表达式表示数据元素的个数,也 称为数组的长度。 例如:int a[10]; float b[10],c[20]; char ch[20]; 说明: 1) 数组的类型实际上是指数组元素的取值类型。对于同一 个数组,其所有元素的数据类型都是相同的。 2) 数组名的书写规则应符合标识符的书写规定
3)数组名不能与其它变量名相同 例如: maino [ int a; float a[10]: }是错误的。 4)数组名后是用方括弧括起来的常量表达式,不 能用圆括弧 5)允许在同一个类型说明中,说明多个数组和多 个变量 例如:inta,b,cd,k1[10,k2[20]
3) 数组名不能与其它变量名相同。 例如: main() { int a; float a[10]; …… } 是错误的。 4) 数组名后是用方括弧括起来的常量表达式,不 能用圆括弧。 5) 允许在同一个类型说明中,说明多个数组和多 个变量。 例如: int a,b,c,d,k1[10],k2[20];
6)不能在方括号中用变量来表示元素的个数,但是可 以是符号常数或常量表达式。 例如:# define FD5 maino i int a[3+2], b[FD]: }是合法的。但是下述说明方式是错误的: maino [ int n=5 int ann]:
6) 不能在方括号中用变量来表示元素的个数,但是可 以是符号常数或常量表达式。 例如:#define FD 5 main() { int a[3+2],b[FD]; …… } 是合法的。但是下述说明方式是错误的: main() { int n=5; int a[n]; …… }
712一维数组元素的引用 数组元素的一般形式为: 数组名[下标] 其中下标可能为整型常量或整型表达式。下标从O开 始 数组元素通常也称为下标变量。必须先定义数组, 才能使用下标变量。 下标变量和数组说明在形式中有些相似,但这两者 具有完全不同的含义。数组说明的方括号中给出的是某 维的长度;而数组元素中的下标是该元素在数组中的 位置标识。前者只能是常量,后者可以是常量,变量或 表达式
7.1.2 一维数组元素的引用 数组元素的一般形式为: 数组名[下标] 其中下标可能为整型常量或整型表达式。下标从0开 始。 数组元素通常也称为下标变量。必须先定义数组, 才能使用下标变量。 下标变量和数组说明在形式中有些相似,但这两者 具有完全不同的含义。数组说明的方括号中给出的是某 一维的长度;而数组元素中的下标是该元素在数组中的 位置标识。前者只能是常量,后者可以是常量,变量或 表达式
在C语言中只能逐个地使用下标变量,而 不能一次引用整个数组 例如,输出有10个元素的数组必须使用循 环语句逐个输出各下标变量: for(i=0:i<10:i++) printf("%d",a[i〕) 而不能用一个语句输出整个数组。 下面的写法是错误的: printf(" %d",a)
在C语言中只能逐个地使用下标变量,而 不能一次引用整个数组。 例如,输出有10个元素的数组必须使用循 环语句逐个输出各下标变量: for(i=0; i<10; i++) printf("%d",a[i]); 而不能用一个语句输出整个数组。 下面的写法是错误的: printf(" %d",a);
713一维数组的初始化 数组初始化是指在数组定义时给数组元素赋予初值 初始化赋值的一般形式为: 类型说明符数组名[常量表达式]={值,值…值}; 其中在{}中的各数值即为各元素的初值,各值之间用 逗号间隔。 例如: inta[10]={01,2,34,5,6789} 相当于a[]=0:q1]=1∷a[9]=9
7.1.3 一维数组的初始化 数组初始化是指在数组定义时给数组元素赋予初值。 初始化赋值的一般形式为: 类型说明符 数组名[常量表达式]={值,值……值}; 其中在{ }中的各数值即为各元素的初值,各值之间用 逗号间隔。 例如: int a[10]={ 0,1,2,3,4,5,6,7,8,9 }; 相当于a[0]=0;a[1]=1;...a[9]=9;
C语言对数组的初始化赋值还有以下几点规定: 1)可以只给部分元素赋初值 当〔}中值的个数少于元素个数时,只给前面部分元素 赋值,其余自动赋O值。 例如:inta[10]={0,1,2,3,4] 2)只能给元素逐个赋值,不能给数组整体赋值。 例如给十个元素全部赋1值,只能写为: inta[10]={1,1,1,1,1,1,1,1,1,1} 而不能写为:inta[10]=1 但全部赋值为O时可以写作inta[10]=0} 3)如给全部元素赋值,则在数组说明中,可以不给出数 组元素的个数 例如:inq[5]={1,2,3,4,5 可写为:inta[={1,2,345}
C语言对数组的初始化赋值还有以下几点规定: 1) 可以只给部分元素赋初值。 当{ }中值的个数少于元素个数时,只给前面部分元素 赋值,其余自动赋0值。 例如: int a[10]={0,1,2,3,4}; 2) 只能给元素逐个赋值,不能给数组整体赋值。 例如给十个元素全部赋1值,只能写为: int a[10]={1,1,1,1,1,1,1,1,1,1}; 而不能写为:int a[10]=1; 但全部赋值为0时可以写作int a[10]={0}; 3) 如给全部元素赋值,则在数组说明中,可以不给出数 组元素的个数。 例如: int a[5]={1,2,3,4,5}; 可写为: int a[]={1,2,3,4,5};
714一维数组程序举例 例1:用数组来处理求 Fibonacci数列问题。(73c) intf[20]={1,1]: for(i=2ia[i+1{a[]:a[i=a[+1]a[i+1]=t} 结论:若有n个数,则要进行n-1趟比较。 在第1趟比较中,要进行η1次两两比较; 在第j趟比较中,要进行nj次两两比较;
例1:用数组来处理求Fibonacci数列问题。(l7_3.c) int f[20]={1,1}; for ( i=2; ia[i+1]) {t=a[i];a[i]=a[i+1];a[i+1]=t;}
【例75】用比较法将数组元素按从大到小的顺 序输出(75c) for(=0<10:i+) p=i: q=a[i] for(j=i+1<10+ if(q<[ p=j: q=a[j]: y if(il=P) [s=a[i]: a[i]=a[p]: a[p]=s: y printf %d,a[iD:
【例7.5】用比较法将数组元素按从大到小的顺 序输出 /*(l7_5.c)*/ for(i=0;i<10;i++) { p=i;q=a[i]; for(j=i+1;j<10;j++) if(q<a[j]) { p=j;q=a[j]; } if(i!=p) {s=a[i]; a[i]=a[p]; a[p]=s; } printf("%d",a[i]); }