컴퓨터 프로그램은 여러 기능의 복합체이다. 라이브러리 함수와 사용자 정의 함수

Slides:



Advertisements
Similar presentations
법의 이념과 철학의 이해 법의 이념은 무엇일까 ? 정의 : 각자에게 각자의 몫을 주는 것 - 평등의 의미가 내포되어 있음 법적 안정성 : 법의 규정이 명확하고 잦은 변경 이 없어야 함 개인의 자유와 권리를 공공복지와 조화롭게 추구 – 사회질서와 안전유지 + 사회정의.
Advertisements

버킷 리스트 중 하나였던 “ 남도 맛 기행 ”.. 이라고 하면 왠지 거창한 느낌이지만, 사실 저주받은 미각으로써 왠만한 건 다 맛있는 나로써는 “ 맛 기행 ” 이라는 표현은 어울리지 않다. 그럼에도 불구하고 “ 맛 기행 ” 이라는 테마를 잡은 건 남도하면 역시 “ 맛 ”
03 변수와 자료형 세종대학교 최옥경 교수 참고 : 한빛미디어 뇌를 자극하는 C, INFINITY Perfect C.
조건문, 함수 정대진 ( ) C Programming -3 일차 ITA 8 월 강의.
명륜종합사회복 지관. * 강사 : 소 찾는 아이 작가 이상희, 김매화 팀장 외 * 북아트란 : 논술교육의 중요성, 자유로운 사고, 창 의력, 논리력 * 준비물 : 색연필, 사인펜, 연필, 지우개, 딱풀, 가위.
생활 속의 확률과 진실성 하안북중 1학년 서동조.
공공의료 한국의료의 ‘미운 오리새끼’ (목) 김 용 익 새정치민주연합 국회의원.
2007 1학기 12 배열.
데이터의 표현과 연산 (1) (Chapter 3)
슬라이드 1~21까지는 각자 복습! 슬라이드 22부터는 수업시간에 복습
배열, 포인터 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express.
2014 ITA 8월 강의 C Programming -1주차- C언어 기초 정대진 ( )
공공의료 한국의료의 ‘미운 오리새끼’ 김 용 익 새정치민주연합 국회의원.
쉽게 풀어쓴 C언어 Express 제8장 함수 C Express.
쉽게 풀어쓴 C언어 Express 제8장 함수 C Express.
2007 1학기 10 함수 활용.
C 6장. 함수 #include <stdio.h> int main(void) { int num;
제3장 추가 실습 3장 관련 C 언어 프로그래밍 실습.
컴퓨터의 기초 제 4강 - 표준 입출력, 함수의 기초 2006년 4월 10일.
쉽게 풀어쓴 C언어 Express 제3장 C프로그램 구성요소 C Express.
6장. printf와 scanf 함수에 대한 고찰
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 14. 포인터와 함수에 대한 이해.
오일석, C와 ALPS, 장. 논리적으로 생각하기 © 오일석, 전북대학교 컴퓨터공학.
변수와 자료형.
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 02. 프로그램의 기본구성.
C 7장. 배열과 문자열 #include <stdio.h> int main(void) { int num;
컴퓨터 프로그래밍 기초 - 2nd : scanf(), printf() 와 연산자 -
쉽게 풀어쓴 C언어 Express 제14장 포인터 활용 C Express.
Part 04 입출력과 전처리 ©우균, 창병모 이 슬라이드는 부산대학교 우균이 작성하였습니다. 오류나 수정할 사항 있으면 연락 주세요.
6장 배열.
쉽게 풀어쓴 C언어 Express 제7장 반복문 C Express.
제 11 장 전처리기.
13. 포인터와 배열! 함께 이해하기.
바코드에 대하여…… 바코드에 대하여 알아보도록 하자 6-1 홍지효.
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 11. 1차원 배열.
과학 탐구 토론 대회 1학년 2반 박승원 1학년 5반 권민성.
자전거를 배우려면 안장에 올라가 페달을 밟아라.
자전거를 배우려면 안장에 올라가 페달을 밟아라.
중소기업 환위험관리(한국무역협회주관) 2004년 7월 14일 시장운용팀.
11장. 1차원 배열 IT응용시스템공학과 김 형 진 교수.
제어문 & 반복문 C스터디 2주차.
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 09. C언어의 핵심! 함수!
CHAP 2:순환.
제 1 강.
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
컴퓨터 프로그램 제2,3장 간단한 C 프로그램 김 문 기.
처음으로 배우는 C 프로그래밍 제3부 함수 제 6 장 함수 작성.
많은 자료가 있을 때는 배열을 사용한다. 아래는 배열을 사용하는 경우의 예시이다. 상황에 따라 1차원 또는 다차원 배열 필요.
Chapter 11. 배열과 포인터.
Part 09 배열 안산1대학 디지털정보통신과 임 성 국.
Chapter 05. 입출력 함수.
실습과제 1(조건문, ) 표준입력으로 수축기 혈압을 입력 받아 그에 따른 적당한 표현을 화면에 출력하는 프로그램을 if-else 문을 이용하여 작성.
NH Card 사후관리자료(4회차) 농협청주교육원교 수 서 영 식.
#1 배열 활용 #include int main(void) { int i; int grade[5]; grade[0] = 10; grade[1] = 20; grade[2] = 30; grade[3] = 40; grade[4] = 50; for(i=0;i.
-Part2- 제1장 1차원 배열이란 무엇인가.
누구나 즐기는 C언어 콘서트 제2장 기초 사항 IT응용시스템공학과 김형진 교수.
-Part1- 제7장 반복문이란 무엇인가.
쉽게 풀어쓴 C언어 Express 제3장 C프로그램 구성요소 C Express Slide 1 (of 25)
컴퓨터 프로그램은 여러 기능의 복합체이다. 라이브러리 함수와 사용자 정의 함수
1학기 정리 지난 학기에 배운 내용을 복습해 본다..
(제작자: 임현수)모둠:임현수,유시연,유한민
엔화 대환/대출 자금용도 대상 이자 차액 효과 (A,B,C) 환율 리스크 헷징 (A,B) 엔화의 평균환율 (A,B,C)
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
어서와 C언어는 처음이지 제16장.
17장. 포인터의 포인터.
어서와 C언어는 처음이지 제23장.
C.
Chapter 09. 배열.
어서와 C언어는 처음이지 제22장.
Presentation transcript:

컴퓨터 프로그램은 여러 기능의 복합체이다. 라이브러리 함수와 사용자 정의 함수 예를 들어, 게임 프로그램은 캐릭터 조작, 배경 그리기, 입력 장치 조작, … 각각은 세부 기능. 예를 들어 입력 장치는 키보드, 마우스, 조이스틱, … 이들 각각을 담당하는 전문적인 모듈 필요 이들 전문적인 모듈을 함수라 함 라이브러리 함수와 사용자 정의 함수 라이브러리 함수: C 언어가 미리 만들어 제공하는 함수 (부록 D 참조) printf(), scanf(), sqrt(), rand(), time(), … 사용자 정의 함수: 프로그래머가 필요하여 스스로 만든 함수

5.1 값 주고 받기

5.1.1 원리 예) 네 개 정수의 최대를 구하는 (함수를 사용하지 않은) 프로그램

함수 버전 함수의 일반적인 꼴

프로그램 [5.2]의 동작 라인 11에서 find_max4()를 호출함 (인수는 x1, x2, x3, x4) 이제부터 함수와 접선이 시작된다. 함수 find_max4() 의 실행은 세 단계를 거침 ①값 받기  ②실행하기  ③결과 값 반환

구체적으로 살펴 보면, (이 동작 원리를 꼭 이해해야 한다.)

5.1.2 몇 가지 유형 함수는 ①값을 받고, ②실행하고, ③결과를 넘겨 준다. 받는 값 (입력 값)과 넘겨 주는 값 (반환 값)의 몇 가지 유형

경우 3에 해당하는 주사위 시뮬레이션 함수 경우 4는 반환 값이 두 개 이상이므로 reurn으로 넘길 수 없다. 5.2절에서 포인터를 사용하는 새로운 방법 소개

연습 문제

5.2 포인터에 의한 참조 호출

5.2.1 메모리에 대한 이해 메모리는 주소를 갖는다. 메모리는 운영 체제가 관리한다. 변수 생성 시 주소 할당 변수 소멸 시 회수

5.2.2 포인터 라인 4에서 포인터 변수 (줄여서 포인터라 부름) 정의 포인터는 ‘다른 변수의 주소’를 갖는다. 라인 4에서 포인터 변수 (줄여서 포인터라 부름) 정의 포인터는 ‘다른 변수의 주소’를 갖는다. 포인터는 라인 4처럼 변수 앞에 *를 붙여 정의한다. 이제 변수 p는 정수가 아니라 어떤 정수 변수의 주소를 갖는다. 라인 8의 p=&a에 주목해 보면, 변수 앞에 붙어 있는 &는 주소 연산자 즉 &a는 변수 a의 주소

그림 5.3으로 보다 구체적으로 설명한다. 그림 5.3(c): 라인 8 수행 후 그림 5.3(d): 라인 9 수행 후 *p는 포인터 p가 가리키는 곳의 내용 이때 *는 내용 연산자

포인터 연산의 특성 뺄셈 허용, 덧셈 허용 안됨 자료 형에 민감 (즉 실수 포인터가 정수 변수를 가리킬 수 없다.)

연습 문제

5.2.3 값 호출과 참조 호출 네 개 정수의 최대와 평균과 구하여 반환하는 함수를 생각해 보자. 반환 값이 두 개이므로 return으로 넘길 수 없다. 따라서 parameter_list를 통해 넘겨야 함 프로그램 [5.5]는 이런 생각으로 작성한 프로그램 여섯 개 매개 변수 중 앞의 네 개는 ‘값을 받는’ 역할이고 뒤의 두 개는 ‘결과를 반환하는’ 역할 하지만 프로그램 [5.5]는 오동작 (C는 값 호출을 사용하기 때문) C 언어는 “매개 변수 교환을 위해 값 호출 방식을” 사용한다.

프로그램 [5.5]의 동작을 그림으로 조목조목 살펴 보면, 라인 6-7에서 변수 생성, 라인 9에서 변수 초기화 라인 10에서 함수 호출, 이때 정보 교환 (매개 변수에 새로운 주소 할당) 라인 17-27에서 최대와 평균 계산 라인 10으로 귀환 (이때 매개 변수 소멸)

결국 find_maxave4()는 주소 1-6 (main()의 변수)에는 영향을 주지 못함 새로운 종이에 계산을 한 후, 그 종이를 휴지통에 버린 꼴 만일 참조 호출이었다면, (하지만 C 언어는 값 호출 방식을 사용한다.) 매개 변수를 위해 새로운 메모리를 할당하지 않는다. 같은 주소가 단지 다른 이름으로 불릴 뿐이다. (“동명 이인”)

5.2.4 포인터를 이용한 참조 호출 모방 C 언어는 포인터를 이용하여 참조 호출을 모방한다. 프로그램 [5.6]은 포인터를 이용하여 작성한 것

이 프로그램은 왜 제대로 작동할까? (이 동작 원리를 꼭 이해해야 한다.) 라인 10에서 함수 호출, 이때 정보 교환 pmax와 pave는 각각 main() 내의 max와 ave를 가리키는 포인터 라인 17-27에서 최대와 평균을 pmax와 pave가 가리키는 곳에 저장 계산은 다른 종이에서 하지만 답은 답안지에 제대로 적은 꼴

또 다른 예 (두 값의 교환)

연습 문제

5.3 변수의 생과 사

5.3.1 내부 변수와 외부 변수 내부 변수 내부 변수 어떤 함수 내에 선언된 변수 해당 함수 내에서만 유효 함수가 기동하면 생성되고 끝나면 자동 소멸됨 지역 변수, 자동 변수라고도 부름 내부 변수

외부 변수 어떠한 함수에도 속하지 않은 변수 선언 위치부터 프로그램 끝까지 유효 프로그램 시작 때 생성되고 프로그램 끝날 때까지 지속 전역부 변수라고도 부름 함수는 ‘전역 변수를 통해 정보 교환할’ 수도 있다. 오른쪽 find_maxave4()는 결과를 전역 변수를 통해 반환

변수의 초기화 외부 변수는 컴파일 시점에 알아 낼 수 있는 값으로 초기화 해야 한다. 내부 변수는 어떤 수식으로도 초기화할 수 있다. 왜?

연습 문제

5.3.2 유효 범위 규칙

예제로 설명한다. 5.6절의 카드 짝꿍 게임의 골격 버전 1은 no와 card[]가 전역이므로 매개변수로 넘길 필요가 없다. 버전 2은 지역 변수이므로 매개변수로 넘겨야만 한다. 어느 스타일이 나은가?

효율적인 관리를 위해 큰 프로그램은 여러 파일에 작성한다. 여러 파일에 나누어 작성할 수 있다. 효율적인 관리를 위해 큰 프로그램은 여러 파일에 작성한다. 변수 ‘정의’ (실제 메모리가 할당된다.) 변수 ‘선언’ (다른 파일에 이미 정의되어 있으므로 그것을 사용하겠다고 알림)

5.3.3 프로그래밍 스타일: 프로그램의 재사용성 버전 4와 버전 5는 보다 좋은 설계 방식 main()은 no와 card[]에 접근할 수 없다. (“정보 은닉”) initialize_card_deck()과 display_card_deck()의 독립성 강화 이들 함수를 복사하여 다른 프로그램에 재사용하기가 용이해 졌다.

연습 문제

5.4 재귀 함수 재귀라는 개념 어떤 크기의 문제가 그것보다 작은 크기의 문제로 정의됨 예를 들어,factorial 재귀적으로 정의된 문제는 재귀 함수로 작성할 수 있다. 재귀 함수는 ‘자신을 호출하는’ 함수

재귀 함수와 비재귀 함수 factorial 문제의 경우, 함수 호출에 따른 ‘간접 비용’ 때문에 비재귀 함수를 사용함이 타당 왜 간접 비용이 있나?

퀵 정렬quick sort (재귀 함수를 사용하는 것이 타당한 경우) 맨 왼쪽 요소를 기준으로 배열 분할 (기준을 중심으로 큰 것은 오른쪽, 작은 것은 왼쪽에 배치. 2.4.2절 참조) 좌측과 우측 부분 배열을 재귀적으로 배열 분할 예를 들어 10개 요소를 가진 배열을 가지고 손 시뮬레이션 해 보면,

알고리즘으로 정리하면,

C로 코딩 하면, 버블 정렬과 퀵 정렬은 어느 것이 빠를까? 그 차이의 정도는?

연습 문제

5.5 전처리기

#define 매크로 함수와 매크로 상수 만일 #define area(r) PI*r*r과 같이 정의하였다면? 또 다른 예로 swap(),

#include <…>을 사용하는 경우, 컴파일러가 제공하는 헤더 파일이 저장된 폴더에서 찾음 “…”을 사용하는 경우, 현재 컴파일하는 소스 코드가 담겨 있는 폴더에서 찾음

연습 문제

5.6 프로그래밍 연습: 카드 짝꿍 게임 게임 규칙 (기억력 테스트 게임) 여기에서는 함수를 포함하여 프로그램의 전체 구조에 주목해 보자.

‘탑다운 방식’으로 프로그램을 설계해 보자. 먼저 골격을 기술한 후, 점차 구체화 시켜 나가는 방식

각각의 기능을 조금씩 구체화 시키면, 카드 상태를 나타내는 배열이 있어야 한다. 라인 3-4 (카드 배열 초기화) 라인 9 (현재 카드 상태를 화면에 디스플레이)

라인 12-15 (플레이어가 선택한 두 장의 카드를 처리) 라인 20 (게임 오버 후, 점수 출력)

C로 코딩 하면, main()

카드 초기화 함수 initialize_card_deck()

카드 디스플레이 함수 display_card_deck() 화면 설계

선택한 두 장의 카드 처리 함수 process_player_choice()

점수 출력 함수 output_score()

좋은 프로그램은 ‘기능적으로 모듈화’되어 있다. 프로그램을 업그레이드하기가 편리하다. 예를 들어, 화면 디스플레이를 보다 멋지게 고치고 싶다면 display_card_deck()을 수정하면 된다. 점수 방식을 바꾸고 싶다면 output_score()만 고치면 된다.

연습 문제

5.7 프로그래밍 연습: 하노이 탑 원반 이동을 어떻게 표현할까? 6 가지 연산으로 가능하다. (예를 들어, AB는 막대 A의 맨 위 원반을 막대 B로 이동함)

예를 들어, 원반이 세 개인 경우는 7번의 이동으로 해결됨 원반이 하나 늘어 네 개라면, 세 개 짜리 문제를 두 번 풀면 된다.

하노이 탑 문제는 재귀적이다. n개 짜지 문제는 n-1개 짜리 문제 두 개를 해결하면 된다. 알고리즘으로 정리하면,

C 코딩 하면,

원반 이동 회수를 따져 보자. 3개 일 때 7번, 즉 f(3)=7 4개 일 때는 3개 문제 두 번 + 한번 이동, 즉 f(4)=2f(3)+1=15 … 일반화 시키면, 원반이 하나 늘어나면 이동 회수는 두 배로 늘어남 기하급수적으로 증가

연습 문제