본문 바로가기
자료구조

[자료구조 2장] - 프로그래밍 기초(1)

by jyppro 2023. 12. 27.

프로그래밍 기초(1)

프로그램 언어

- 저급언어 : 기계어, 어셈블리어 등

- 고급언어 : C, Java, Python 등

 

좋은 프로그램 언어의 조건

1. 가독성

2. 간결성

3. 추상화

4. 기계 독립성

5. 편리한 개발환경

 

프로그램 구성요소

식별자(identifier) : 변수이름, 구조체와 멤버의 이름, 열거형과 멤버의 이름, 함수 이름 등

- 하나의 프로그램 안에서 서로 다른 객체를 나타내기 위해 동일한 식별자 사용 불가

 

변수(variable) : 이름, 주소, 범위, 값, 형 등

- 변수 이름은 식별자로 정해지고, 특정한 형의 기억장소를 그 형이 차지하는 크기만큼 가짐

 

바인딩

- 정적 바인딩(static binding) : 프로그램이 실행되기 전 주로 컴파일 시간에 바인딩이 이루어짐

효율성 중시 -> 수치계산 목적으로 실행시간에 오버헤드를 줄여야 하는 프로그래밍 언어에서 사용

 

- 동적 바인딩(dynamic binding) : 실행시간에 바인딩이 이루어짐

융통성 중시 -> 문자열 처리, 인터프리터에 의해 실행하는 경우, 변수의 형이나 기억장소 할당이 실행시간에 이루어지도록 수행

 

리터럴(literal)

상수 : 정수형(10, 20..), 문자형(A, B..), 실수형(3.14, 78.123...)

 

연산자 : 산술(+, *...), 관계(<,==...), 논리(&&, ||...) 연산자

 

키워드 : 특정 언어에서 이미 특별한 의미를 가지고 있으므로 임의로 변경할 수 없으며, 변수 이름 등의 다른 목적으로 사용할 수 없는 예약어를 키워드 라고함

ex) int, return, struct...

 

연산식(expression) : 프로그램 문장을 구성하는 기본적인 구문 단위

ex) x + 100 / y

 

문장

프로그램 = 문장의 집합

-> 선언문, 실행문

대입문이 가장 많이 쓰임

 

주석 : 프로그램 각 부분에 필요한 설명을 기록하는 것, 프로그램의 문서화와 가독성을 증가시키는 요소

 

프로그램 번역과정

소스코드 분석단계 : 어휘 분석, 구문 분석, 의미 분석

[소스코드] -- 어휘분석 --> [토큰 스트림] -- 구문분석 --> [파싱트리] -- 의미분석 --> [중간코드]

 

목적코드 생성단계 : 코드 최적화, 코드 생성, 링크

[중간코드] -- 코드 최적화 --> [최적화 코드] -- 코드생성 --> [목적코드] -- 링크 --> [실행가능코드]


C프로그램 기초

1. 명령어들의 순차적인 제어

2. 선택 제어

3. 반복 제어

4. 함수의 호출과 복귀

 

프로그램의 기본구조

/* C 프로그램 예제(주석) 1 */

void main()
{
    int a, b, c;
    char op;
    
    printf("Input two numbers: ");
    scanf("%d %d", &a, &b);
    printf("Input an operator: ");
    scanf("%c", &op);
    if (op == '+') c = a + b;
    else if (op == '-') c = a - b;
    else if (op == '*') c = a * b;
    else if (op == '/') c = a / b;
    printf("%d %c %d = %d\n", a, op, b, c);
}

 

선언문

int a, b, c;
char op;

 

void : 특별한 형을 명시할 수 없는 경우 사용, 함수 print_title()이 돌려주는 값(리턴값)이 없을 때

void print_title()

 

출력문 : 이중인용부호 안의 문자열 그대로 출력

printf("Input two numbers: ");

 

지시문 : C라이브러리에 함수 사용, 함수의 정의를 포함하는 헤더파일 포함시키기 위해 사용

#include <stdio.h>

 

scanf함수 : 이중인용부호 안의 형식에 맞는 주어진 변수에 값을 입력받도록 해주는 함수

%d : int형, %f : float형, %lf : double형, %c : char형, %s : string(문자열)형

scanf("%d %d", &a, &b);

 

op의 값에 따라 c를 결정하는 조건문

※ 같은 기능을 switch문으로도 작성가능

if (op == '+') c = a + b;
    else if (op == '-') c = a - b;
    else if (op == '*') c = a * b;
    else if (op == '/') c = a / b;

 

이스케이프 시퀸스(escape sequence)

\n : 출력라인 다음으로 이동, \t : tab, \b : backspace, \" : 인용부호

 

제어구조 익히기

순차구조 : 명령엉의 순차적 순서를 결정

선택구조 : 조건 테스트한 결과에 의한 제어

반복구조 : 반복수행에 의한 제어

 

반복구조는 유한한 시간 안에 끝나므로 그 수행을 제어하는 변수가 필요하고, 종료조건이 존재한다.

대부분 아래 순서로 반복 진행

1단계 : 제어변수 초기화

2단계 : 반복수행(종료조건 만족 시 종료)

3단계 : 제어변수 갱신 후 2단계로 감 

 

반복동안 제어변수가 변경되지 않으면 무한루프에 걸릴 수 있으니 주의해야함