用C语言计算矩阵边缘元素之和

版权声明:如有转载复制请注明出处,博主QQ715608270,欢迎沟通交流! https://blog.csdn.net/qq_41000891/article/details/83863941

1 题目描述

1.1 题目描述

输入一个整数矩阵,计算位于矩阵边缘的元素之和。所谓矩阵边缘的元

素,就是第一行和最后一行的元素以及第一列和最后一列的元素。

1.2 输入要求

1.第一行为整数k,表示有k组数据。

2.每组数据由多行组成,表示一个矩阵。

3.第二行分别为矩阵的行数m和列数n(m < 100,n < 100),两者之间以空格进行分割。

4.接下来输入的m行数据中,每行包括n个整数,整数之间以空格作为间隔。

1.3 输出要求

输出对应矩阵的边缘元素之和,一行一个。

1.4 样例输入

2

4 4

1 1 1 1

0 0 0 0

1 0 1 0

0 0 0 0

3 3

3 4 1

3 7 1

2 0 1

1.5 样例输出

5

15

 

代码

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

/*对矩阵长宽限制进行初始化定义*/
#define MAX_LENGTH 100
#define MAX_HEIGHT 100
#define MAX_COUNT 10

/*定义矩阵数据描述结构体*/
typedef struct Pic_data_all
{
	int pic_data[MAX_COUNT][MAX_HEIGHT][MAX_LENGTH];
	int pic_area[MAX_COUNT][2];
}Pic_data_all_list;

/*用户输入数据处理函数(即计算矩阵的边界值之和)*/
int calculate_border(Pic_data_all_list pic_data_all, int count)
{
	/*初始化矩阵边界和值*/
	int border_sum = 0;

	/*进行边界和求解*/
	for (int j = 0; j < pic_data_all.pic_area[count][0]; j++)
	{
		for (int k = 0; k < pic_data_all.pic_area[count][1]; k++)
		{
			if (j == 0 || j == pic_data_all.pic_area[count][0]-1 || k == 0 || k == pic_data_all.pic_area[count][1]-1)
			{
				border_sum += pic_data_all.pic_data[count][j][k];
			}
		}
	}

	/*返回最终的边界值之和*/
	return border_sum;
}

/*执行主函数*/
int main(int argc, char* argv[])
{
	printf("—————以下是程序录入的过程—————\n\n");

	/*要求用户输入一个整数,表示数据的组数*/
	int data_count;
	printf("步骤1——请输入一个整数,用来说明你将要输入几组数据:\n");
	scanf("%d", &data_count);

	/*矩阵通用宽高定义*/
	int array_length;
	int array_height;

	/*定义数据存储结构*/
	Pic_data_all_list pic_data_all;

	

	/*用户进行矩阵数据录入*/
	for (int i = 0; i < data_count; i++)
	{
		/*用户输入矩阵行列数*/
		printf("步骤%d——请输入第%d组矩阵数据的行数和列数,以空格分割:\n",2 * i + 2, i + 1);
		scanf("%d", &array_height);
		scanf("%d", &array_length);

		/*该矩阵长宽存储*/
		pic_data_all.pic_area[i][0] = array_height;
		pic_data_all.pic_area[i][1] = array_length;

		/*初始化矩阵数据*/
		for (int j = 0; j < array_height; j++)
		{
			for (int k = 0; k < array_length; k++)
			{
				pic_data_all.pic_data[i][j][k] = 0;
			}
		}

		/*用户输入矩阵具体数据*/
		printf("步骤%d——请按照上面所填函数和列数输入第%d个矩阵的数据,以空格分割,回车换行:\n",2 * i + 3, i + 1);
		for (int j = 0; j < array_height; j++)
		{
			for (int k = 0; k < array_length; k++)
			{
				scanf("%d", &pic_data_all.pic_data[i][j][k]);
			}
		}
	}

	printf("—————以下是程序输出的结果—————\n\n");

	/*用户数据处理并且打印结果*/
	for (int i = 0; i < data_count; i++)
	{
		/*用户数据处理*/
		int border_sum = 0;
		border_sum = calculate_border(pic_data_all, i);

		/*用户数据打印*/
		printf("——结果%d——\n", i + 1);
		printf("下面是您输入的第%d个矩阵数据:\n", i + 1);
		for (int j = 0; j < pic_data_all.pic_area[i][0]; j++)
		{
			for (int k = 0; k <  pic_data_all.pic_area[i][1]; k++)
			{
				printf("%4d", pic_data_all.pic_data[i][j][k]);
			}
			printf("\n");
		}
		printf("第%d个矩阵的行数为%d,列数为%d,且所有的边缘数字之和为%d.\n\n", i + 1, pic_data_all.pic_area[i][0], pic_data_all.pic_area[i][1], border_sum);

	}

	system("pause");
}

3 测试结果 

3.1 输入数据

3.2 输出数据

猜你喜欢

转载自blog.csdn.net/qq_41000891/article/details/83863941