모두를 위한 컴퓨터 과학 (CS50 2019) - C언어

1강. C 기초

C언어

  • C는 아주 오래되고 전통적인 순수 텍스트 기반의 언어
  • int main(void)는 스크래치의 "초록색 깃발을 클릭했을 때" 블록과 같은 역할
  • #include <stdio.h>는 "stdio.h"라는 이름의 파일을 찾아서 "printf"함수에 접근할 수 있도록 해줌.

컴파일러

  • 우리가 직접 작성한 코드는 "소스 코드"라고 불린다. 이를 2진수로 작성된 "머신 코드"로 변환해야 컴퓨터가 이해할 수 있다. 이러한 작업을 컴파일러라는 프로그램이 수행해준다.
  • clang hello.c 라는 명령어는 "clang"이라는 컴파일러로 "hello.c"라는 코드를 컴파일하라는 의미.
  • 그 결과로 ./a.out이라는 파일이 생성되고 이를 실행하면 현재 디렉토리에 있는 a.out라는 프로그램을 실행.

2강. 문자열

  • C는 오래된 언어이기 때문에 변수가 저장하는 데이터의 종류를 아주 정확하게 명시해줘야 한다.
  • 문자열(string) / 이때 string을 형식지정자라고 한다.
  • 프로그래밍 언어에서 '='은 오른쪽에서 왼쪽으로 가는 화살표와 비슷하다. 이를 할당연산자라고 한다.
  • 터미널창에 아래 명령어를 입력하여 컴파일을 할 수 있다.
$ clang -o string string.c -lcs50

-> 여기서 -o string은 string.c를 string.out이라는 머신코드로 저장하도록 하는 명령어
-> lcs50은 "link"라는 의미를 지닌 -l이라는 인자에 추가로 포함한 "cs50"파일을 합친 것.

  • 다소 복잡한 이런 과정 대신에, 아래 make 명령어를 통해 간단하게 컴파일을 수행할 수 있다.
$make string

3강. 조건문과 루프

  • if 조건문의 사용은 파이썬과 비슷

    -> +=1 을 ++ 로 ok.
    -'=='는 일치연산자
  • 루프도 C에서 while이나 for을 통해서 구현가능하고, 파이썬과 비슷.

4강. 자료형, 형식 지정자, 연산자

데이터 타입

  • bool: 불리언 표현, (예) True, False, 1, 0, yes, no
  • char: 문자 하나 (예) 'a', 'Z', '?'
  • string: 문자열
  • int: 특정 크기 또는 특정 비트까지의 정수 (예) 5, 28, -3, 0
  • long: 더 큰 크기의 정수
  • float: 부동소수점을 갖는 실수 (예) 3.14, 0.0, -28.56
  • double: 부동소수점을 포함한 더 큰 실수

CS50 라이브러리 내의 get함수

  • get_ 뒤에 데이터 타입 붙혀서 사용.

형식 지정자

  • printf함수에서는 각 데이터 타입을 위한 형식 지정자를 사용할 수 있음.
  • %c : char
  • %f : float, double
  • %i : int
  • %li : long
  • %s : string

기타 연산자 및 주석

  • +: 더하기
  • -: 빼기
  • *: 곱하기
  • /: 나누기
  • %: 나머지
  • &&: 그리고
  • ||: 또는
  • //: 주석

정수와 실수를 받아서 출력해보기

  • 정수
# include <cs50.h>
# include <stdio.h>

int main(void)
{
    printf("Your are at least %i days old.\n", get_int("what's your age?\n") * 365);
}
  • 실수
# include <cs50.h>
# include <stdio.h>

int main(void)
{
    float price = get_float("What's the price?\n");
    printf("Your total is %f\n", price*1.0625);
}

짝수인지 홀수인지 알려주는 코드짜기

#include <cs50.h>
#include <stdio.h>

int main(void)
{
    int n = get_int("n: ");

    if (n % 2 == 0)
    {
        printf("even\n");
    }
    else
    {
        printf("odd\n")
    }
}

퀴즈

좋은 웹페이지 즐겨찾기