모두를 위한 컴퓨터 과학(CS50 2019) <2>

구찌댕댕이·2022년 6월 14일
0
post-thumbnail

C언어

  • C기초

    C는 아주 오래되고 전통적인 순수 텍스트 기반의 언어이다.
    하나하나 설명하자면
    CloudScape
    #include <stdio.h>는 “stdio.h”라는 이름의 파일을 찾아서 “printf” 함수에 접근할 수 있도록 해준다.
    int main(void) 는 '시작한다'의 의미를 가지고 있다고 보면 된다.
    앞으로 우리가 작성할 코드 모두는 이 int main(void) { }의 중괄호 사이에 작성하게 될 것 이다.
    printf(“hello, world\n”) 은 스크래치의 “‘hello, world’라고 말하기” 블록과 같은 역할을 한다.
    글자나 단어, 문장을 적을 때는 언제나 텍스트에 " " 쌍따옴표로 감싸야 한다.
    그리고 우리가 일상에서 문장의 끝에 마침표(.)를 붙이는 것 처럼 C에서는 세미콜론(;)을 붙여야 한다.
    우리가 Word로 문서를 저장했을때 "문서.docx"와 같이 .docx가 붙는 것 처럼,
    C로 작성한 코드는 “파일이름.c”로 저장해야 한다. (확장자 “.c”는 C로 작성된 코드라는 의미입니다.)
    마이크로소프트의 Word 처럼 자동적으로 붙여주지 않기 때문에 C의 경우에는 직접 .c를 붙여줘야 한다.

  • 컴파일러

    CloudScape
    우리가 직접 작성한 코드는 “소스 코드” 라고 불리며, 이를 2진수로 작성된 “머신 코드”로 변환해야 컴퓨터가 이해할 수 있다. 이런 작업을 컴파일러라는 프로그램이 수행한다.
    터미널창의 명령어 프롬프트에서 “$” 기호 옆에 clang hello.c 라는 명령어를 입력한다.
    “clang” 이라는 컴파일러로 “hello.c”라는 코드를 컴파일하라는 의미이다.
    그 결과 a.out 이라는 파일이 생성되고, ./a. out이라는 명령어를 실행하면 컴퓨터가 현재 디렉토리에 있는 a.out 이라는 프로그램을 실행한다.
    • 실습하기
      C로 "hello, boostcourse" 출력해보세요.
    #include <stdio.h>
    int main(void)
    {
    	printf("hello, boostcourse");
    }
  • 문자열

    사용자의 이름을 받아서 저장할 변수를 answer이라고 정한다.(이때 변수는 xyz, name 등과 같이 마음대로 정해도 무관)
    하지만 여기서 유의해할 점은 C는 오래된 언어이기 때문에 변수가 저장하는 데이터의 종류를 아주 정확하게 명시해줘야 한다.
    그래서 우리는 저장하고자 하는 값의 종류가 문자열(string)이라는 것을 알려줘야 하며, 이때 string을 형식지정자라고 한다.
    왜냐하면 너무나 당연하게 이름은 숫자가 아닌 문자이기 때문에 컴퓨터에게 "answer에 들어갈 것들은 문자야!"라고 말해주는 것이다.
    CloudScape
    일반적으로 = 은 수학적 개념으로 '같다' 라고 생각하겠지만, 여기서의 = 은 오른쪽의 값을 왼쪽의 변수로 지정한다 라는 화살표의 의미이다. 그리고 이것을 우리는 할당연산자 라고 부른다.
    따라서 get_string 이라는 함수가 사용자의 이름을 반환하면 그 이름을 answer라는 변수에 저장하게 된다.
    이 것을 printf 함수로 출력할때 유의할 점은 answer 라는 변수에 들어있는 이름을 출력을 해야하기 때문에 %s를 사용한다. 이때 s는 string의 s를 %뒤에 붙인 것.
    그래서 최종적으로는 printf("hello, %s\n", answer); 로 출력을 하게 된다.

  • int

    변수에 숫자를 저장하고 싶다면 int를 변수 앞에 써준다.
    먼저 변수에 0을 할당한다.
    int counter = 0;
    그런다음 변수의 값을 1씩 증가시켜보자.
    counter = counter + 1;
    counter += 1;
    counter ++;

  • 조건문

    CloudScape
    if ( ) 의 괄호 안에는 조건이 들어가고, { } 안에는 조건을 만족할 때 수행하고자 하는 작업이 들어간다.
    여기에서는 조건이 True면 "x is less than y"를 출력을 하라는 것이다.
    else if 를 이용해 처음 조건이 아닌 경우에는 어떤 것을 하라라고 적어줄 수 있습니다.
    이 경우에는 첫 번째 x < y 조건이 False, 즉 x가 y보다 작지 않을 경우에는 "x is greater than y"를 출력하라는 것이다.
    마지막으로 else를 사용하여 위의 두 조건이 모두 false 인 나머지 모든 경우에는 "x is equal to y" 를 출력하게 된다.
    '=' 는 할당 연산자이므로 같다는 것을 표현하기 위해 '='를 2개 사용하여 '==' 으로 "같다"를 표현하게 되었으며, 일치 연산자라고 한다.

  • 루프

    먼저 while 의 경우 아래 코드와 같이 while ( )의 괄호 안에 조건을 넣고 { } 안에 수행할 작업을 포함시키면 된다.
    즉, C에서 루프를 구현하고 싶다면 성립 조건을 정해주어 답이 네, 참, 혹은 1로 나올 수 있는 질문을 던져줘야 한다.
    5=5, 1<2 등등 있지만 가장 간단한 방법은 그냥 true를 적어 영원히 반복되는 루프를 만든다.
    따라서 아래의 코드는 계속해서 "hello, world"를 무한정 출력하게 될 것이다.
    CloudScape
    이번에는 i<50이라는 조건을 추가해준다.
    처음에 i를 0이라고 정해주었고 while는 계속해서 i가 50보다 작은지를 물어볼 것이다.
    따라서 이 코드가 정상적으로 작동하려면 i를 증가시켜야 합니다. (i = i + 1, i += 1, i++ 같은 방법으로 1씩 증가시킴)
    CloudScape

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

  • 따로 변수를 선언해도 되지만 아래와 같이 for 를 사용하면 for ( ) 안에 각각 (변수 초기화; 변수 조건; 변수 증가) 에 해당하는 코드를 넣어서 간단하게 표현할 수 있다.
    즉, 가장 먼저 정수 값을 가지는 i라는 변수를 0으로 초기화하고, i가 50인지 매번 검사를 하고, 이를 만족하면 { } 안의 내용을 수행한 후에, i를 1씩 증가시킨다는 의미이다.
    CloudScape

  • 자료형, 형식지정자, 연산자

    |
    데이터타입
    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: 부동소수점을 포함한 더 큰 실수
    |
    형식지정자
    %c : char
    %f : float, double
    %i : int
    %li : long
    %s : string
    |
    연산자
    +: 더하기
    -: 빼기
    *: 곱하기
    /: 나누기
    %: 나머지
    &&: 그리고
    ||: 또는
    //: 주석

출처 : https://www.boostcourse.org/cs112/joinLectures/41307

profile
개발자를 꿈꾸는 사람 입니당

0개의 댓글