회원가입 ID/PW 찾기

1) 지식 창고는 본인이 작성한 콘텐츠(팁/노하우/리소스/강좌 등)을 무료 혹은 가상화폐인 납포인트를 통해 공유하는 공간입니다.
2) 본인이 작성한 콘텐츠에 대해서만 지식 창고에 등록할 수 있으며, 저작권에 위배되는 콘텐츠는 사전경고 없이 삭제될 수 있습니다.
3) 콘텐츠 구매 및 첨부파일 다운로드는 회원그룹 '연구원' 이상 가능하오니, 경험치를 쌓아 진급한 후에 이용 부탁드립니다.
4) 무료 콘텐츠의 본문은 구매절차 없이 즉시 이용할 수 있으며, 판매 납포인트가 있는 콘텐츠는 구매 후 이용할 수 있습니다.
5) 콘텐츠 판매에 따른 납포인트 수익은 지정한 비율(50%)에 따라 판매자에게 지급하며, 납포인트 수익을 통해 진급을 빨리할 수 있습니다.
6) 구매 후 평가를 하면 구매 납포인트의 20%를 돌려 드립니다.

콘텐츠 수 1,041

캠퍼스 C 강좌_4

펌웨어 & 코딩언어 구매수 0 2007.11.04 01:11:00
판매자 프리미엄 판매 납포인트 무료 평점 0점 / 총 0명 참여

***************************< 캠퍼스 C  강좌 >******************************
[제목] :
[코드] : campusc1-004 (초급)
[교재] : CAMPUS C (초급, Third edition)  [출판사 : 책과스승]
[알림] :이 파일은 "캠퍼스 C"에서 모든 분께 공개한 "초급 강좌"입니다.
        이 [알림]의 내용을 지우지 않는다면  누구에게나 임의로 복사해 줄 수
      있습니다.그러나 이 강좌 내용에 대한 저작권은 "캠퍼스 C"에 있습니다.

[연락처] : 605-8662 (서울) ("캠퍼스 C", 도서출판 "책과 스승")
           천리안 : go campusc  
           나우콤 : go lcampc
           하이텔 ID : campusc
****************************<< 목 차 >>************************************
<1> 각 데이타 형의 메모리 구조
<2> 변수 에 대하여
        1> 변수란 ?
        2> 이름짓는법
        3> 실제 사용 예
        4> 변수의 초기화.
<3> 연산자 소개
        1> 산술 연산자
        2> 관계연산자
        3> 논리연산자
        4> 증가 감소 연산자
        5> 비트 연산자
        6> 대입 연산자
        7> 다중 대입문
        8> 조건 연산자
        9> 포인터 연산자
******************************< 내용 시작 >********************************
<1> 각 데이타 형의 메모리 구조

        이제 data type (데이타 형)에 대한 이해를  확실히 하기 위해서 아래 프
로그램을 보세요.

--------------------------
char ch;
int i;
long ll;
float ff;
double dd;
long double ld;

main()
{
        ch = 'q';
        i = 10;
        ll = 123456;
        ff = 3.141592 * 2;
        dd = 3.1415;
        ld = 2.2 * 3.3;
}
--------------------------
        이 프로그램은 형태적으로  보아 "변수 선언" 부분과  "메인함수"만 남아
있고 나머지는 전부 생략된 형태 입니다. 이제는 이런  형태에 대한 설명은 더 이
상 안해도 되겠지요 ?

        앞으로 우리는 프로그램을  점차로 짜나가야 할텐데 그중에서  가장 기초
가 되는것이 변수명을  선언 하는 것 입니다. 변수명을 선언  할때는 그 변수명의
"정체"를 분명히  알기 위해서  "데이타 타입"을  하나씩 달아  둡니다.   위에서
char,int, long, float, long double 이란 던어가 그것 들입니다.
        이것들은 전부 [55쪽]의 예약어 중에서 "2.  변수의 데이타 타입" 그룹에
속하는 것들  이라는 것을 확인 하세요.  이것이 의미 하는것은  두가지라고 지난
시간에 얘기 한 바 있습니다. 즉
        -----------------------------------------------------
        1. 변수가 차지 하는 집이 얼마나 큰가
        2. 변수 안에 들어 가야 할 값들의 속성(글자, 숫자 따위)
        ------------------------------------------------------
        이중에서 "2  변수안에 들어갈 값들의  속성"은 기본적으로 알아야  하는
것이고, 더욱 중요한 것은 "1  변수가 차지하는 집의 크기"에 대한 것 입니다.
이 크기에 대한 문제는 이 강좌가 끝날 때  까지 계속 되는 중요한 것으로서 지금
부터 철저하게 이해 하고 연습해야 합니다.

<질문> 위 프로그램에서 main()  함수 위쪽에 변수를 선언 한 것을  보면 머리 속
        에 어떤 그림이 그려 지나요 ?

        저는 머리 속에 하나의 그림이  선명하게 나타납니다. 여러분들도 똑같은
그림을 머리속에 그려야 하는데, 그게 바로 [76쪽]의  "각 데이타 형의 메모리 구
조" 입니다. 이 내용을 이미 아시는 분도 있겠지만 확실한 연습이 필요 합니다.
        지난 시간에 sizeof()를 사용한 숙제를 하신  분들은 더 이상의 설명없이
[76쪽]의 그림을 이해 하실 겁니다.

이 그림을 이해 하기 위해서 다음같은 몇가지를 기억해야 합니다.

        1. 이 그림은  아파트를 바라 본것이다.
        2. 주소는 100호 부터 시작하는데 이건 임의로 적은 주소다
        3. 주소는 왼쪽 부터 적어 나가고 번지수는 1 씩 증가 한다.
        4. 반드시 1 바이트를 "box 하나(아파트 한채)"로 그린다.

        이 약속들은  내 맘대로 만든게  아니고 컴퓨터 세계에서는 메모리  맵을
그리는 일종의 관습 비슷한 겁니다.
---------------------------------------------------------------------------
<상식 > 메모리 맵(map)

        나중에 여러분이 정식으로 프로그램을 만들게  되면, 특히 어셈블러를 사
용한 고급의 프로그램을  작성하게 되면 메모리 맵 이란걸 그려야  됩니다. 이 지
도(map)는 컴퓨터 내부의  메모리에 변수 들이 어떻게 들어  가는가를 일목요연하
게 보기  위한 것인데, 여기서 말하는  메모리란 여러분들이 지난  시간에 숙제로
컴퓨터를 뜯어 보면서 보았던 메인 메모리(DRAM)을 얘기 합니다.
        그 메인 메모리  상에 변수가 어떻게 들어 있는지 눈으로는  안 보이지만
최소한 머리속에서는 그 배치를 확실히 알고 있어야  합니다. 물론 나중에 디버거
(debugger)를 쓰면 더욱 명확히 눈으로도 볼 수 있지만..
        그 변수의 배치를 종이에 그려놓은것을 메모리  맵 이라고 부릅니다. [76
쪽]은 이런 메모리 맵을 그리기 위한 상식입니다.
        통상은 옆으로 16  바이트씩(아파트 16채)을 붙이고 바둑판  모양으로 그
립니다.
--------------------------------------------------------------------------

        여기서 한가지 주의 할것은 box가 작거나  크거나 간에 box하나는 무조건
1 바이트 크기를 갖는 아파트 한채란 사실 입니다.

<문제> 위 프로그램은 변수명으로 전부 아파트 몇채를 사용하나요 ?
***************************************************************************
<2> 변수 에 대하여
        1. 변수란 ?
        2.이름짓는법
        3. 실제 사용 예
        4. 변수의 초기화.
***************************************************************************
1> 변수란 ?

        이제 변수에 대해서  정식으로 언급 합니다.변수 이름은 우리  맘대로 짓
는 이름입니다. 그래서 대수롭지 않게 여길 지도  모르겠는데 절대로 그래서는 안
됩니다.
       우리가 지어줄 변수명은  아파트 앞에 붙여진 문패라고  생각하면 됩니다.
아파트의 주소 100호 따위 옆에  "홍길동" 을  쓰자는 겁니다. 이 문패를 달아 놓
으므로서 느끼는 편리성은 여러분도 이미 알겁니다. 예를  들어 문패가 하나도 없
고 번지수만 있는  아파트 에서, 100호에 문을 열고 숫자  20를 넣었다고 합시다.
이게 무슨 뜻 입니까  ? 아마 알 사람은 아무도 없을겁니다. 그럼 이번엔  이 100
번지에 문패를 "my_age" 라고 붙이고 20을 다시 넣어  줍시다. 이건 무슨 뜻 입니
까 ?
문패의 역할을  아시겠지요 ? 게다가 C  에서는 명확성을 더 하기  위해서 앞에다
"데이타 타입"도 달아 준다는거 아닙니까, 즉 " int my_age" 이렇게 말입니다.
나이는 소수점은 필요없는 숫자 이니 int형을 쓰는거 아시겠지요 ?
        이와 같이 변수명을  쓰면, 그 아파트에 있는 값들이 어떤  뜻을 갖고 있
는지 "내용을 알아  보기 쉬우므로" 변수명을 씁니다. 또 이  아파트의 값들은 언
제든지 넣었다 뺏다 하면서 "변할 수 있기" 때문에 "변수"라고 부릅니다.

---------------------------------------------------------------------------
2> 이름짓는법
        변수 이름 짓는 원칙이 [77쪽]에 정리되어 있습니다. 이 4가지를 기억하시
기 바랍니다.
        사용 가능 글자  중에 "_"(underline)이 있는 것은 my_name  식으로 띄어
쓰기가 필요한 부분에 이용하라고 제공하는것 입니다.
        그리고 변수의  최대길이가 32로 되있는건  터보 씨 메뉴에서  [options]
[compiler] [source] [identifier length]를 선택해  보세요. 여기서 숫자의 크기
가 32 까지  선택할 수 있다는 겁니다. 여기서 "identifier"란  용어가 나오는데,
이 의미는 쉽게  얘기해서 변수명, 함수명 따위의 "우리 맘대로  짓는 이름"을 총
칭해서 이르는 말 입니다. 사실상 우리가 변수명을 32자  까지 쓸 경우는 거의 없
지만 일단 32로 setting 해 놓으세요

<좋은 예>  sss123  GoodMorning  _this_is_right  Aa123_
<틀린 예>  %hi  24hours  hurry! come*on

<요령 >  가능하면 그 변수의 의미를 명확히 알 수있도록 좋은이름을 지어준다.
<문제> [81쪽] <문2> 를 풀어보세요.
---------------------------------------------------------------------------
3. 실제 사용 예

       일종의 관습으로 우리는  대문자 만으로 구성된 변수명을  짓지 않습니다.
다음의 3 가지 형태로 지으면 무난합니다. 최근에  C++ 등에서는 "my_name"  형식
보다는  " MyName " 으로 짓는 경향이 두드러지므로 가급적 따라서 하세요.
        ----------------------------------------------
        (좋은 예)  : value    first_name    FirstName
        (나쁜 예)   : VALUE    FIRST_NAME    FIRSTNAME
        ----------------------------------------------
  

대문자 만으로 된 이름을 짓는 경우는 아래와 같다.

    #include <stdio.h>
    #define  PI      3.141592654
    main()
    {
         int  first,second;
         first = PI * PI;
    }
        즉  #define  뒤에서 정의  할  때  씁니다. 이  기능은  말할것도  없이
3.141592 대신에 PI 라는 부르기 쉽고 쓰기 쉬운 단어로 바꿔쓰자는 것이지요.
        나중에도 나오겠지만 가능하면  #define을 많이 쓰세요. 그것이  읽기 쉽
고 고치기 쉽고 일반적으로 잘 짠 프로그램입니다.
        또 C 프로그램에  익숙한 사람들은 "대문자 단어"를 보면  항상 변수라고
생각을 하지 않습니다. 즉, "위에 #define이 되있거나,  특별한 다른 선언이 있다
" 고 생각을 하기 때문에 여러분도 이 관습에 따라야 합니다.
---------------------------------------------------------------------------
4. 변수의 초기화.
 

        위에서  만든  변수명은  다음과 같이  쓰입니다.  변수의  선언  위치가  
main() 위와 함수 내부에서 가장 위라는 것을 항상 확인 하세요.

    int  i,j;
    int  k = 123;               <-- 초기화
    main()
    {
            int aaa;

            aaa += 2;
    }
        여기서 i,j  는 집은 확보 되있으나  그안에는 어떤 값이  있는지 모르는
상태 입니다. 그러나  k 는 집을 확보하면서 동시에 123을  넣으라고 명시되 있지
요. 이것을 초기화 라고 합니다.

        이 초기화된 모습을  실제로 보는 방법이 교재 [79쪽] 아래에 나와 있습니
다. 이것은 디버거를 이용하는 방법인데, 초보자 들이  이런 작업을 할 필요가 있
지는 않겠지만, 근본을  이해 한다는 측면에서 아부 중요 합니다.  여러분의 머리
속에서 "추상적"으로 느껴 지는 문제를 "구체적"이고  "실제적"으로 확인해 볼 수
있는 좋은 방법 입니다. 이 절차를 직접 따라해 보세요
***************************************************************************
<3> 연산자 소개
        1> 산술 연산자
        2> 관계연산자
        3> 논리연산자
        4> 증가 감소 연산자
        5> 비트 연산자
        6> 대입 연산자
        7> 다중 대입문
        8> 조건 연산자
        9> 포인터 연산자
***************************************************************************
        지난 시간의 숙제 똑같은 연산자 가 두군데서 쓰이는걸 찾아 보셨나요 ?
답은 다음과 같습니다. 형광펜으로 연산자 표에 표시를 해 놓으세요.
        ----------------
        1.  * 연산자
        2.  & 연산자
        3.  () 연산자
        4.  -  연산자
        ---------------
        C는 연산자가 많은  편 입니다. 이것은 무기 종류가 많은것  처럼 강력한
기능을 가졌다는 걸  의미하지요. 아래에서 연산자 들을 기능별로  크게 분류하여
소개 합니다. 설명이 별로 필요 없는건 대충 넘어  가고 지금 설명이 불가능 한건
나중에 천천히 하겠습니다. 이 연산자 중 일부는 또 설명할 기회가 있을 겁니다.
---------------------------------------------------------------------------
1> 산술 연산자
          main()
          {
                int a,b,c;

                c = a + b;           /* 덧셈  */
                c = a - b;           /* 뺄셈  */
                c = a * b;           /* 곱셈  */
                c = a / b;           /* 나눗셈  */
                c = a % b;           /* 나머지  */
           }

<참고>  % 는 나머지를 취해야하므로 상식적으로  소수점을 가지는 숫자 연산에서
쓸수없다.즉 char,int,long에서만 사용가능하다.

---------------------------------------------------------------------------
2> 관계연산자
         main()
         {
               int a,b;

               if(a > b)              /* 크면 */
               if(a < b)              /* 작으면 */
               if(a >= b)             /* 크거나같으면 */
               if(a <= b)             /* 작거나같으면 */
               if(a == b)             /* 같으면 */
               if(a != b)             /* 같지않으면 */
               if(0)                  /* 거짓 */
               if(1)                  /* 참 */
               if(1023)               /* 참 */
          }
<참고>
        C 에서 0  은 거짓, 0이 아닌 값은 참으로  간주됩니다(중요). 이 개념은
이 강좌 끝날때 까지 쓰이므로 지금 외워두세요.  저 개인적으로는 항상 0은 여자
1은 남자라는 개념으로 컴퓨터의 2진법을 생각합니다.  그리고 항상 "여자는 거짓
말장이다"라고 생각하며 구별하고 있습니다. 여자분들은  기분 나쁘실테니 꺼꾸로
생각하세요. 좌우간 혼동만 하지 마세요.

<문> if(a == b) 와 if(a = b) 일반적으로 어떤 표현이 맞는가 ?
---------------------------------------------------------------------------
3> 논리연산자
         main()
         {
               int a,b;

               a = 0;
               if(a)               /* 결과는 거짓 */
               if(!a)              /* 논리부정, a상태의 부정 결과는 참 */
               if(a < b && c < d ) /* 논리 곱(and) */
               if(a < b || c < d ) /* 논리 합(or)  */
          }
---------------------------------------------------------------------------
4> 증가 감소 연산자
         main()
         {
               int a,b;

               b = 3;
               a = ++b;      /* b를 하나 증가후 a 에 대입. a 는 4 */
               b = 3;
               a = b++;      /* b를 a 에 대입후 하나 증가. a 는 3 */

               b = 3;
               a = --b;      /* b를 하나 감소후 a 에 대입. a 는 2 */
               b = 3;
               a = b--;      /* b를 a 에 대입후 하나 감소. a 는 3 */
          }
---------------------------------------------------------------------------
5> 비트 연산자
         main()
         {
               char  ch1,ch2;
               int a,b;

               a = 0x01;
               b = 0x02;
               a =  a & b;      /비트단위 and a = 0x00*/

               a = 0x01;
               b = 0x03;
               a =  a | b;      /비트단위 or a = 0x03*/

               a = 0x01;
               b = 0x03;
               a =  a ^ b;      /비트단위 xor a = 0x02*/

               a = 0x01;
               a =  a << 2;      /* 2비트 좌로 이동 a = 0x04*/

               a = 0x04;
               a =  a >> 2;      /* 2비트 우로 이동 a = 0x01*/

               a = 0x01;
               a =  ~a ;      /* 뒤집음  a = 0xf7*/
          }

<참고>
        논리곱과 논리합은  참과 거짓을  따지지만, 비트곱,합은 실제로  연산을
한다. 다음 법칙에 따른다.(암기요)
           1) <AND>           <OR>              <XOR>
              0101            0101               0101
            & 0011          | 0011             ^ 0011
           -------          ------             ------
              0001            0111               0110
           

            2) ~0 -> 1        ~1 -> 0 이다.
           

---------------------------------------------------------------------------
6> 대입 연산자
         main()
         {
               char  ch1,ch2;
               int a,b;

               a += b;       /* a = a + b 와 같음 */
               a -= b       /* a = a -b  와 같음  */
               a *= b;
               a /= b;
               a %= b;
               a &= b;
               a ^= b;
               a |= b;
               a <<= b;
               a >>= b;
           }
           <참고> 이렇게 쓰는 이유는 단지 문장을 간단히 표기하기위함이다.
           즉  very_long_name = very_long_name + 1; 은 간단히
               very_long_name += 1; 이다.( 따라서 입력하기 쉽다)

---------------------------------------------------------------------------
7> 다중 대입문
         main()
         {
               int a,b,c,d;

               a = b = c= d = 1; ;    
         }
         <참고>  d 부터 a쪽으로 1이 채워진다.즉 방향이 <-- 이다.
          아래 연산자 표 에서 "결합규칙"의 화살표는 이것을 의미한다.

---------------------------------------------------------------------------
<8> 조건 연산자
         main()
         {
               int a,b,c,d;

               c = (a > b) ? a : b;
         }
         <참고>  한마디로 지저분한 연산자인데 뜻은 (a> b) 이면 a를 그렇지
         않으면 b를 c에 넣으라는 뜻.다음에  나올 if() 문에서 구현할 수 있다

---------------------------------------------------------------------------
9> 포인터 연산자
         가장중요한 것 ( &, *) 이나 나중에 설명한다.

<참고>      위표에서 말하는 "우선순위"란  a  = b + c * d 의  연산에서 더하기
보다  곱하기를  먼저하는 따위를 말한다. 이걸 무시하려면   산수 시간에 배운것
과 똑같이 a = (b +  c) * d  처럼 ()를 쓴다. [88쪽]을 보면 ()  가 제일 높다는
걸 알수 있다. 따라서 우선순위가 의심스러운 경우나  시각적 효과를 높이기 위해
()를 자주 쓴다.()은 만병통치다.
        예)   if( a > b  || (c > d  && a > d))
              if (((a = getch()) == 'a')  || a == 'g')
        실제로 처음  프로그램을 짜거나 읽는  사람은 너무 겹겹이 나타나는  ()
때문에 어지러운데 자기의도를 컴파일러에게 명백히 전달하고자  할 때는 어쩔 수
없는 노릇이다. 컴파일  ERROR도 특히 여기서 자주나므로 프로그램 짤때(coding)
열은 '(' 만큼 세심하게 ')'로 닫아야 한다.
****************************< 끝 맺으며 >**********************************
수고 하셨습니다.
***************************************************************************


 


profile
외뿔공룡 2008.10.11 12:14
자료 감사합니다.
profile
버닝비 2009.09.22 15:38
좋은 자료 감사합니다.
profile
한틀 2009.11.02 11:15
좋은 자료 감사합니다.화이팅~!
profile
스마일러 2009.12.29 17:08
휴우~~~비트연산 ㅠㅠ;;
profile
용정 2010.01.15 13:04
좋은자료 감사합니다.
profile
안다솜 2010.02.03 13:46
감사합니다.
profile
KillingS 2010.05.23 14:54
책이 없이도 공부할수있겠네요 C언어를= ㅁ=
profile
jlee377 2010.07.28 14:03
좋은자료 감사합니다^^
profile
자용이 2010.12.20 14:22

다운로드가 안되나요?

profile
rich999 2011.09.22 11:31

감사합니다.

profile
시나브로69 2017.06.24 15:39
좋은 자료 감사합니다.
search
List of Articles
번호 분류 제목 평점 포인트 판매자 등록일 구매수 조회 수
공지 공공의 목적으로 공유하고자 하는 소프트웨어는 '소프트웨어 자료실'에 업로드를 요청드립니다.
공지 구매후 평점 댓글을 남겨주시면 구매포인트의 20%를 돌려드립니다.
1041 마이크로프로세서 AVR RTOS template [2] 무료 아크마 2017-08-26 0 178
1040 마이크로프로세서 AVR ISP 결선도(프린터 포트/LPT) [1] 무료 아크마 2017-08-26 0 246
1039 마이크로프로세서 STM32 시리즈 MCU graphical configuration tool [5] 무료 코찌코찌 2013-12-11 0 408
1038 마이크로프로세서 Avr Studio에 형변환 연산자가 있나요? [2] 무료 트리비 2016-11-12 0 123
1037 마이크로프로세서 PIC CC-C메뉴얼 [2] 무료 크히히힝 2016-08-12 0 176
1036 마이크로프로세서 PIC MCU를 처음 접해보는데.. [1] 무료 크히히힝 2016-08-04 0 189
1035 마이크로프로세서 mplab ide 8.92 설치! [2] 무료 회사간공대생 2016-08-04 0 559
1034 마이크로프로세서 8051 [5] 무료 크크크크크1 2016-06-08 0 126
1033 펌웨어 & 코딩언어 AVR 128에 시리얼통신칩 설정 참고 [1] 무료 어부 2015-11-17 0 413
1032 마이크로프로세서 stm32f103 demo board example [2] 무료 seele 2015-09-04 0 557
1031 마이크로프로세서 stm32f103자료입니다. [3] 무료 seele 2015-09-04 0 765
1030 마이크로프로세서 따끈한 MPLAB X IDE 한글 메뉴얼입니다. [25] 무료 om 2015-08-10 0 2951
1029 마이크로프로세서 네오스 즐겨찾기 to 텍스트 VB6 [3] 무료 네오스f91e9 2015-07-31 0 188
1028 마이크로프로세서 네오스 AVR soft usart code 생성기 VB6 [1] 무료 네오스f91e9 2015-07-30 0 216
1027 마이크로프로세서 네오스 GPS 시뮬레이터 VB6 [3] 무료 네오스f91e9 2015-07-30 0 240
1026 마이크로프로세서 네오스 AVR ISP 케이블 짝짓기 VB6 [1] 무료 네오스f91e9 2015-07-30 0 258
1025 마이크로프로세서 네오스 LRC 계산기 VB6 [3] 무료 네오스f91e9 2015-07-30 0 562
1024 마이크로프로세서 네오스 사인 테이블 생성기 VB6 [2] 무료 네오스f91e9 2015-07-30 0 243
1023 마이크로프로세서 네오스 스위치 코드 메이커 VB6 무료 네오스f91e9 2015-07-30 0 224
1022 마이크로프로세서 네오스 주석변경 툴 A, B VB6 무료 네오스f91e9 2015-07-30 0 218
  • 사랑이란 뿌리는, 땅 속 깊숙이 박았지만 가지는 하늘로 치뻗은 나무이어야 한다.
    - B.러 셀
  • * 납포인트 정보 *
  • 글 작성 : 3
  • 댓글 작성 : 1
저작권법에 위배되는 콘텐츠는 등록 불가하며, 저작물에 대한 권리는 저작자에게 있습니다.
Copyright 2006-2021 © hardwareis.com, All rights reserved.