어느덧 벌써!! 일주일 공부가 끝나간다
시간 참 빠르구나~ 싶다 오늘이면 3장도 끝이고...
그럼 거의 100페이지를 공부한 게 되는데... 하루에 20장은 한 셈!!
혼자 공부했으면 절대 하루에 20쪽씩 못 봤겠지 싶다 ㅠㅠ ㅋㅋ
아직 일주일 밖에 안 했으면서도 신청하길 잘했다 싶음
남은 기간도 파이팅
이중 반복문은 중첩 반복문이라고도 하는데,
for문 안에 for문을 겹치게 작성하는 것이다.
아래 예제를 통해 알아본다.
#include <stdio.h>
int main(void) {
for (int i = 1; i <= 3; i++) {
printf("첫 번째 반복문: %d\n", i);
for (int j = 1; j <= 5; j++) {
printf(" 두 번째 반복문: %d\n", j); //네 칸 들여씀
}
}
return 0;
}
첫 번째 for문은 i를 선언해 1로 초기화하고,
i가 3보다 작거나 같아지는 조건을 만족할 때까지 반복을 수행한다.
따라서, 문장 반복을 총 3회 수행하게 된다.
두 번째 for문은 printf()를 총 다섯 번 수행한다.
선언한 j가 5보다 커지면 두 번째 for문에서 벗어나 첫 번째 for문의 문장을 실행하고,
이후 다시 두번째 for문으로 돌아온다.
그리고 i가 3보다 작거나 같다는 조건과 맞지 않게 되면 반복문을 완전히 빠져나와 실행이 종료되게 된다.
이렇게 예제를 통해 이중 반복문이 어떻게 작동하는지를 알아봤다.
다음으로는 구구단 프로그램을 이중 반복문을 이용해 작성해 본다.
이번에도 지난 시간과 마찬가지로 책의 설명을 보기 전에 먼저 혼자 작성해 봤다.
#include <stdio.h>
int main(void) {
for (int i = 2; i <= 9; i++) {
printf("\n구구단 %d단\n", i);
for (int j = 1; j <= 9; j++) {
printf("%d x %d = %d\n", i, j, i * j);
}
}
return 0;
}
의도한 대로 잘 작성되었다!!
가장 처음에는 구구단이 2단까지만 출력되는 오류를 겪었는데,
내가 for문의 완전 바깥이 아닌 첫 번째 for문 안에 return 0;를 적어서 생긴 오류였다.
따로 찾아보았는데 return 0;은
운영체제에게 프로그램이 잘 끝났다는 것을 전달하고
main 함수에서 벗어나기 위해 사용된다고 한다.
두 번째 for문에서 벗어나 나왔는데 return 0;이 있으니
3단으로 넘어가지 못하고 바로 프로그램이 종료됐던 것 같다.
다음으로는 별표를 쌓는다!
전공 시간 실습 예제로 엄청나게 많이 봤던 문제인데...
뭔가 추억이다
이번에도 마찬가지로 그림으로 표시된 출력 예제를 보고
먼저 코드를 작성해 봤다.
#include <stdio.h>
int main(void) {
for (int i = 1; i <= 5; i++) {
for (int j = 1; j <= i; j++) {
printf("*");
}
printf("\n");
}
return 0;
}
오늘 왤케 잘함
미쳤다... 과연 컴공과
아무튼 이후 예제를 살펴봤다!
예제는 조건을 (int i = 0; i < 5; i++) 형식으로 작성했는데,
실행 결과만 같다면 내가 작성한 방식도 괜찮은 건지...? 싶었다
근데 마침 뒷장에 설명이 있었음!
+) 반복문에서 초깃값을 0부터 시작하는 이유
배열에는 여러 값이 연속된 공간 속에 순서대로 존재하고,
각 값은 인덱스Index를 통해 접근할 수 있다.
그리고, 배열의 인덱스는 0부터 시작한다.
따라서 for문을 이용해 배열의 모든 값에 접근하려면 i가 0부터 시작해야 하는 것!
때문에 보통은 for문의 i를 0부터 시작하게 만든다고 한다.
이런 부분은 습관을 들여놓으면 좋을 듯...
다음으론 오른쪽에 붙은 별을 쌓는다.
빈 공간은 스페이스 바를 이용해 공백을 넣으면 된다!
어떻게 하는 건지 대충 알겠어서 이번에도 먼저 작성해 봤음
순간 당황해서 눈을 의심함
근데... 결국은 고쳤다
#include <stdio.h>
int main(void) {
for (int i = 0; i < 5; i++) { //안의 반복문을 5번 실행
for (int j = i; j < 4; j++) { //공백 넣기
printf(" ");
}
for (int k = 0; k <= i; k++) { //별표 출력
printf("*");
}
printf("\n");
}
return 0;
}
첫 번째 for문은 안의 반복문들을 총 다섯 번 반복시키는 역할을 한다.
두 번째 반복문은 공백을 출력하는데,
탑의 가장 마지막 층에는 공백이 필요하지 않으니 반복문의 조건을 j < 4;라고 설정했다.
마지막 반복문은 별표를 출력하는 역할이다. k <= i;라는 조건을 추가해
각 줄에 알맞은 수의 별표가 출력될 수 있게끔 했다.
마지막으로, 3장을 마무리하며
피라미드를 쌓아라 게임을 실제로 만들어 본다.
가장 먼저, 피라미드를 몇 층까지 쌓을 것인지를
printf()와 scanf_s()를 이용해 플레이어에게 입력받는다.
#include <stdio.h>
int main(void) {
int floor;
printf("몇 층으로 쌓겠습니까? (5~100) ");
scanf_s("%d", &floor);
return 0;
}
이후 입력받은 층의 수만큼 피라미드를 쌓는 반복문을 작성한다.
아까의 예제처럼 총 세 개의 반복문을 사용한다.
반복문 1) 피라미드를 floor만큼 쌓는 역할을 한다.
i는 0, i는 floor보다 작거나 같아야 하고, i는 반복할 때마다 한 층씩 증가한다.
반복문 2) 피라미드를 정삼각형 모양으로 만드는 역할을 한다.
가장 마지막 층에는 공백이 필요하지 않으므로 조건은 j가 floor - 1보다 작게끔 한다.
반복문 3) 별표를 이용해 피라미드를 표시하는 역할이다.
피라미드는 1, 3, 5, 7, 9와 같이 층이 낮아질수록 2씩 별의 수가 증가한다.
이를 위해 i에 2를 곱한 다음 1을 더하면 될 것 같다.
마지막으로, 층을 바꾸기 위해 줄 바꿈을 한다.
#include <stdio.h>
int main(void) {
int floor;
printf("몇 층으로 쌓겠습니까? (5~100) ");
scanf_s("%d", &floor);
for (int i = 0; i <= floor; i++) {
for (int j = i; j <= floor - 1; j++) {
printf(" ");
}
for (int k = 0; k < i * 2 + 1; k++) {
printf("*");
}
printf("\n");
}
return 0;
}
의도한 대로 잘 작동하는 것을 확인했다!!
지금까진 딱히 막힌다는 느낌 없이 수월히 따라올 수 있었는데,
하다 보니 확실히 내용이 점점 어려워지고 있는 것 같다...
주말에는 배운 내용 복습할 겸 문제도 몇 개 풀어보고,
다음 주에 배울 내용들도 한번 가볍게 훑어볼 예정!!
다시 다음 주부터 파이팅 @.@
이번 주 공부 끝!
'Programming > C, C++' 카테고리의 다른 글
코딩 자율 학습단 7일차 - switch (1) | 2024.07.01 |
---|---|
코딩 자율 학습단 6일차 - 조건문과 break (1) | 2024.06.30 |
코딩 자율 학습단 4일차 - 반복문 (0) | 2024.06.21 |
코딩 자율 학습단 3일차 - 출력하기, 입력받기 (0) | 2024.06.20 |
코딩 자율 학습단 2일차 - 변수, 상수 (0) | 2024.06.18 |