概述
目录
- 一、二维数组的定义和引用
- 二、二维数组的初始化
- 三、杨辉三角
- 四、二维数组做函数参数
一、二维数组的定义和引用
1、定义
类型名 数组名[行数][列数]
int a[3][2];
定义二维数组a,3行2列,6个元素
2、引用:先定义,后使用
数组元素的引用:
数组名[行下标][列下标]
行下标和列下标:整数表达式
行下标的取值范围是[0,行数-1]
列下标的取值范围是[0,列数-1]
int a[3][2];3行2列,6个元素
a[0][0] a[0][1]
a[1][0] a[1][1]
a[2][0] a[2][1]
二、二维数组的初始化
1、分行赋初值
int a[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
static int b[4][3] = {{1,2,3}.{4},{5,6}}
2、顺序赋初值
int a[3][3] = {1,2,3,4,5,6,7,8,9};
static int b[4][3] = {1,2,3.4,0,0,5,6,0}
二维数组初始化时可以不给出行数:
int a[][3] = {1,2,3,4,5,6,7,8,9}
编译器会根据初值的个数和数组的列数计算出数组的行数,但建议不要省略
3、用二重循环处理二维数组
行下标和列下标分别作为循环变量,通过二重循环,遍历二维数组
通常将行下标作为外循环的循环变量
for(i = 0;i < m;i++)//i从0到m-1,处理m行
{
for(j = 0;j < n;j++)//处理第i行的第n列
{}
}
4、二维数组的输入
int a[3][4];
for(i = 0;i < 3;i++)
{
for(j = 0;j < 4;j++)
scanf("%d",&a[i][j]);
}
5、二维数组的输出
int a[3][4];
for(i = 0;i < 3;i++)
{
for(j = 0;j < 4;j++)
printf("%dn",a[i][j]);
}
三、杨辉三角
解决问题:输出杨辉三角的前n行(n < 20),
每个元素占6列。杨辉三角形是形如:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
的三角,其实质是二项式(a + b)的n次方展
开后各项的系数排成的三角形,它的特点是左
右两边全是1,从第二行起,中间的每一个数是
上一行相邻两个数之和。
#include<stdio.h>
#define N 15
int main(void)
{
int a[N][N];
int i,j,n;
printf("请输入要输出杨辉三角形的行数n:n");
scanf("%d",&n);
a[0][0] = a[1][0] = a[1][1] = 1;//初始化第一行和第二行的元素为0
for(i = 2;i < n;i++)//从第二行起,每行的第一列和对角线上的元素为0,用for循环初始化
{
a[i][0] = a[i][i] = 1;
}
/*中间的数用递归的方法计算,中间的数为上一行a[i-1][j]与前一个数
a[i-1][j-1]之和*/
for(i = 2;i < n;i++)
{
for(j = 1;i < i ;j++)
{
a[i][j] = a[i-1][j] + a[i-1][j-1];
}
}
//输出每个元素,注意要使用换行符
for(i = 0;i < n;i++)
{
for(j = 0;j <= i;j++)
{
printf("%6d",a[i][j]);
}
printf("n");
}
return 0;
}
四、二维数组做函数参数
若将一个二维数组作为实际参数传递给函数,只需不带方括号的数组名即可;
因为数组名代表数组首元素的地址,因此数组名作参数就可以将数组的起始地址传递给形参。
/*声明形参数组时可以忽略第一维的长度,如:*/
int SumArr( int a[5][10]);
int SumArr( int a[][10]);
//不能省略除第一维之外的其他维数组,
//因为多维数组在C语言的存储方式是“先行后列”
一般情况下,数组实际元素的行数和列数,常常小于数组定义时指定的行数和列数,故传递数组时常常需要传递实际使用的行数和列数
而实际存储的是一个3行4列的矩阵:
则函数调用SumArr()计算该矩阵所有元素和时,调用语句可写为:SumArr(a,3,4);
例题:定义函数分别实现二维数组的输入、求和,并在main()中调用,完成二维数组的输入,并求出二维数组中所有元素的和。
#include<stdio.h>
#define N 20
void InputArr(int a[][N],int m, int n);
int SumArr(int a[][N],int m,int n);
int mian(void)
{
int a[N][N];
int m,i,n;
printf("请输入函数m和列数n:n");
scanf("%d%d",&m,&n);
printf("请输入%d行%d列n",m,n);
InputArr(a,m,n);
printf("数组元素的和为:%dn",SumArr(a,m,n));
return 0;
}
void InputArr(int a[][N],int m, int n)
{
int i,j;
for(i = 0;i < m;i++)
{
for(j = 0;j < n;j++)
{
scanf("%d",&a[i][j]);
}
}
}
int SumArr(int a[][N],int m,int n)
{
int i,j;
int sum = 0;
for(i = 0;i < m;i++)
{
for(j = 0;j < n;j++)
{
sum += a[i][j];
}
}
return sum;
}
最后
以上就是完美天空为你收集整理的易懂的二维数组基础的全部内容,希望文章能够帮你解决易懂的二维数组基础所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复