CS50 요약2(C_출력, 문자열, 컴파일, 조건문)

Sungmin Kim·2022년 2월 26일
0

CS50

목록 보기
2/3
post-thumbnail

cs50 실습 장소

https://sandbox.cs50.io

따로 설정을 건드리지 않고 create하시고 github 계정과 연동하면 사용할 수 있습니다.

출력

#include <stdio.h>

int main(void)
{
    printf("hello, world\n");
}

일반적으로 처음 언어를 접했을 때 많이 사용하는
hello world 출력 문이다.

각 줄의 의미를 살펴보면

#include <stdio.h>
  • standard input output이라는
    기초 library를 불러오는 줄이다.
  • 이렇게 #을 넣고 가장 앞에 쓰는 것을
    header라고 함

Tip)

  • C++이나 python등을 사용할 때에도 이처럼 library를 불러와서 그 library 안에 있는 함수들을 사용한다.

자세한 것은 OOP에 관한 내용이므로 python 객체 지향 프로그래밍에 관한 자료가 있다면 참고하면 좋다!


int main(void)
  • 아무것도 입력 받지 않고 int를 return하는 main함수
  • main은 모든 프로그램에서 가장 중심이 되어서 진행되는 함수를 의미한다.
  • 여기서 int를 return하는 것은 main이 잘 동작했다면
    return 1 등을 통해서 함수가 잘 동작했는지 확인하기 위해 return을 지정한다.

Tip)

  • java, python등에서도 main은 같은 역할을 한다.


printf("hello, world\n");
  • C에서 출력은 보통 printf를 통해서 한다.
  • \n은 개행을 의미한다.
  • 여기서 주의사항은 끝에 ;(세미콜론)을 입력함으로써 한개의 코드 줄이 끝났음을 알려야 한다는 것이다.

Tip)

  • \을 사용하고 뒤에 무언가를 붙이는 것은 어떠한 의미가 있는 경우가 많다. ex - \n, \t ...

문자열

문자열은 string이라고 보통 지칭합니다.

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

int main(void)
{
  string answer = get_string("What's your name?")
  printf("hello, %s\n", answer);
}
  • #include <cs50.h>
    cs50이라는 header파일을 string에 사용하기 위해서 불러와줍니다.
    string은 <string.h>에도 있으며, char* 로 표현하기도 합니다.
    구체적인 내용은 추후 포스팅에서 다루겠습니다.
  • string answer = get_string("What's your name?")
    string을 받아와서 answer이라는 변수에 저장하여라
  • printf("hello, %s\n", answer);
    %s라는 형식지정자의 자리에 answer이라는 변수의 내용물을 집어넣고 출력하여라.

컴파일

이제 우리는 이렇게 기록된 코드가 컴퓨터에서 어떻게 수행되는지를 살펴보려고 한다.
앞서 이야기 한 바에 따르면 컴퓨터는 0, 1의 조합으로 정보를 저장하거나 공유하는데 저건 0, 1이 아니다.

컴파일의 단계는 4개의 단계로 구성되어 있다.

  1. precompile(전처리)
  2. compile(컴파일)
  3. Assemble(어셈블)
  4. Link(링크)

각각을 구체적으로 살펴보면

  • 전처리 : 지금 우리가 작성한 코드는 source code라고 불리는 영역이다.
  • 컴파일 : 이를 clang이라는 compiler을 통과시켜서 machine code(어셈블리어)로 변환해주는 작업이 수행된다.
  • 어셈블 : 작성된 어셈블리어 어셈블러를 통해 컴퓨터가 인식하고 0, 1로 변환해서 사용하는 원리이다.
  • link : <math.h>와 같이 추가적으로 사용된 헤더들이 있을 때 이를 합쳐주는 작업이다.

추가적으로

  • clang -o out_name file.c-lcs50
    다음과 같은 명령어를 터미널에 입력하면 file.c에 대한 컴파일이 수행된 후에 out_name이라는 machine code가 만들어집니다.
    특별히 여기서 -l은 link를 의미하고 cs50이라는 파일과 연결하도록 알려주는 부분입니다.
  • 하지만 복잡하게 compile구문을 직접 칠 필요 없이
    make string
    이 한줄로 파일명을 무엇으로 할지, 필요한 파일은 어디서 부터 구해올 수 있는지 알아서 해주게끔 명령어를 작성할 수도 있습니다.

조건문

조건문은 크게 3가지가 있다.

  1. if문
  2. else if문
  3. else문
int x = 10
int y = 20
if(x>y)
{
	printf("x is bigger than y");
}
else if(y>x)
{
	printf("y is bigger than x");
}
else
{
	printf("x is equal to y");
}
  • 만약 x가 y보다 크다면 x가 크다는 문장을 출력
  • 만약 y가 x보다 크다면 y가 크다는 문장을 출력
  • 그 외의 경우는 x와 y가 같은 경우 밖에 없으므로 같다는 문장을 출력

Tip)

  • 이런 조건문은 break;를 통해서 이후 배우게 될 loop를 탈출 시키는 것에 활용할 수도 있다.

loop

loop는 크게 2종류가 있다.

  1. while
  2. for
  3. do while
  4. recursive(재귀)
  • 조금 다르지만 반복을 수행한다는 면에선 동일!

정의를 간단하게 설명하면
1. while은 특정 조건이 만족한다면 while문으로 지정된 code를 계속 순환하는 것이다.
2. for은 loop의 시작점, 끝점, 변환을 일반적으로 쓰는데 여기서 다른 변수와 연동해서 사용할 경우 부분적으로 생략이 있을 수도 있다.
3. 재귀는 추후 함수와 함께 포스팅하겠습니다.


이제 예문들을 살펴보겠습니다.
int i = 0;
while(i<10)
{
    printf("%d\n", i);
    i++
}
  • int i라는 변수를 선언
  • i가 10보다 작다면 코드를 실행
  • printf : i를 출력하고 1줄 개행해라!
  • i를 1씩 더해준다.
int i = 0;
do
{
    printf("%d\n", i);
    i++
}
while (i<10);
  • 앞선 while문과 기능은 똑같은데 조건문을 통과하기 전에 무조건 1회는 수행한다는 점이 특징이다.
for(int i = 0; i<10; i++)
{
    printf("%d", i);
}
  • int i를 순환을 위해 시작점으로 지정 및 초기화
  • i가 10보다 작을 때에만 수행
  • i++ loop가 진행되는 동안 i를 1씩 더함
  • i를 출력해라!

Tip) while문이랑 for문이랑 그다지 차이가 느껴지지 않는데 왜 굳이 구분하는가?

  • 만약 끝점을 모른다면 while(True)를 사용하다가 break를 활용해 코드를 활용할 수 있다.
  • 만약 다른 변수와 연결해서 사용한다면
    앞서 예시를 들었던 int i가 변수였다면 사용이 이해가 된다.
  • for문은 1개의 줄에 시작점, 끝점, step을 모두 지정할 수 있다는 점에서 코드의 가시성이 높다. 또한 휘발하는 변수int i를 쓸 수 있다는 점도 매력이다.
profile
Computer Vision Engineer

0개의 댓글