[CS] TIL 4. 조건문과 루프, 자료형(형식 지정자, 연산자)


  1. 조건문과 루프를 c로 작성할 수 있다.
  2. 다양한 데이터 타입과 형식 지정자를 나타내는 방법을 학습한다.
  3. 다양한 연산자를 이용하여 조건문을 표현하는 방법을 학습한다.


boostcourse모두를 위한 컴퓨터 과학 (CS50 2019) 강의를 듣고 정리한 필기입니다. 😀


1. 조건문과 루프

1.2 조건문

title

위의 식은 조건이다. “뭔가가 참이면 이것을 해라”와 같은 식으로 수행된다. if()의 안에 조건이 들어가고, 그다음 줄부터 시작하는 {}에는 조건이 참일 때 수행하고자 하는 작업이 들어간다. 여기서 조건은 X가 Y보다 작은가? 이고, 이것이 True면 “x is less than y”를 출력하게 한다.

title

x가 y보다 작지 않을 경우에 “x is not less than y”를 출력하고 싶다. else를 사용해 또 다른 중괄호를 만들면 된다. 여기서 재미있는 것은 ;(세미콜론)은 두 개밖에 사용이 안 된다는 것이다. 보통 조건과 같은 것들의 끝에는 ;(세미콜론)을 붙이지 않는다. 반면 함수가 들어간 줄들은 세미콜론을 붙인다. 무조건 적인 약속은 아니지만, 모든 줄에 세미콜론을 붙이고 싶지 않다면 어떠한 행동(action) 뒤에만 붙이면 된다.

title

조건은 딱 두 개만 있을까? x 와 y가 같을 때는 어떻게 해야 할까. 이럴 때 사용하는 것이 else if 이다. else if를 사용해 또 다른 중괄호를 만들고, 중괄호 사이에 출력하고자 하는 메시지를 printf()를 사용해서 쓰면 된다.[TIL3. C 기초 =는 오른쪽의 내용을 왼쪽에 집어넣는 할당 연산자라고 말했다. 같다, 틀리다를 표현하기 전에 이미 한 개의 등호 표시를 할당 연산자로 정해버린 것이다. 해서 사람들은 =을 두 개 사용하여 같다는 표현을 했다. 이것을 일치 연산자라고 부른다.

title

이것을 좀 더 간단하게 나타내볼 수 있다. x < y, x > y, x == y 이 세 개의 조건 중 하나를 생략할 수 있다. 조건 두 개에 해당하지 않은 것은 자연스럽게 남은 단 한 개의 조건에 해당할 것이기 때문이다.


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

1.2 루프

뭔가를 계속해서 반복하는 것을 루프라고 한다. C언어에서도 while이나 for을 통해서 루프를 구현할 수 있다. 그 전에 우리는 구문 설탕이라는 것을 살펴보자.

title

왼쪽을 보면 스크래치에서 counter이라는 이름의 변수를 선언하고 0을 저장하기 위한 블록을 사용했다. C에서는 오래된 언어라서 저장하고자 하는 변수의 종류를 컴퓨터에게 알려줘야 한다. 문자열 string은 여러 단어를 저장하는 변수이다. 하지만, counter 변수에는 숫자가 할당된다. C에서는 정수 데이터를 int 혹은 integer라고 부른다. 줄이면 왼쪽처럼 int라고 쓴다. 즉, 위의 코드는 int 형식의 변수를 선언하고 그 변수를 counter라고 부른 뒤 그 값에 0을 할당한 것이다.

title

그다음은 변수에 1을 더해서 counter를 1씩 증가시켜야 했다. C는 이것을 오른쪽처럼 표현한다. 이것은 등식이 아니기 때문에 대수학의 관점에서 해석하면 안 된다. TIL3. C기초, 문자열에서 =을 같다가 아니라 오른쪽에 있는 내용을 왼쪽에 할당하는 식이라고 했다. 즉, 왼쪽에 있는 counter에 오른쪽에 있는 counter + 1이 할당되는 것이다. 여기서는 int라고 변수의 종류를 선언해 줄 필요가 없다. 이미 위에서 counter를 선언했기 때문에 컴퓨터는 이미 counter라는 변수에 정수값을 저장할 것이라고 말했기 때문이다. 즉, 변수의 종류는 사용하기 전에 딱 한 번만 말해주면 되는 것이다.

title

title

위 두 가지 방식도 counter + 1와 정확히 같은 의미이다. 이건 프로그래밍에서 구문 설탕이라고 부른다. 구문 설탕이란, 새로운 기능을 추가해주지 않지만, 기존 기능을 더욱 보기 좋고 간결하게 활용할 수 있도록 해주는 것이다.

1.2.1 while

title

while문은 while 하나만을 적어서는 안 된다. {}안에 반복하고 싶은 작업을 더 하고, ()안에는 조건문 때와 같이, 답이 참, 네 혹은 1로 나올 수 있는 조건을 적는다. 즉, while문은 ()있는 것이 참일 때만 반복문을 실행하면 되는 것이다.

5 = 5, 1은 2보다 작다 등 여가지 방법이 있지만, 그냥 true를 적는 것이 가장 간단하다. 위 코드는 true라는 항상 참이 되는 조건을 통해서 while문의 {}가 영원히 수행되는 무한루프가 된다.

title

아주 만약에 특정 횟수만큼만 작업하고 싶으면 어떻게 해야 할까? 가장 먼저 해야 하는 것을 루프가 몇 번이나 수행됐는지를 알아보는 것이다. counter라는 변수를 통해서 실행된 횟수를 도출할 수 있지만, 변수 이름이 너무 길다. 프로그래머들은 무엇인가를 셀 때 정수를 나타내는 i를 사용한다. (변수 i가 0부터 시작하는 이유는 무엇일까? 애석하게도 프로그래머들은 보통 0부터 세기 시작하는 습성이 있기 때문이다. 1로 해도 된다.) 무조건 해야 하는 법칙은 아니기 때문에 원하는 변수명을 따로 설정해줘도 괜찮다. 위 코드는 while문이 50 돌아가면 실행을 멈춘다.

왼쪽만큼 깔끔하지는 않지만, C언어에서는 뭔가를 특정 횟수만큼 반복하는 기능을 구현할 수 있다.

1.2.2 for

while문은 while문 위에 변수 i에 자료형식과 초기 값을 입력해 주었다. 그리고, 그 초기 값이 변하는 과정은 {}안에 있는 실행값 이후에 적어주었다. 이것들을 한 줄에 표현할 수 있는 것이 for()문이다.( ) 안에 각각 (변수 초기화; 변수 조건; 변수 증가) 에 해당하는 코드를 넣어서 표현하면 간단하다. 즉, 가장 먼저 정수 값을 가지는 i라는 변수를 0으로 초기화하고, i가 50인지 매번 검사하고, 이를 만족하면 { } 안의 내용을 수행한 후에, i를 1씩 증가시킨다는 의미이다.

title

while문과 비교하여 코드가 엄청 간단해진 것을 알 수 있다.



2. 자료형, 형식 지정자, 연산자

2.1 데이터 타입

프로그래밍 언어들에는 문자열과 정수 이외에도 다양한 종류의 데이터 타입 값이 있다.

  • bool(불리언): 참/거짓의 값으로 조건문이나 while에 사용될 것이다.
  • char: 딱 한개의 문자를 나타내며 Yes/no를 나타내는 Y나 N이 그 예시이다.
  • string: "(쌍따옴표) 안에 들어간 한 개 이상의 문자들이다. 보통 char 하나하나보다 크다.
  • int: 특정 크기 또는 특정 비트까지의 정수 (예) 5, 28, -3, 0
  • long: int와 다른, 더 큰 크기의 정수이다. int로 40억까지 셀 수 있지만, 몇몇 분야나, 페이스북 MS거대 기업들은 40억보다 더 많은 테이터가 존재한다. long이라는 데이터는 더 많은 비트를 사용하기 때문에 더 놓은 수까지 셀수 있다.
  • float: 부동소수점을 갖는 실수 (예) 3.14, 0.0, -28.56
  • double: 부동소수점을 포함한 더 큰 실수

그 외에 앞으로 TIL에서 나올 get_string이나 get_int는 cs50 라이브러리에서 제공하는 기능이다.

2.2 형식 지정자

printf 함수에서는 각 데이터 타입을 출력하기 위해 형식 지정자를 사용했다.

  • %c : char
  • %f : float, double
  • %i : int
  • %li : long
  • %s : string

2.3 기타 연산자 및 부등호

  • +: 더하기
  • -: 빼기
  • *: 곱하기
  • /: 나누기
  • %: 나머지
  • &&: 그리고 (AND)
  • ||: 또는 (OR)
  • A<B: A는 B 미만.
  • A>B: A는 B 초과.
  • A=<B: A는 B 이하.
  • A>=B: A는 B 이상.
  • A==B: A와 B는 같다.

2.4 주석(//)

// 이것은 주석입니다. 

C에서는 //로 컴파일을 해도 머신 언어로 바뀌지 않는 주석을 달 수 있다. 주석이 필요한 이유는 무엇일까? 개발이라는 것은 혼자서도 가능하지만, 회사뿐만 아니라 대학에서도 팀을 짜서 활동한다. 그렇다면, 친구, 동료, 혹은 인수인계를 받아야 하는 후임 등이 우리가 짠 코드를 보게 된다. 코드 줄이 짧다면 상관없겠지만 만약 코드가 수백, 수천 줄이 된다면 어떤 부분이 어떤 역할을 하는지 해석하기 힘들 것이다. 당장 내가 짠 코드를 일 년, 한 달, 더 짧게는 일주일 후에 보게 되어도 새롭다. 그렇기 때문에 주석을 습관화하는 것은 매우 중요한 문제이다.




© 2020. by RIVER

Powered by RIVER