博客主页:https://blog.csdn.net/weixin_46094737?type=blog
欢迎评论⭐留言 如有错误敬请指正!
本文由小学生廉原创,首发于 CSDN🙉🙉🙉
未来很长,值得我们全力奔赴更美好的生活!💞💞💞
今天看到了一张图很富有哲理,哈哈哈。人生就业图:
还是老规矩,我们先来看什么是二维数组:
1、二维数组的定义:数组类型 数组名[行号][列号]
例如:int arr[3][4]//定义一个3行4列的数组
int arr[3][4];
2、二维数组的初始化
需要注意的是整体赋值只能在定义的时刻进行初始化。
eg:int arr[4][3]={0};//初始化为0;
arr[4][3]={{22,66,44},{77,33,88},{25,45,65},{11,66,99}};
注意好花括号以及逗号,如果有数组中n行,上来直接先怼上n个花括号即可。
3、修改二维数组的值:
arr[1][2]=100 表示将二维数组arr[][]第2行第3列的值赋值为100
将二维数组arr视为一个矩阵,下图显示了数组中每个元素在矩阵中的存放位置。
数组中各个元素在矩阵中对应的位置由二维数组的两个下标决定。我们可以将定义的二维数组int arr[4][3]视为由arr[4]和int [3] 两部分构成,将arr[4]视为一个整型一维数组,其中含有4个元素:arr[0]、arr[1]、arr[2]、arr[3],每个元素都是int[3]类型的,也就是说,每个元素又是一个一维数组,每个一维数组含有3个元素,如arr[0]含有arr[0][1]、arr[0][1]、arr[0][2]三个元素。
4、二维数组的应用,将一个二位数组行列转置到另一个数组中。
其中核心的就在于:
arr_02[j][i]=arr_01[i][j]
#include <stdio.h>
int main()
{
int i,j,arr_01[3][5],arr_02[5][3];
printf("列:\t0\t1\t2\t3\t4\n");
printf("行:\n");
for(i=0;i<3;i++)
{
for(j=0;j<5;j++)
{
arr_01[i][j]=10*(i+1)+j;//赋予初始值
}
}
for(i=0;i<3;i++)
{
printf("%d",i);
for(j=0;j<5;j++)
{
printf("\t%d ",arr_01[i][j]);//打印数组
}
printf("\n");
}
for(i=0;i<3;i++)
{
for(j=0;j<5;j++)
{
arr_02[j][i]=arr_01[i][j];//交换数组行列的值
}
}
printf("\n");
printf("列:\t0\t1\t2\t\n");
printf("行:\n");
for(i=0;i<5;i++)
{
printf("%d",i);
for(j=0;j<3;j++)
{
printf("\t%d ",arr_02[i][j]);//打印数组
}
printf("\n");
}
return 0;
}
运行结果:
总结:C 语言中的多维数组基本的定义是以数组作为元素构成的数组,二维数组的数组元素是一维数组,三维数组的数组元素是一个二维数组,以此类推。也就是说,多维数组用的是一个嵌套的定义。
以上就是关于二维数组的定义、初始化以及部分应用。关于二位数组的应用还是非常多的,这里就不再赘述。
作业1 公司年销售额求和
某公司按照季度和月份统计的数据如下:单位(万元)
第一季度:22,66,44
第二季度:77,33,88
第三季度:25,45,65
第四季度:11,66,99
分析:这是一道比较简单的二维数组的应用,就是遍历完这个二维数组,然后把所有的元素值相加就可以了。
核心就是:sum += arr[i][j]
源代码:
#include <stdio.h>
int main()
{
int i,j,sum=0,arr[4][3]={{22,66,44},{77,33,88},{25,45,65},{11,66,99}};
for(i=0;i<4;i++)
{
printf("第%d季度的月度销售额分别为:",i+1);
for(j=0;j<3;j++)
{
printf("%d\t",arr[i][j]);
sum += arr[i][j];
}
printf("\n");
}
printf("年度销售总额为:%d",sum);
return 0;
}
运行结果:
作业2 打印杨辉三角形
分析:起初我是毫无头绪的,但是在考虑之后发现这个就是一个简单的二维数组元素的值找规律,规律也不难发现,随便举例3个数:
(4)(3)=(3)(2)+(3)(1)即3=2+1
归纳起来规律就是:
arr[i+1][j+1]=arr[i][j]+arr[i][j+1];
源代码:
#include <stdio.h>
int main()
{
int i,j,arr[6][6]={0};
printf("杨辉三角如下:\n");
for(i=0;i<6;i++)
for(j=0;j<6;j++)
arr[i][j]=1;//首先赋值都为1
for(i=1;i<6;i++)
{
for(j=0;j<i;j++)
arr[i+1][j+1]=arr[i][j]+arr[i][j+1];//判断条件,同时也是赋值条件
}
for(i=0;i<6;i++)
{
for(j=0;j<=i;j++)//只打印出数组左下角的元素值
printf("%d ",arr[i][j]);
printf("\n");
}
return 0;
}
运行结果:
在打印的时候需要注意,如果只打印出数组左下角半边的元素值需要给出if判断条件:j<=i
如果没有给出if判断条件的话,打印的数组元素会是这样的:
注意调试打印结果即可。
作业3 求5行5列二维数组主对角线(从左上角到右下角)上元素之和。
分析:我们已经做过很多求数组中所有元素的值,本题注意打印条件,对角线元素的值?对角元素的值有哪些规律呢?不难发现对角线元素的数组下标行和列相等(i==j)
发现这个规律,代码自然也不是大问题,本题我用了一个随机函数来给数组赋值,随便也复习一下随机数的生成:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int i,j,sum=0,arr[5][5]={0};
srand(time(0));
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
arr[i][j]=rand()%100+1;
}
}
for(i=0;i<5;i++)
{
printf("第%d行数值分别为:",i+1);
for(j=0;j<5;j++)
{
printf("%d\t",arr[i][j]);
}
printf("\n");
}
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
if(i==j)
{
sum += arr[i][j];
}
}
}
printf("对角线元素之和为:%d",sum);
return 0;
}
运行结果:
作业4 两个数组num1和num2,返回他们的交集(相同的元素值),交集保存到另外的数组。
分析:两个数组元素相等条件:if(arr_01[i][j]==arr_02[i][j]); 找出这个规律代码也就不是问题。
同样的,本题的数组元素赋值我也是利用随机数给出的。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int i,j,sum=0,arr_01[5][5]={0},arr_02[5][5]={0},arr[5][5];
srand(time(0));
printf("arr_01数组:\n");
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
arr_01[i][j]=rand()%50+1;//随机数赋值给数组1
}
}
for(i=0;i<5;i++)
{
printf("第%d行数值分别为:",i+1);
for(j=0;j<5;j++)
{
printf("%d\t",arr_01[i][j]);//打印数组1
}
printf("\n");
}
printf("arr_02数组:\n");
srand(time(0));
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
arr_02[i][j]=rand()%25+1;//随机数赋值给数组2
}
}
for(i=0;i<5;i++)
{
printf("第%d行数值分别为:",i+1);
for(j=0;j<5;j++)
{
printf("%d\t",arr_02[i][j]);//打印数组2
}
printf("\n");
}
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
if(arr_01[i][j]==arr_02[i][j]);
{
for(i=0;i<10;i++)
printf("%d ",arr_02[i][j]);
}
}
return 0;
}
运行结果: