U E D R , A S I H C RSS

새싹�실/2012/start Line

Contents

1. 새싹�실/startLine
2. 수업
2.1. 1회차-환�, 성훈 (2012-03-21)
2.1.1. 수업내용
2.1.2. 과제
2.1.3. 후기
2.2. 1회차-재현 (2012-03-22)
2.2.1. 수업내용
2.2.2. 과제
2.2.3. 후기
2.3. 2회차-환� (2012-03-26)
2.3.1. 수업내용
2.3.2. 과제
2.3.3. 후기
2.4. 3회차-환� (2012-3-28)
2.4.1. 수업내용
2.4.2. 과제
2.4.3. 후기
2.5. 3회차-성훈, 재현 (2012-3-28)
2.5.1. 수업내용
2.5.2. 과제
2.5.3. 후기
2.6. 4회차-환� (2012-4-2)
2.6.1. 수업내용
2.6.2. 과제
2.6.3. 후기
2.7. 4회차-성훈 (2012-4-3)
2.7.1. 수업내용
2.7.2. 후기
2.7.3. 과제
2.8. 5회차-환� (2012-4-4)
2.8.1. 수업내용
2.8.2. 후기
2.9. 5회차-성훈 (2012-4-5)
2.9.1. 수업내용
2.9.2. 후기
2.10. 4회차-재현 (2012-4-5)
2.10.1. 수업내용
2.10.2. 후기
2.11. 6회차-환� (2012-4-9) + 7회차-환� (2012-4-9)
2.11.1. 수업내용
2.11.2. 후기
2.12. 8회차 (2012-5-1) - 성훈, 환�
2.12.1. 수업내용
2.12.2. 후기
2.12.3. 과제
2.13. 9회차(2012-5-9) - 성훈, 환�
2.13.1. 수업내용
2.13.2. 후기
2.13.3. 과제 - 캘린� 만들기
2.13.4. 기타
2.14. 10회차(2012-5-22) - 성훈, 환�
2.14.1. 수업내용
2.14.2. 후기
2.15. 11회차(2012-5-23) - 성훈, 환�
2.15.1. 수업내용
2.15.2. 후기
2.16. 12회차(2012-7-19)
2.16.1. 수업내용
2.17. 13회차(2012-7-20)
2.17.1. 수업내용
2.17.2. 코드들
2.17.3. 질문
2.18. 2012-7-30
2.18.1. 코드
2.19. 2012-8-2
2.19.1. 코드

1. 새싹�실/startLine

  • 모임시간 : 가변
  • 가르치는 사람 : 서민관
  • 배우는 사람 : 박환í�¬, ì�´ì„±í›ˆ, 최재현, 서민관

2. 수업

2.1. 1회차-환�, 성훈 (2012-03-21)

2.1.1. 수업내용

  • ì „ì²´ì �ì�¸ 수업 ì�¼ì •.
  • wiki 사용법.
  • 0ê³¼ 1으로 어떻게 글ìž�를 표현하는가(ASCII code).
  • 컴파ì�¼ëŸ¬ê°€ 하는 ì�¼.
  • 변수ì�˜ ê°œë…�ê³¼ 타입.
  • ìž…, 출력 함수(printf, scanf)와 테스트 함수(assert).
  • 왜 테스트 함수를 ì�¨ì•¼ 하는가.

2.1.2. 과제

  • 변수 선언과 사칙연산만 한 시ì �ì—�서 ì–´ë–¤ 과제를 내야 í• ì§€ 딱히 떠오르는 것ì�´ 없어서 ì�´ë²ˆì—�는 패스.

2.1.3. 후기

  • 처ì�Œì�´ë�¼ 간단하게 하려고 변수와 ì—°ì‚°ì—� 대해서만 ë§�ì�„ 했는ë�°, 간단하게 하려고 하니까 너무 ë‚´ìš©ì�´ 간단해져서 뭔지 모르는 사ì�´ì—� ë‚´ìš©ì�´ 다 ë��나버렸습니다. 그렇다고 잘 í–ˆëŠ�ëƒ�ê³  하면 그것ë�„ 딱히 아닌 ëŠ�낌ì�´ë„¤ìš”. 앞으로는 실습 위주로 하면서 조금 ë�” ìž�세하게 ì§„í–‰ì�„ 해야 하지 않ì�„까 싶습니다. 경우ì—� ë”°ë�¼ì„œëŠ” 완전히 다른 방법ì�„ ì�¨ì•¼ í• ì§€ë�„ 모르겠지만... 어쨌든 아는 것과 가르치는 것ì�€ 다르다는 것ì�„ 새삼 ëŠ�ë‚€ 시간ì�´ì—ˆìŠµë‹ˆë‹¤. - 서민관
  • 매주가 기다려져서 좋네요 ã…‹ã…‹ã…‹ã…‹ã…‹ - ì�´ì„±í›ˆ
  • 앞으로가 기대대요 ã…‹ã…‹ã…‹ã…‹ã…‹ã…‹ã…‹ã…‹ã…‹ã…‹ã…‹ã…‹ã…‹ã…‹ã…‹ - 박환í�¬

2.2. 1회차-재현 (2012-03-22)

2.2.1. 수업내용

  • ì „ì²´ì �ì�¸ 수업 ì�¼ì •.
  • 재현ì�´ê°€ 기존ì—� 아는 ë€ë„들(변수, 제어문) 확ì�¸.
  • 정확하게 알지 못 하는 ë€ë„들(함수, call by value, call by reference, 구조체, í�¬ì�¸í„°)

2.2.2. 과제

  • ì�¼ë‹¨ 재현ì�´ê°€ 기존ì—� C를 ì–´ëŠ� ì •ë�„ ê³µë€í–ˆëŠ”ì§€ë¥¼ 확ì�¸í•˜ê¸° 위한 시간ì�´ë�¼ 따로 과제를 준비하지 못 í–ˆì�Œ.

2.2.3. 후기

  • 서민관 - 간단하게 재현ì�´ê°€ C문법 알고있는 ë€ë„ 알아보기, 함수 만들어보기, ì „ì²´ì �ì�¸ 계íš� 설명, gcc 사용법. ì�¼ë‹¨ 제어문과 간단한 함수 문법까지ë�„ 알고 있는 것 같다. ì–´ì œ ì�¼ë�„ 있어서 긴장ì�„ ë§Žì�´ 했는ë�° 그래ë�„ ìƒ�ê°�보다 어렵지는 않았다. 앞으로는 좀 ë�” 예제등ì�„ 준비해야겠다.
  • 최재현 - 아는 범위를 확ì�¸í•˜ê³  앞으로ì�˜ ë°©í–¥ì—� 대해 얘기 했습니다. 다ì�Œì—�는 모르는 것들ì—� 대해 ë°°ìš°ê³  아는 것ì�€ 확실히 배워야겠습니다.

2.3. 2회차-환� (2012-03-26)

2.3.1. 수업내용

  • 1회차 ë‚´ìš©ì�˜ 복습.
  • 제어문ì�˜ ì�˜ì�˜.
  • 제어문(조건문, 반복문)ì�˜ 문법과 몇몇 주ì�˜í•´ì•¼ ë�  ë€ë„들(switch문ì�˜ break 사용, 반복문ì—�서ì�˜ 종료 ì¡°ê±´ 등).
  • 간단한 제어문 실습.

2.3.2. 과제

  • 중첩ë�œ 반복문으로 별 ì°�기 - ìƒ�당히 특ì�´í•˜ê²Œ 반복문ì�„ 사용했다. ìƒ�ê°�ì�´ 좀 좋ì�€ë“¯ -_-

int main()
{
   int num1 , num2 = 1, num3, num4 = 2;

   printf("별� 위해서 숫�를 입력해주세요\n");
   scanf("%d", &num1);

   num3 = num1 - 1;

   while(num2 <= num1){
      while(num3 < num1){
         printf("*");
         num3++;
      }
      printf("\n");
      num3 = num3 - num4;
      num2 = num2 + 1;
      num4++;
   }

   return 0;
}
  • 윤년 달력

2.3.3. 후기

  • 박환í�¬ - 오늘ì�€ 제어문ì—� 대한 ë‚´ìš©ì�„ ë°°ì› ê³  ëŠ�낌ì�€ 마ì�Œì�´ 편하였고 제어문ì—�는 ì�´ëŸ¬í•œ 종류가 있다는것ì�„ 알았고 앞으로 문법ì�„ 좀ë�” ì�µí˜€ì•¼ê² ë‹¤ëŠ”ê²ƒì�„ ìƒ�ê°�했습니다.
  • 서민관 - 제어문ì�˜ 사용ì—� 대한 수업(if문법, switch.. for...) 몇몇 제어문ì—�서 주ì�˜í•´ì•¼ í•  ì �들(switchì—�서ì�˜ break, 반복문ì�˜ 종료조건등..) 그리고 중간중간ì—� 쉬면서 환í�¬ê°€ 약간 관심ì�„ ë³´ì�¸ ë€ë„들ì—� 대해서 설명(윈ë�„ìš° 프로그래ë°�, python, 다른 c함수들) 저번ì—� ìƒ�ê°�보다 ì§„í–‰ì�´ 매ë�„럽지 않아서 ì�´ë²ˆì—�ë�„ ì§„í–‰ì—� 대한 걱정ì�„ 했는ë�° 1:1ì�´ë�¼ 그런지 비êµ�ì � ì§„í–‰ì�´ 편했다. 그리고 환í�¬ê°€ ìƒ�ê°�보다 다양한 ë€ë„ì—� 관심ì�„ 가지고 질문ì�„ 하는 것 같아서 보기 좋았다. 새내기들ì�´ C를 배우기가 꽤 힘들지 않ì�„까 했는ë�° ì�˜ì™¸ë¡œ if문ì�´ë‚˜ for문ì—�서 문법ì�˜ ì�´í•´ê°€ 빠른 것 같아서 좀 놀ëž�다. printf, scanf나 기타 헷갈리기 쉬운 cì�˜ 기본문법ì�„ 잘 알고 있어서 간단한 실습ì�„ 하기ì—� 편했다.

2.4. 3회차-환� (2012-3-28)

2.4.1. 수업내용

  • ë°°ì—´ì�˜ 사용법.
  • 함수ì�˜ ì—­í• ê³¼ ì�¸ìž�/리턴 타입ì—� 따른 함수ì�˜ 종류.
  • 함수ì�˜ 사용.
  • 간단한 예제.
  • swap 함수를 통해서 알아본 현재 시ì �ì—�서 함수ì�˜ 문제.

2.4.2. 과제

  • 숫ìž�를 세 ê°œ 받아서 정렬하기.

2.4.3. 후기

  • 간단한 ì�´ì „ 시간(if문, 반복문)ì�˜ 복습과 ë°°ì—´ì�˜ 사용ì—� 대해 알아보았다. 그리고 ì�´ë²ˆ 시간ì—� 주로 한 ë‚´ìš©ì�€ 함수가 왜 필요한지와 함수를 만드는 법, 함수를 사용하는 법 등ì�´ì—ˆë‹¤. ê°œì�¸ì �으로는 함수를 꽤 중요하게 ìƒ�ê°�하는 ë§Œí�¼ 함수ì�˜ 필요성ì�„ 잘 ìº�치해 줬으면 좋겠다. 그리고 새삼 드는 ìƒ�ê°�ì�´ì§€ë§Œ 환í�¬ì�˜ 질문ì�´ 중요한 ë€ë„ì�„ 잘 찌른다는 ìƒ�ê°�ì�´ 든다. 별다른 언급ë�„ 없었는ë�° 함수 ë‚´ì—�서 변수ì�˜ scope나 함수 ë‚´ë€ì�˜ ì�´ë¦„ 겹침 등ì—� 대한 질문ì�´ 있었다. 그리고 중간ì—� 함수 사용ì�˜ 예제로 printf문ì�„ 약간 ì�´ìƒ�하게 ì“´ 코드를 보여줬는ë�° ì�˜ì™¸ë¡œ ê°�ì�„ 잘 ìž¡ì�€ 것 같았다. 현재 ì§„í–‰ìƒ�황으로는 다ì�Œì—� í�¬ì�¸í„°ë¥¼ 다뤄야 í• í…�ë�° 함수를 쓰는 것ì�„ 조금 ë�” 연습ì�„ 시킬지 바로 í�¬ì�¸í„°ë¥¼ 나갈지 고민ì�´ë‹¤. 당장 í�¬ì�¸í„°ë¥¼ 했다가 어려워하지 않ì�„까 모르겠다. - 서민관
  • 경험했ë�˜ 것
    - 배열, 배열� 쓸 때 �주하는 실수
    - 함수란? 함수� 정�, 만드는 예제
    - 숫�를 받아 � 수대로 정렬
    - 해�야 할 것 ......? - 박환�

2.5. 3회차-성훈, 재현 (2012-3-28)

2.5.1. 수업내용

  • 재현, 성훈ì�´ì�˜ 함수ì—� 대한 ì§€ì‹� 확ì�¸.
  • swap 함수를 만들어보고 문제ì � 확ì�¸.
  • í�¬ì�¸í„°ì�˜ ê°œë…�, 프로그램 실행시 메모리ì�˜ 구조.
  • malloc 함수를 ì�´ìš©í•œ 메모리 할당.
  • ë°°ì—´ê³¼ í�¬ì�¸í„°ì�˜ 관계.

2.5.2. 과제

2.5.3. 후기

  • 처ì�Œì—� 간단하게 재현, 성훈ì�´ì�˜ 함수ì—� 대한 ì§€ì‹�ì�„ 확ì�¸í–ˆë‹¤. ê·¸ 후ì—� swap 함수를 만들어 ë³´ê³  실행시ì�˜ 문제ì �ì—� 대해서 ì�´ì•¼ê¸°ë¥¼ 했다. 함수가 실제로 ì�¸ìž�를 그대로 전달하지 않고 ê°’ì�„ 복사한다는 것ì�„ ì�´ì•¼ê¸° 한 후ì—� í�¬ì�¸í„°ì—� 대한 ì�´ì•¼ê¸°ë¡œ 들어갔다. ê°œì�¸ì �으로 새싹ì�„ 시작하기 ì „ì—� 가장 고민했ë�˜ ë€ë„ì�´ í�¬ì�¸í„°ë¥¼ ì–´ë–¤ 타ì�´ë°�ì—� 넣는가였는ë�°, 아무래ë�„ call-by-valueì�˜ 문제ì �ì—� 대해서 ì�´ì•¼ê¸°ë¥¼ 하면서 í�¬ì�¸í„°ë¥¼ 꺼내는 것ì�´ 가장 효과ì �ì�´ì§€ 않ì�„까 싶다. ê·¸ 후ì—�는 주로 그림ì�„ 통해서 프로그램 실행시 메모리 구조가 어떻게 ë�˜ëŠ”ì§€ì—� 대해서 설명ì�„ 하고 í�¬ì�¸í„° 변수를 통해 주소값ì�„ 넘기는 방법(call-by-reference)ì�„ ì�´ì•¼ê¸°í–ˆë‹¤. 그리고 mallocì�„ ì�´ìš©í•´ì„œ 메모리를 할당하는 것과 ë°°ì—´ê³¼ í�¬ì�¸í„°ì�˜ 관계ì—� 대해서ë�„ 다루었다. ê°œì�¸ì �ì�¸ ëŠ�낌으로는 재현ì�´ëŠ” 약간 표현ì�´ 소극ì �ì�¸ 것 같아서 정확히 ì–´ëŠ� ì •ë�„ ë‚´ìš©ì�„ ì�´í•´í–ˆëŠ”ì§€ 알기가 어려운 ëŠ�낌ì�´ 있다. 최대한 메모리 구조를 그림으로 알기 쉽게 표현했다고 ìƒ�ê°�하는ë�°, 그래ë�„ 정확한 ì�´í•´ë�„를 알기 위해서는 연습문제 등ì�´ 필요하지 않ì�„까 싶다. 성훈ì�´ëŠ” C언어 ìž�ì²´ 외ì—�ë�„ ì�´ëŸ°ì €ëŸ° ë€ë„ì—�서 질문ì�´ 많았는ë�° 아무래ë�„ C언어 아래 ë€ë„쪽ì—� í�¥ë¯¸ê°€ 좀 있는 것 같다. 그리고 아무래ë�„ 예제를 좀 ë�” 구해야 하지 않ì�„까 하는 ìƒ�ê°�ì�´ 든다. - 서민관
  • í�¬ì�¸í„°ì�˜ 기초와 í�¬ì�¸í„°ë¥¼ ì�´ìš©í•œ swap 함수 구현, ê°’ 변환. 그리고 mallocì�˜ 형태 기초와 좀 ë�” 쉽게 쓰는 법 ì�µíž˜. 다ì�Œì—” mallocì�„ ì�´ìš©í•œ ì�‘용프로그램 구현ì�„ í•´ë³´ê³  싶다. - 최재현
  • í�¬ì�¸í„°ì�˜ ì •ì�˜, í�¬ì�¸í„° 변수ì�˜ ì •ì�˜, malloc 함수, fflush() 함수, getchar() 함수, 메모리ì�˜ heapê³¼ stack ì˜�ì—­, (int)a와 *(*(int a))ì�˜ ì°¨ì�´, í�¬ì�¸í„°ì�˜ OS별 í�¬ê¸°(DWORD í�¬ê¸°ë¥¼ ë”°ë�¼ê°„다. 32bit/64bit),
    해�야 할 것 - 디버깅, 가변��함수 조사, 복습. - �성훈

2.6. 4회차-환� (2012-4-2)

2.6.1. 수업내용

  • swap 함수ì—� 대해서 복습.
  • 함수ì�˜ 호출과 ê°’ 복사(call-by-value).
  • í�¬ì�¸í„°ì�˜ ê°œë…�, 프로그램 실행시 메모리ì�˜ 구조.
  • 추가ì �으로 환í�¬ì�˜ 질문들ì—� 대한 대답과 기타.

2.6.2. 과제

  • ê°œì�¸ì �으로 현재 시ì �ì—�서 과제를 낸다면 Cì�˜ 문법ì�„ ì�µížˆê¸° 위한 과제를 준비할 것 ê°™ì�€ë�° 환í�¬ê°€ 현재 시ì �ì—�서 C 문법ì�„ 나름대로 잘 쓰는 ë§Œí�¼ 그렇게까지 무리해서 과제를 낼 필요는 없지 않ì�„까 싶다. 사실 언제쯤ë€í„° ì–´ë–¤ 과제들ì�„ 내야 í• ì§€ 정확히 ê°�ì�´ 안 잡히는 것ë�„ 있지만... - 서민관

2.6.3. 후기

  • 저번시간ì—� í–ˆë�˜ swap 함수ì—� 대해서 간단하게 복습ì�„ 하고 swap 함수ì�˜ 문제ì �ì—� 대해서 짚어보았다. 그리고 í�¬ì�¸í„°ì�˜ ê°œë…�ê³¼ 함수ì—�서 í�¬ì�¸í„°ë¥¼ 사용하는 방법 순으로 ì§„í–‰ì�„ í•´ 나갔다. 새삼 ëŠ�ë�¼ëŠ” 거지만 call-by-valueì�˜ 문제ì �ì�„ 처리하기 위해서 í�¬ì�¸í„°ë¥¼ 들고 나오는 것ì�´ 가장 ì§�ì ‘ì �으로 í�¬ì�¸í„°ì�˜ 필요성ì�„ ëŠ�ë�¼ê²Œ ë�˜ëŠ” 것 같다. 그리고 ê°œë…�ì�˜ 설명ì�„ 하기ì—�ë�„ 편한 것 같고. ê·¸ 후ì—�는 í�¬ì�¸í„°ì—� 대한 ë€ë„ì�´ ì�¼ë‹¨ë�½ë�˜ê³  성훈ì�´ë‚˜ 재현ì�´ì²˜ëŸ¼ mallocì�´ë‚˜ 추가ì �ì�¸ ë€ë„ì�„ 진행할 예정ì�´ì—ˆëŠ”ë�° 환í�¬ê°€ 함수ì�˜ 사용ì—� 대해서 질문ì�„ 좀 í•´ 오고 ê·¸ 외ì—�ë�„ 약간 다른 ë€ë„ì�„ 다루다 보니 ì§„ë�„ê°€ 약간 늦어졌다. 그래ë�„ í�¬ì�¸í„°ì—�서는 ì�´í•´ê°€ 가장 중요하다고 ìƒ�ê°�하는 ë§Œí�¼ 조금 천천히 나가는 것ë�„ 괜찮다고 본다. 그리고 앞으로ì�˜ 목표는 ì�¼ë‹¨ 처ì�Œì—� 잡아둔 목표까지 무사히 완주하는 것ì�´ë‹¤. ì›�래 첫 ì§„ë�„ 예정ì—� 다양한 것들ì�´ 담겨있는 ë§Œí�¼ 목표만 ì�´ë£¨ì–´ë�„ ì¶©ë„히 괜찮ì�€ C 실력ì�´ 길러지지 않ì�„까 싶다. - 서민관
  • í�¬ì�¸í„°ì—� 대한 대략ì �ì�¸ ê°œë…� - 복잡하지만 숙달ë�˜ë©´ 나아질듯 합니다.
    약간� 잡지�.
    메모리 구조 + 주소 - 변수 선언시 그 변수� 주소 + 값� �야기...�� 그림으로 설명해주셔서 쉽게 �해했습니다. - 박환�

2.7. 4회차-성훈 (2012-4-3)

2.7.1. 수업내용

2.7.2. 후기

��터� 대해 잘 배웠네요 ㅎ
��터변수가 가지는 값과 *, &연산�� 사용법� 잘(� �혔는� 아�� 긴가민가하고..) 배웠구요..
malloc과 fflush 함수� 대해 다시 정확하게 짚� 수 있어서 좋았구요
특히 heap과 stack� 대한 깊� �해를 할 수 있었네요.
그래� 역시 개�만 충실한 �태� 좀 많� 예제를 다뤄볼 수 있었으면 좋겠네요
그리고 밑� 과제... �중 ��터�뉰ㅋㅋㅋㅋㅋㅋㅋㅋㅋ - �성훈

2.7.3. 과제

  • ë°°ì—´ 받아서 뒤집기 - ë°°ì—´ì�˜ 주소값ì�„ ì�¸ìž�로 받아서 뒤집는 함수.

// 함수 선언
void reverseArr(int **arr, int arrLen);

// 함수 사용시
int arr[10];
reverseArr(&arr, 10);

2.8. 5회차-환� (2012-4-4)

2.8.1. 수업내용

  • í�¬ì�¸í„° 변수와 malloc 함수.
  • ë°°ì—´ê³¼ í�¬ì�¸í„°ì�˜ 관계.
  • í�¬ì�¸í„° 변수를 ì�¸ìž�로 받는 함수.

2.8.2. 후기

  • í�¬ì�¸í„° 변수ì—� ê°’ì�„ 주어 초기화 하려면 어떻게 해야 하는가(malloc 함수ì�˜ 사용)와 메모리 í•´ì œ(free 함수)ì—� 대한 ì�´ì•¼ê¸°ë¥¼ 했다. 그리고 ë°°ì—´ê³¼ í�¬ì�¸í„°ì—� 대한 ì�´ì•¼ê¸°ë¥¼ 했는ë�°, ë°°ì—´ë�„ ê²°êµ­ ì—°ì†�ë�œ 메모리를 잡는다는 ì �ì—�서 í�¬ì�¸í„°ì™€ 같고 ê°’ì�˜ 참조ë�„ í�¬ì�¸í„° 변수와 똑같ì�´ í•  수 있다는 것ì�„ 다뤘다. ê·¸ 후ì—�는 í�¬ì�¸í„° 변수(ë°°ì—´)를 ì�¸ìž�로 받는 함수를 만드는 법ì�„ ë°°ìš°ê³ , ë°°ì—´ì�„ ì�¸ìž�로 ë°›ì�„ 때는 반드시 길ì�´ë¥¼ 관리해줘야 한다는 ì�´ì•¼ê¸°ë¥¼ 했다. - 서민관
  • malloc 함수 = íž™ì—� 배당ë�˜ëŠ” 메모리, 변수 타입ì—� ë”°ë�¼ 할당ë�œ ê°’ì—� ë”°ë�¼ ìƒ�기는 메모리(변수?)
    Pointer와 배열 = 둘� 결국 같다.
    배열(��터)� ��로 받는 함수 = 주소값, 거울 | 거울
    오늘� 다소 힘든 개�들�었습니다. - 박환�

2.9. 5회차-성훈 (2012-4-5)

2.9.1. 수업내용

  • í�¬ì�¸í„° 변수ì—� 대해 리뷰.
  • 구조체ì�˜ ì�˜ë¯¸, 구조체ì�˜ 문법(struct 키워드, .ì—°ì‚°ìž�, typedef 키워드).
  • 구조체를 ì�¸ìž�로 받는 함수와 구조체 í�¬ì�¸í„°(changeAge()함수를 통해서 접근함).
  • ì�´ì¤‘ í�¬ì�¸í„°.

2.9.2. 후기

  • í�¬ì�¸í„° 2회차. í�¬ì�¸í„° 변수ì—� 대해서 ìž ê¹� 리뷰를 하고 ê·¸ 후ì—� 구조체와 typedefì—� 대해서 다루었다. 그리고 구조체를 ì�¸ìž�로 받는 함수ì—� 대해서ë�„ 다루었다. ê·¸ 후ì—� typedef int* SOMETHINGì�´ë�¼ëŠ” 표현ì�„ ì�¨ì„œ ì�´ì¤‘ í�¬ì�¸í„°ì—� 대해서 ì�´ì•¼ê¸°ë¥¼ í•´ 봤는ë�°, ì�´ìª½ì�€ 역시 약간 난ì�´ë�„ê°€ 있는 것 같다. 특히 int **twoDimì—�서 twoDim0ì—� 다시 mallocì�„ í•´ 줘야 한다는 ë€ë„ì�´ 어려운 것 같다. 차근차근 í•´ë³´ìž�. ê°œì�¸ì �으로 성훈ì�´ê°€ 가르친 ë€ë„들ì�„ 잘 ë”°ë�¼ì˜¤ë ¤ê³  한다는 것ì�„ (*s).ageì—�서 ëŠ�꼈다. ->ì—°ì‚°ìž�ê°€ 아니ë�¼ *ì—°ì‚°ìž� 후ì—� .ì—°ì‚°ìž�로 내용물ì�„ 참조한다는 것ì�€ 나름대로 메모리ì�˜ 구조를 ìƒ�ê°�하려고 애를 ì�¼ë‹¤ëŠ” 얘기다. 좀 고마웠다. - 서민관
  • í�¬ì�¸í„° 변수와 ì�´ì¤‘ í�¬ì�¸í„°, 구조체ì—� 대해 알게 ë�˜ì—ˆê³ , ìž�ì‹ ì�´ 만든 í—¤ë�”는 "#"로 전처리함ì�„ 알았다. ë˜�한 typedefì—� 대해서ë�„ ì�µí˜”다.
※ ��.
  • 함수까지 ë�…학하는ë�° 1달ì�´ì—ˆë‹¤. 당연히 혼ìž�하는 거니까 ë†�ë–™ì�´ì¹˜ë©´ì„œ 했지만... 그렇기ì—� 누군가ì�˜ 가르침ì�„ 받으면서 해보니 무지막지한 ì†�ë�„로 C를 정복할 수 있게 ë�œ 것 같다. ì�´ëŸ° 기회ì—� 그저 ê°�ㅋ사ㅋ하다. - ì�´ì„±í›ˆ

2.10. 4회차-재현 (2012-4-5)

2.10.1. 수업내용

  • í�¬ì�¸í„° 변수와 malloc 함수.
  • 구조체, 구조체 í�¬ì�¸í„°, typedef 키워드.
  • 구조체를 ì�¸ìž�로 받는 함수.

2.10.2. 후기

  • 구조체ì—� ì´ˆì �ì�„ 맞춰서 ì§„ë�„를 나갔다. ì›�래 목표는 성훈ì�´ëž‘ ê°™ì�€ ì •ë�„(ì�´ì¤‘ í�¬ì�¸í„°)까지 나가는 것ì�´ì—ˆëŠ”ë�°, 시간ì�´ 약간 모ìž�ëž�다. 사실 다중 í�¬ì�¸í„°ì—� 대해서는 한 번쯤 ë�” 다루어야지 싶으니까 다ì�Œì—� 애들ì�„ 다 모아서 좀 ë�” ìž�세히 다루는 시간ì�„ 마련할 ìƒ�ê°�ì�´ë‹¤. - 서민관
  • 오늘ì�€ ë�™ì �할당(malloc)ê³¼ 구조체, 구조체 í�¬ì�¸í„°, typedefì—� 대해 ê°œë…�정리를 하고 ê·¸ì—� 대한 간단한 예제와 메모리 그림ì�„ 통해서 쉽게 ì ‘ê·¼ì�„ 했다. ë˜�, 구조체와 구조체 í�¬ì�¸í„°ì�˜ ì ‘ê·¼ 방법ì—� 대해 숙지하고 함수ì—� 대해 ìž�세히 다뤄서 ë§Žì�€ ì�´í•´ë¥¼ 했다. 다ì�Œì—” 다차ì›� ë°°ì—´ê³¼ í�¬ì�¸í„°ë¥¼ í•´ë³´ê³  ê·¸ì—� 대한 ì�´í•´ë¥¼ 해야 í•  것 같다. - 최재현

2.11. 6회차-환� (2012-4-9) + 7회차-환� (2012-4-9)

2.11.1. 수업내용

  • 구조체 문법.
  • 왜 구조체를 ì�¨ì•¼ 하는가.
  • ì¶”ìƒ�í™”ì�˜ 측면ì—�서 보는 타입과 ì—°ì‚°(operation).
  • 구조체를 ì�¸ìž�로 받는 함수.
  • fopen() 함수 등ì—� 대한 간단한 언급.

2.11.2. 후기

  • 시험기간ì—� 환í�¬ 후기를 ì �ì–´ë‘” 종ì�´ë¥¼ 파ì�¼ 째로 잃어버렸습니다. ã… ã… ã… ã… ã… ã… ã… ã… ã… ã… 
  • 정모 ì „ì—� ë‘� 시간, 정모 ë��나고 ë‘� 시간ì�´ 걸린 ì •ë§� 긴 새싹ì�´ì—ˆìŠµë‹ˆë‹¤. ;;;; 처ì�Œ 계íš�으로는 재현ì�´ë‚˜ 성훈ì�´ëž‘ 비슷하게 구조체 문법과 사용ì—� 대해서 간단하게 다룰 ìƒ�ê°�ì�´ì—ˆëŠ”ë�° 환í�¬ê°€ 왜 구조체가 필요한지ì—� 대한 ì�´ì•¼ê¸°ë¥¼ 하면서 ì�´ì•¼ê¸°ê°€ ë§Žì�´ 다른 방향으로 í�˜ëŸ¬ê°”네요. ì�¼ë‹¨ 구조체가 필요한 ì�´ìœ ë¥¼ ì¶”ìƒ�í™”ì�˜ ê´€ì �ì—�서 ì¶”ìƒ�í™” 한 타입(구조체)ê³¼ 타입ì—� 관한 ì—°ì‚°(함수)ì�„ 제공하기 위해서ë�¼ê³  ë§�ì�„ 했는ë�° 그래ë�„ ì§�ì ‘ 피ë€ì—� 와 닿았ì�„ì§€ 어떨지는 좀 걱정입니다. 역시 ì�´ëŸ° ë€ë„ì�€ ì§�ì ‘ì �으로 경험ì�„ í•´ ë³´ì§€ 않으면 안 ë�  것 같네요. 한 시스템(ë�„서관 관리 프로그램ì�´ë‚˜ ì�€í–‰ 시스템 등)ì�„ 재현ì�´, 성훈ì�´ëž‘ ì…‹ì�´ì„œ 쪼개서 만들어 보게 하거나 하는 게 좀 괜찮지 않ì�„까 싶습니다. 나중ì—� 시켜ë´�야지. - 서민관

2.12. 8회차 (2012-5-1) - 성훈, 환�

2.12.1. 수업내용

  • 함수와 구조체 문법 복습.
  • 프로그래ë°� 패러다임 - 함수형 프로그래ë°�.
  • 프로그램ì�„ ì�˜ë¯¸ë‹¨ìœ„(함수)로 쪼개기.
  • ì�˜ì‚¬ì½”드 ì �기.
  • 함수 만들기 실습(isPrime, isPalindromePrime 등).

2.12.2. 후기

  • 경험했ë�˜ ì�¼ : 함수를 만드는 ì�´ìœ . 슈ë�„ 코드ì�˜ 편리성. í�¬ì�¸í„°ì™€ 구조체 복습.
    해 �야 할 것 : reverse(number) 정� - 수 배열� 뒤집는 함수
    좋았� � : 시험 때문� �...미...했� 기억� �살아서 좋았고, 함수� 대한 �해�가 높아진 듯해서 좋았다. 오늘� C스러움� 많� �껴져서 �족하다. 컴공다운 걸 해서 보람� �껴진다. - �성훈
  • 함수와 구조체 문법ì—� 대한 복습과 '함수형 프로그래ë°�'ì—� 대해서 다루었다. 복습ì�€ 시험ì�´ ë��나고 잊어버렸ì�„ 테니까 한 것ì�´ê³  중요한 것ì�€ 뒤쪽ì—�서 í–ˆë�˜ 함수형 프로그래ë°� ë€ë„ì�´ë‹¤. ì „ì²´ì �ì�¸ ë‚´ìš©ì�€ 프로그램ì�„ ì�˜ë¯¸ë‹¨ìœ„(함수)로 쪼개는 ì�˜ì‚¬ì½”드를 ì �ê³  함수ì�˜ ê»�ë�°ê¸°ë¥¼ 만든 후ì—� 내용물ì�„ 채워 나가는 ë°©ì‹�ì�´ì—ˆë‹¤. ê°œì�¸ì �으로 ë‚´ 새싹ì—�서 ê¼­ 다루고 ì‹¶ì—ˆë�˜ ë‚´ìš©ì�˜ 절반ì—� 해당하는 ë€ë„ì�´ë�¼ 고민ì�„ ë§Žì�´ 했는ë�°, 그래ë�„ 전하기는 잘 전한 것 같다. 다ì�Œìœ¼ë¡œëŠ” 가르ì³�야 í•  나머지 절반ì�¸ 설계ì—� 대한 실습ì�„ 좀 í•´ ë´�야 í•  것 같다. - 서민관

2.12.3. 과제

  • 아래와 ê°™ì�€ 함수를 만듭니다.
  • ê¼­ reverse 함수 하나로 만들 필요는 없습니다.
    오늘 í–ˆë�˜ ë‚´ìš©ì�„ ìƒ�ê°�하면서 함수를 만드는 ë�„중ì—� ìž�ì‹ ì�´ 필요하다고 ìƒ�ê°�하는 ë€ë„ì�€
    추가�으로 함수를 만들어서 �� 좋습니다. 오히려 좀 � 작� 함수들로 나누는 편� 추천합니다.

// 정수를 ��로 주면 숫�를 뒤집어서 �려준다.
// 123� 넣으면 321� 리턴. 100� 넣으면 1� 리턴. 120� 넣으면 21� 리턴.
int reverse(int number);

2.13. 9회차(2012-5-9) - 성훈, 환�

2.13.1. 수업내용

  • callback, event drivenê³¼ 관련ë�œ 간단한 ì�´ì•¼ê¸°.
  • 문ìž�ì—´(char *)ì—� 대한 ì�´ì•¼ê¸°.
  • 문ìž�ì—´ì�„ 다루기 위한 함수들(str...).
  • winapi.co.kr

2.13.2. 후기

  • Callback(winapi ì�´ì•¼ê¸°í•˜ë©´ì„œ) + winapi.co.kr
    문�열과 관련� 함수 5가지. + 실습.
    오늘� 함수를 �서 그냥 아... 그렇구나 그런 �낌.
    배운다는 것 보다는 암기� 가까운 �낌�었다. - 박환�
  • 문ìž�ì—´ê³¼ 관련ë�œ 유용한 함수들과 CallBackì�˜ ê°œë…�ê³¼ 구조체 활용ì�„ 배웠다.
    어려운 �낌� 들기는 하지만 아�� 해 볼 만 하다.
    �� C언어가 function 위주� 프로그래���는 걸 � 깊� �해하게 �다.
    구조체 예제가 좀 있으면 좋겠다. - �성훈
  • ì „ì²´ì �으로 문ìž�ì—´ê³¼ 문ìž�ì—´ì�„ 다루는 함수만ì—� ì´ˆì �ì�„ 맞춰서 수업ì�„ 진행했습니다. 그런ë�° 아무래ë�„ 첫 시간ì—� 못지 않게 ì§„í–‰ì�´ 늘어졌ë�˜ 시간ì�´ 아니었나 싶습니다. 사실 문ìž�ì—´ 함수들ì�€ 단순 함수니만í�¼ ì�¸ìž�들ì�„ ë³´ê³  쓰는 것ì—� ì�µìˆ™í•˜ë‹¤ë©´ 알아서ë�„ ë³´ê³  쓸 수준ì�´ê¸´ 한ë�°, 그래ë�„ 다들 그런 것ì�„ 찾아서 ì�¨ 보거나 한 경험ì�´ 별로 없는 ë§Œí�¼ 한 번쯤 그런 함수들ì�„ 찾아서 쓰는 시간ì�„ 가지는 것ë�„ 나ì�˜ì§€ 않지 않ì�„까 싶었는ë�° ìƒ�ê°�보다 좀 ì§„í–‰ì�´ 늘어졌군요. 단순히 설명만 ì�´ì–´ì¡Œê¸° 때문ì�¸ê°€. 그래ë�„ ì�´ë²ˆ 시간ì—� êµ³ì�´ 문ìž�ì—´ê³¼ 관련 함수를 다룬 것ì�€ C언어ì—�서 문ìž�ì—´ì�„ 단순한 charì�˜ *ê°€ 아닌 하나ì�˜ 타입으로 ë³´ê³  그와 관련ë�œ ì—°ì‚°(함수)ì�„ 제공했다는 것ì�„ 한 번쯤 ìƒ�ê°�해봤으면 합니다. - 서민관

2.13.3. 과제 - 캘린� 만들기

  • Calender.h 파ì�¼ - 만들어야 í•  함수들. ë�” 늘려ë�„ ìƒ�ê´€ 없습니다.

// 한 달� 달력� 출력하는 함수입니다.
void printCalender(int nameOfDay, int year, int month);
// 달� 첫 날� 요�(nameOfDay)과 마지막 날� 수를 받아서 1~endDayOfMonth까지 출력합니다.
void printDate(int nameOfDay, int endDayOfMonth);
// 달ì�˜ 1ì�¼ 앞ì�˜ ë€ë„ì—� 빈 ìš”ì�¼ 수만í�¼ 탭('\t')ì�„ 넣습니다.
void printFirstTab(int nameOfDay);
// 달력 첫 머리 ë€ë„(ì›”, ë…„ë�„, 한 줄, ìš”ì�¼ 표시)ì�„ 출력합니다.
void printHeader(int year, int month);
// 다� 달� 첫 날� 요�� 반환합니다.
int calculateNameOfNextMonthFirstDay(int nameOfDay, int year, int month);
// 해당 달� 마지막 날� 요�� 반환합니다.
int calculateNameOfLastDay(int nameOfDay, int year, int month);
// 윤달 체�.
bool isLeapYear(int year);
// � 달� 마지막 날 수를 반환합니다.
// 단순한 switch-case문으로 �루어져 있으며, 2월� 대해서는 윤달 체�를 합니다.
int endDayOfMonth(int year, int month);
// � 요�� 숫�를 받아서 문�열 값� 반환합니다. (ex. 0-"Sun", 1-"Mon" ...)
// 단순한 switch-case문으로 �루어져 있습니다.
char *printMonthName(int i);
  • main.cpp 파ì�¼

#include <stdio.h>
#include "Calender.h"

int main(int argc, char *args[]) {
	// year와 ìš”ì�¼(nameOfDay)ì�„ 입력받는 ë€ë„.
	int year = 0, nameOfDay = 0;
	printf("Enter the year : ");
	scanf("%d", &year);
	printf("Enter the name of day(0:sun ~ 6:sat) : ");
	scanf("%d", &nameOfDay);

	// 1~12ì›”ì�„ 출력하는 ë€ë„.
	for ( int month = 1; month <= 12; month++ ) {
		printCalender(nameOfDay, year, month);
		nameOfDay = calculateNameOfNextMonthFirstDay(nameOfDay, year, month);
	}

	return 0;
}
  • sample output - 1ì›”ë€í„° 12월까지. 출력ì�„ 예ì�˜ê²Œ 하고 싶으면 탭('\t')ì�„ ì“°ë©´ ë�©ë‹ˆë‹¤.

                 January, 2012
-------------------------------------------------
  Sun    Mon    Tue    Wed    Thu    Fri    Sat
   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     31

2.13.4. 기타

  • 왜 strcat(str1, str2)를 한 후ì—� str1ì�„ 프린트했는ë�° ì�´ìƒ�한 출력ì�´ 나오는가.
    People p;와 strcat� 사용� 문제가 있습니다. p를 초기화(People p = {0};) 하지 않고 사용하면
    p.nameì�´ 쓰레기 값으로 채워지는 것 같습니다. 그래서 strcatì�„ 사용하면 p.nameì�˜ ë’·ë€ë„(p.name99ì�˜ ë’·ë€ë„)ì—� "í™�길ë�™" ë‚´ìš©ì�´ 붙습니다.
    �런 �황� 피하기 위해서는 처�� p를 초기화 하고 사용하거나 memset(p.name, 0, sizeof(char)*100);� 하는 방법� 있습니다.


#include <stdio.h>
#include <string.h>

typedef struct People{
	char gender;
	int age;
	char name[100];
	char real_name[100];
} People;

int main()
{
	char str1[100] = "abc";
	char str2[100] = "aaa";

	People p;
	strcat(p.name, "�길�");

	strcat(str1, str2);

	printf("%s", str1);

	getchar();
	return 0;
}

2.14. 10회차(2012-5-22) - 성훈, 환�

2.14.1. 수업내용

  • 예제를 조금 ë�” 다루어 봤으면 하는 얘기와 구조체를 ì�¨ ë³´ê³  싶다는 얘기가 있어서
    아예 구조체를 쓸 만한 예제를 만들어 봤습니다.
  • ì „ì²´ì �으로 제대로 완성하는 프로그램ì�„ 만들어 본다는 ì �ì—� ì�˜ì�˜ê°€ 있ì�„ 것 같습니다.
    그리고 addAccount()와 deleteAccount()는 � �후 수업� 위한 하나� ��트가 � 것입니다.

Account.h
#include <stdio.h>

typedef struct Account {
	char *name;
	int money;
} Account;

typedef struct AccountArray {
	struct Account **accounts;
	int currentAccountNumber;
	int maxLength; // 배열� 사용할 때는 길�를 관리하는 구조체를 만들어서 쓰면 편하다.
} AccountArray;

Account *createAccount(char *name); // Account� 깔�하게 �름� 할당하기 위해서는 문�열 함수가 필요할 것�다.
AccountArray *createAccountArray(int maxLength);
void addAccount(AccountArray *accountArray, char *name);
bool isFull(AccountArray *accountArray); // 배열� 다 차면 어떻게 하면 좋�까??????
AccountArray *extendArray(AccountArray *before); // 다 찬 배열� 새로 확장� 해 주어야 합니다.
void deleteAccount(AccountArray *accountArray, char *name); // 배열� 중간 �소 삭제? 중간� 구�만 뻥 뚫어�면 �나?
void deposit(AccountArray *accountArray, char *name, int money); // accountArray ë‚´ë€ì—�서 ì�´ë¦„으로 비êµ�í•  필요가 있겠지.
void withdraw(AccountArray *accountArray, char *name, int money);

void addAccountMenu();
void deleteAccountMenu();
void depositMenu();
void withdrawMenu();

main.cpp
#include <stdio.h>

#include "Account.h"

int main(int argc, char *argv[]) {
    int select = 0;
	// 추가�� 변수들� 필요할 것으로 예�.

    while ( true ) {
        printf("select menu : ");
		printf("1: 계좌 추가\n");
		printf("2: 계좌 삭제\n");
		printf("3: 입금\n");
		printf("4: 출금\n");
        scanf("%d", &select);

        switch ( select ) {
		case 1:
			addAccountMenu();
			break;
		case 2:
			deleteAccountMenu();
			break;
		case 3:
			depositMenu();			
			break;
		case 4:
			withdrawMenu();
			break;
                default:
                        break;
		}
    }

	return 0;
}

2.14.2. 후기

2.15. 11회차(2012-5-23) - 성훈, 환�

2.15.1. 수업내용

////////////////////////////////////// 기본 타입, 기본 타입 + ��터
char a; // a� 타입? 1. 메모리� a 그려보기.
a = ?? // �절한 값으로 초기화 해 보기.
int b; // b� 타입? 1. 메모리� b 그려보기.
b = ?? // �절한 값으로 초기화 해 보기.

char c[10]; // c� 타입?, 1. 선언과 �시� 0으로 초기화 해 보기., 2. 반복문� �용해서 �소마다 초기화 해 보기., 3. c[0]� 타입?
char *d; // dì�˜ 타입? char 10ê°œ ë„량ì�˜ 배열로 선언과 ë�™ì‹œì—� 초기화 í•´ 보기.

// c와 d를 �� 메모리� 그려보기. 중요.


??? // []를 �용해서 c� 세 번째 �소� 접근해 보기.
??? // 가능한 방법으로 d� 세 번째 �소� 접근해 보기.
??? // 가능한 방법으로 c� 세 번째 �소� 접근해 보기.
// array[0] == *(array + 0) 배열�나 ��터나 해당 주소� 대한 접근��는 ��서는 ��하게 접근할 수 있다.



//////////////////////////////////////// 사용� 정� 타입, 사용� 정� 타입 + ��터
Person p; // p� 타입? 1. 메모리� p� 모양 그려보기.
??? // p� 내용물� 접근해보기.

Person pArr[10]; // pArr� 타입? 1. 메모리� pArr� 모양 그려보기.
??? // pArr� 0번째 내용물� 접근해보기

Person *p2; // p2� 타입? 1. 메모리� p2� 모양 그려보기.
??? // p2 초기화 해 보기.
??? // p2� 내용물� 접근해보기.



Person *ppa[10] // ppa� 타입? 1. 메모리� ppa� 모양 그려보기., 2. ppa[0]� 타입? 3. ppa[0] 초기화 해 보기. 4. ppa[0]� 내용물� 접근해 보기.

Person **ppb // ppb� 타입? 1. 메모리� ppb� 모양 그려보기., 2. ppb[0]� 타입? 3. ppb[0] 초기화 해 보기., 4. ppb[0]� 내용물� 접근해 보기.

2.15.2. 후기

2.16. 12회차(2012-7-19)

2.16.1. 수업내용

  • AccountArray와 관련ë�œ 함수들 만들기.
  • 왜 createAccount(char *name)ì�€ Accountì�˜ *를 반환하는가.

Account makeAccount(char *name) {
	Account account;
	account.money = 0;
	account.name = (char *)malloc(sizeof(char) * (strlen(name)+1));
	strcpy(account.name, name);

	return account;
}

void addMoney(Account account, int money) {
	account.money += money;
}
그냥 Account를 반환하게 만든 다� 함수들� � 보면 차�를 알 수 있습니다.
Account를 그냥 넘겨주게 �면 call-by-value로 Account� 복사본� 가지고 money를 �가시키기 때문�
�본 Account�는 아무런 변화가 없습니다.
  • extendArray 등ì�˜ 함수 사용ì�˜ 불편함.

2.17. 13회차(2012-7-20)

2.17.1. 수업내용

  • 시간복잡ë�„.
  • LinkedList ê°œë…�.
  • ArrayList(Array)와 LinkedListì�˜ ì—°ì‚° 비êµ�.
  • LinkedListì—�서 구현할 연산들과 구현시 ì‹ ê²½ ì�¨ì•¼ 하는 ë€ë„들(경우ì�˜ 수).
  • LinkedList.h

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

typedef int Data;

typedef struct Node {
    Data data;
    Node *nextNode;
} Node;

typedef struct LinkedList {
    int length;
    Node *headNode;
} LinkedList;

LinkedList *createList();
Node *createNode(Data data);
void deleteList(LinkedList *linkedList); // LinkedList까지 삭제.
void addData(LinkedList *linkedList, Data data); // LinkedList� 맨 뒤� Data를 가진 Node 추가.
void removeData(LinkedList *linkedList, Data data); // 해당하는 Data를 가진 Node 삭제.
Node *getData(LinkedList *linkedList, int position); // 해당하는 index를 가진 Node를 반환.
void clearList(LinkedList *linkedList); // LinkedList� Node들 삭제.
void printList(LinkedLIst *linkedList);

2.17.2. 코드들

  • 환í�¬


  • 성훈

#include "LL.h"

LinkedList *createList(){
	LinkedList *res;
	res = (LinkedList *)malloc( sizeof(LinkedList) );
	(*res).headNode = NULL;
	(*res).length = 0;	
	return res;
}
Node *createNode(Data data){
	Node *res;
	res = (Node *)malloc( sizeof(Node) );
	(*res).data = 0;
	(*res).nextNode = NULL;
	return res;
}
void deleteList(LinkedList *linkedList){
	clearList(linkedList);
	free(linkedList);
}
void addData(LinkedList *linkedList, Data data){
	Node *node = createNode( data );
	Node *temp = linkedList->headNode;
	for(;temp->nextNode != NULL;){
		temp = temp->nextNode;
	}
	temp->nextNode = node;
}
void removeData(LinkedList *linkedList, Data data){
	int onoff = 0;																		//for duty of switch
	Node *remove = linkedList->headNode;
	if( remove->data == data ){
		free( remove );																	//If the object is headNode
		onoff = 1;
	}
	if( onoff == 0 && remove->nextNode->data == data ){
		free( remove->nextNode );														//If the object is the nextNode of headNode
		onoff = 1;
	}
	for(; onoff == 0 && remove->nextNode->data != data;){								//...
		remove = remove->nextNode;
	}
	remove->nextNode = remove->nextNode->nextNode;										//	remove   remove-n   remove-n-n
	free(remove->nextNode);																//	remove ~ remove-n-n , free remove-n
}
Node *getData(LinkedList *linkedList, int position){
	Node *get = linkedList->headNode;
	for( int i = 0 ; i < position ; i++ ){
		get = get->nextNode;
	}
	return get;
}
void clearList(LinkedList *linkedList) {
	Node *now = (*linkedList).headNode;
	Node *next;
	for( ; (*now).nextNode != NULL ; ){	//now� 다�� 있는�안 반복
		next = (*now).nextNode;			//next는 now� 다�
		free( now );					//now를 free
		now = next;						//next를 now로 당김
	}
	free( now );						//now를 free
}
int lengthOf(LinkedList *linkedList){
	int length = 0;
	Node *temp = linkedList->headNode;
	for( ; temp->nextNode != NULL ; length++ ){
		temp = temp->nextNode;
	}
	return length;
}
void printList(LinkedList *linkedList){
	Node *temp = linkedList->headNode;
	for( ; temp->nextNode != NULL ; ){
		printf("%d\t", temp->data);
		temp = temp->nextNode;
	}
	printf("\n");
}

2.17.3. 질문

  • ë�”미 노드ì�˜ 사용 ì�´ìœ , 예시.

2.18. 2012-7-30

2.18.1. 코드

int main() {
	Stack *stack = createStack();
	assert(stack->elementNumber == 0);
	assert(stack->head == NULL);

	push(stack, 10);
	assert(stack->elementNumber == 1);
	assert(peek(stack)->data == 10);

	push(stack, 20);
	assert(stack->elementNumber == 2);
	assert(peek(stack)->data == 20);

	assert(pop(stack)->data == 20);
	assert(stack->elementNumber == 1);

	Node *result = pop(stack);
	assert(result->data == 10);
	assert(isEmpty(stack));

	return 0;
}

2.19. 2012-8-2

2.19.1. 코드

  • Map in C - 어떻게든 í�´ëž˜ìФ í�‰ë‚´ë¥¼ ë‚´ 보려고 ì •ë§� 별 ì§“ì�„ 다 했다. 코드를 ë³´ê³  싶으면 서민관ì—� 가서 ë³¼ 것.


Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:29:48
Processing time 0.8038 sec