본문 바로가기
ProgrammingLanguage/C언어

C언어 | 2차원 배열 + 이중 포인터 예제

by 씽쌩쏭 2021. 2. 14.
728x90

✅ 오늘의 문제 : 행렬 곱 구하기

 

3X3 행렬 2개를 선언하고, 값을 입력받은 뒤 두 행렬의 곱을 구해보세요.

 

(코뮤니티 모각코 과정 中 출제된 문제입니다.)

 

 

더보기

행렬 곱 계산하는 법

이런 행렬이 있다고 치면
이렇게 ! a의 1행과 b의 1열을 곱하고... a의 1행과 b의 2열을 곱하고...이런 느낌
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main() {

	int arr1[3][3]; //행렬 A
	int arr2[3][3]; //행렬 B
	int arr3[3][3]; //행렬 C (행렬 곱 결과 값 담을 행렬)
	int i, j, k;
	int(*ptr1)[3] = arr1; // arr1[i][j] == *(*(ptr1+i)+j
	int(*ptr2)[3] = arr2; // arr2[i][j] == *(*(ptr2+i)+j
	int(*ptr3)[3] = arr3; // arr3[i][j] == *(*(ptr3+i)+j


	//행렬A 입력받기
	printf("[ 행렬 A ]\n");
	for (i = 0; i < 3; i++) {
		for (j = 0; j < 3; j++) {
			scanf("%d", &(*(*(ptr1+i)+j)));
		}
	}

	//행렬B 입력받기
	printf("[ 행렬 B ]\n");
	for (i = 0; i < 3; i++) {
		for (j = 0; j < 3; j++) {
			scanf("%d", &(*(*(ptr2+i)+j)));
		}
	}

	//행렬A 출력
	printf("[ 행렬 A ]\n");
	for (i = 0; i < 3; i++) {
		for (j = 0; j < 3; j++) {
			printf("%4d", (*(*(ptr1 + i) + j)));
		}
		printf("\n");
	}

	//행렬B 출력
	printf("[ 행렬 B ]\n");
	for (i = 0; i < 3; i++) {
		for (j = 0; j < 3; j++) {
			printf("%4d", (*(*(ptr2 + i) + j)));
		}
		printf("\n");
	}

	//행렬 곱 계산 및 출력
	for (i = 0; i < 3; i++) {
		for (j = 0; j < 3; j++) {
			arr3[i][j] = 0;
			for (k = 0; k < 3; k++) {
				*(*(ptr3 + i) + j) += (*(*(ptr1 + i) + k)) * (*(*(ptr2 + k) + j));
			}
		}
	}

	printf("[ 행렬 곱 ]\n");
	for (i = 0; i < 3; i++) {
		for (j = 0; j < 3; j++) {
			printf("%4d", arr3[i][j]);
		}
		printf("\n");
	}

	return 0;
}

 

이 날은 피드백을 못받았다...그래서

모범답안?? 과 비교해봄!!

 

처음에 행렬 선언할 때 초기화 해주는 거 빼고는 별 다를 것 없어서...패스

 

초기화를 하면 오히려 scanf 할 때 초록 밑줄이 그이더라...

이유는 알게되면 추가하겠음

 

행렬 A, B 입력받기
출력!

'ProgrammingLanguage > C언어' 카테고리의 다른 글

C언어 | 무한루프 예제  (0) 2021.02.14
C언어 | 함수 포인터 예제  (0) 2021.02.14
C언어 | 이중 포인터 예제  (0) 2021.02.14
C언어 | 2차원 배열 예제  (0) 2021.02.14
C언어 | 구조체 예제  (2) 2021.02.14