프로그래밍 절차
프로그래밍의 개념
정보처리 시스템
Data(Input)을 받아서 Transform(정보처리 시스템)을 통해
Information(Output)으로 나오는 것을 의미한다.
자료(Data) : 관찰, 실험으로 얻은 사실, 이미 존재하는 것
정보(Information) : 조직화되고 처리된 자료
컴퓨터의 역할 : 정해진 절차대로 원시 자료를 조직화해서 의미 있고 유용한 정보로 출력
컴퓨터 프로그램
- 컴퓨터가 자료를 처리하기 위한 절차
- 컴퓨터가 수행할 동작을 지시하기 위한 순서화된 명령어의 집합
- 소프트웨어와 같은 의미
프로그래밍 언어
기계어
- 숫자(Binary: 2진수)로 구성 / 기계가 다르면 명령어도 다름
저급 언어
- Assembly 언어 등.. (컴퓨터에겐 편하지만 사람에겐 어려운 언어)
고급 언어
- Fortran, Cobol, C / C++, Java, C# 등
- 작업할 내용을 논리적이고, 구조적으로 표현하기 쉽게 되어있음
- 컴퓨터 입장에서는 편한언어는 아니기에 기계어로 변환을 해줘야 한다)
4세대 언어
- 목적이나 분야를 한정(특화)시켜서 Program 개발 시 보다 쉽고 생산성이 높음
- SQL (Structured Query Language)등..
C Program 언어의 역사
ALGOL60
-> CPL
-> BCPL
-> B
-> C
-
Martin Richards가 BCPL이라는 언어를 개발하였고,
이 언어에 이어서 Ken Tompson은 B라는 언어를 만들었음 -
B 언어는 1970년대에 C의 개발로 이어짐
-
C 언어라는 말은 B 언어 다음에 만들어진 언어라는 뜻으로 명명되었음
-
C는 DEC PDP-11 기종에서 UNIX의 운영체제를 구현하는 데 사용되었음
(1972년 Dennis Ritchie에 의하여 설계)
프로그래밍의 단계
-
문제이해
- 문제가 무엇인지 어떻게 해결해야할지 무엇이 필요한지 생각하고 이해한다.
-
논리설계
- 어떤 단계로 나누어서 어떤 순서로 처리할 것인가를 계획함
- 계획, 순서, 필요도구등.. 필요에 따라 기록
- 다양한 조건에 대해 나열해보기도 하고, 필요에 따라 그림 및 구조를 그리기도 한다.
-
코딩
- 선택한 프로그래밍 언어를 사용하여 프로그램을 작성
- 텍스트 편집기 또는 개발도구를 이용
-
번역
- 고급 언어로 쓰인 프로그램을 컴퓨터에서 즉시 실행될 수 있는 형태의 목적 프로그램(기계어)으로 바꾸어 줌
- 그 과정에서 구문 오류(Syntax Error)를 발견하면 이를 수정
- compile, link (여러 C파일을 하나로 합쳐주는 작업), build (compile + link) 등의 용어를 사용
- 개발도구의 사용이 필요
-
실행
- 기계어로 만들어진 최종본을 수행하는 작업
- 개발도구를 사용하거나 독립적으로 실행할 수 있음
-
활용
- 사용설명서를 제작하여 배포하고, 사용자를 교육
- 개발과정에서 만들어진 명세서를 정리
- 작성된 프로그램이 잘 활용되도록 관리
논리 설계
일반 순서도
논리 설계
- 처리 과정을 단계적으로 나누어 계획하는 것
- 이때 글로써 표현하기 보다는 그림으로 그려두면 좋다. (순서도)
순서도
- 일 처리 순서를 약속된 기호로 나타낸 것
- 일의 전체적인 처리 방법을 일목요연하고 쉽게 파악할 수 있음
- 프로그램은 순서도를 보고 coding
순서도 규칙
- 기호의 내부에 처리내용 기록
- 흐름의 방향은 위에서 아래, 왼쪽에서 오른쪽이 원칙, 이에 반하면 화살표 사용
- 흐름을 나타내는 선은 교차시켜도 무방함
- 두 개 이상의 흐름 선이 합쳐져서 한 줄로 될 수 있음
- 기호의 가로/세로 비율은 가독성에 영향을 주지 않는 범위 내에서 자유롭게 조정할 수 있음
순서도 기호 알아보기
순서도 작성
- 주어진 문제를 작은 단위의 작업으로 나누어 순서대로 나열
- 순서도 기호에 맞추어 표현
순서도 그려보기
프로그램 순서도
미지수 (변수)
입력
- 키보드와 마우스를 이용해 데이터가 컴퓨터의 저장장치로 들어가게 함
처리
- 데이터를 조직하고 정확성을 검사하고 연산을 수행하는 것을 포함 (CPU 담당)
출력
- 사용자가 보고 사용하도록 데이터의 처리 결과가 프린터, 모니터로 나타나게 함
- 출력 타입은 입력에 따라 달라질 수 있다.
ex) 두 수를 입력 받아 합을 계산하여 출력하라
1. 시작
2. SUM, a, b (초기화)
3. a,b (파라미터)
4. sum <- a+b (a,b 더한 값을 SUM으로 할당)
5. SUM 출력
6. 종료
프로그램의 코딩
변수의 사용
변수 (Variable)
- 데이터를 저장할 수 있는 이름을 가지고 있는 저장 장소
- 이름을 지을 수 있는데 이름을 통해 아이덴티티를 부여할 수 있다.
- 변수에 값을 저장하면 메모리 address와 매핑이 되어 저장된다.
- 그래서 이름을 통해 데이터를 저장하고 꺼내쓸 수 있다.
변수 이름 규칙
-
영문자와 숫자의 조합
- 특수 문자 중에는 ‘_‘(Under bar)만 가능
- 한글은 안 됨
-
첫 글자는 숫자가 아니어야 함
- 즉, 영문자 또는 ‘_’
-
공백(space) 사용불가
- 변수 이름 중간에 공백 넣으면 안됨
-
영문 대소문자 구분 있음
- 즉, 대소문자에 따라 다른 변수로 취급함
-
의미있는 이름 선택 (권고 사항, 강제는 아님)
- 약자 사용하는 것은 바람직하지 않음 (쉽게 알아보기 힘들다.)
- 영어 단어 활용
변수 선언
-
변수는 사용 전에 반드시 선언되어야 함
(실행문이 나오기 전에, 준비 기호 위치에 선언) -
변수 inum의 선언으로 이를 위한 메모리가 확보됨
-
변수 선언의 형식 : 자료형(type) + 이름
선언 방법
// 선언 방법
int inum; // 정수형 변수는 inum
float fnum; // 실수형 변수는 fnum과 dnum
double dnum;
char ch; // 문자형 변수는 ch
// 복수 개의 변수 선언 (변수의 타입이 같을 경우)
// 아래처럼 한번에 정의가능하다.
int inum1, inum2, inum3;
변수 선언 - 자료형의 종류
자료형 | keyword | 크기 |
---|---|---|
문자 | char | 1 byte |
정수 | int | 4 byte (short: 2 byte, long: 8 byte) |
실수 | float, double | 4 byte, 8 byte |
변수 치환 : 할당같은 개념
- 우측의 있는 식이나 값을 좌측에 있는 변수에 저장하는 명령
- 치환기호(=) 우측에 있는 식은 readOnly이므로 반복하여 읽어도 변하지 않음
- 치환기호(=) 좌측의 변수는 치환되면 새로운 내용으로 바뀌고 이전에 있던 내용은 회복할 수 없음
// 변수명 = 실행문;
// 실행문은 상수, 변수, 식 등..
int inum;
float dnum;
char ch;
inum = 54; // inum은 정수형 변수니까 정수인 54가 들어감
dnum = 3.14; // dnum은 실수니까 실수인 3.14가 들어감
ch = 'A'; // ch는 문자형 변수니까 문자인 'A'가 들어감
변수의 사용 - Memory
|------|4 byte|1 byte|4 byte|--- 8 btye---|
|------|------|------|------|------|------|
|------|0x0000|0x0004|0x0008|0x000c|0x0010|
|0x0000|------|ch(a)-|-inum-|----dnum-----|
// 한 칸은 4 byte 씩
// - 1 byte는 8 bit로서 한 글자를 표현하는 기본단위
// ch는 1 byte, inum은 4 byte, dnum은 8 byte로 서로 크기가 다름
// 정수형 4 byte에 들어갈 수 있는 숫자의 범위 : -2,147,483,648 ~ 2,147,483,647
// 2,147,483,648이란 2^31이고 따라서 범위는 2^-31 ~ 2^31-1
// 31승 = 32bit (4 byte) - 1 bit (부호를 나타내는 sign bit)
// 1 byte에 들어갈 숫자의 범위는 -128 ~ 127까지 임 (-2^7 ~ 2^7-1)
입출력 함수
입력
: scanf()
- 함수 뒤에 있는 괄호 안에는 함수에 data를 넘겨주기 위한 parameter가 들어 감
- 원하는 순서대로 기호
%
와 형식을 지정하는 문자(d,c,f)를 넣고 (%d
),
이어서 변수들의 주소를 순서대로 나열하면 (&inum), 입력된 값이 해당 변수에 들어감
치환과의 비교
-
치환
- 정해진 상수 넣기 (pi = 3,14;)
- 초기값 넣기 (int num = 0;)
- 계산에 의해 넣기 (area = width * height;)
-
입력
- 프로그래머가 임의로 정할 수 없는 값을 사용자로부터 입력 받아 넣기
(학생의 성적, 물건 값, 은행 입출금액등..)
- 프로그래머가 임의로 정할 수 없는 값을 사용자로부터 입력 받아 넣기
int inum;
scanf("%d", &inum);
// 3이라는 숫자를 사용자가 직접 입력하게 되면
// 변수 inum에 3이 들어간다.
입력 - 형식 지정자의 사용 예
형식 | 의미 | C언어의 type |
---|---|---|
%d | 정수(10진수) | int |
%c | 문자 | char |
%f | 실수 | float |
%lf | 실수 | double |
출력
: printf()
- 이 함수의 첫 번째 parameter인 문자열 (예: “This displays %d %f %c, too.”)
안에서 원하는 위치에 형식 지정자를 넣고, - 이어서 변수들을 (inum, dnum, ch) 다음 parameter로 순서대로 넣으면,
- 해당위치에 변수 값이 출력됨
int inum = 54;
double dnum = 3.14;
char ch = 'A';
printf("This displays %d %f %c, too.", inum, dnum, ch);
// This displays 54 3.140000 A, too.
// 3.140000은 실수형 변수를 출력할 떄 기본적으로 채워야하는 자릿수가 있기때문
출력 - 형식 지정자의 사용 예
형식 | 의미 | C언어의 type |
---|---|---|
%d | 정수(10진수) | int |
%c | 문자 | char |
%f | 실수 | float, double |
int a = 10, b = 20;
double times = 3.14;
printf("Hello!! a, b, times", a, b, times);
// 형식 지정자를 앞에 안붙였으므로 Hello!! a, b, times가 출력됨
int a = 10, b = 20;
double times = 3.14;
printf("Hello!! a %, b %, times %", a, b, times);
// 형식 지정자를 잘못 붙였으므로 Hello!! a, b, times
int a = 10, b = 20;
double times = 3.14;
printf("Hello!! a %d, b %d, times %d", a, b, times);
// Hello!! a 10, b 20, times 1374389535
// times가 1374389535인 이유는 정수형으로 출력을 하고자 했지만
// times가 실수값이 들어왔기 때문에 정수형으로 해석해서 출력하다보니
// 1374389535가 나오게 된다.
int a = 10, b = 20;
double times = 3.14;
printf("Hello!! a %d, b %d, times %f", a, b, times);
// Hello!! a 10, b 20, times 3.140000
// times가 3.140000인 이유는 double이라서!
int a = 10, b = 20;
double times = 3.14;
printf("Hello!! a %d, b %d, times %.2f", a, b, times);
// Hello!! a 10, b 20, times 3.14
// %.2f의 뜻은 소수점 2자리로 지정하는 것 : toFixed(2)와 비슷
주석
주석
- 프로그래밍 언어가 사람이 알아보기 쉽다고는 하나
추가적인 설명으로 더욱 생산성을 높일 수 있다. - 프로그램에 기재해 놓은 설명문
- compiler가 이를 무시함
주석 쓰는 방법
-
/* */
: /*로 시작해서 */로 끝남 (슬래시 스타)
(한줄, 여러줄 가능 : 보통 여러줄일 때 사용함) -
//
: 한줄 짜리 주석을 사용할 수 있다.
VS(Visual Studio) 설치
설치 끝
C언어로 “Hello World!” 출력해보기