조건문과 루프? 이걸로 뭘 할 수 있을까?
또 한번 스크래치를 예로 들어야할 것 같다. 이 정도면 '또크래치' 라고 불러도 될 정도로 C언어의 개념을 모두 포함하고 있다. 우선 다음 사진을 보자.
스크래치에서는 왼쪽과 같이 counter라는 변수를 만들고 0을 저장하기 위해 이런 모양의 블록을 사용했었다. C언어로 동일한 효과를 내고자 하면 오른쪽과 같이 작성하면 되는데, 하나하나 뜯어보면 별거 아니다.
- int : 변수가 정수(integer) 라는 것을 알려주는 것
- counter : 변수. 그저 이름일 뿐이니 다른 단어로 바꿔도 되지만 보통 프로그래머들은 뭔가를 셀 때 정수를 나타내는 ''i' 를 쓴다.
- = : '오른쪽의 내용이 왼쪽의 변수이다.'
- ; : 코드의 끝엔 언제나 세미콜론!
자 그럼 이제 counter 라는 변수가 0이라는 것이 설정됐다. 다음으로 스크래치에서 했던 것처럼 1씩 증가시키려면 어떻게 해야 할까?
이렇게 무려 3가지 방법이나 있다. 그런데 이 코드들 앞에 'int'가 붙지 않는 이유가 뭘까? 앞서 작성한 코드에서 이미 counter에 대해 선언했고 (counter는 0이다) 이미 컴퓨터에게 counter라는 변수에 정수 값을 저장할 것이라고 말해줬기 때문에(int counter = 0;) counter가 존재한다는 가정 하에 int를 붙이지 않은 것이다.
if, else, if else
위 내용을 글로 한 번 풀어 써보면 다음과 같다.
"만약 x가 y보다 작으면 'x is less than y' 라고 말하고, 그렇지 않다면 'x is not less than y' 라고 말해라"
정리하자면 if ( ) 의 괄호 안에는 검사하고자 하는 조건이 들어가고, { } 안에는 조건을 만족할 때 수행하고자 하는 작업이 들어간다. 여기에서는 조건이 True면 "x is less than y"를 출력을 하라는 것이다. else를 이용하면 처음 조건이 아닌 경우에는 어떤 것을 하라라고 할 수 있다.
그럼 이제 else if 에 대해 알아보자. 사전에 검색해봤을 때 딱히 정의가 나오지 않는데, 내 주관적인 해석을 써보자면 '그게 아니라 만약' 이라고 할 수 있겠다. 자세한 건 좀 더 찾아봐야 하겠지만 우선 어떤 흐름인지 이해할 수 있으니 넘어가겠다.
Loop!
마지막으로 우리가 스크래치에서 사용했던 'forever' 이나 'repeat 50' 과 같은 루프에 대해 설명해보고자 한다. 무언가를 계속 반복하는 것을 루프라고 한다. C에서는 while 이나 for 을 통해 루프를 구현할 수 있다. 먼저 while 의 경우 아래 코드와 같이 while ( )의 괄호 안에 조건을 넣고 { } 안에 수행할 작업을 포함시키면 된다. () 안에는 5=5, 1<2 와 같은 값을 써도 되지만 true, false 로도 표현이 가능하다. 위 코드를 실행하면 무한히 hello, world 가 작성될 것이다. 그렇다면 특정 횟수만큼 반복하고 싶으면 어떻게 해야할까?
위와 같이 코드를 입력하면 진행 순서는 다음과 같다.
i는 0으로 설정 -> i는 50보다 작은가? -> 작다 -> hello world를 출력한다 -> i를 1증가시킨다 -> i가 50보다 작은가?
-> (반복) -> i가 50보다 작은가? -> 작지 않다 -> 종료
처음에 i라는 변수가 0이라는 것을 설정해주고 'i가 50보다 작으면' 이라는 조건을 만든다. 작다면 'hello, world' 가 써지고 그와 동시에 i는 1을 더한 값으로 바뀐다. 이 과정이 반복되어 i가 50이 되는 순간 프로그램이 멈추는 것이다.
for 은 while에 비해 코드 길이를 짧게 만들 수 있다. 6줄을 4줄로 바꾸면서 동일한 효과를 내는 것이다.
마지막으로 본 강의 과제를 해결한 사진으로 끝내고자 한다. 문제는 '개발 공부는 재미있다!' 를 10번 출력하는 코드를 만들라는 것이었다.
'Programming > 1. boostcourse - 'CS50'' 카테고리의 다른 글
Ep 3-4. 자료형, 형식 지정자, 연산자 (0) | 2021.04.08 |
---|---|
Ep 3-2. 문자열 (1) | 2021.04.07 |
Ep 3-1. C언어 기초 (0) | 2021.04.07 |
Ep 2-3. 컴퓨팅 사고_Scratch (0) | 2021.04.07 |
Ep 2-2. 컴퓨팅 사고_정보의 표현, 알고리즘 (0) | 2021.04.07 |
댓글