二维数组知识要点总结+作业练习

博客主页: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 55列二维数组主对角线(从左上角到右下角)上元素之和。

分析:我们已经做过很多求数组中所有元素的值,本题注意打印条件,对角线元素的值?对角元素的值有哪些规律呢?不难发现对角线元素的数组下标行和列相等(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;
}

运行结果:

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不掉头发的程序猿_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值