프로그래밍/C & C++ & C#

[C] 단위행렬 만들어보기

JellyApple 2021. 7. 4. 20:57

C언어 코딩도장 책에서 따온 문제로 학습 한 것을 복습하는 용도로 쓰는 게시글입니다. 

어려우신 분들은 함께 공부하면서 서로 피드백 받으면 좋겠습니다! 

댓글로 피드백 주시면 감사하겠습니다!

출처 : C 언어 코딩 도장: 38.7 심사문제: 단위행렬 만들기 (dojang.io) 

 

코딩 도장: 사이트에 로그인

사이트의 강좌를 수강하고 학습 효과를 최대한 높이려면 회원 가입이 필요합니다. '회원 가입' 버튼을 클릭한 후 가입 정보를 입력합니다.입력한 이메일 주소로 확인 메일이 즉시 전송됩니다.이

dojang.io

문제 : 표준 입력으로 정사각행렬의 크기가 입력됩니다(입력 값의 범위는 2~10). 입력된 크기만큼의 단위행렬을 출력하는 프로그램을 만드세요(scanf 함수 호출 전에 문자열을 출력하면 안 됩니다). 숫자와 숫자 사이는 공백으로 띄웁니다.

단위행렬은 왼쪽 위부터 오른쪽 아래까지의 대각선(주대각선)이 1이며 나머지는 모두 0인 행렬입니다.

정답에는 C 언어 컴파일러에서 정상적으로 컴파일되는 전체 코드를 입력해야 합니다. 

 CODE

<단위 행렬 코드 내용>

1. 가로,세로의 크기로 입력받을 정수형 변수 num를 선언해준다. 

2. 포인터를 배열로 활용하는 방법이므로 이를 위해 포인터에 동적 메모리를 할당해주는 malloc 함수를 사용함.

3. 세로 크기(num)만큼 반복하기 위해 for반복문 사용 후 그 안에서 r[i]배열의 가로 크기를 int * num 크기만큼 할당

4. memset 함수로 r[i]가 가리키는 메모리를 0으로 초기화(안에 있는 쓰레기 값을 없애주기 위함)

5. 세로 크기(num)만큼 반복할동안 2차원 배열 r[][] 중 i열i행을 1로 설정

6. 세로 크기,가로크기 만큼 반복할동안 2차원 배열 r[i][j] 출력 

7. free 함수로 가로,세로 공간 메모리 할당 해제  

출력결과 (입력 값 : 4)

 

배운 점

1. memset 함수로 초기화 하지 않으면 쓰레기 값으로 인해 무작위의 숫자가 나옵니다. 항상 초기화 하는 습관

2. 포인터를 배열로 활용하기 위해선 malloc 함수를 사용해줘야 하며 항상 free함수로 동적 메모리 해제 해줘야 한다.

= memory leak 예방 위해!

3. sizeof(int) , sizeof(int*) 크기가 64비트에선 다르기 때문에 (int = 4바이트 , int * = 8바이트) 확실히 구분해서 사용

'프로그래밍 > C & C++ & C#' 카테고리의 다른 글

[C] 문자열 자르기  (0) 2021.07.10
[C]공백 개수 출력하기  (0) 2021.07.10
[C]서수 줄임말 문자열 만들기  (0) 2021.07.07