모두를 위한 컴퓨터 과학 2강

Jean Deluge·2022년 1월 22일
0

1. C 기초

1.1 C 언어의 탄생

https://ko.wikipedia.org/wiki/C(프로그래밍언어)

데니스 리치가 유닉스시스템에 사용하기 위해 켄 톰슨이 만든 B언어를 발전시켜 만든 언어이다.

초기 유닉스는 대부분 어셈블리어로 작성되어, 하드웨어가 바뀌면 OS를 다시 개발해야하는 문제가 있었기때문에, 이 불편을 해결하고자 하드웨어에 상관없이 사용할 수 있는 C 언어를 만들었다.

1.2 장점

<혼자 공부하는 C언어>/서현우/ 3p

  1. 시스템 프로그램이 가능하다. : 하드웨어 제어 시스템 프로그래밍이 가능
  2. 이식성을 갖춘 프로그램을 만들 수 있다. : 컴퓨터 종류가 바뀌더라도 같은 프로그램을 활용할 수 있다.
  3. 함수를 사용하여 개별 프로그램이 가능하다.

1.3 컴파일과 컴파일러

소스 파일 : C언어로 작성한 문서

컴파일 : 사람이 이해하기 쉬운 소스파일을 컴퓨터가 이해하기 쉬운 0, 1 로 된 신호, 즉 비트로 바꾸어 기계가 이해할 수 있는 언어, 기계어로 바꾸는 과정이다.

컴파일러 : 특정 프로그래밍 언어로 쓰여있는 문서를 다른 프로그램 언어로 번역하는 프로그램. 여기서는 C언어를 기계어로 번역하는 프로그램이다

프롬프트 : 컴퓨터 터미널의 명령줄 대기모드를 가르킨다.

1.4 컴파일 과정

  1. 전처리 : 전처리 지시자(#include)에 따라 소스파일을 가공한다.
  2. 컴파일 : 전처리가 끝난 파일을 컴파일한다. 그러면 전처리가 끝난 소스 파일은 개체 파일이 된다. 개체 파일은 CPU가 해석할 수 있는 명령어로 이루어진 기계어 파일이지만, 바로 실행하지 않는다.
  3. 링크 : 개체 파일에 startup code 를 결합하는 과정. 이 과정이 수행하고, main 함수를 호출하여 프로그램의 코드가 실행되도록 하는 과정

1.5 터미널에서 소스코드와 머신코드의 구분

hello : 머신코드. 터미널에서 가 뒤에 붙은 경우 컴파일된 머신코드이다.

hello.c : 소스코드

2. 문자열 작성

  1. 형식 지정자 : printf() 의 괄호 안에서 자료형에 맞게 변수를 표현하게 도와준다.

    ex) %d : 숫자, %s: 문자열

  2. 할당 연산자 : 오른쪽의 피연사자의 값을 왼쪽 피연산자에서 이름을 지정한 스토리지 위치에 할당하는 연산자.

2.1 문자와 문자열 상수 표현법

문자: 작은 따옴표롤 묶는다 ‘A’

문자열 : 큰 따옴표로 묶는다 “A”

3. 조건문과 루프

1. 조건문

  • if , if ~else, if~if~else~
if(조건문){

}else{

}
  • switch -case - default : 정수값으로 실행할 문장을 결정한다.
switch(변수){
  case1:
		break
  case2:
    break
  default:
    실행문
}

2. 루프 (반복문)

  • while 문 : 조건식이 참일 동안 만 실행문을 반복한다.
    while(조건식){
    실행문
    }
  • for문 : 실행문을 원하는 횟수만큼 반복할때 사용한다.
    for(초기식; 조건식; 증감식){
    실행문
    }
  • do ~ whilde 문: 반복할 문장을 수행한 후에, 조건을 검사한다. 즉, 조건식과 관계없이 반복할 문장을 최소 한번을 실행하게 된다.
    do{
     실행문
    }while(조건식)

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

연산자는 실행되는 우선순위가 있다.

https://dojang.io/mod/page/view.php?id=188

5. 하드웨어의 한계

  1. 부동소수점 부정확성
    1. float 에서 저장가능한 비트수가 유한하기 때문에 다소 부정확한 결과를 낸다.
  2. 정수 오버플로우
    1. 저장할 수 있는 자리수가 넘어가게된다면, 바이트의 HO가 1로 변환되어 음수값을 나타내게된다.

참고

https://docs.microsoft.com/ko-kr/cpp/c-language/c-assignment-operators?view=msvc-170

profile
node.js , rudyonrails개발자

0개의 댓글