프로그래밍 기초(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단계로 감
반복동안 제어변수가 변경되지 않으면 무한루프에 걸릴 수 있으니 주의해야함
'자료구조' 카테고리의 다른 글
[자료구조 3장] - 배열과 구조체(1) (2) | 2024.01.02 |
---|---|
[자료구조 2장] - 프로그래밍 기초(3) (2) | 2024.01.01 |
[자료구조 2장] - 프로그래밍 기초(2) (2) | 2023.12.30 |
[자료구조 1장] - 컴퓨터와 프로그램의 이해(2) (0) | 2023.12.24 |
[자료구조 1장] - 컴퓨터와 프로그램의 이해(1) (2) | 2023.12.23 |