티스토리 뷰
TIPS 16기 프로그래밍 강좌를 수강하고 있는 학생입니다.
블로그에 매차시마다 강의 정리를 올리겠습니다.
프로그래밍 기초
먼저 프로그래밍을 알기전에 프로그램이 무엇인지에 대해 얘기해보자.
프로그램 = Data Structure(데이터 구조) + Algorithm(알고리즘)
위와 같이 표현할 수 있는데, 데이터 구조라는 것은 데이터의 표현이고, 알고리즘은 이렇게 표현된 데이터를
대상으로 하는 문제 해결 방법을 의미한다. 즉 어떤 목적을 위해 진행 계획을 순서대로 표현한 것이라 할 수 있다. 여기서 데이터의 표현이라는 의미는
"int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};"
이라 크게 생각할 수 있다.
그리고 배열에 저장된 모든 값의 합을 더하는 반복문의 구성을 알고리즘이라 생각할 수 있다.
for (i = 0; i < 1; i++)
sum += arr[idx];
배열에 저장된 값들의 합을 구하는 알고리즘이라 할 수 있다.
프로그램은 위와 같이 이루어져 있다.
프로그래밍 언어
사람에게 친숙한 표현법을 사용하여 프로그래밍 할 수 있도록 만든 언어이다.
이 프로그래밍 언어를 사용하는 이유는 컴퓨터와의 대화를 할 수 있도록 해주는 일종의 대화수단이라 볼 수 있다. 사람과 컴퓨터는 서로간의 직접적인 대화를 하지 못하므로 이들 사이에 컴파일러는 사람의 언어를 컴퓨터 언어로 변환해주는 번역기가 있다. 이때 사람과 컴파일러 사이에 약속된 언어인 프로그래밍 언어를 사용하여 표현한다.
컴파일러
위에 말했듯이 사람이 프로그래밍 언어로 작성한 내용을 컴퓨터가 이해할 수 있는 기계어로 번역한다.
소스 파일를 실행 파일로 만들어준다.
C언어의 특징
구조화된 언어
- 구조화된 언어라는 것은 정해진 순서의 실행흐름을 중시한다는 의미가 있다.
이식성이 높다.
- C언어로 작성된 프로그램은 CPU의 종류에 상관없이 실행이 가능하고, 운영체제 차이에도 덜 민감하다.
확장성이 좋고 표현법이 다양하다.
생산성이 높다.
계산기와 비교하는 프로그래밍 언어 (프로그래밍 언어가 가진 구성을 모두 가지고 있다.)
1. 프로그래밍 언어에는시작과 끝이 있다.
2. 사용자 입력이 가능해야 한다.
3. 입력된 정보를 저장할 수 있어야 한다. (변수)
4. 사용자에게 정보를 보여줄 수 있어야한다. (출력문을 가지고 있어야함)
5. 연산할 수 있어야 한다. (연산자)
6. 조건에 따른 처리가 가능해야 한다. (조건문)
7. 반복적으로 수행할 수 있어야 한다. (반복문)
서술 기본 형식
서술문에는 두가지가 있는데 단일 서술문과 복합 서술문이다.
단일 서술문 : 논리적 최소 명령 실행 단위이며 ;(세미콜론)으로 구분한다.
a = a +30;
a = a +30; b = b+50;
복합 서술문 : 단일 서술문 여러개를 하나로 묶은 형태이다.
{
command1;
command2;
}
- {} 중괄호를 사용하여 표현한다.
- {} 중괄호 뒤에 ;(세미콜론)을 사용할 필요가 없다.(아무 의미 없는 행위)
* C언어를 만든 이도 사람이기에 일반적인 상식선에서 기호들을 사용했을 것이다.
* 프로그래밍을 더 잘 이해하기 위해서는 제작자 입장에서 생각해보는 것을 추천
주석문이란 소스파일에 삽입된 메모를 의미한다.
주석문을 사용하는 이유는 사람이 이해하기 쉬운 언어라도 그 내용이 많으면 분석하는데 오랜 시간이 걸리게된다. 이러한 문제점을 최소화하기 위한 목적으로 주석문을 사용한다.
주석문은 /* comment */ 기호를 사용하며 전자( /* )로 시작하여 후자( */ )로 끝난다.
컴파일러가 번역시 주석문을 번역하지 않는다.
// 주석 처리된 문장1
// 주석 처리된 문장2
주석문 사용시 주의 사항
주석문을 중첩하여 사용하면 안된다.
/* 주석 처리된 문장1 /* 주석 처리된 문장2 */ 주석 처리된 문장1*/
예약어란 프로그래밍 언어의 문법에 사용되는 단어이다.
이름 짓는 문법에서는 예약어 사용이 불가능
char, int, double 등 자료형 관련된 예약어가 있고, for, while, if등 제어 관련된 예약어가 있다.
프로그램 생성 과정
소스파일 => 목적 파일 => 실행 파일 (전체적인 과정을 make라 한다.)
컴파일 링크
소스파일 (.c) : 프로그램을 c언어 문법을 사용해 작성한 파일
목적 파일 (.obj) : 소스 파일을 컴파일러가 컴파일하면서 생성되는 파일
=> 오브젝 파일을 만드는 이유는 프로그램이 하나의 소스 파일로만 만들어지는게 아니라
여러개의 파일로 만들기에 컴파일하는 시간이 많이 걸린다. 이 컴파일 시간을 줄이기 위해 목적 파일을 만듦.
소스 파일들을 각각 목적파일로 바꾸고 모아서 실행파일로 만든다.
목적파일의 역할은 일종의 모듈역할 이다.
실행 파일(.exe) : 컴퓨터에서 실행할 수 있는 파일
하나 이상의 목적 파일을 링커가 링크하여 만듦
windows(.exe) ,linux(.out), android(.apk)
컴파일과 링크를 합쳐서 빌드라 한다.
데이터 저장 단위
비트 : 두 가지 중 한 가지 값을 저장할 수 있는 단위
바이트 : 8개의 비트로 구성된 저장 단위 (2^8 = 256)
프로그램에서 데이터 저장 단위가 중요하다. 그 이유는 선언한 데이터 저장 단위보다 실질적으로 적은 데이터 양을 사용하게 되면, 데이터 낭비가 일어나게 된다. 만약 카운터의 숫자가 작은 반복문이라면 이 낭비가 큰 문제가 되지 않지만, 카운터의 숫자가 큰 반복문에서 낭비가 눈덩이로 커져 큰 문제로 변하게 된다. 이 문제는 돈으로도 연결되니 엄청나다....
즉 좋은 프로그램이란 데이터 낭비를 얼마나 적게하냐에 달려있다..
1byte => 1kbyte => 1Mbyte => 1Gbyte => 1Tbyte(각 넘어갈때 1024를 곱해준다.)
4 byte => 32bits
2^32 = 4Gbyte이다.
부호 비트
컴퓨터는 부호가 없는데, 우리의 편의 즉 양수와 음수을 구별하기 위한 비트이다.
수학적으로 표현하는 양의 정수 , 0, 음의 정수 3가지가 아닌 양수와 음수로 구분하는 이유는 표현되는 경우의 수가 3가지에서 2가지로, 3가지일땐 2비트를 차지하고, 2가지일때는 1비트를 차지한다. 이것이 우리가 표현할 수 있는 데이터의 범위와 직결되기에 더 많은 범위를 포함할 수 있는 후자의 경우를 사용하는 것이다. 그래서 메모리 최적화를 위해 0을 양수로 포함 시키는 것이다.
최상위 비트 부호 비트 |
|
|
|
|
|
|
최하위 비트 |
2 * 2 * 2 * 2 * 2 * 2 * 2 = 2^7 = 128
양수의 표현 범위 0 ~ 127
음수의 표현 범위 -1 ~ -128
부호의 개념을 가지는 1byte의 표현 범위 -128 ~ 0 ~ 127
아스키코드
문자를 숫자로 표현하는 약속으로 컴퓨터는 이 표를 기반으로 이해를 한다.
48 => 0을 의미
65 => A
97 =. a을 의미 이것들만 외우면 나머지는 1씩 추가하면 알아낼 수 있다.
한글은 초성, 중성, 종성으로 이루어져있는데, 종성의 종류 숫자가 32개를
넘지않으면서, 제일 많다. 그래서 2바이트만 있으면 한글을 표현가능
자료형은 왜 필요한가?
자료형(Data Type)은 실제로 메모리를 사용하는 단위이다.
Built in data type => 사용 빈도가 높은 자료형을 에약어로 제공
User defined data type => 사용자가 만들어서 사용할 수 있는 문법 제공
정수형 자료형
c언어 프로그램에서 정수 값을 메모리에 저장하기 위해 사용하는 자료형
상수형 자료형
c언어 프로그램에서 실수 값을 메모리에 저장하기 위해 사용하는 자료형
정수를 표현하는 자료형(중요하지만 간과하기 쉬운 부분 - 휴대폰 넣는데, 냉장고 박스 쓰지
char - signed char => -128 ~ 127 문자를 사용할 타입형
- unsigned char => 0 ~ 255 *꼭 문자만 사용안해도 된다. 숫자도 가능
signed char와 같은 것을 볼때 부호가 있는 것을 기본으로 하기에 signed은 생략이 가능하다.
unsigned char을 사용시에는 전부다 적어줘야 한다.
int - short int - signed short int => -32,758 ~ 32,767 숫자 사용할 타입형
- unsigned short int => 0 ~ 65,535
- long int - signed long int => -2,147,483.648 ~ 2,147,483,647
- unsigned long int => 0 ~ 4,294,967,295
long을 기본으로 한다. 그래서 long을 생략가능 또는 int를 생략 가능하다.
short int에서 int를 생략해서 사용가능
실수를 표현하는 자료형
float와 double 두 가지가 있다.
float : 1.2E-38 ~ 3.4E38
double : 2.2E-308 ~ 1.8E308
전자는 32bits 부동소수점을 의미
후자는 64bits 부동소수점을 의미
실수 사용 시 가끔 이상한 게산이 나올 때 있고, 정수보다 느리다.
이렇기 때문에 실수를 사용하는 것보단 정수를 사용하기를 권장한다. 하지만 굳이 실수를 사용한다면,
오차 범위때문에 float보다는 double을 사용하기를 권장한다.
float는 사용시 0.7를 저장하면 0.6999999999로 저장된다.
이게 엄청난 문제를 일으키게 된다.
'TIPS' 카테고리의 다른 글
[TIPS 프로그래밍 강좌] 6차시 정리 (0) | 2017.01.18 |
---|---|
[TIPS 프로그래밍 강좌] 5차시 정리 (0) | 2017.01.15 |
[TIPS 프로그래밍 강좌] 4차시 정리 (0) | 2017.01.14 |
[TIPS 프로그래밍 강좌] 3차시 정리 (0) | 2017.01.08 |
[TIPS 프로그래밍 강좌] 2차시 정리 (1) | 2017.01.03 |
- Total
- Today
- Yesterday
- 헤더
- 오일러 프로젝트 16번
- 오일러 프로젝트 13
- 화투이미지맞추기
- 와이어샤크
- 실행 압축
- 2의 1000승
- CBrush
- 오일러 프로젝트 11번
- 키보드 메시지 이벤트
- 오일러 프로젝트 10본
- arp
- MFC
- tipsr강좌
- 오일러 프로젝트 14번
- 약수 500개
- 오일러
- 허프만 알고리즘
- Tips
- TIPS강좌
- 오일러 프로젝트 8번
- 팁스강좌
- tipsoft
- tipssoft
- 서버
- 패킷
- Omok
- 비손실 압축
- 오일러 프로젝트 12번
- 이미지게임
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |