회원가입 ID/PW 찾기

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

콘텐츠 수 35

캠퍼스 C 강좌_7

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

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

[연락처] : 605-8662 (서울) ("캠퍼스 C", 도서출판 "책과 스승")
           천리안 : go campusc  
           나우콤 : go lcampc
           하이텔 ID : campusc
***************************<< 목 차 >>*********************************
<1> 배열에 대해서
       1> 배열이란
<2> 제어문
       1>. for
       2>. switch
       3>. break,continue

***************************< 내용 시작 >*******************************
<1> 배열에 대해서
       1> 배열이란
***********************************************************************
1> 배열이란

다음과 같은 예를 직접 보자
main()
{
     char piano;
     char rambo[3];

     piano = 'd';
     rambo[0] = 'a';
     rambo[1] = 'b';
     rambo[2] = 'c';

     piano = rambo[2];
}
        이제는 piano  가 변수명이라는 것을  아실 것이다. 물론  내 맘대로
지었다. 영화 제목에서 따온 것이다 rambo 도  변수 명이다.이건 rambo 1 2 3
까지 나왔다.어떤 영화가 제일 재미있었는지는  모르겠지만  나름대로 등급을
매겨서 a,b,c,d를  집에다 넣어 주었다. 제일  좋은 등급은 rambo[0] 이 받았
다. 우리는 지금 4  편의 영화 얘기를 하고 있다. 그러나 rambo  1,2,3 는 일
종의 쌍둥이  같이 별개의 영화라고 느껴지지  않는다. 이럴 때  우리는 배열
(array)을 쓴다. 즉  각각 독립적으로 쓰일 수도 있지만  내용에 공통점이 있
고, 따라서 일괄적으로  처리할 일이 많은 경우 배열을  쓴다. 배열을 선언하
는 것은 간단히 대괄호("[ ]") 를 변수명 옆에 붙이는 것이다.

        [157쪽]의 그림을 보시고 몇 가지 상식을 외자.

1. [ ] 사이의 숫자는 몇 쌍둥이 인가를 나타낸다.즉 a[4] 는 4 쌍둥이
2. 쌍둥이라도  이름은 [0]부터  시작하여 i[0],  i[1],i[2] 이고 마지막  이    
    i[3] 가 아니라는 것을 주의.
3. 그리고 각각의 i[0],i[1],i[2], 크기는 1 바이트씩 할당됨.
   char i[3]이라는 표현에서 앞부분의 "char"가 그 각각의 크기를 보여줌.
4. 위의 경우 "i" 들이 쓰는 집은 3 채 즉 3 명 x 1채씩

다음의 결과가 위의 설명을 더욱 명쾌하게 한다.
main()
{
     char rambo[3];

     printf(" size = %d", sizeof(char));
     printf(" size = %d", sizeof(rambo));
     printf(" size = %d", sizeof(rambo[2]));
}
<답>
size = 1
size = 3
size = 1
즉 배열의 낱낱의  요소 크기는 배열 앞에 선언된 변수형(type)  과 같다. 그
러면 아래는 어떤가 (int type이다)
-------------
main()
{
      int  robocop[3];

      printf(" size = %d", sizeof(robocop));
      printf(" size = %d", sizeof(robocop[2]));
}    
<답>
size = 6          3개 x 2채( int type)
size = 2          2 채

        크기에 대한 이해가  확실해야 한다. 이제 직접  주소(address)를 따
져 보자. 일단  "주소는 먼저 선언된 순으로 할당된다"고  보자. 그러면 다시
rambo 예를 보면
-------------------
main()
{
     char piano;
     char rambo[3];
}
piano 가 처음 왔으므로 일단 100호를 주자 그러면
             rambo[0] 은 101호
             rambo[1] 은 102호
             rambo[2] 은 103호
아무 문제없다. 그럼 이제 robocop을 보자
main()
{
     int robocop[3];
}
     robocop[0]    -> 100호
     robocop[1]    -> 102호
     robocop[2]    -> 104호
robocop[] 하나 마다 두 채씩(int) 쓰므로 번지수는 두개씩 증가되었다.

<문> long type 은 4 바이트(4 채)씩 할당된다. 다음의 주소를 찾아 줘라
----------------
main()
{
     long  terminator[3];
}
     terminator[0]   -> 100호
     terminator[1]   ->
     terminator[2]   ->

        앞으로는 이와 같이  "주소 찾아 주는 일"을"  memory map을 그린다"
고 얘기하자. 이제는  남이 이 강좌를 보면 너무 유치하다고  하지 않을까 걱
정이다.용어를 점점 제대로 쓰자."memory 아파트에  누가 어디 있는지 지도에
표시"하자는 말이다. 자 이제 당분간 배열을 써먹을 수 있게 되었다.
***********************************************************************
<2> 제어문
       1>. for
       2>. switch
       3> break,continue
***********************************************************************
1> for
       for문은 while 문의  표기법을 더욱 간단하게 표시한  것이다. 기능은
똑같다.따라서 이  for 문은 정말  빈번하게 쓰인다. 지난  회에서 while문을
제대로 쓰려면 3 박자가 맞아야 한다고 했다.즉
   age = 10;            <-- 1. 시작 나이를 초기화
   while( age < 20) {    <-- 2. 나이 비교.
         printf("No");
         age++;          <-- 3. 나이 증가
   }
위와 같은 내용을  for문을 써서 한 문장으로 표기하면 다음과 같다.
    for(age = 0; age < 20; age++) {
          printf("No");
    }
5줄이 3줄로 줄었다. 하고 싶은  말을 간결하게 썼기 때문이다.표기법을 이해
하리라 믿는다. 위의 두 예를 항상 비교  기억해야 한다. 여기서도 단문인 경
우 { } 를 생략할 수 있다. 여기서 반드시 기억할 것은 다음과 같다.

        1) for문도 3 박자를 맞추어야  하므로 반드시 for(;;)내부에 두개의
";"을 써서 3부분으로 나눈다는 것이다.  따라서 for문을 보면 만사 제쳐놓고
";" 두개를 찾아라.-> for( ; ; ).  없으면 error다.

        2) 필요하면 for의 머리  부분 for( ;  ; ) 에서   ","를 써서 첫 부
분과 셋째 부분을 여러 개 쓸 수도  있고 생략도 가능하다. 그러나 가운데 부
분은 생략은 가능하나 여러  개 쓸 수는 없다. [126쪽] <머리  부분 표현법 >
참조.

<문> 왜 가운데 부분에 콤마 연산자를 쓸 수 없을까 ? 이유를 생각해 보라.

        이제 배열을 써먹어 보자. rambo 형제 집에다 각각 0,1 2  을 넣자.
main() {
       int i,rambo[3];

       for(i= 0; i < 3; i++) {            /* <--  3 보다 작다 */
             rambo[i] = i;
       }
}
rambo  형제 집에다 각각 400 500 600 을 넣자
main() {
       int i,rambo[3];

       for(i= 0; i < 3; i++) {            /* <--  3 보다 작아야 한다 */
             rambo[i] = (i + 4)*100;
       }
}
[문] for 문을 써서 1 부터 100 까지 더하는 프로그램을 작성하라.
[문] 다음의 결과를 써라
     main()
     {
         int i,j;
         for(i=0; i <= 3; i++) {
               if(i== 1) break;
               for(j=0; j <= 3; j++) {
                      if(j == 2) break;
               }
          }
          printf("i = %d       j = %d\n",i,j);
      }
-----------------------------------------------------------------------
2> switch

        이것은 if else문을  간결히 하기 위해 만든  표현법이다. if,else는
양자 택일밖에 못한다. 다중  택일을 하려면 if else, if else를  여러 개 사
용해야 한다.그것은 자칫하면  표현이 복잡해 질 수  있으므로 표현법을 간단
히 하기 위해 아예 switch 문을 만들었다 이것은 비교적 표현이 복잡하다.
따라서 [119쪽]의 완전한 사용 예를 항상 참조하기로 하자.

        이제 다음 말을 각각 if 와 switch로 써서 구현하고 비교하자.
        -----------------------------------------------------
        " 한 문자를 받고 그 키가 'q'이면 quit , 'b'이면  bell,
        'p'이면 print,'w'이면 write 라고쓰고 그 이외의 것은
         "I_don't_know" 라고 쓰자
        -----------------------------------------------------

        [120쪽]의 비교 테이블을 보자.

        여러분이 보기에는  어떤 표현이 보기  좋은지 모르겠다.  길이가 더
짧아지지는 않았다.그러나  좌측(switch문) 표현법이  간결하고 짜임새  있다
는걸 느낄 것이다. 새로운 예약어  switch, case, break,default가 새로 나왔
다. [55쪽]에 형광펜으로  그어 보자. 그리고   ":" 표시가 처음 나온  것 같
다. 다소 복잡하게  보일지도 모르겠지만 이건 표기법이기  때문에 특별히 설
명할 것이 없다. 그냥 외우는 수밖에...

        개념적으로는 도박 "black Jack" 이나  "도리 짓고 땡"(이런 예를 들
어서 어떨지...)을 아는 사람은 이해가 빠를  것이다. 이런걸 전혀 모르는 청
소년을 위해서 잠깐  설명을 하면, 블랙 잭은 패 나눠주는  사람(딜러) 한 명
이 손님을 동시에  여러 사람을 상대한다. 패를 자기도 갖고  손님 여러 명에
게 나눠 준 후  한사람씩 순서대로 비교해 나간다. 즉 [딜러 -  손님 1], [딜
러 - 손님 2],  [딜러 - 손님 3]  이런 식으로 한사람 씩 비교해 나가는 것이
다.

        지금 나오는  switch()에서는   딜러와 [손님  1]과 손에 든  카드가
"똑같은지 만" 비교한다.(크고 작고를 비교  하는 게 아니다)(중요). 만일 틀
리면   그 다음 [손님 2]와  비교한다.이런 식으로 손님  끝까지 간다.여기서
딜러의 역할은  변수 ch의 내용이다.손님은  case 'q',  case 'b',...들이다.
이때,  손님과 똑같은  카드를 못찾으면  "에라  모르겠다" 하면서  가는곳이
"default" 다. 이 표현법은 얘기 할 것이 많다.

1)
case  'q' 에서 'q'자리에는 반드시 상수가  와야 한다. 즉 'q' 같은 문자 상
수나 12 같은 숫자 상수 가 와야지 변수 명을 써서는 안된다는 것이다(중요)

2)
 위의 ch  가 'p'따위와 비교해서 "값이  같은 경우만"  그  줄부터 수행한다  
실행하다가 break문을 만나면 즉각 switch 블럭 {  } 을 빠져 바로 아래로 가
고 못 만나면 계속해서 이어지는 문장들을  실행하다가 결국 switch  의 끝 }
를 만나면 그  블록을 빠진다. break의 역할은  "실행문이 내려오다 자기한테
걸리기만 하면 switch 블럭 { } 밖으로 집어던지는 것"이다.무서운 놈이다.

<숙제> 위 switch 프로그램에서 break를  전부 빼고 키보드에서 'q'를 쳤다면 
        어떤 결과 ?
3)
default 는 위에서는  "아무것에도 해당하지 않으면"이란 뜻이다.  이 용어는
좀더 알아야 할 필요가 있는데 일반적으로  컴퓨터 세계에서는 "별   말이 없
으면 으레 하던  데로(또는 있던 데로)하게 되있는" 이라는  뜻이다. 말이 더
어려운데, 예를 들면 어린애가 집에 가다 동네  아줌마 그룹을 만났다. 그 중
에 엄마도 있다면 그 애는 "디폴트"로 엄마에게로  간다  그러나 딴 아줌마가
먼저 나가서 애를  가로챈다면 물론 엄마와 접촉할 수 없다.  위의 경우도 마
찬가지다. 'q' 'p' 따위가 먼저   나가서  채 가면 할 수 없고 아니면 나에게
"디폴트(default)로 오기로 되있는  이라는 의미로 쓴 것  이다. 그래서 통상
default의 위치는 switch의  맨 아래 쪽이고 없어도  상관없다. default의 개
념을 위해 예를 더 들어보면.
        (1) 컴퓨터를 키면 default로 C: 드라이브에서 부팅을 한다.
        (2) "캠퍼스 C" 강좌에서는 "디폴트"로 "조합형 한글"을 사용한다.

<문제> [120쪽]  ( 예제 1)번의 의미를  아는 것은 중요하다.  꼭 풀어보시기
        바란다.

<숙제> 성적등급을 매기는데 90 ~ 99점 은 'A'  80 ~ 89점은 'B' 70 ~ 79점은
'C'  60 ~  69점 은 'D' 그 아래는 'F' 를 표시하는  프로그램을 switch 문을
써서 짜 보자.  여기서 switch문은 어느 값이 서로 같은  지만을 비교하지 범
위를 따지는 게 아님을 기억하고 나머지 연산자 "/"를 이용하라
( [121쪽] (예제 2) 참조. )
-----------------------------------------------------------------------
3> break, continue

        break를 또 다룬다. 이것의 기능은  간단하지만 실행 문의 순서를 제
어 한다는 측면에서 보면 아주 중요하다.  기능은 정확하게 말해서 다음과 같
다.

1. 무식하게 말해서
        "  누구든  내려오다 나(break)한테 걸리면 "나를  감싸고 있는 제일
        가까운 블럭"{ }  밖으로 집어 던져 버린다. 단  블럭은  while,for,
        do-while, switch 의 블럭 4 가지다.(if 블럭 { } 은 상관없다)
        ([129쪽] 박스에 해당)
2. 유식하게 말해서
      "break문은  중첩된 while,do-while,for,switch의  4가지 루프의  가장
        안쪽 루프를 하나만 벗어나게 한다"

        continue문은 break처럼 밖으로 집어던지지  않고 프로그램의 제어가
루프의 조건식을 검사하는 부분으로 되돌아간다. 즉  for 와 while은 맨 처음
으로  가고do-while문에서는 맨  뒤로  간다.  여기서 switch문은  관계없다.
[130쪽] 아래 박스에 해당)

두 예를 비교하자
while(1) {               /* 무한루프 */
     printf("\n press 'q' : ");
     if(getch() == 'q')
              break;
}
printf(" Yes Quit !");
--------------------------
while(1) {               /* 무한루프 */
     printf("\n press 'q' : ");
     if(getch() != 'q')
              continue;
     else
              break;
}
printf(" Yes Quit !");
************************< 끝 맺으며 >*********************************
직접 컴파일을 많이 해 보세요.
**********************************************************************

 


profile
외뿔공룡 2008.10.11 12:18
자료 감사합니다.
profile
버닝비 2009.09.22 15:41
좋은 자료 감사합니다.
profile
한틀 2009.11.02 11:16
좋은 자료 감사합니다.화이팅~!
profile
스마일러 2009.12.29 18:09
ㅠㅠ; 감사드립니다..
profile
용정 2010.01.15 14:43
예전 자료라.. 약간 다른게 있네요..
profile
안다솜 2010.02.03 13:48
감사합니다.
profile
KillingS 2010.05.23 15:38
잘 이해가 안되네영-_ ㅠ
profile
jlee377 2010.07.28 14:07
좋은자료 감사합니다^^
profile
시나브로69 2017.06.24 15:43
좋은 자료 감사합니다.
search
List of Articles
번호 분류 제목 평점 포인트 판매자 등록일 구매수 조회 수
공지 공공의 목적으로 공유하고자 하는 소프트웨어는 '소프트웨어 자료실'에 업로드를 요청드립니다.
공지 구매후 평점 댓글을 남겨주시면 구매포인트의 20%를 돌려드립니다.
35 전기전자 아무거나 간단한 RF 필터 설계 프로그램 5P 썸남썸남 2022-12-23 1 118
34 전기전자 아무거나 마이컴 초짜의 넋두리~ [12] 무료 소스리 2009-08-20 0 1402
33 전기전자 아무거나 안녕하세요 자동차 전장품 회로설계에 대해 질문드립니다 [2] 무료 오간지 2017-04-25 0 206
32 전기전자 아무거나 TI 아날로그 엔지니어 포켓 레퍼런스 입니다... [19] 무료 솔개처럼 2016-12-16 0 353
31 전기전자 아무거나 바리스터 기초 자료 입니다. [7] 무료 kme 2016-10-09 0 381
30 전기전자 아무거나 포토인터럽트란 [4] 무료 kme 2016-10-09 0 222
29 전기전자 아무거나 poly switch란 [1] 무료 kme 2016-10-09 0 151
28 전기전자 아무거나 포토커플러사용방법 [1] 무료 kme 2016-10-09 0 357
27 전기전자 아무거나 전자회로 부품정리 자료 [8] 무료 kme 2016-10-09 0 560
26 전기전자 아무거나 IGBT Driver파형 분석 [11] 무료 sensor 2015-03-06 0 519
25 전기전자 아무거나 SMPS Transformer 계산 자료 [19] 무료 sensor 2015-03-01 0 1686
24 전기전자 아무거나 입문자에게 [314] 무료 아크마 2013-09-14 0 5019
23 전기전자 아무거나 도움을 받았으면 추천 눌러 주세요. [4] 무료 테리우스형 2012-07-24 0 28165
22 전기전자 아무거나 저항 코드에 대하여...... [14] 무료 시나브로69 2012-05-31 0 1753
21 전기전자 아무거나 저항 칼라표입니다. [9] 무료 시나브로69 2012-05-31 0 1568
20 전기전자 아무거나 전자회로,수학 ,회로이론 [7] 무료 tbwnaoslwj1 2012-05-03 0 2630
19 전기전자 아무거나 datasheet 8051 [5] 무료 마산마구 2012-03-19 0 2190
18 전기전자 아무거나 laplace 공식 [8] 무료 마산마구 2012-03-15 0 2487
17 전기전자 아무거나 요새 운영자의 생각^^ [8] 무료 아크마 2011-04-03 0 38260
16 전기전자 아무거나 미묘하게 특성 타는 회로? 무료 밝은전기구슬 2011-03-26 0 19868
  • 어떤 일이건 60분을 계속 생각하면 결국 도달하는 것은 혼란과 불행이다.
    - 제임스 사버
  • * 납포인트 정보 *
  • 글 작성 : 3
  • 댓글 작성 : 1
저작권법에 위배되는 콘텐츠는 등록 불가하며, 저작물에 대한 권리는 저작자에게 있습니다.
Copyright 2006-2021 © hardwareis.com, All rights reserved.