Contents
- 1. 새싹�실/startLine
- 2. 수업
- 2.1. 1회차-환�, 성훈 (2012-03-21)
- 2.2. 1회차-재현 (2012-03-22)
- 2.3. 2회차-환� (2012-03-26)
- 2.4. 3회차-환� (2012-3-28)
- 2.5. 3회차-성훈, 재현 (2012-3-28)
- 2.6. 4회차-환� (2012-4-2)
- 2.7. 4회차-성훈 (2012-4-3)
- 2.8. 5회차-환� (2012-4-4)
- 2.9. 5회차-성훈 (2012-4-5)
- 2.10. 4회차-재현 (2012-4-5)
- 2.11. 6회차-환� (2012-4-9) + 7회차-환� (2012-4-9)
- 2.12. 8회차 (2012-5-1) - 성훈, 환�
- 2.13. 9회차(2012-5-9) - 성훈, 환�
- 2.14. 10회차(2012-5-22) - 성훈, 환�
- 2.15. 11회차(2012-5-23) - 성훈, 환�
- 2.16. 12회차(2012-7-19)
- 2.17. 13회차(2012-7-20)
- 2.18. 2012-7-30
- 2.19. 2012-8-2
1. 새싹êµ�실/startLine ¶
- 모임시간 : 가변
- 가르치는 사람 : 서민관
- 배우는 사람 : 박환�, �성훈, 최재현, 서민관
2.1.1. 수업내용 ¶
- ì „ì²´ì �ì�¸ 수업 ì�¼ì •.
- wiki 사용법.
- 0과 1으로 어떻게 글�를 표현하는가(ASCII code).
- 컴파�러가 하는 �.
- 변수� 개�과 타입.
- ìž…, ì¶œë ¥ 함수(printf, scanf)와 테스트 함수(assert).
- 왜 테스트 함수를 �야 하는가.
2.1.2. ê³¼ì œ ¶
- 변수 ì„ ì–¸ê³¼ 사칙연산만 한 시ì �ì—�서 ì–´ë–¤ ê³¼ì œë¥¼ 내야 í• ì§€ 딱히 ë– ì˜¤ë¥´ëŠ” 것ì�´ 없어서 ì�´ë²ˆì—�는 패스.
2.1.3. 후기 ¶
- 처ì�Œì�´ë�¼ 간단하게 í•˜ë ¤ê³ ë³€ìˆ˜ì™€ ì—°ì‚°ì—� 대해서만 ë§�ì�„ 했는ë�°, 간단하게 í•˜ë ¤ê³ í•˜ë‹ˆê¹Œ 너무 ë‚´ìš©ì�´ ê°„ë‹¨í•´ì ¸ì„œ ë”ì§€ 모르는 사ì�´ì—� ë‚´ìš©ì�´ 다 ë��ë‚˜ë²„ë ¸ìŠµë‹ˆë‹¤. ê·¸ë ‡ë‹¤ê³ ìž˜ í–ˆëŠ�ëƒ�ê³ í•˜ë©´ 그것ë�„ 딱히 아닌 ëŠ�낌ì�´ë„¤ìš”. 앞으로는 실습 위주로 하면서 조금 ë�” ìž�세하게 ì§„í–‰ì�„ 해야 하지 않ì�„까 싶습니다. 경우ì—� ë”°ë�¼ì„œëŠ” ì™„ì „ížˆ 다른 방법ì�„ ì�¨ì•¼ í• ì§€ë�„ ëª¨ë¥´ê² ì§€ë§Œ... ì–´ì¨Œë“ ì•„ëŠ” 것과 가르치는 것ì�€ 다르다는 것ì�„ 새삼 ëŠ�ë‚€ 시간ì�´ì—ˆìŠµë‹ˆë‹¤. - 서민관
- 매주가 ê¸°ë‹¤ë ¤ì ¸ì„œ 좋네요 ã…‹ã…‹ã…‹ã…‹ã…‹ - ì�´ì„±í›ˆ
- 앞으로가 기대대요 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ - 박환�
2.2.1. 수업내용 ¶
- ì „ì²´ì �ì�¸ 수업 ì�¼ì •.
- 재현ì�´ê°€ 기존ì—� 아는 부분들(변수, ì œì–´ë¬¸) 확ì�¸.
- ì •í™•í•˜ê²Œ 알지 못 하는 부분들(함수, call by value, call by reference, 구조체, í�¬ì�¸í„°)
2.2.2. ê³¼ì œ ¶
- ì�¼ë‹¨ 재현ì�´ê°€ 기존ì—� C를 ì–´ëŠ� ì •ë�„ 공부했는지를 확ì�¸í•˜ê¸° 위한 시간ì�´ë�¼ 따로 ê³¼ì œë¥¼ 준비하지 못 í–ˆì�Œ.
2.2.3. 후기 ¶
- 서민관 - 간단하게 재현ì�´ê°€ C문법 ì•Œê³ ìžˆëŠ” 부분 알아보기, 함수 만들어보기, ì „ì²´ì �ì�¸ 계íš� 설명, gcc 사용법. ì�¼ë‹¨ ì œì–´ë¬¸ê³¼ 간단한 함수 문법까지ë�„ ì•Œê³ ìžˆëŠ” 것 같다. ì–´ì œ ì�¼ë�„ 있어서 긴장ì�„ ë§Žì�´ 했는ë�° 그래ë�„ ìƒ�ê°�보다 ì–´ë µì§€ëŠ” 않았다. 앞으로는 좀 ë�” ì˜ˆì œë“±ì�„ ì¤€ë¹„í•´ì•¼ê² ë‹¤.
- 최재현 - 아는 범위를 확ì�¸í•˜ê³ 앞으로ì�˜ ë°©í–¥ì—� 대해 얘기 했습니다. 다ì�Œì—�는 모르는 것들ì—� 대해 ë°°ìš°ê³ ì•„ëŠ” 것ì�€ 확실히 ë°°ì›Œì•¼ê² ìŠµë‹ˆë‹¤.
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.1. 수업내용 ¶
- 배열� 사용법.
- 함수ì�˜ ì—í• ê³¼ ì�¸ìž�/리턴 타입ì—� 따른 함수ì�˜ 종류.
- 함수� 사용.
- 간단한 ì˜ˆì œ.
- swap 함수를 통해서 알아본 현재 시ì �ì—�서 함수ì�˜ ë¬¸ì œ.
2.4.3. 후기 ¶
- 간단한 ì�´ì „ 시간(if문, 반복문)ì�˜ 복습과 ë°°ì—´ì�˜ 사용ì—� 대해 알아보았다. ê·¸ë¦¬ê³ ì�´ë²ˆ 시간ì—� 주로 한 ë‚´ìš©ì�€ 함수가 왜 필요한지와 함수를 만드는 법, 함수를 사용하는 법 등ì�´ì—ˆë‹¤. ê°œì�¸ì �으로는 함수를 꽤 중요하게 ìƒ�ê°�하는 ë§Œí�¼ 함수ì�˜ 필요성ì�„ 잘 ìº�치해 줬으면 ì¢‹ê² ë‹¤. ê·¸ë¦¬ê³ ìƒˆì‚¼ 드는 ìƒ�ê°�ì�´ì§€ë§Œ 환í�¬ì�˜ 질문ì�´ 중요한 부분ì�„ 잘 찌른다는 ìƒ�ê°�ì�´ ë“ ë‹¤. 별다른 언급ë�„ 없었는ë�° 함수 ë‚´ì—�서 변수ì�˜ scope나 함수 ë‚´ë¶€ì�˜ ì�´ë¦„ 겹침 등ì—� 대한 질문ì�´ 있었다. ê·¸ë¦¬ê³ ì¤‘ê°„ì—� 함수 사용ì�˜ ì˜ˆì œë¡œ printf문ì�„ 약간 ì�´ìƒ�하게 ì“´ 코드를 보여줬는ë�° ì�˜ì™¸ë¡œ ê°�ì�„ 잘 ìž¡ì�€ 것 같았다. 현재 ì§„í–‰ìƒ�황으로는 다ì�Œì—� í�¬ì�¸í„°ë¥¼ 다뤄야 í• í…�ë�° 함수를 쓰는 것ì�„ 조금 ë�” 연습ì�„ 시킬지 바로 í�¬ì�¸í„°ë¥¼ 나갈지 ê³ ë¯¼ì�´ë‹¤. 당장 í�¬ì�¸í„°ë¥¼ 했다가 ì–´ë ¤ì›Œí•˜ì§€ 않ì�„까 ëª¨ë¥´ê² ë‹¤. - 서민관
- 경험했� 것
- 배열, 배열� 쓸 때 �주하는 실수
- 함수란? 함수ì�˜ ì •ì�˜, 만드는 ì˜ˆì œ
- 숫ìž�를 받아 í�° 수대로 ì •ë ¬
- í•´ë´�야 í• ê²ƒ ......? - 박환í�¬
2.5.1. 수업내용 ¶
- 재현, 성훈�� 함수� 대한 지� 확�.
- swap 함수를 ë§Œë“¤ì–´ë³´ê³ ë¬¸ì œì � 확ì�¸.
- ��터� 개�, 프로그램 실행시 메모리� 구조.
- malloc 함수를 ì�´ìš©í•œ 메모리 í• ë‹¹.
- 배열과 ��터� 관계.
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.1. 수업내용 ¶
- swap 함수� 대해서 복습.
- 함수� 호출과 값 복사(call-by-value).
- ��터� 개�, 프로그램 실행시 메모리� 구조.
- 추가ì �으로 환í�¬ì�˜ 질문들ì—� 대한 대답과 기타.
2.6.2. ê³¼ì œ ¶
- ê°œì�¸ì �으로 현재 시ì �ì—�서 ê³¼ì œë¥¼ 낸다면 Cì�˜ 문법ì�„ ì�µížˆê¸° 위한 ê³¼ì œë¥¼ ì¤€ë¹„í• ê²ƒ ê°™ì�€ë�° 환í�¬ê°€ 현재 시ì �ì—�서 C 문법ì�„ 나름대로 잘 쓰는 ë§Œí�¼ ê·¸ë ‡ê²Œê¹Œì§€ 무리해서 ê³¼ì œë¥¼ 낼 필요는 없지 않ì�„까 싶다. 사실 ì–¸ì œì¯¤ë¶€í„° ì–´ë–¤ ê³¼ì œë“¤ì�„ 내야 í• ì§€ ì •í™•ížˆ ê°�ì�´ 안 잡히는 것ë�„ 있지만... - 서민관
2.6.3. 후기 ¶
- ì €ë²ˆì‹œê°„ì—� í–ˆë�˜ swap 함수ì—� 대해서 간단하게 복습ì�„ í•˜ê³ swap 함수ì�˜ ë¬¸ì œì �ì—� 대해서 짚어보았다. ê·¸ë¦¬ê³ í�¬ì�¸í„°ì�˜ ê°œë…�ê³¼ 함수ì—�서 í�¬ì�¸í„°ë¥¼ 사용하는 방법 순으로 ì§„í–‰ì�„ í•´ 나갔다. 새삼 ëŠ�ë�¼ëŠ” 거지만 call-by-valueì�˜ ë¬¸ì œì �ì�„ 처리하기 위해서 í�¬ì�¸í„°ë¥¼ ë“¤ê³ ë‚˜ì˜¤ëŠ” 것ì�´ 가장 ì§�ì ‘ì �으로 í�¬ì�¸í„°ì�˜ 필요성ì�„ ëŠ�ë�¼ê²Œ ë�˜ëŠ” 것 같다. ê·¸ë¦¬ê³ ê°œë…�ì�˜ 설명ì�„ 하기ì—�ë�„ 편한 것 ê°™ê³ . ê·¸ 후ì—�는 í�¬ì�¸í„°ì—� 대한 부분ì�´ ì�¼ë‹¨ë�½ë�˜ê³ 성훈ì�´ë‚˜ 재현ì�´ì²˜ëŸ¼ mallocì�´ë‚˜ 추가ì �ì�¸ 부분ì�„ ì§„í–‰í• ì˜ˆì •ì�´ì—ˆëŠ”ë�° 환í�¬ê°€ 함수ì�˜ 사용ì—� 대해서 질문ì�„ 좀 í•´ ì˜¤ê³ ê·¸ 외ì—�ë�„ 약간 다른 부분ì�„ 다루다 보니 ì§„ë�„ê°€ 약간 늦어졌다. 그래ë�„ í�¬ì�¸í„°ì—�서는 ì�´í•´ê°€ 가장 ì¤‘ìš”í•˜ë‹¤ê³ ìƒ�ê°�하는 ë§Œí�¼ 조금 천천히 나가는 것ë�„ ê´œì°®ë‹¤ê³ ë³¸ë‹¤. ê·¸ë¦¬ê³ ì•žìœ¼ë¡œì�˜ 목표는 ì�¼ë‹¨ 처ì�Œì—� 잡아둔 목표까지 무사히 완주하는 것ì�´ë‹¤. ì›�래 첫 ì§„ë�„ ì˜ˆì •ì—� 다양한 것들ì�´ 담겨있는 ë§Œí�¼ 목표만 ì�´ë£¨ì–´ë�„ 충분히 괜찮ì�€ C ì‹¤ë ¥ì�´ 길러지지 않ì�„까 싶다. - 서민관
- í�¬ì�¸í„°ì—� 대한 대략ì �ì�¸ ê°œë…� - 복잡하지만 숙달ë�˜ë©´ 나아질듯 합니다.
약간� 잡지�.
메모리 구조 + 주소 - 변수 ì„ ì–¸ì‹œ ê·¸ 변수ì�˜ 주소 + ê°’ì�˜ ì�´ì•¼ê¸°...ì�¸ë�° 그림으로 설명해주셔서 쉽게 ì�´í•´í–ˆìŠµë‹ˆë‹¤. - 박환í�¬
2.7.2. 후기 ¶
í�¬ì�¸í„°ì—� 대해 잘 ë°°ì› ë„¤ìš” ã…Ž
í�¬ì�¸í„°ë³€ìˆ˜ê°€ 가지는 ê°’ê³¼ *, &ì—°ì‚°ìž�ì�˜ 사용법ì�„ 잘(ì�€ ì�µí˜”는ë�° ì•„ì§�ë�„ ê¸´ê°€ë¯¼ê°€í•˜ê³ ..) ë°°ì› êµ¬ìš”..
mallocê³¼ fflush 함수ì—� 대해 다시 ì •í™•í•˜ê²Œ ì§šì�„ 수 있어서 좋았구요
특히 heapê³¼ stackì—� 대한 깊ì�€ ì�´í•´ë¥¼ í• ìˆ˜ 있었네요.
그래ë�„ ì—시 ê°œë…�ë§Œ 충실한 ìƒ�태ë�¼ 좀 ë§Žì�€ ì˜ˆì œë¥¼ 다뤄볼 수 있었으면 ì¢‹ê² ë„¤ìš”
ê·¸ë¦¬ê³ ë°‘ì�˜ ê³¼ì œ... ì�´ì¤‘ í�¬ì�¸í„°ë�¼ë‰°ã…‹ã…‹ã…‹ã…‹ã…‹ã…‹ã…‹ã…‹ã…‹ - ì�´ì„±í›ˆ
í�¬ì�¸í„°ë³€ìˆ˜ê°€ 가지는 ê°’ê³¼ *, &ì—°ì‚°ìž�ì�˜ 사용법ì�„ 잘(ì�€ ì�µí˜”는ë�° ì•„ì§�ë�„ ê¸´ê°€ë¯¼ê°€í•˜ê³ ..) ë°°ì› êµ¬ìš”..
mallocê³¼ fflush 함수ì—� 대해 다시 ì •í™•í•˜ê²Œ ì§šì�„ 수 있어서 좋았구요
특히 heapê³¼ stackì—� 대한 깊ì�€ ì�´í•´ë¥¼ í• ìˆ˜ 있었네요.
그래ë�„ ì—시 ê°œë…�ë§Œ 충실한 ìƒ�태ë�¼ 좀 ë§Žì�€ ì˜ˆì œë¥¼ 다뤄볼 수 있었으면 ì¢‹ê² ë„¤ìš”
ê·¸ë¦¬ê³ ë°‘ì�˜ ê³¼ì œ... ì�´ì¤‘ í�¬ì�¸í„°ë�¼ë‰°ã…‹ã…‹ã…‹ã…‹ã…‹ã…‹ã…‹ã…‹ã…‹ - ì�´ì„±í›ˆ
2.7.3. ê³¼ì œ ¶
- 배열 받아서 뒤집기 - 배열� 주소값� ��로 받아서 뒤집는 함수.
// 함수 ì„ ì–¸ void reverseArr(int **arr, int arrLen); // 함수 사용시 int arr[10]; reverseArr(&arr, 10);
2.8.1. 수업내용 ¶
- ��터 변수와 malloc 함수.
- 배열과 ��터� 관계.
- ��터 변수를 ��로 받는 함수.
2.8.2. 후기 ¶
- í�¬ì�¸í„° 변수ì—� ê°’ì�„ 주어 초기화 í•˜ë ¤ë©´ 어떻게 해야 하는가(malloc 함수ì�˜ 사용)와 메모리 í•´ì œ(free 함수)ì—� 대한 ì�´ì•¼ê¸°ë¥¼ 했다. ê·¸ë¦¬ê³ ë°°ì—´ê³¼ í�¬ì�¸í„°ì—� 대한 ì�´ì•¼ê¸°ë¥¼ 했는ë�°, ë°°ì—´ë�„ ê²°êµ ì—°ì†�ë�œ 메모리를 잡는다는 ì �ì—�서 í�¬ì�¸í„°ì™€ ê°™ê³ ê°’ì�˜ 참조ë�„ í�¬ì�¸í„° 변수와 똑같ì�´ í• ìˆ˜ 있다는 것ì�„ 다뤘다. ê·¸ 후ì—�는 í�¬ì�¸í„° 변수(ë°°ì—´)를 ì�¸ìž�로 받는 함수를 만드는 법ì�„ ë°°ìš°ê³ , ë°°ì—´ì�„ ì�¸ìž�로 ë°›ì�„ 때는 반드시 길ì�´ë¥¼ 관리해줘야 한다는 ì�´ì•¼ê¸°ë¥¼ 했다. - 서민관
- malloc 함수 = íž™ì—� 배당ë�˜ëŠ” 메모리, 변수 타입ì—� ë”°ë�¼ í• ë‹¹ë�œ ê°’ì—� ë”°ë�¼ ìƒ�기는 메모리(변수?)
Pointer와 ë°°ì—´ = 둘ì�€ ê²°êµ ê°™ë‹¤.
배열(��터)� ��로 받는 함수 = 주소값, 거울 | 거울
오늘ì�€ 다소 íž˜ë“ ê°œë…�들ì�´ì—ˆìŠµë‹ˆë‹¤. - 박환í�¬
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.1. 수업내용 ¶
- ��터 변수와 malloc 함수.
- 구조체, 구조체 ��터, typedef 키워드.
- 구조체를 ��로 받는 함수.
2.10.2. 후기 ¶
- 구조체ì—� ì´ˆì �ì�„ 맞춰서 ì§„ë�„를 나갔다. ì›�래 목표는 성훈ì�´ëž‘ ê°™ì�€ ì •ë�„(ì�´ì¤‘ í�¬ì�¸í„°)까지 나가는 것ì�´ì—ˆëŠ”ë�°, 시간ì�´ 약간 모ìž�ëž�다. 사실 다중 í�¬ì�¸í„°ì—� 대해서는 한 번쯤 ë�” 다루어야지 싶으니까 다ì�Œì—� ì• ë“¤ì�„ 다 모아서 좀 ë�” ìž�세히 다루는 시간ì�„ ë§ˆë ¨í• ìƒ�ê°�ì�´ë‹¤. - 서민관
- 오늘ì�€ ë�™ì �í• ë‹¹(malloc)ê³¼ 구조체, 구조체 í�¬ì�¸í„°, typedefì—� 대해 ê°œë…�ì •ë¦¬ë¥¼ í•˜ê³ ê·¸ì—� 대한 간단한 ì˜ˆì œì™€ 메모리 그림ì�„ 통해서 쉽게 ì ‘ê·¼ì�„ 했다. ë˜�, 구조체와 구조체 í�¬ì�¸í„°ì�˜ ì ‘ê·¼ 방법ì—� 대해 ìˆ™ì§€í•˜ê³ í•¨ìˆ˜ì—� 대해 ìž�세히 다뤄서 ë§Žì�€ ì�´í•´ë¥¼ 했다. 다ì�Œì—” 다차ì›� ë°°ì—´ê³¼ í�¬ì�¸í„°ë¥¼ í•´ë³´ê³ ê·¸ì—� 대한 ì�´í•´ë¥¼ 해야 í• ê²ƒ 같다. - 최재현
2.11.1. 수업내용 ¶
- 구조체 문법.
- 왜 구조체를 �야 하는가.
- 추�화� 측면�서 보는 타입과 연산(operation).
- 구조체를 ��로 받는 함수.
- fopen() 함수 등� 대한 간단한 언급.
2.11.2. 후기 ¶
- 시험기간ì—� 환í�¬ 후기를 ì �ì–´ë‘” 종ì�´ë¥¼ 파ì�¼ 째로 ìžƒì–´ë²„ë ¸ìŠµë‹ˆë‹¤. ã… ã… ã… ã… ã… ã… ã… ã… ã… ã…
- ì •ëª¨ ì „ì—� ë‘� 시간, ì •ëª¨ ë��ë‚˜ê³ ë‘� 시간ì�´ 걸린 ì •ë§� 긴 새싹ì�´ì—ˆìŠµë‹ˆë‹¤. ;;;; 처ì�Œ 계íš�으로는 재현ì�´ë‚˜ 성훈ì�´ëž‘ 비슷하게 구조체 문법과 사용ì—� 대해서 간단하게 다룰 ìƒ�ê°�ì�´ì—ˆëŠ”ë�° 환í�¬ê°€ 왜 구조체가 필요한지ì—� 대한 ì�´ì•¼ê¸°ë¥¼ 하면서 ì�´ì•¼ê¸°ê°€ ë§Žì�´ 다른 방향으로 í�˜ëŸ¬ê°”네요. ì�¼ë‹¨ 구조체가 필요한 ì�´ìœ 를 ì¶”ìƒ�í™”ì�˜ ê´€ì �ì—�서 ì¶”ìƒ�í™” 한 타입(구조체)ê³¼ 타입ì—� 관한 ì—°ì‚°(함수)ì�„ ì œê³µí•˜ê¸° 위해서ë�¼ê³ ë§�ì�„ 했는ë�° 그래ë�„ ì§�ì ‘ 피부ì—� 와 닿았ì�„ì§€ 어떨지는 좀 ê±±ì •ìž…ë‹ˆë‹¤. ì—시 ì�´ëŸ° 부분ì�€ ì§�ì ‘ì �으로 경험ì�„ í•´ ë³´ì§€ 않으면 안 ë� 것 같네요. 한 시스템(ë�„서관 관리 프로그램ì�´ë‚˜ ì�€í–‰ 시스템 등)ì�„ 재현ì�´, 성훈ì�´ëž‘ ì…‹ì�´ì„œ 쪼개서 만들어 보게 하거나 하는 게 좀 괜찮지 않ì�„까 싶습니다. 나중ì—� 시켜ë´�야지. - 서민관
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.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.1. 수업내용 ¶
- ì˜ˆì œë¥¼ 조금 ë�” 다루어 봤으면 하는 얘기와 구조체를 ì�¨ ë³´ê³ ì‹¶ë‹¤ëŠ” 얘기가 있어서
아예 구조체를 쓸 만한 ì˜ˆì œë¥¼ 만들어 봤습니다.
- ì „ì²´ì �으로 ì œëŒ€ë¡œ 완성하는 프로그램ì�„ 만들어 본다는 ì �ì—� ì�˜ì�˜ê°€ 있ì�„ 것 같습니다.
ê·¸ë¦¬ê³ addAccount()와 deleteAccount()는 ì�´ ì�´í›„ 수업ì�„ 위한 하나ì�˜ í�¬ì�¸íŠ¸ê°€ ë� 것입니다.
#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.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.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.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.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;
}










