1. 程式人生 > >用C語言計算矩陣邊緣元素之和

用C語言計算矩陣邊緣元素之和

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 輸出資料