-
Mario | CS50 Week 1Computer Science/CS 50 Harvard 2021. 11. 7. 00:36
이때까지 학습한 내용으로 블록을 프린트하는 간단한 프로그램을 만들어보자.
Question Marks
#include <stdio.h> int main(void) { printf("????\n"); }
조금더 발전시켜서, for loop을 이용해서 n만큼의 물음표를 프린트하게도 할 수 있다.
#include <stdio.h> int main(void) { int n = 4; for (int i = 0; i < n; i++) { printf("?"); } printf("\n"); }
네개의 물음표(?)들을 프린트하는 프로그램이다. 컴파일 후 실행시킬수 있다.
> make mario_blocks clang mario_blocks.c -lcs50 -o mario_blocks > ./mario_blocks ????
이번엔 유저에게 인풋을 받아서 그만큼의 물음표를 프린트 할 수 있다. do/while loop을 이용해서, n이 1보다 작다면 다시 물어보게끔 하면, 0 또는 negative(음수)를 입력한 경우, 다시 물어볼 수 있다.
#include <cs50.h> #include <stdio.h> int main(void) { int n; do { n = get_int("Width: "); } while (n < 1); for (int i = 0; i < n; i++) { printf("?"); } printf("\n"); }
do/while loop에 대해 조금더 자세하게 설명하자면, do 안쪽에 있는 동작을 한 후, while의 condition에 해당하는지를 체크한다. 만약 true이면 이 동작을 계속 하는것이다. n이라는 variable을 선언해두었고, get_int를 이용해서 유저의 input을 받는다. 즉, 유저가 타입한 숫자가 n에 저장되게 된다. 그리고 n이 1보다 작은지 체크를 한 후, 작다면 다시 do 안에 있는 동작을 반복하고, 아니면 for loop으로 이동해서 n개만큼의 물음표를 프린트한다.
아래와 같이 컴파일 후에, 실행해보자.
> make mario_blocks clang mario_blocks.c -lcs50 -o mario_blocks > ./mario_blocks Width: 0 Width: -1 Width: 8 ????????
Square Box
이번에는 인풋을 받아서 n * n 사이즈의 #으로 이루어진 박스를 프린트해보자. 즉, two-dimensional set의 블록들을 nested loop을 이용해서 코딩해보자.
#include <cs50.h> #include <stdio.h> int main(void) { int n; do { n = get_int("Size: "); } while (n < 1); // For each row for (int i = 0; i < n; i++) { // For each column for (int j = 0; j < n; j++) { // Print a brick printf("#"); } // Move to next row printf("\n"); } }
2개의 for loop이 엮어있는 nested loop이 있다. 바깥쪽, 즉 outer loop을 i를 이용하고 n 만큼의 동작을 반복한다. 안쪽, 즉 inner loop은 j를 이용하고, 역시 n만큼 어떤 동작을 반복한다. 다시 말하면 outer loop은 n개의 줄을 프린트하고 끝에 새로운 줄을 위해 new line("\n")을 붙여준다. inner loop에서는 n만큼의 # characters를 프린트해준다. 컴파일 후 동작시켜보자.
> make mario_square clang mario_square.c -lcs50 -o mario_square > ./mario_square Size: 2 ## ## > ./mario_square Size: 5 ##### ##### ##### ##### #####
do/while이 아니라, break를 사용한 while loop으로도 코딩해볼 수 있다.
#include <cs50.h> #include <stdio.h> int main(void) { int n; while (true) { n = get_int("Size: "); if (n > 1) { break; } } // For each row for (int i = 0; i < n; i++) { // For each column for (int j = 0; j < n; j++) { // Print a brick printf("#"); } // Move to next row printf("\n"); } }
break를 이용하면 while loop에서 또는 for loop에서 중간에 나갈 수 있다. 만약 위 예시에 break가 없다면, loop은 정지 없이 끊임없이 돌기 때문에 프로그램은 원하는대로 동작하지 않을것이다.
Reference
'Computer Science > CS 50 Harvard' 카테고리의 다른 글
mario stairs | CS50 Week 1 (0) 2021.11.07 Imprecision, overflow | CS50 Week 1 (0) 2021.11.07 Loops, functions | CS50 Week 1 (0) 2021.11.06 Conditionals, Boolean expressions | CS50 Week 1 (0) 2021.11.06 Calculations | CS50 Week 1 (0) 2021.11.06