2. C언어

eunheelog·2023년 6월 6일
0

boostcourse

목록 보기
3/13

boostcourse - C언어

1) C 기초

  • 글자나 단어, 문장을 적을 때는 텍스트에 " "로 감싸야 한다.
  • 문장 끝에 세미콜론(;)을 붙여야 한다.
  • \n은 줄바꿈 기능을 합니다. (= 키보드의 ENTER)
  • #include <stdio.h>는 “printf” 함수에 접근할 수 있도록 해준다.
  • $ 옆에 명령어를 입력하면 된다.
  • clang hello.c → "clang"이라는 컴파일러로 "hello.c"라는 코드를 컴파일

2) 문자열

  • get_string 함수 → 스크래치의 ask 함수와 비슷하다.
  • '='은 할당 연산자로 오른쪽에 있는 것을 왼쪽에 지정한다.
  • 변수의 값을 문자열에 포함시키고 싶다면 형식연산자 '%'를 사용하면 된다 !

3) 조건문과 루프

  • if () 의 괄호 안에는 검사하려는 조건이 들어가고 {} 안에는 조건을 만족할 때 수행할 작업이 들어간다.
  • else를 이용해 처음 조건이 아닌 경우에 수행할 작업을 적을 수 있다.
  • ==은 일치 연산자이다.
  • if, else, else if 뒤에는 세미콜론(;)이 붙지 않는다.
  • while이나 for로 루프를 구현할 수 있다.

4) 자료형, 형식 지정자, 연산자

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

  • 형식 지정자
    - %c : char
    - %f : float, double
    - %i : int
    - %li : long
    - %s : string

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

5) 사용자 정의 함수, 중첩 루프

  • 사용자 정의 함수
    - 동일한 작업을 반복하는 경우 사용자 정의 함수를 이용하면 단순화할 수 있다.
    - main함수 밑에 함수를 작성한다면 오류 발생.
    → 함수를 main 위로 옮겨야함.
    void cough(int n);와 같이 main 전에 함수를 정의해주면 된다 !

6) 하드웨어의 한계

  • RAM은 유한한 크기의 비트만 저장할 수 있어 때때로 부정확한 결과를 내기도 한다.

  • 부동 소수점 부정확성

    SourceCode

    #include <cs50.h>
    #include <stdio.h>
    
    int main(void)
    {
        // 사용자에게 x 값 받기
        float x = get_float("x: ");
    
        // 사용자에게 y 값 받기
        float y = get_float("y: ");
    
        // 나눗셈 후 출력
        printf("x / y = %.50f\n", x / y);
    }

    나눈 결과를 소수점 50자리 출력하도록 하고 x에 1을, y에 10을 입력하면 아래와 같은 결과가 나온다.
    x: 1
    y: 10
    x / y = 0.10000000149011611938476562500000000000000000000000
    → 정확한 결과는 0.1이지만 float에서 저장 가능한 비트 수가 유한하기 때문에 부정확한 결과가 나온다.

  • 정수 오버플로우

    SourceCode

    #include <stdio.h>
    #include <unistd.h>
    int main(void)
    {
        for (int i = 1; ; i *= 2)
        {
            printf("%i\n", i);
            sleep(1);
        }
    }

    변수 i를 int로 저장하기 때문에 int 타입이 저장할 수 있는 수를 넘어가면 아래와 같은 에러와 함께 0이 출력된다.
    ...
    1073741824
    overflow.c:6:25: runtime error: signed integer overflow: 1073741824 * 2 cannot be represented in type 'int'
    -2147483648
    0
    0
    ...
    → 10억을 넘기자 앞으로 넘어갈 1의 자리가 없어진 것이다.

∴ 다루는 데이터 값의 범위를 유의하며 작성하는 것이 중요하다 !

profile
⛧1일 1알고리즘⛧

0개의 댓글