用C語言計算矩陣邊緣元素之和
阿新 • • 發佈:2018-11-27
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
2 程式碼
#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"); }