computer-science-c-post3

boost course의 강의 내용으로 공부를 진행하였습니다.

조건문과 루프

스크래치에서 블록으로 표현했던 조건문과 루프 또한 C로 동일하게 구현할 수 있습니다. 스크래치에서 여러 기능을 가진 블록들을 이어붙였던 것 처럼 C의 다양한 문법을 이용하면 조건문과 루프를 더 간단한 텍스트 형식으로 표현할 수 있습니다.

학습 목표

조건문과 루프를 c로 작성할 수 있습니다.

핵심 단어

  • int
  • if
  • while
  • for

스크래치에서 counter 라는 변수를 생성하고 0을 저장하기 위해서는 아래와 같은 블록을 사용하였었습니다.

1

저번 강의에서 말씀드렸던 C는 오래된 언어라 저장하고자 하는 변수의 종류를 꼭 알려줘야 한다는 것을 기억하시나요?

우리는 counter라는 변수에 숫자를 저장하고 싶습니다.

여기서 int 는 변수가 정수(integer)라는 것을 알려주는 것이고, counter는 변수의 이름, 0은 그 값에 0을 저장(초기화)하는 것입니다.

그리고 코드의 마지막은 세미콜론(;)을 붙여주는 것도 잊으시면 안됩니다!

저번 강의에서도 말씀드렸듯이 여기서 등호(=)는 같다는 의미가 아닌, 오른쪽에 있는 값을 왼쪽에 할당한다는 의미인 것도 기억해주세요.

스크래치에서 변수의 값을 1씩 증가시키는 것을 해보았습니다. 그럼 C에서는 어떻게 하면 될까요?

2

즉, counter에 1을 더한 값을 다시 counter에 저장(할당)한다는 의미가 됩니다.

“=은 오른쪽에서 왼쪽이다”를 기억해 주세요!

이를 더 간단하게 아래 두 가지 방식으로 수행할 수도 있습니다.

3

4

이런 다양한 방법을 통해 더욱 보기 좋고 간결하게 활용할 수 있도록 해줍니다.

마찬가지로 스크래치의 조건문 블록을 C코드로 나타내볼 수 있습니다.

5

f ( ) 의 괄호 안에는 검사하고자 하는 조건이 들어가고, { } 안에는 조건을 만족할 때 수행하고자 하는 작업이 들어갑니다.

여기에서는 조건이 True면 “x is less than y”를 출력을 하라는 것입니다.

else를 이용해 처음 조건이 아닌 경우에는 어떤 것을 하라라고 적어줄 수 있습니다.

6

이 경우에는 첫 번째 x < y 조건이 False, 즉 x가 y보다 작지 않을 경우에는 “x is not less than y”를 출력하라는 것입니다.

else if 를 통해서 아래와 같이 조건을 추가할 수도 있습니다.

7

여기서 한 가지 이상한 점이 있습니다.

바로 == 입니다.

이전 강의에서 =는 할당 연산자라고 말씀드렸습니다.

이미 등호 표시 하나를 할당 연산자로 정해버린 것이죠

그럼 이제 같다는 것을 어떻게 표현하지에 대한 난관에 봉착한 것입니다.

오래전 사람들이 합의하길 =을 2개 사용하여 같다를 표현하자라고 정한 것입니다.

이를 일치 연산자라고 합니다.

여기서 한 가지 또 알아가야 할 것이 있습니다.

if(x < y), else if (x > y), else if (x == y) 이렇게 3개의 조건문을 사용했습니다.

하지만 여기서 한 가지 굳이 물어볼 필요가 없는 것이 있습니다.

바로 else if (x == y) 입니다.

만약 x가 y보다 작지도 크지도 않다면 우리에게 남은 유일한 가능성은 x와 y가 같다는 것 입니다.

따라서 위의 코드를 수정하면 아래와 같습니다.

8

이렇게 좀 더 간결하게 만들 수 있습니다.

이렇듯 얼마나 효율적으로 코딩을 하는지, 혹은 얼마나 적은 메모리나 CPU를 사용해서 수행하는지는 정말 중요합니다.

추가로 if, else, else if 뒤에는 세미콜론(;)이 붙지 않은 것을 볼 수 있습니다.

보통 조건과 같은 것들의 끝에는 세미콜론을 붙이지 않습니다.

루프

마지막으로 스크래치에서의 루프는 “forever” 또는 “repeat 50”과 같은 블록을 통해서 수행했었습니다.

무언가를 계속 반복하는 것이였죠

C에서도 while 이나 for 을 통해서 루프를 구현할 수 있습니다.

9

먼저 while 의 경우 아래 코드와 같이 while ( )의 괄호 안에 조건을 넣고 { } 안에 수행할 작업을 포함시키면 됩니다.

즉, C에서 루프를 구현하고 싶다면 성립 조건을 정해줘야 합니다.

답이 네, 참, 혹은 1로 나올 수 있는 질문을 던져줘야 하는 것이죠

답이 참으로 나오게 하는 방법은 여러가지가 있을 수 있습니다.

5=5, 1<2 등등 하지만 가장 간단한 방법은 그냥 true를 적는 것입니다.

아래 코드에서는 true라는 항상 참이 되는 조건을 통해 while 루프가 영원히 수행되도록 합니다.

따라서 위의 코드는 계속해서 “hello, world”를 무한정 출력하게 될 것입니다.

만약 특정 횟수만큼 작업을 수행하고 싶으면 어떻게 할까요?

10

자 이제는 좀 더 프로그래머스럽게 작성을 해보겠습니다.

counter라는 변수는 너무 긴 단어입니다.

그래서 프로그래머들은 무언가를 셀 때 간단하게 정수를 나타내는 i를 사용합니다.

물론 변수명은 맘대로 적어도 문제는 없습니다.

다시 while문으로 돌아가서 이번에는 i<50이라는 조건을 추가해줍니다.

우리는 처음에 i를 0이라고 정해주었고 while는 계속해서 i가 50보다 작은지를 물어볼 것입니다.

따라서 이 코드가 정상적으로 작동하려면 i를 증가시켜야 합니다. (i = i + 1, i += 1, i++ 모두 같은 결과를 냅니다.)

진행 순서를 정리해보자면 아래와 같습니다.

i는 0으로 설정 -> i는 50보다 작은가? -> 작다 -> hello world를 출력한다 -> i를 1증가시킨다 -> i가 50보다 작은가? -> (반복) -> i가 50보다 작은가? -> 작지 않다 -> 종료

따로 변수를 선언해도 되지만 아래와 같이 for 를 사용하면 for ( ) 안에 각각 (변수 초기화; 변수 조건; 변수 증가) 에 해당하는 코드를 넣어서 간단하게 표현할 수 있습니다.

즉, 가장 먼저 정수 값을 가지는 i라는 변수를 0으로 초기화하고, i가 50인지 매번 검사를 하고, 이를 만족하면 { } 안의 내용을 수행한 후에, i를 1씩 증가시킨다는 의미입니다.

11

while문과 비교하여 코드가 엄청 간단해진 것을 확인할 수 있습니다.

Ciffor.pdf