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 할 때 초록 밑줄이 그이더라...
이유는 알게되면 추가하겠음
'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 |