二维数组上课

1. 二维数组的引出

问题1:为何称之为3D,4D呢?这个D指的是什么?
答曰:指的是维度。
问题:咱们班49个同学,这学期假设有6门课,如何来描述49个同学这6门课成绩?如何分别计算每个同学的6门课成绩之和?
如果用一维数组来实现的话,需要定义6个数组分别来存放6门课成绩,每个同学的6门课成绩遍布6个不同的数组。程序如下:

#include<stdio.h>
int main()
{
	double a1[49],a2[49],a3[49],a4[49],a5[49],a6[49];
	int i,j;
	double sum;
	for(i=0;i<49;i++)
	{
		scanf("%lf%lf%lf",&a1[i],&a2[i],&a3[i]);
		scanf("%lf%lf%lf",&a4[i],&a5[i],&a6[i]);
	}
	for(i=0;i<49;i++)
	{
		sum=0;
		sum=a1[i]+a2[i]+a3[i]+a4[i]+a5[i]+a6[i];
		printf("%d:%lf\n",i,sum);
	}
	return 0;	
}   

试想:如果有10门课?20门课呢?
可见在实际的工作中,仅仅使用一维数组是远远不够的。随后我们会学习线性代数,里面会有矩阵,例如:
在这里插入图片描述

如何用计算机来存储这个矩阵呢?也即如何存储里面的数据呢?只有解决了存储问题,才能谈及处理数据问题:例如求最大值或最小值,转置等等。
N个城市,城市之间的路径长度,如何来描述N个城市之间的路径长度,来求出遍历这N个城市的最短路径呢?
针对这些问题,采用二维数据就可以轻易而举地解决了。二维数组就是为它们而生的!
针对矩阵问题,定义二维数组:int a[5][3];
N个城市问题,假设有100个城市:double len[100][100];

2. 二维数组的初始化

如果已知要处理的数据,在定义数组时就可以初始化了,例如:

    int a[2][4]={{1,2,3,4},{0,6,7,8}};
	int a[2][4]={1,2,3,4,0,6,7,8};
	int a[2][4]={{1,2},{0}};

3. 二维数组的简单应用

3.1求最值

#include<stdio.h>
#define N 49
#define M 6
int main()
{
	int a[N][M],i,j;
	int max,min;
	for(i=0;i<N;i++)
		for(j=0;j<M;j++)
			scanf("%d",&a[i][j]);
	max=min=a[0][0];
	for(i=0;i<N;i++)
		for(j=0;j<M;j++)
		{
			if(a[i][j]>max)
				max=a[i][j];
			if(a[i][j]<min)
				min=a[i][j];
		}	
	printf("max:%d\nmin:%d\n",max,min);
	return 0;
}    

3.2 处理相应的数据

针对同学成绩问题,采用二维数组来实现,代码如下:

#include<stdio.h>
int main()
{
	double score[49][6],sum[49];
	int i,j;
	for(i=0;i<49;i++)
		for(j=0;j<6;j++)
			scanf("%lf",&score[i][j]);
	for(i=0;i<49;i++)
	{
		sum[i]=0;
		for(j=0;j<6;j++)
			sum[i]+=score[i][j];
		printf("%d:%lf\n",i,sum[i]);
	}	
	return 0;	
}   

在上述程序中,由于定义double sum[6];时没有初始化,所以在程序中需要sum[i]=0;其实,可以这样:
double sum[6]={0};
这样的话,数组sum中的6个元素均被初始化为0。

4. 其他的多维数组

还有三维、四维等等,int a[2][3][4];处理的时候需要三层循环嵌套。暂且不讨论了,掌握住一维和二维就可以了。

猜你喜欢

转载自blog.csdn.net/lvcongying0601/article/details/84107519
今日推荐