언어/C2013.10.07 15:05

변수!!  무엇을 뜻하는 말인가? 프로그래밍에서는 변수라는 뜻은 "변경이 가능한 수?" , "변하는 수?" 

어떠한 의미도 전부 틀리다고는 말 할 수 없다. 다르지만 틀린것은 아니다.


우리는 수식 중  "4 = x+1"  이라는 수식이 존재 한다고 했을 경우!  "x" 값이 3인것을 확 실히 할 수 있다.

그럼 x를 뭐하고 불러야 될까?  값? 분명 수학시간에 "어떠한 변수" 라고 했을 것이다. 


그럼 프로그래밍에서의 변수는? 그렇다. 어떠한 수식의 결과 값을 저장하는 곳을 의미한다. 


x = 4+1;,  x = 5-1;, x = 6-9;  우리는 이 식을 1초도 않되서 계산을 다 했을 것이다. 그리고 그 값이 x 라는 것도 알고 있다.

그럼 이것을 한꺼 번에 통합해 보자  x= y+z; 이렇게 말이다. 


위의 식과 통합한 식을 같에 만들려면 모두들 


1  x = 4+1;  x= y+z; ==> x=x , y =4 , z =  1 

2. x = 5-1;  x= y+z; ==x=x , y =5 , z = -1 

3. x = 6-9;  x= y+z; ==x=x , y =4 , z = -9 


이렇게 변화 시킬 것이다. 


즉, 우리는 정수를 담는 그릇인 x,y,z를 선언하고 그 값을 4,5,-1,-9 등으로 대입을 하고 그 결과 값을 도출한 것이다. 


이것을 프로그래밍 적으로 풀어 보면 


 
#include <stdio.h>
int main()
{
   int x,y,z;
   y = 4 ;
   z = 1;
  
   x= y+z;
   printf("결과는 : %d",x);
   return 0;
}


이런식으로 나열 할 수 있는 것이다. 


하지만 컴퓨터는 우리가 생각하는 만큼 똑똑하지 않다.!!

즉 저 그릇이 어떠한 그릇인지 명시해야 하며 그 그릇의 크기는 어떠한지도 생각해 줘야 한다. 


코끼리가 들어가야 될 그릇에 고양이가 들어가면 낭비는 되지만 들어 갈수는 있다.

하지만 반대로 고양이 그릇에 코끼리가 들어간다면 그 그릇은 깨지고 말것이다. 이러한 것들은 잘 다뤄야 한다. 


우리가 일상생활에서 배운 "수"라는것은 


이러한 구조를 띄우고 있다.


고로, 이러한 것을 이용하여 계산을 할 때에는 그에 맞는 변수 타입 이라는것을 지정 해 줘야 한다.

간단하게 많이 사용하는 변수 타입을 나열해 보자.



타입 (자료형)

크기 (32bit 기준)

표현 범위 

형식

 비고

int

4 Byte 

-21억 <->  21억 

정수 

 

unsigned int 

Byte 

0      <->  43억 

양의 정수 

 

long

4 Byte 

-21억 <->  21억  

 정수

 

unsigned long

4 Byte 

0      <->  43억  

 양의 정수

 

short

2 Byte  

-32768 <-> 32767 

 정수

 

unsigned long

2 Byte  

0 <->65535 

양의 정수

 

char

1 Byte  

 -128 <-> 127

 문자

 

unsigned char

1 Byte  

0 <->255 

 문자

 

float

4 Byte  

소수 6자리 

 실수

 

double 

8 Byte  

 소수 15자리

 실수

 

bool

1 Byte 

 0,1

 거짓(0), 참(!0)

 0이 아니면 참


위 표가 일반적으로 수식을 할 경우 많이 사용하는 변수들의 목록이다. 

즉, X = Y/Z 일 경우 X는 float 일 수고 있고 int 일수도 있다. 

그러면 프로그래머들은 상위 개념인 float을 이용하여 int도 표현 할 수 있도록 해야한다. 즉 그릇이 작으면 않되니까.


이 표 보다 사실 더 많은 자료형이 있고 64bit OS 에서는 해당 자료형의 크기가  많이 달라집니다.


이제 변수도 알아 봤으니 다음 편은 변수를 이용해서 출력을 해보도록 하겠습니다.        

Posted by 최우림 -=HaeJuK=-
언어/C2013.10.07 15:04

프로그램들은 어느 정도 실력을 쌓이면 항상 이런말을 하고 다닙니다.

" Hello, World! " 만 찍을 수 있다면 해당 언어는 50% 이상 한 것이다!!


왜 그럴까요? 프로그래머 들은 항상 기초를 중시합니다. 처음! 최초 실행이 성공 했다면 그 이후의 일들은 

시간의 투자와 비례하니 더 이상의 막힘이 없다는 것입니다.

즉, 진입 장벽이 없어 졌으니 이제 마음것 해당 언어를 배울 수 있다. 라는 뜻을 내포 하는 것입니다. 


그럼 그 유명한 " Hello, World! " 을 살펴 보겠습니다. 


우리는 현재 C를 공부 하고 있습니다. 고로, C를 이용하여 " Hello, World! " 를 작성해 보겠습니다.



 
#include <stdio.h>
int main()
{
    printf("Hello, World!!!");
    return 0;
}






위의 코드를 살펴 보겠습니다. 


#include <stdio.h> // C 표준 라이브러리 중 하나인 stdio.h 라는 헤더 파일에 선언된 내용을 포함한다는 뜻이다. // 이 문장을 쓰지 않으면, printf 함수의 선언을 찾을 수 없다는 컴파일 오류가 발생한다. int main(void) // 매개변수가 없는 C 프로그램의 시작을 나타내는 정수값을 반환값으로 받는 main 함수를 시작한다. { // 함수의 시작점을 나타낸다. printf("hello, world"); //콘솔 출력에 hello, world라는 단어를 출력하고 \n 에 의해 다음 줄로 이동하게 된다. return 0; // 0을 반환하며 이 함수를 종료한다. } // 함수의 종료점을 의미한다.


위와 같은 해석이 가능합니다. 


칙칙한 콘솔에 글자만 찍히는 프로그램을 만들어서 실망 하셨지요?


이게 시작입니다.  화려한 UI, 그래픽적요소 등은 차근차근 배우면 저절로 하시게 될껍니다.


이상입니다. 

Posted by 최우림 -=HaeJuK=-
언어/C2013.10.07 15:04

C언어를 구글에서 찾은 결과 입니다. 위키백과에서 발취한 내용 입니다.


C 프로그래밍 언어 1972년 켄 톰슨 데니스 리치가 벨 연구소에서 일할 당시 새로 개발된 유닉스 운영 체제에서 사용하기 위해 개발한 프로그래밍 언어이다.

켄 톰슨은 BCPL언어를 필요에 맞추어 개조해서 "B"언어(언어를 개발한 벨 연구소의 B를 따서)라 명명했고,
 
데니스 리치가 이것을 개선하여 C언어가 탄생했다.
유닉스 시스템의 바탕 프로그램은 모두 C로 쓰여졌고, 많은 운영 체제의
 
커널도 또한 C로 만들어졌다.
오늘날 많이 쓰이는 C++는 C에서 객체 지향형 언어로 발전된 것이다. 또 다른 다양한 최신 언어들도 그 뿌리를 C에 두고 있다.



C 언어의 초기 개발은 1969년부터 1973년까지 4년에 걸쳐 AT&T 벨 연구소에서 이루어 졌으며, 데니스 리치의 말에 따르면, 가장 창의적인 작업이 이루어진 기간은 1972년이었다. 언어의 이름이 "C"인 이유는 그 특징이 "B" 언어에서 유래되었기 때문이며, 켄 톰슨에 의하면, B 언어는 BCPL 언어의 기본만 남긴 버전이다.

리치와 톰슨에 의해 초기에 PDP-7의 어셈블리 언어로 구현되었던 유닉스 운영체제의 개발과 C 언어의 기원은 밀접하게 연관되어 있다. 결국 그들은 유닉스 운영체제를 PDP-11로 포팅하기로 결정하였다. PDP-11의 기능의 일부, 특히 바이트 접근기능을 활용하지 못하는 B 언어의 부족함이 C 언어의 초기 버전의 개발을 이끌었다.

유닉스의 초기 PDP-11 버전은 어셈블리로 개발되었다. 1973년에 struct 자료형의 추가로, C 언어는 유닉스의 대부분을 C로 쓸 수 있을 정도로 강력해 졌다. 유닉스는 어셈블리가 아닌 언어로 구현된 최초의 운영체제 커널 중의 하나였다.(더 빠른 사례는 PL/I로 쓰인 Multics 시스템, ALGOL로 쓰인 Burroughs B5000을 위한 MCP(Master Control Program)가 있다.) 1977년 경, 리치와 스티븐 C. 존슨이 유닉스 운영체제의 이식성을 향상시키기 위해, C 언어를 추가적으로 변경하였다. 존슨의 Portable C Compiler는 새로운 플랫폼에서의 C의 구현의 기초가 되었다.


이정도면 C언어의 역사를 인지하셨을 거라고 생각됩니다. 

간략하게 본다면 A--> B --> C 언어로 진화 되었고 객체 지향형이 포함되면서 C++ 발전하게 되었습니다.



Posted by 최우림 -=HaeJuK=-
언어/C2012.12.06 14:39

안녕하세요. 정말 허접한 강좌의 첫번째 시간입니다. 

오늘 저희는 구구단을 출력할 것입니다. 

왜? 항상 구구단이냐!! 라고 속으로 생각 하셨겠지만 구구단이 가장 중요한 것입니다. 

그 이유는 구구단 출력에는 모든 기본적인 문법등이 다 사용되기 때문 입니다. 


구구단을 출력하기 위해 알아야 할 문법은 다음과 같습니다. 

1. 변수    :  구구단은 두수의 곱과 그 곱한 값을 이용한 수식 입니다. 고로 변수가 2개 이상 필요 합니다.
2. 연산자 :  구구단은 두수의 곱 입니다. 고로 곱셈을 할 수 있는 연산자가 필요 합니다. 
3. 반복문 :  우리는 이태리 장인이 아닙니다. 고로 자동으로 계산을 하기 위한 반복 문이 필요 합니다. 
4. 출력    :  계산을 다 하고 끝? 출력을 해야 검수를 할 수 있겠조? 


그럼 구구단의 원리를 알아 보겠습니다. 

구구단은   2*1 = 2  ~  9*9 = 81 까지 이루어져 있습니다. 이것을 수식화 하면 A*B=C가 되겠습니다. 
이제 수식도 알고 필요한 문법도 알고 있으니 바로 코딩으로 들어 가겠습니다. 


가장 첫번째 변수를 선언 할 것 입니다. 

분명 두수의 곱으로 이루어진 수식 이라고 앞서 정의를 했습니다. 그리고 우리는 숫자 "2"를 정수라 부릅니다.

C 언어에서 정수를 표현하는 변수타입은 int가 있습니다. 다른것도 표현은 가능 합니다만 기본적인 int로 하겠습니다. 


int nDan = 0 ; int nSoo = 0 ; int nResult = 0; 이렇게 변수 3개를 선언 합니다. 코드로 보시면 아래와 같습니다. 

변수를 선언 하는 동시에 초기화 값을 넣어주는 습관을 들여야 합니다. 변수 선언은 말 그대로 선언 입니다. 스택 어디인가 구역만 할단 하는것입니다. 어떠한 값이 들어있는지 사용자는 모르기 때문에 선언과 동기에 초기화를 항상 해주시기 바랍니다.

#include 
int main(void)
{
   int nDan = 0 ; 
   int nSoo = 0 ;
   int nResult = 0;
   return 0;
}
위에 코드와 같이 변수 3개를 선언 하였습니다.이제 우리는 이테리 장인이 아니니 반복문을 사용하겠습니다. 본인이 이테리 장인처럼 한땀한땀 코드로 쫘악 하실 분은 본인 선택이니 그렇게 하셔도 됩니다. ㅋ 그럼 이제 코드를 추가하겠습니다.
#include 
int main(void)
{
   int nDan = 0 ; 
   int nSoo = 0 ;
   int nResult = 0;

   for(nDan = 2 ; nDan <= 9 ; nDan++)
   {
      for(nSoo = 1 ; nSoo <= 9 ; nSoo ++)
      {
        nResult = nDan * nSoo;
        printf("%d * %d  = %d \n",nDan,nSoo,nResult );
       }
   } 
  return 0;
}

어떄요 쉽조?  주말마다 우리를 찾아주던 밥 아저씨 같이 후딱 끝났습니다. 
짜증 나시조? 이게 매력입니다. 이제 한줄 한줄 다시 보도록 하겠습니다. 


#include    // 출력을 하기 위한 기본적인 해더 파일입니다. 다들 아시조?
int main(void)  // 매인 함수의 시작 입니다.
{
   int nDan = 0 ;     // 앞서 만한 A*B=C 에 A에 해당 하는 "단" 변수 입니다.
   int nSoo = 0 ;     // 앞서 만한 A*B=C 에 B에 해당 하는 "수" 변수 입니다.
   int nResult = 0;   // 앞서 만한 A*B=C 에 C에 해당 하는 "결과값" 변수 입니다.

   for(nDan = 2 ; nDan <= 9 ; nDan++)      // 우리가 필요한 것은 2~9 단 입니다.  
   {     // 설명 드리면  단은 2 단 부터 9단까지 1단씩 증가 시켜 주세요 라는 뜻 입니다.
      for(nSoo = 1 ; nSoo <= 9 ; nSoo ++)  // 우리가 필요한 수는 1 부터 9 까지 입니다.  
      {     // 설명 드리면  수는 1부터 9단지 1씩 증가 시켜 주세요 라는 뜻 입니다.
        nResult = nDan * nSoo;  //  단이 2부터 시작이면 nDan =2 이고 nSoo는 1이 겠조? 
        printf("%d * %d  = %d \n",nDan,nSoo,nResult );   // 결과 값을 출력 합니다 : A*B = C  --> 2*1=2 가 되겠습니다. 
       }
   } 
  return 0;
}


한 줄 한 줄 정성스러운 주석을 보니 어떠 신가요? 설마 컴파일과 링크를 못하여 출력 값을 확인 못하는 것은 아니시겠조? 

이것이 코딩의 기초 입니다. 프로그래밍의 80%이상은 이 구문의 벗어 나지 않습니다.
포인터와 함수 구조체 역시 대부분이 이 범위 안에서 이루어지는 것입니다. 

이제 약간의 심화 과정으로 아래 3문제를 풀어 보세요 

1. 변수를 2개를 사용하여 구구단을 출력하시오.
2. 출력 구문을 2,3,4,5,6,7,8,9 단순으로 가로방향으로 출력하시오 
3. While()문을 이용하여 구구단을 출력하시오

이상입니다. 

Posted by 최우림 -=HaeJuK=-
언어/C2012.10.31 16:00

안녕하세요. 최우림 입니다. 

앞으로 우리는 프로그래밍 언어를 배울것입니다. 아주 기초적인 언어이면서 매우 중요하조 

우리는 기본적으로 변수,문법, 같은건 다루지 않습니다. 

또한 최적화 코딩 부분도 다루지 않습니다. 이유는 최적화란 그 만큼 운영 시스템에 커스텀 마이징되었다는 입니다. 

또한 Windows 프로그래밍을 기본으로 교육을 진행 하도록 하겠습니다.
이유는 다른 OS는 포스팅 하기 어렵고 그 만큼 사용하시는 분도 없을 뿐더러 초보자가 사용하기 쉬운 툴도 없습니다. 

MAC,OS2, UNIX, LINUX 어짜피 API만 다르고 C라는 공통적인 것은 같습니다.  


교육에 앞서 사전에 준비해야 될것이 있습니다. 


1. 연필

2. 노트 

3. 컴파일러(Visual Studio 2005 이상을 추천 Vc++ 6.0도 상관 없습니다.)

Visual Studio가 무엇이냐!! 하시는 분은 다른 곳에서 검색을 하시고 오시길 바랍니다.

아주 짧은 속성 과정을 하기 위해서는 기본적인 정보는 다 취합하고 오시는 것이 서로를 위한 좋은 방법입니다. ^^ 


이제 각설하고 교육의 방법에 대해서 말씀 드리겠습니다. 

교육은 철저한 복습과 문제로 진행 하도록 하겠습니다. 이유는 눈으로는 다 알지만 메모장에 코딩하라고 하면 못하는 분들이 너무 많아서 그렇습니다. 강의나 노트를 보면 "이거 할 줄 알아요" 라고 하시면서  "막상 해보려니 모르겠네요!" 라고 하시는 분들이 너무 많습니다.  

이것은 결국 "저는 모릅니다"와 같은 말 입니다. 

그리고 가장  중요한 것은 어려분은 프로그램밍을 배우려고 하는것 입니다. 고로 모든 것은 0,1로 시작해서 끝난다 입니다. 이것을 항상 기역하고 계셔야 합니다. 

0 == NULL == FALSE , 1 !=NULL == TRUE 이것만 숙지 하셔도 프로그래밍의 20%는 끝 낼 수 있습니다. 

꼭 숙지 하시길 바랍니다. 



Posted by 최우림 -=HaeJuK=-

티스토리 툴바