흠 너무 거창하다 자료구조와 사칙연산이라.....
이걸 또 초보자에게 어케 설명해야 할까? ㅠㅠ

우선 컴퓨터로 계산기를 만든다고 하자..
실제 프로젝트에서는 훨~~씬 어려운 연산들이 많이 들어간다.
일단 개념적으로 쉬운 계산기와 그리고 보너스로 성적 구하는 프로그램을 만들어보자.

아직까지는 프로그램에 대한 감이 오질 않았을 것으로 본다.
요번회를 통해서 왜 프로그램을 해야 하는지?
설계란 놈은 왜 필요한지를 배워보겠다...

집을 지으려면 우선 건축물에 대한 설계부터 이루어져야 한다.
아파트 인지 한옥인지 다세대 건물인지가 먼저 결정되어야 하고 각 종류마다 다른 설계 도면이
먼저 완성되어야 한다. 그러면 이 설계 도면을 가지고 실제 현장에서 빼대부터 시작해서 최종
내장재의 마무리까지 이어진다. 시공이 끝났으면 분양이 이루어지고 사람 사는 곳이 된다.
다 사람을 위해서 만드는 것이다.

프로그램도 마찬가지이다 다 사람을 위해서 만드는 것이다. 
그리고 중요한것 반드시 먼저 설계도면을 완성하고 코딩에 들어가야 한다는 것이다.
어렵고 그럴싸한 말이 아키텍쳐라는 용어가 있다. 쉽계 플어쓰자면 설계도면을 말하는 것이다.
건축에 비유하면 뼈대는 이렇게 하고 각 방은 어떤 구조로 만들며 난방은 또 전기배선은
어떻게 하고 마무리는 어떻게 할지를 정하는 것이다.

바로 이것을 잘 해야 한다. 그래야 진정 프로그래머가 되고 아키텍쳐가 되는 것이다.
기존 프로그래머 중에는 이것이 특히 약한 사람들이 많다. 일단 코딩부터 들어가는 사람들이
있다. 진~~짜 많다 장수하려면 이런 마인드는 버려야 한다. 이 직종에서 1%내에 들어간다면
뭐 할 말은 없지만 1%내의 사람도 결국은 이 설계를 잘해야 장수하는 것 같다.

뭐 이정도로 서론이나 개념 또는 프로그램에 대한 장기적인 설계 관점에서의 설명은 마치고
본격적인 프로그램의 개념으로 다시 넘어가자.

C/C++은 미리 정의된 일정한 언어이다.
입력을 받아 계산하고 출력을 보여주는 모든 과정을 일정한 언어로 만드는 작업이다.

이제 이 언어를 하나씩 살펴보자.
먼저 입력, 계산 , 출력중에 계산 즉 더하기 빼기 같은 것을 하기 위한것 부터 알아보자.

1더하기 3은 4이다. 간단하다.
하지만 컴퓨터에서 이 산수를 하기위해서는 방(메모리)이라는 개념을 사용해야한다.
자 방이 예를 들어 1억개가 있다고 치자.... 그냥 가정하자고.... 
주소는 0번부터 999999999 까지 일련번호가 있고 각각의 방에 이름표를 붙일수 있다고 본다.

그럼 1이 들어갈 방 이름을 'aa' 라 하고  3이 들어갈 방 이름을 'bb'라 하고 연산 결과인 
4가 들어갈 방 이름을 'cc'라고 하면 

컴퓨터 프로그램에서는 

aa=1;
bb=3;
cc = aa + bb;

라고 하면 cc의 방에는 이쁘게 4라는 값이 들어간다.


위와 같이 프로그램을 하기 위해서는 자료 구조란 놈과 친해져야 한다.
자료구조는 우선 변수와 변수 타입이라는 개념을 알아야 한다.

변수라는 것은 숫자를 담는 그릇이나 방(메모리)이라고 보면 되고,
변수 타입 즉 방에 들어갈 종류를 변수 타입이라하며 정수 실수 문자열등이 있다. 

위의 예제를 다시 정확하게 써보자

long aa;

long bb;

long cc;

aa=1;

bb=3

cc=aa+bb;


여기서 aa는 정수 숫자가 들어갈 수 있는 방 즉 정수용 변수 이름이고, 
bb도 정수 숫자가 들어갈 수 있는 정수용 변수 이름이고,
cc 역시 정수 숫자가 들어갈 수 있는 정수용 변수 이름이다.

변수에 대한 정의는 더 많지만 일단 요 세가지를 보자.

1. 정수 형
-2, 0, 5, 244, 65535 등의 숫자를 말한다. 

char, short, long, int 은 음수가 포함된 것이고
unsigned char, unsigned short, unsigned long, unsigned int는 음수가 없는 것이다.

 

변수 타입

크기

바이트

최소값

최대값

비고

char

1

-128

127

 

short

2

-32768

32767

 

long

4

-2147483648

2147483647

 

int

4

-2147483648

2147483647

32비트 컴퓨터인 경우

 요즘 2017년 즈음에 신규로 나오는 컴퓨터는 99%이상 64비트 컴퓨터이다. 즉 크기가 8바이트 크기를 갖는다는 의미이다. unsigned 는 크기가 같고 음수가 없다고 보면됨 대시 최대값은 늘어난다. 일단 요기까지만 알아두자..


2. 실수 형

3.1415, -1.99 와 같은 실수를 말한다.

변수 타입

크기

바이트

최소값

최대값

float

4

1.175494351e-38F

3.402823466e+38F

long

8

2.2250738585072014e-308

1.7976931348623158e+308


3. 문자 형

문자하나도 하나의 숫자로 표시한다.
즉 char 변수를 사용하면 되고 문자여러개를 사용하는 문자열은 char변수 여러개를 사용하면 된다.


이제 사칙 연산에 대해 알아보자.

사칙연산은 말 그대로 더하기 빼기 곱하기 나누기를 말한다.

기호는 비슷하다  +-*/


예:) long aa = 1+3;

long bb = 3 - 2;

long cc = 4*5;

long dd= 30/5;


위의 방(메모리)에 대한 이름 즉 변수명은 다음과 같은 규칙으로 만들어야 한다.

- 영문자로 시작해야한다.  
- 프로그램에서 사용하는 예약어 'if', 'for', 'long', 'main', '+', '%' 등은 사용할 수 없다.



전체 예제)


#include <stdio.h>
#include <stdlib.h>

int main(int argc, char* argv[] )
{

long aa, bb, cc, dd;

printf ("this is second program\n");

aa = 3;

bb = 5;


cc = aa*bb;

dd = bb-aa;

   

    printf ("%d*%d=%d,  %d-%d=%d \n", aa,bb,cc, aa,bb,dd);


    return 0;
}


출력결과:

this is second program

3*5=15,  5-3=2


프로그램 추가 설명)

printf ("this is second program\n"); 

printf에서  \n 은 한줄 아래로 내려간다는 의미이다.
즉 this is second program을 출력하고 바로 옆으로 출력하는 것이 아니라
다음 줄로 출력한다는 의미이다.


aa = 3;

aa에 3을 넣는다는 의미이다 이제부터 3대신 aa를 사용하면 된다.


cc = aa*bb;
aa와 bb의 값을 곱한 결과 값을 cc에 넣는다. 즉 현재 cc에는 15가 들어가 있다.


dd = bb-aa;
bb에서 aa값을 빼고 그 결과를 dd에 넣는다. 즉 현재 dd에는 2가 들어가 있다.


    printf ("%d*%d=%d,  %d-%d=%d \n", aa,bb,cc, aa,bb,dd);
    %d 는 따옴표 뒤에 오는 변수를 대신해서 사용할 때 표시한다.
    %d는 정수형 값을 표시할 때 사용하며, %d의 개수와 뒤의 변수 개수는 같아야 한다.
    즉 첫번째 %d는 aa값을 표시하고, 두번째 %d는 bb의 값을 표시한다.
     세번째 %d는 cc값을 표시하고, 여섯번째 %d는 dd의 값을 표시한다.

   그러므로 위의 printf문은 최종적으로 "3*5=15,  5-3=2" 값을 표시하게 된다.



요번 정리는 요기까지~~~





요기 부터는 프로그램에 대한 설명 부분이다.

#include <stdio.h>
#include <stdlib.h>

#기호는 프로그램에서 정의한 기호이다. 일단 그런가부다 하고 넘어가자
#include 는 예약어다. stdio.h 라는 파일을 포함하라는 것이다. 
파일이름 앞뒤로 꺽쇠를 붙인다. 도구에서 제공되는 특정한 함수등을 
사용하려면 확장자가 '.h' 인 헤더 파일을 각각 포함(include)해 줘야 한다. 

예를 들어 수학관련된 sin, cos 등의 함수를 사용하려면 math.h 파일을
 include 해야한다. 

잘 모르겠으면 프로그램 짤 때 맨위의 include 두줄을 무조건 넣어 준다고 생각하면된다. 

자 이제 두줄 설명했다. 휴~~~

int main( )
{


이제 main 함수 차례이다. 

main 함수라는 것은 프로그램이 시작하고 끝나는 곳이다. 
놀이 공원의 귀신의 집에 다들 들어가본 기억이 있을 것이다. 
들어가는 입구는 단 한군데 밖에 없다. 이 입구라고 보면된다.

main함수라고 표현하였다. 함수라는 말 많이 들어봤을 것이다.
f(x) = 3x+4y+7
뭐 수학에서 쓰이는 이런것도 함수이다. 즉 하나의 동작이나 쓰임새등을 위해
일정한 코드들을 모아놓은 것이다.
main 함수의 목적은 프로그램을 시작하고 끝내는 함수이다.
(끝나는 부분은 솔직히 꼭 main 안에서 일어난다는 보장은 없다. ^^)

함수의 오른족에 괄호'()' 를 열고 닫아준다. 이것은 함수임을 표시하는 기호이다.
그리고 그 괄호 사이에 인자라고 하는 것이 있을 수도 있고 없을 수도 있다.
일단 무시하자, main에 있는 것은 그냥 똑같이 쓰자. 나중에 한번 더 자세히 다룰 예정이다.

함수의 시작은 중괄호 '{' 로 시작하고 중괄호 '}'로 끝난다. 
이 중괄호 사이에 함수의 각종 내용이 들어간다. 안에 들어가는 내용은 아래에 
이어서 간단하게 살펴보자.

    printf ("this is first program");
    return 0;

두줄이 main() 함수 안에 있다. 
printf 라는 놈을 보니 오른족에 괄호가 있고 그 사이에 따옴표가 있다.
그렇다 printf 라는 것도 함수다. 왜냐고? 함수 오른쪽에 괄호가 있으니까....
printf라는 함수는 컴파일러에서 제공하는 미리 만들어진 함수이다.
화면에 따옴표 사이에 있는 글자들을 표시하는 함수이다.

즉 this is first program 글자를 화면에 보이도록 하는 것이다.
일단 요기까지만 알아두자 . 

printf 줄의 맨끝에 보면 세미콜론 ';' 이 있다. 이 세미콜론은 글을 쓸 경우에 
한 문장이 끝났을 때 마침표를 찍듯이 하나의 함수나 명령문 등의 제일 뒤에 
붙이는것이라 생각하면 된다. 

다음 return 0; 라는 것이 있다. return 은 예약어 이며 함수를 종료하고
나가겠다는 의미이다. 프로그램은 순차적으로 실행되는데 이 return 문을
만나면 그 아래에 백만줄의 명령어가 있어도 현재의 함수를 종료하고 
빠져 나간다고 보면 된다. 역시 줄의 맨 마지막엔 ';' 세미콜론이 있다.

자 이제 처음으로 하는 프로그램의 설명을 마쳤다.

진달래꽃

진달래꽃



프로그램이라 하면 컴퓨터에서 미리 정의된 코드나 단어등을 이용하여 우리가 원하는
동작을 하도록 하는 것이다. (추상적인 개념이라 역시 어렵군 ㅠㅠ)

일단 아래 코드를 보자.

// 프로그램 시작

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char* argv[] )
{
    printf ("this is first program");
    return 0;
}

// 프로그램 끝

코드를 봤으면 먼저 동작되는 것을 확인해보자.
Microsoft Visual Studio 6.0 기준으로 설명할 것임. (이하 VS라 칭함)
다른 툴은 나중에 여력이 되면 추가 해보겠음.

이제 VS를 실행해보자.

File 메뉴에 New를 누르자

'New' 대화상자에 탭에서 'Project'를 선택하자.
리스트 중에서 'Win32 Consol Application'을 선택한다..
오른쪽에 Location은 프로젝트가 저장될 위치이니 본인이 원하는 폴더를 선택한다..
그리고 오른쪽 상단의 에디트 박스에 프로젝트 이름을 적자 HellowFirstProgram 이라한다.
OK를 누른다.
 
'An empty propect'를 선택한다.
'finish'버튼과 'ok'버튼을 차례대로 누르면 프로젝트가 생성된다.

여기서 File 메뉴에 new를 다시 누르자.
'New'대화상자에 탭에서 'files'를 선택하자.

'C++ Source File'을 선택하고 오른쪽에 'Add a project'에 체크표시 한다.
그 아래에 File 에디트 창에 HellowFirstProgram.cpp을 입력하고 OK를 눌러준다.


이제 위의 코드('프로그램 시작'에서 '프로그램 끝'까지)를 입력하고 컴파일 하고 실행한다.
컴파일 결과가 다음과 같이 나와야 한다.
-----------------Configuration: HellowFirstProgram - Win32 Debug------------------
Compiling...
HellowFirstProgram.cpp
Linking...

HellowFirstProgram.exe - 0 error(s), 0 warning(s)


VS에 F5를 누르면 실행결과나 나오는데 시커먼게 뭔가 나왔다가 순식간에 없어질 것이다.
일단 실행 결과를 봤으면(일단 넘어가자) 성공이다 

다음 부터는 실제 프로그램코드를 하나씩 뜯어서 분석해보자. 

어렸을적 그러니까 초등학교 6학년 때에 백화점을 돌아다니다가 본 컴퓨터는 내 맘속에 어렴픗이 환상을 심어 놓았다. 화면속에 움직이는 것들이 마냥 신기하기만 했다. 그냥 그랬다.

내가 프로그램에 처음 입문한것은 고등학교 때 베이직언어를 배운것부터지만 본격적으로 시작한것은 군대를 마치고 대학교 2학년에 복학하면서부터다.

프로그램에 입문하는 사람 또는 입문 3년차 이하에게 전해주고 싶은 말이있다. 프로그램을 하려면 단순한 코딩보다는 프로그램 구조나, 설계, 자료구조, 알고리즘에 대하여 꾸준하게 공부해야 한다는 것이다 이거 무쟈게 중요하다 x 100

중요한 사항이기에 먼저 위 말을 먼저 하고 본문을 시작한다 ^^

요리를 하려면 먼저 칼, 도마, 가스렌지 등의 도구를 준비해야한다. 물론 더 고급스런 요리나 특수한 요리를 위해 다양한 더 많은 도구가 필요할 것이다. 그렀다면 프로그램을 하기위해 어떤 도구가 필요할까? 여기서는 C/C++에 대해 알아보자. 옛날의 터보씨라는것도 있었지만 집어치우고 마이크로 소프트의 비주얼스튜디오 6.0, 2005, 2008 세가지가 있고, 리눅스의 gcc, 이클립스 환경등 여러가지가 있지만 각자 구할수 있는 것으로 시작하자. 참고로 나의 주 작업 툴은 비주얼스튜디오 6.0 버전이었다 ^^

편집기나 컴파일러에 대한 것은 나중에 기회가 되면 정리해보자 (ㅋㅋ 이말은 정리할 생각이 없다는 뜻?)

도구보다도 중요한 것이 하나있는데 바로 열정이다. 이것은 꼭 프로그램만이 아니더라도 모든 난관을 극복하는 힘이 될 것이다.

자 다음으로 넘어가보자.

iPhone 에서 작성된 글입니다.
C/C++의 내용을 정리하기에 앞서 어떤 순서대로 정리 할지를 생각해봐야 겠다.

[ 목차 ]
  부제 - 프로그래머의 준비물





 요기까지 자료 정리 함. ^^

5. 프로그램과 대화하다.
  부제- 문자열과 입출력

6. 뺑뺑이 돌려
  부제- 루프

7부. 이길이 아닌가벼?
  부제- 분기

8부. 2열종대로 헤쳐모여!!!
  부제- 배열과 포인터

9부. 부속품 바꾸다.
  부제- 함수

10부. 글로 남기자. 
  부제- 파일 입출력

11부. 원자를 잘게 쪼개면 원자폭탄? 
  부제- 비트 연산

12부. 난 머리가 나쁜가봐?
  부제- 메모리

13부. 자동화된 공장 견학하기.
  부제- 클래스 

14부. 남몰래 야동보기?
  부제- 쓰레드 

15부. 증명사진 뽀샵하기.
  부제-이미지 처리

16. 애들 손좀봐야 쓰겄어!! 뭐? 미리 손 봐 놨다고?
  부제-  전처리기

17부. 키높이 구두
  부제- 얼라인 (align) 

18. 전화해~~~
  부제- 시리얼 통신, 

19부. 메신저로 연락할게~~
  부제- TCP/IP

20부. 벌레 잡기
  부제- 디버깅

21부. 도구의 진화
  부제- 도구 사용 팁 

22부. 나머지는 진행하면서 추가하기로 하자 ^^





참고로 아래는 정보문화사에서 나온 '프로그래밍 입문'이라는 책의 목차이다.



이제껏 밥 먹고 살아오게끔한 C/C++에 대하여 한번도 처음부터 끝까지 차근차근 본적이 없는것 같다. 그렇게 프로그램을 많이 해봤지만 나름대로 자세히 정리해본적이 없어서 이 기회에 한번쯤 정리하고 싶었다.

그래서 두어달에 걸쳐서 C/C++에 대하여 정리해볼 생각이다.
말이 두달이지 시작은 백수일때 했지만 지금 연재 2회를 했는데 직장을 다니게 됐다.
언제 끝날지는 나도 잘 모르겠다.. 
혹시라도 이글을 보는 이가 있다면 불평불만을 토로하면 마지못해 조금이라도
빨리하지 않을까하는 생각이 들지만 이글을 누가 보긴할까? ㅠㅠ

어쨌거나 내가 알고 있는 기본적인 이론 및 개발하면서 느낀점 유용한 팁, 함수 등에 대하여 
언급할 예정이다. 자료가 쌓여갈 때쯤이면 나름 이 글들이 이분야로 들어서는 많은 사람들에게
도움이 되었으면 좋겠다.
 
여기 적는 내용들은 철자의 오류나 일부 잘못된 내용이 포함 될 수 있음을 미리 고지한다. 
하지만 최대한 그런것들이 없도록 조심하겠으면 혹시라도 (많이?) 발견되었을 경우에 알려주면
대단히 고마울것 같다.

그럼 시작해 보자... 

+ Recent posts