Skip to content

Latest commit

 

History

History
98 lines (80 loc) · 6.54 KB

CS50_2021_w1.md

File metadata and controls

98 lines (80 loc) · 6.54 KB

CS50_1: C

2019ver CS50 C 노트로 이동(링크)

목차

  1. C와 Scratch 비교
  2. CS50 IDE
  3. Functions and arguments
  4. TIL: 학습 중 개인적으로 찾아 익힌 정보들

C와 Scratch 비교

Scratch에서 hello world

Scratch에서 "hello, world"를 출력하려면 이와 같이 블럭을 조립한다. 같은 결과 도출을 위해 C를 활용하면, 코드는 다음과 같다.

#include <stdio.h>

int main(void)
{
    printf("hello, world");
}
  • 같은 결과 도출을 위해 코드를 작성한다면, 아래 내용들을 고려해야 한다.
    • 정확성 Correctness: 코드가 의도한대로 작동하는가
    • 디자인 Design: 코드가 얼마나 잘 쓰였는가에 대한 주관적 척도. 기준은 불필요한 반복 없이 효율성과 우아함 또는 논리적으로 읽을 수 있는가이다.
    • 스타일 Style: 코드가 얼마나 미학적으로 형식화되어있는가. 일관된 들여쓰기(indentation)나 다른 입력방식들을 의미한다. 스타일의 차이는 코드의 정확성이나 의미를 해치지는 않지만, 가독성에 영향을 미친다.

CS50 IDE

  • 이 코스를 위한 도구이다. integrated development environment(통합개발환경) cs50 IDE 화면구성
  • 로그인 후 뜨는 창에서 위쪽 패널이코드를 입력할 수 있는 텍스트파일을 포함하는 부분이다. 아래쪽 패널은 terminal window라고 하는데, 위쪽 패널에서 입력한 코드를 포함하여, 명령을 입력하고 실행시킨다.
#include <stdio.h>

int main(void)
{
    printf("hello, world");
}
  • 위 코드를 실행시키기 위해, CLI을 써야 한다. 이는 command-line interface를 의미한다.
    • Scratch의 GUI(graphical user interface)와 반대되는 것이라고 이해하면 된다. GUI에는 텍스트 뿐 아니라, 아이콘, 이미지, 버튼들이 존재한다.

컴파일링 Compiling

  • 코드는 사람이 읽을 수 있는 문자로 쓰여지는데, 이를 컴퓨터(기계)가 이해할 수 있게 0,1로 구성된 이진법으로 바꿔주는 컴파일링 작업이 필요하다.
    • 컴파일링 작업을 하는 프로그램을 컴파일러 compiler라고 한다.
  • terminal(아래쪽 부분)에 있는 $표시는 프롬프트가 어디에 있는지 또는 어디에 명령을 더 입력할 수 있는지를 보여주는 지표다.
    • 뭔 말인지 이해가 안감ㅋㅋㅋㅋ

Functions and arguments

정의

  • Scratch에서처럼, 함수는 프로그램이 작동하도록 만드는 작은 액션 또는 동사이며, 함수 안에 들어가는 input을 argument(인수)라고 한다.
    • C에서 화면에 뭔가 출력하라는 함수는 printf이다. (이때, fformatted를 의미한다.)
    • 인수는 괄호(parentheses)안에 입력하며, " "는 그 따옴표 안에 입력한 텍스트를 그대로 출력하도록 한다. 또한, 괄호 뒤에 붙는 ;는 그 줄의 코드 입력이 끝났다는 것을 의미한다.

함수의 역할

  • 함수는 두 가지 결과를 갖는다.
    1. side effects (부작용). 결과값 외에 호출된 함수 밖에서 관찰할 수 있는 어플리케이션의 상태 변경. 예를 들어, 화면에 뭔가 출력하는 것. 부작용은 프로그램의 동작을 이해하기 어렵게 한다. 명령형 프로그래밍은 부작용을 사용하여 프로그램을 동작케 하고, 함수형 프로그래밍은 부작용을 최소화한다
    2. return values (결과값). 사용하거나 저장해두기 위해 프로그램에 돌려보내는 값. Scratch를 예로 들면, ask블럭이 answer블럭을 만들어내는 것.
      • ask 블럭과 같은 기능을 얻기 위해, library를 사용한다. 이는 이미 만들어져 있는 코드를 의미한다.
      • 예시1: ask블럭과 같은 결과얻기
        string answer = get_string("What's your name? ");
        • CS50 library에서 get_string은 이용자에게 string(문자 배열)을 묻고, 프로그램에 리턴하는 역할을 한다.
        • C에서 =는 할당(assignment)을 의미한다. 좌변의 변수에 우변의 값을 대입한다는 것이다. 위 예제에서 좌변에 값을 대입하기 위해, C는 먼저 get_string의 결과값을 얻으려 할 것이다.
        • 또한, 위 예제에서 변수 answer는 string 타입이라고 주어졌으므로, 프로그램이 0과1의 이진법 정보를 문자로 변환해야 하는 것을 알고 실행에 옮긴다.
      • 예시2: 입력값을 함수의 input으로 넣기
        printf("hello, %s", answer);
        • %sformat code ~~아마도 서식~~이다.

format code설명부분부터 재개

TIL

  • 2021.05.31 마크다운에서 목차 쓰기
    • [](#)형태로 쓴다.
      • 이 때, [ ]사이에 들어가는 텍스트가 노출되며, (#)에서 #뒤에 이동하고 싶은 부분의 제목을 입력한다.
      • 링크로서 제목을 쓸 때 주의사항이 있는데, 띄어쓰기를 -로 연결해야 하며, 영어는 모두 소문자로 작성해야 한다.
  • 2021.05.31 명령형 vs 선언형 프로그래밍
    • 함수의 역할_1.side effects관련해서, 명령형 프로그래밍과 선언형 프로그래밍에 대해 궁금해져 찾아보았다. 명령형vs선언형 프로그래밍, 참고블로그
      • 명령형은 How, 어떻게 할 것인가에 관심을 둔다. 선언형은 What, 무엇을 할 것인가에 더 집중한다.
      • 예를 들어, html은 선언형으로, 원하는 것을 어떻게 수행하는지가 아니라 무엇을 해야 하는지를 보여준다.
      • 반면, Javascript는 명령형으로, 어떻게 결과를 도출할 것인지를 써야 한다. 사람이 한 눈에 코드를 읽기가 비교적 더 어려운 편이다. 컴파일러처럼 코드를 단계별로 살펴봐야 한다.
        • 명령형 프로그래밍에서 발생하는 어려움, 문제를 극복하기 위해 선언형 방식을 차용해 활용하기도 하고, React 등의 도구로 선언적 코드를 작성하기도 한다. 이 점은 현재 내 이해를 넘어서는 부분이라, 차후 다시 살펴보기로!