- s1,s2,s3,...,s30
- 右下角的数字称为下标(subscript)
- 一批具有同名的同属性的数据就组成了一个数组(array),s就是数组名。
- 1.怎样定义和引用一维数组
- 一维数组、二维数组、三维数组
- a.怎样定义一维数组
- 例如,
- int a[10];
- 它表示定义了一个整型数组, 数组名为a,此数组有10个整型元素。
- 这10个元素是:
- a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9]
- 定义一维数组的一般形式为
- 类型符 数组名[常量表达式];
- 如果在被调用的函数(不包括主函数)中定义数组,其长度可以是变量或非常量表达式。
- void func(int n)
- {
- int a[2*n]; //合法,n的值从实参传来
- ...
- }
- b.怎样引用一维数组元素
- 在定义数组并对其中各元素赋值后,就可以引用数组中的元素。
- 引用数组元素的表示形式为
- 数组名[下标]
- 例如:a[0]就是数组 a 中序号为0的元素,它和一个简单变量的地位和作用相似。
- "下标"可以是整型常量或整行表达式。
- 对10个数组元素依次赋值为0,1,2,3,4,5,6,7,8,9,要求按逆序输出。
- #include "stdafx.h"
- int _tmain(int argc, _TCHAR* argv[])
- {
- int i,a[10];
- for(i=0;i<=9;i++)
- a[i]=i;
- for(i=9;i>=0;i--)
- printf("%d ",a[i]);
- printf("\n");
- return 0;
- }
- c.一维数组的初始化
- 为了使程序简洁,常在定义数组的同时,给各数组元素赋值,这称为数组的初始化。
- //在定义数组时对全部数组元素赋予初值。例如
- int a[10]={0,1,2,3,4,5,6,7,8,9};
- //可以只给数组中的一部分元素赋值。例如
- int a[10]={0,1,2,3,4};
- //如果想使一个数组中全部元素值为0,可以写成
- int a[10]={0,0,0,0,0,0,0,0,0,0};
- 或
- int a[10]={0};
- //在对全部数组元素赋初值时,由于数据的个数已经确定,因此可以不指定数组长度。例如:
- int a[5]={1,2,3,4,5};
- 可以写成
- int a[]={1,2,3,4,5};
- d.一维数组程序举例
- 用数组来处理求 Fibonacci 数列问题
- #include "stdafx.h"
- int _tmain(int argc, _TCHAR* argv[])
- {
- int i;
- int f[20]={1,1};
- for(i=2;i<20;i++)
- f[i]=f[i-2]+f[i-1];
- for(i=0;i<20;i++)
- {
- if(i%5==0) printf("\n");
- printf("%12d",f[i]);
- }
- printf("\n");
- return 0;
- }
- 有10个地区的面积,要求对它们按由小到大的顺序排列
- #include "stdafx.h"
- int _tmain(int argc, _TCHAR* argv[])
- {
- int a[10];
- int i,j,t;
- printf("input 10 numbers :\n");
- for(i=0;i<10;i++)
- scanf_s("%d",&a[i]);
- printf("\n");
- for(j=0;j<9;j++)
- for(i=0;i<9-j;i++)
- if(a[i]>a[i+1])
- {t=a[i];a[i]=a[i+1];a[i+1]=t;}
- printf("the sorted numbers :\n");
- for(i=0;i<10;i++)
- printf("%d ",a[i]);
- printf("\n");
- return 0;
- }
- 2.怎样定义和引用二维数组
- 二维数组常称为矩阵(matrix)。把二维数组写成行(column)和列(row)的排列形式,
- 可以有助于形象化地理解二维数组的逻辑结构。
- a.怎样定义二维数组
- float pay[3][6];
- 以上定义了一个 float 型的二维数组,第一维有3个元素,第2维有6个元素。
- 每一维的长度分别用一堆括号包起来。
- 二维数组定义的一般形式为
- 类型说明符 数组名[常量表达式][常量表达式];
- b.怎样引用二维数组的元素
- 二维数组元素的表示形式为
- 数组名[下标][下标]
- c.二维数组的初始化
- //分行给二维数组赋初值。例如:
- int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
- //可以将所有数据写在一个大括号内,按数组元素在内存中的排列顺序对各元素赋初值。例如:
- int a[3][4]={1,2,3,4,5,6,7,8,9,10,,11,12};
- //可以对部分元素赋初值
- int a[3][4]={{1},{5},{9}};
- int a[3][4]={{1},{},{9}};
- //如果对全部元素都赋初值,则定义数组时对第1维的长度可以不指定,但第2维的长度不能省。
- 例如:
- int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
- 与下面的定义等价:
- int a[][4]={1,2,3,4,5,6,7,8,9,10,11,12};
- int a[][4]={{0,0,3},{},{0,10}};
- 数组各元素为
- 0 0 3 0
- 0 0 0 0
- 0 10 0 0
- d.二维数组程序举例
- 将一个二维数组行和列的元素互换,存在另一个二维数组中
- #include "stdafx.h"
- int _tmain(int argc, _TCHAR* argv[])
- {
- int a[2][3]={{1,2,3},{4,5,6}};
- int b[3][2],i,j;
- printf("array a:\n");
- for(i=0;i<=1;i++)
- {
- for(j=0;j<=2;j++)
- {
- printf("%5d",a[i][j]);
- b[j][i]=a[i][j];
- }
- printf("\n");
- }
- printf("array b:\n");
- for(i=0;i<=2;i++)
- {
- for(j=0;j<=1;j++)
- printf("%5d",b[i][j]);
- printf("\n");
- }
- return 0;
- }
- 有一个3*4的矩阵,要求编程序求出其中最大的那个元素的值,以及其所在的行号和列号
- #include "stdafx.h"
- int _tmain(int argc, _TCHAR* argv[])
- {
- int i,j,row=0,colum=0,max;
- int a[3][4]={{1,2,3,4},{9,8,7,6},{-10,10,-5,2}};
- max=a[0][0];
- for(i=0;i<=2;i++)
- for(j=0;j<=3;j++)
- if(a[i][j]>max)
- {
- max=a[i][j];
- row=i;
- colum=j;
- }
- printf("max=%d\nrow=%d\ncolum=%d\n",max,row,colum);
- return 0;
- }