61
1 최최 C 최최최최최 최최 최최최최최최 최최최최최최최 9 최 : 최최 최최최최 - 최최최최 개개개 개개개

최신 C 프로그래밍 언어 문제해결에서 프로그래밍까지

  • Upload
    shino

  • View
    111

  • Download
    0

Embed Size (px)

DESCRIPTION

최신 C 프로그래밍 언어 문제해결에서 프로그래밍까지. 개정판. 9 장 : 함수 도서출판 - 인터비젼. 9 장 함수. 학습목표 1. 함수의 정의 및 선언 그리고 함수 프로토타입 ( 원형 ) 에 대해 이해한다 . 2. 함수들 간의 매개변수 전달 방법을 이해한다 . 3. 구조적 프로그래밍 기법에 대해 이해한다 . 4. 순환함수 및 함수포인터에 대해 이해한다 . 5. 메인함수를 보다 자세히 이해한다. 목차. 9 장 함수 예습시간 함수의 기본 개념 이해 구조적 프로그래밍 - PowerPoint PPT Presentation

Citation preview

Page 1: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

1

최신 C 프로그래밍 언어문제해결에서 프로그래밍까지

9 장 : 함수도서출판 - 인터비젼

개정판개정판개정판개정판

Page 2: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

2최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

9 장 함수 학습목표

1. 함수의 정의 및 선언 그리고 함수 프로토타입 ( 원형 )에 대해 이해한다 .

2. 함수들 간의 매개변수 전달 방법을 이해한다 . 3. 구조적 프로그래밍 기법에 대해 이해한다 . 4. 순환함수 및 함수포인터에 대해 이해한다 . 5. 메인함수를 보다 자세히 이해한다 .

Page 3: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

3최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

목차 9 장 함수

예습시간– 함수의 기본 개념 이해– 구조적 프로그래밍– 순환 함수와 함수 포인터 그리고 메인 함수

실습시간– 구조적 프로그래밍 접근– 사용자 정의 함수 활용

연습시간– 사용자 함수 및 관계 분석

Page 4: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

4최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

예습시간 – 1 교시

함수의 기본 개념 이해

Page 5: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

5최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

함수의 기본 개념 이해 학습 개요

함수의 의미와 구조에 대해 이해한다 . 사용자 정의 함수에 대해 이해한다 . 함수간의 데이터 전달 방법을 이해한다 . 함수의 결과 값 전달 방식에 대해 이해한다 .

Page 6: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

6최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

함수의 기본 개념 이해 함수의 기본 개념

함수란– 프로그램의 일부를 그룹화 한 하나의 모듈– 어떠한 입력에 대한 특정 일을 수행하고 처리 결과를 제공한다 .– 블랙박스 구조의 모듈– 함수의 종류

» 라이브러리 함수 ( 표준 함수 ) 표준으로 미리 정의된 함수로 컴파일러에 의해 제공

» 사용자 정의 함수 사용자가 임으로 만들어 사용하는 함수

함수 사용의 장점– 프로그램의 반복적인 내용을 효율적으로 만들고 사용 가능하게 한다 .– 함수의 재사용이 용이하다 .– 프로그램을 특정 단위로 모듈화함으로써 이해가 용이하다 .

Page 7: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

7최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

함수의 기본 개념 이해 사용자 정의 함수의 정의와 사용

함수의 형식

❶ 결과 반환 데이터형 : 함수 처리 후 결과 반환 데이터 형 ❷ 함수의 이름 : 사용자 정의 함수 이름 ❸ 매개변수 리스트 : 호출 시 전달되는 변수 이름 ❹ 함수 내부 지역 변수 선언 : 함수 내부 변수 ❺ 함수 실행 문장들 ❻ return [ 결과데이터 ] : 처리 결과 전달 문

[ ❶ 결과 반환 데이터형 ] [ ❷ 함수의 이름 ]([ ❸ 매개변수 리스트 ]){ // ❹ 함수 내부 지역 변수 선언 // ❺ 함수 실행 문장들 ... ❻ return [ 결과데이터 ]; }

Page 8: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

8최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

함수의 기본 개념 이해 사용자 정의 함수 작성 예

int sum(int x, int y){ int z; z= x+y; return z; } 6 개의 요소 분리

– ❶ 결과 반환 데이터형 : – ❷ 함수의 이름 : – ❸ 매개변수 리스트 : – ❹ 함수 내부 지역 변수 선언 : – ❺ 함수 실행 문장들 : – ❻ return [ 결과데이터 ] :

int sum int x, int y int z z = x + y; return z

Page 9: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

9최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

함수의 기본 개념 이해 함수의 사용

함수의 사용은 함수의 이름을 호출하고 매개변수를 전달하는 과정으로 이루어진다 .

함수를 포함한 프로그램 구조– 01 #include <stdio.h> – 02 ... – 03 //❶함수의 원형 – 04 int sum(int x, int y); – 05 // 전역변수선언 – 06 void main(){ – 07 // 지역 변수 선언 – 08 int first, second, result; – 09 ... – 10 //❷함수의 호출 – 11 result = sum(first, second); – 12 ... – 13 } – 14 //❸함수의 정의 – 15 int sum(int x, int y){ – 16 int z; – 17 z= x+y; – 18 return z; – 19 }

•함수의 원형• 함수의 원형의 선언은 컴파일러에게 함수의 사용을 알려준다 .

•함수의 호출•함수의 이름을 이용해 함수를 호출•매개변수 존재할 경우 매개 변수 전달

•함수의 정의•함수의 구현 부로 실제 처리 담당

Page 10: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

10최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

함수의 기본 개념 이해 함수의 사용

함수의 호출과정과 제어 흐름

Page 11: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

11최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

함수의 기본 개념 이해 함수간의 데이터 전달 방법

함수 호출과정에서 매개변수 전달 방법 종류

– 값에 의한 전달방식 (Call by Value)– 주소에 의한 전달방식 (Call by Reference)

매개변수의 분류– 실 매개변수

» 함수 호출 시 전달되는 실제 데이터» 함수 호출을 위해 전달되는 매개변수

– 형식 매개변수» 실제 데이터를 받아들이는 변수» 함수에 선언된 매개변수

Page 12: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

12최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

함수의 기본 개념 이해 값에 의한 매개변수 전달방식 (Call by Value)

실제 값을 매개변수로 전달 값의 복사가 이루어짐 전달 예 >

Page 13: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

13최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

함수의 기본 개념 이해 값에 의한 매개변수 전달방식 (Call by Value)

실 매개변수와 형식 매개변수는 각기 독립적인 공간을 가진다 . 이들 변수 사이에 값이 복사 되어 전달 함수들간의 독립성이 보장되고 함수내의 값의 변화에 영향을 받지 않는다 . 사용 예 >

01 #include <stdio.h> 02 int send(int x); // 함수의 원형 03 void main(){ 04 int data, result; 05 data = 30; 06 result = send(data); 07 printf("main() : data = %d \n", data); 08 } 09 int send(int data){ 10 data = data + 30; 11 printf("send() : data = %d \n", data); 12 return 0; 13 }

출력 결과 main() : data = ________________

send() : data = ________________

30

60

Page 14: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

14최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

함수의 기본 개념 이해 주소에 의한 호출 방법 (Call by Reference)

함수에 값이 아닌 값이 저장된 메모리 주소를 전달 포인터를 이용한 호출 방법 주소의 조작을 통해 호출한 위치의 값이 함수 내부에서 변경될 때 그 값은

영향을 받는다 . 사용 예 > 01 #include <stdio.h>

02 void exchange(int *px, int *py); 03 void main(){ 04 int x = 10; 05 int y = 20; 06 exchange(&x,&y); 07 printf(" x = %d , y = %d \n"); 08 } 09 void exchange(int *px, int *py){ 10 int temp; 11 temp = *px; 12 *px = *py; 13 *py = temp; 14 }

출력 결과 x = ________________

y = ________________

20

10

Page 15: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

15최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

함수의 기본 개념 이해 주소에 의한 호출 방법 (Call by Reference)

프로그램 분석

Page 16: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

16최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

함수의 기본 개념 이해 매개변수로 배열 전달

주소에 의한 매개변수 전달 방법을 취함 (Call by Reference)

함수의 매개변수로 배열의 대표명이 전달될 경우 주소로써 전달된다 .

배열의 대표명은 주소의 역할을 가짐 배열을 매개변수를 전달할 경우 두 가지 형태로 그 배열을

받아들일 수 있다 .– 포인터 변수를 이용한 배열의 주소 값으로– 배열형식으로 배열을 받아 들임 . 이때 배열의 크기는 전달되지

않는다 .

Page 17: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

17최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

함수의 기본 개념 이해 매개변수로 배열 전달

사용 예 >

01 #include <stdio.h> 02 // 함수의 원형 03 int min(int *x); 04 int max(int x[]); 05 // 메인 함수 06 void main(){ 07 static a[]={11,23,13,54,25,36,47,78,19,20}; 08 int mi,ma; 09 mi = min(a); // 배열의 대표명으로 인자 전달 10 ma = max(a); // 배열의 대표명으로 인자 전달 11 printf("mi = %d ma = %d \n",mi,ma); 12}

13 int min(int *x){ // 포인터 변수로 인자 얻음 14 int i, result = *x; // 첫번째 값 결과에 15 for(i=1;i<10;i++){ 16 x++; // 다음 번지로 이동 17 if(result > *x){ 18 result = *x; 19 } 20 } 21 return result; 22 }

23 int max(int x[]){ // 배열 명으로 인자 얻음 24 int i, result = x[0]; // 첫번째 값 결과에 25 for(i=1;i<10;i++){ 26 if(result < x[i]){ 27 result = x[i]; 28 } 29 } 30 return result; 31 }

포인터 변수로써

배열 명으로써

Page 18: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

18최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

함수의 기본 개념 이해 함수의 결과 값 전달

함수의 처리 결과는 return 문을 통해 전달 함수 처리 과정 중 return 문을 만나면 함수의 호출위치로

제어가 이동됨 return 문 사용형태

– return; // 아무 값도 전달하지 않고 함수 호출 위치로 제어 이동 – return value;   // value 에 포함된 값을 전달한다 . – return 0;       // 0 값을 전달한다 .

return 문의 전달 값은 함수 선언 시 정의된 함수의 리턴 타입과 동일해야 한다 .

– 예 >

리턴 타입이 void 일 경우 return 문 생략 가능

double getAve(int value, int count){ double result; ... return result;

Page 19: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

19최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

함수의 기본 개념 이해 사용자 정의 함수의 분류

함수의 결과 유형과 매개변수 전달 방법에 따른 분류

종류 값반환(return)

매개변수전달방법

사용 예 설명값 주소

기본형

X

X

X void fun() 단순출력용으로 사용

출력매개변수형 O void fun(int *x) 함수의 결과를 매개변수로 전달 목적

입력매개변수형

O

X void fun(int x) 입력 내용에 대한 단순 출력 목적

입 / 출력매개변수형 O void fun(int x, int *y) 함수에 대한입력과 출력을 매개변수를 통해 처리함

리턴형

O

X

X int fun() 내부처리 후 결과반환

리턴 / 출력매개변수형 O int fun(int *x) 처리 결과를 매개변수와 반환 값으로 처리

리턴 / 입력매개변수형

O

X int fun(int x) 입력 값에 대한 하나의 결과 제공

리턴 입 /출력

매개변수형O int fun(int x, int *y) 입력 값에 대한 처리 결과를 매개변수와 리턴 값으로

전달

Page 20: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

20최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

예습시간 – 2 교시

구조적 프로그래밍

Page 21: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

21최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

구조적 프로그래밍 학습 개요

함수 기반의 구조적 프로그래밍에 대해 알아본다 . 구조적 프로그래밍 설계 기법에 대해 다룬다 . 하향식 설계 기법을 이해한다 .

Page 22: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

22최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

구조적 프로그래밍 프로그래밍 설계 기법

현실적으로 프로그램은 매우 크고 복잡한 구조를 가진다 . 어떻게 프로그램을 분석하고 설계할 것인가 ?

– 분할 정복 방식 (Divide and Conquer)» 큰 문제를 여러 개의 작은 단위로 분리하고 그 작은 단위의 문제부터

해결해 나가는 방식– 하향식 설계 원리

해결 가능한 최소의 단위를 함수를 통해 구성한다 . 구조체 차트 (Structure Chart) 활용

– 한 문제와 다른 문제 사이의 관계를 효율적으로 분석 알고리즘 및 플로우차트

– 각 단위의 문제에 대한 흐름 파악

Page 23: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

23최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

구조적 프로그래밍 하향식 접근 방식을 통한 프로그램 설계 흐름

1) 문제의 이해 2) 알고리즘 작성 3) 보다 작은 단위의 문제로 분할 4) 작은 부 문제를 이용해 구조체 차트 작성 5) 각 요소 중 보다 상세한 기술이 요구되는 부분을 위해

흐름도 ( 플로우차트 ) 작성 6) 분할된 요소를 중심으로 프로그램 작성 7) 테스트

Page 24: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

24최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

구조적 프로그래밍 하향식 접근 방식을 통한 프로그램 설계 흐름 예

문제 정의– 산술처리를 담당하는 프로그램을 작성해야 한다고 가정해 보자 .

이 프로그램은 사용자의 입력에 의해 사칙 연산을 수행하고 이 입력 결과를 화면에 출력한다 .

알고리즘 작성– 프로그램 작성 과정을 문장을 통해 간략히 기술한다 .– 알고리즘

» 1. 데이터 입력 1.1 데이터 값을 입력 받는다 . 1.2 연산형태를 입력 받는다 .

» 2. 계산 처리 2.1 + 연산자 : 덧셈 처리 2.2 - 연산자 : 뺄셈 처리 2.3 * 연산자 : 곱셉 처리 2.4 / 연산자 : 나눗셈 처리

» 3. 계산 결과 출력

Page 25: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

25최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

구조적 프로그래밍 작은 단위의 문제 분할

분할 정책– 부 문제로 분류할 부분을 찾아 함수로 분할– 분할된 문제가 더 작은 단위로 분할 가능한지를 분석– 부 문제는 그 분할된 의미가 분명해야 하며 다른 곳에서 사용

가능한지 여부를 고려하여 구분한다 . 이 프로그램은 사칙 연산에 대한 부분을 작은 단위로

분리하고 함수로 정의 한다 .– 덧셈 처리 : int add(int x, int y) – 뺄셈 처리 : int sub(int x, int y) – 곱셈 처리 : int mul(int x, int y) – 나눗셈 처리 : double div(int x, int y)

Page 26: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

26최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

구조적 프로그래밍 부문제를 포함하여 구조체 차트 작성

해설– 구조체 차트는 레벨을 가지고 있으며 최상위 문제에서 분할된 부

문제와 다시 그 부 문제에서 분할된 부 문제로 나누어져 구성됨

Page 27: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

27최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

구조적 프로그래밍 요소 중 상세한 기술이 요구되는 부분에 대한 흐름도 작성

해설– 흐름도 ( 플로우차트 ) 는 하나의 구성요소에서의 제어 흐름을 세부적으로

보여줄 수 있다 .– 제어 흐름이 많거나 중요한 부분을 대상으로 흐름도를 작성한다 .

이 프로그램에서는 [0. 산술처리 ] 가 다양한 요소를 포함하고 있기 때문에 이 부분에 대한 흐름도를 작성한다 .

Page 28: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

28최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

구조적 프로그래밍 프로그램 코드 작성

프로그램 분석 완료 후 이들 알고리즘 , 구조체차트 그리고 흐름도를 이용해 코드로 작성한다 .

프로그램 코드 248 페이지01 /***************************** 02 * 산술 처리 프로그램 . * 03 * 생성일 : 2004년 10월 .. * 04 * 작성자 : W Y KIM * 05 *****************************/ 06 #include <stdio.h> 07 // 함수 원형 선언 08 int add(int x, int y); 09 int sub(int x, int y); 10 int mul(int x, int y); 11 double div(int x, int y);

12 //0. 산술 처리 메인 13 void main(){ 14 // 변수 선언 15 int x,y,iRes; 16 char op; 17 double dRes; 18 //1. 자료 입력 19 //1.1 두개의 데이터 자료 입력 20 printf(" 계산할 두 데이터 값은 : "); 21 scanf("%d%d",&x,&y); 22 fflush(stdin);

Page 29: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

29최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

구조적 프로그래밍 프로그램 코드 ( 계속 )23 //1.2 연산자 입력

20 printf(" 연산자는 (+,-,*,/) : "); 21 scanf("%c",&op); 22 fflush(stdin); 23 // 2 계산처리 24 switch(op){ 25 case '+' : 26 iRes = add(x,y); // 2.1 덧셈처리 27 break; 28 case '-' : 29 iRes = sub(x,y); // 2.2 뺄셈 처리 30 break; 31 case '*' : 32 iRes = mul(x,y); // 2.3 곱셈 처리 33 break; 34 case '/' : 35 dRes = div(x,y); // 2.4 나눗셈 처리 36 } 37 // 3 계산 결과 출력 38 if(op != '/'){ 39 printf("%d %c %d = %d \n", x, op, y, iRes); 40 }else{ 41 printf("%d %c %d = %.2f \n", x, op, y, dRes); 42 } 43 }

44 // 사용자 정의 함수 정의 45 //2.1 덧셈 처리 45 int add(int x, int y){ 46 return x+y; 47 } 48 //2.2 뺄셈 처리 49 int sub(int x, int y){ 50 return x-y; 51 } 52 //2.3 곱셈 처리 53 int mul(int x, int y){ 54 return x*y; 55 } 56 //2.4 나눗셈 처리 57 double div(int x, int y){ 58 if(y!=0){ 59 return x / (double)y; 60 }else{ 61 return 0.0; 62 } 63 }

Page 30: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

30최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

예습시간 – 3 교시

순환 함수와 함수 포인터 그리고 메인 함수

Page 31: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

31최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

순환 함수와 함수 포인터 그리고 메인 함수 학습 개요

순환 ( 재귀 ) 함수에 대해 이해한다 . 함수 주소를 이용한 함수 포인터에 대해 다룬다 . 메인 함수를 보다 자세히 이해한다 .

Page 32: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

32최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

순환 함수와 함수 포인터 그리고 메인 함수 순환 ( 재귀 ) 함수

자기 자신을 호출 하는 함수 재귀적으로 서로 상이한 매개변수 값을 가지고 자기 자신을

호출하는 구조 반복 처리의 대안으로 널리 이용됨 반복 구조에 비해 처리 면에서 다소 느리지만 복잡한 구조를

간결하게 구성할 수 있게 한다 . 순환 함수의 구성

– 자기자신과 나머지의 집합– 종결조건

Page 33: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

33최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

순환 함수와 함수 포인터 그리고 메인 함수 순환 ( 재귀 ) 함수 프로그램 예

N! 계산 프로그램– N 과 나머지의 곱으로 해석– 그 나머지는 다시 N 과 나머지의 곱으로 구성– 종결조건 : N == 0 또는 N = 1 일 경우 1 값

Page 34: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

34최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

순환 함수와 함수 포인터 그리고 메인 함수 순환 ( 재귀 ) 함수 프로그램 예

N! 프로그램 ( 반복과 순환함수 비교 )

01 #include <stdio.h> 02 int factorial(int n); 03 int fact(int n); 04 void main(){ 05 int value,result; 06 // 1. 값 입력 07 printf(" N!값 : "); 08 scanf("%d",&value); 09 // 2. 계산 10 result = factorial(value); 11 //3. 출력 12 printf(" %d! = %d \n", value, result); 13}

14 //2. factorial 계산 (for 문 사용 ) 15 int fact(int n){ 16 int i, result=1; 17 for(i=n; i>0; i--){ 18 result = result * i; 19 } 20 return result; 21 } 22 //2. factorial 계산 ( 순환 함수 ) 23 int factorial(int n){ 24 int result; 25 if(n==1) return 1; 26 result = n * factorial(n-1); 27 return result; 28 }

Page 35: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

35최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

순환 함수와 함수 포인터 그리고 메인 함수 순환 ( 재귀 ) 함수 프로그램 예

순환 함수 호출 흐름

Page 36: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

36최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

순환 함수와 함수 포인터 그리고 메인 함수 함수 포인터

함수 역시 특정 주소에 저장되어진다 . 그 결과 함수 주소에 대한 포인터 연산이 가능 함수 포인터 선언과 할당 선언 방법

– [ 데이터 형 ] (*[ 포인터명 ])([ 매개변수리스트 ])» [ 데이터 형 ] 함수의 리턴 타입 형» (*[ 포인터명 ]) : 함수의 주소를 저장할 함수 포인터 이름» [ 매개변수리스트 ] : 함수에 전달되는 매개변수 리스트

Page 37: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

37최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

순환 함수와 함수 포인터 그리고 메인 함수 함수 포인터 사용 예

01 #include <stdio.h> 02 // 함수의 원형 03 int min(int *x); 04 int max(int *x); 05 void main(){ 06 static a[]={13,33,11,54,25,36,47,88,19,20}; 07 int mi,ma; 08 int (*pfun)(int *x); // 함수 포인터 선언 09 pfun = min; // 함수 포인터에 min 함수 주소 할당 10 mi=pfun(a); // 함수 포인터를 이용해 min 함수 호출 11 pfun = max; // 함수 포인터에 max 함수 주소 할당 12 ma=pfun(a); // 함수 포인터를 이용해 max 함수 호출 13 printf("mi = %d ma = %d \n",mi,ma); 14 }

15 int min(int *x){ 16 int i, result = *x; // 첫번째 값 17 for(i=1;i<10;i++){ 18 x++; // 다음 번지 이동 19 if(result > *x){ 20 result = *x; 21 } 22 } 23 return result; 24 } 25 int max(int *x){ 26 int i, result = *x; // 첫번째 값 27 for(i=1;i<10;i++){ 28 x++; // 다음 번지 이동 29 if(result < *x){ 30 result = *x; 31 } 32 } 33 return result; 34 }

함수 포인터

Page 38: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

38최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

순환 함수와 함수 포인터 그리고 메인 함수 함수 포인터 배열

함수 포인터 역시 배열로 관리 될 수 있다 . 함수 포인터 배열 선언

– [ 데이터형 ](*[ 포인터명 ][ 배열의크기 ])([ 매개변수리스트 ])» [ 데이터 형 ] 함수의 리턴 타입 형» *[ 포인터명 ] : 함수의 주소를 저장할 함수 포인터 이름» [ 배열의 크기 ] : 함수 포인터 배열의 크기» [ 매개변수리스트 ] : 함수에 전달되는 매개변수 리스트

동일 유형의 함수 구조를 그룹화하여 관리 가능– 사용 예 :

» int (*pfuns[2])(int *);– 포인터 배열 활용예 – 페이지 256

Page 39: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

39최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

순환 함수와 함수 포인터 그리고 메인 함수 메인 함수 (main) 의 확장

메인 함수의 원형– [ 반환 데이터형 ] main([ 매개변수 리스트 ]);

– [ 반환 데이터형 ] : 정수형 이나 void 형 사용» main 함수의 실행이 정상적인지 아닌지를 판단하기 위해 사용» 함수의 정상종료 시 : 0» 비정상 종료 시 : 1

– [ 매개변수 리스트 ]» 명령라인에서 입력된 값을 얻기 위해 사용» 두 개의 인자 존재» 1. 명령 라인에 입력된 인자의 수 ( 정수형 )» 2. 명령 라인에 입력된 실제 데이터 배열 공간 ( 문자열 포인터 배열

변수 )

Page 40: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

40최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

순환 함수와 함수 포인터 그리고 메인 함수 메인 함수 (main) 의 확장

메인 함수의 매개 변수 사용 예 프로그램

– 01 #include <stdio.h> – 02 void main(int argc, char *argv[]){ – 03 int i; – 04 printf(" 입력된 매개변수 값들 \n"); – 05 for(i=0;i<argc; i++){ – 06 printf("%d ==> %s \n",i,argv[i]); – 07 } – 08 }

argc : 명령라인에서 입력된 인자의 수 *argv[] : 입력된 인자의 문자열 배열

Page 41: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

41최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

순환 함수와 함수 포인터 그리고 메인 함수 메인 함수 (main) 의 확장

사용 예 : 명령 라인에서 다음과 같이 입력 후 두 인자의 결과

– C:> maintest.exe Hi 2030 world ꎠ» maintest.exe 는 프로그램의 이름

argc 와 *argv[] 의 저장 값

Page 42: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

42최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

실습시간 – 1 교시

구조적 프로그래밍 접근

Page 43: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

43최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

구조적 프로그래밍 접근 학습개요

구조적 프로그래밍 방법에 의한 프로그램 분석방법을 학습 함수와 이들간의 관계 그리고 프로그래밍 절차를 알아본다 .

Page 44: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

44최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

구조적 프로그래밍 접근월간 기온 변화에 대한 보고서

문제 정의– 기상 관측소에서 월간 기온 자료를 통해 그 달의 기온 변화에

대한 보고서를 만들려고 한다 . 특정 월에 대한 입력을 통해 그 달의 기온 값을 입력하고 그 기간 동안의 가장 더운 날과 가장 추운 날 그리고 한달 평균 온도를 계산하여 출력한다 . 또한 특정 기간에 대한 온도 변화 그래프를 출력할 수 있게 한다 .

입 / 출력 조건– 입력 조건

» 1) 입력을 원하는 달 (1월 12월 ) : 정수형 (int) » 2) 해당 월에 대한 기온 리스트 : 실수형 (double) » 3) 그래프 출력을 위한 시작일 (int) 와 기간 (int)

– 출력 조건 » 1) 그 달의 가장 더운 날 » 2) 그 달의 가장 추운 날 » 3) 그 달의 평균 기온 » 4) 그 달의 특정 기간에 대한 기온 그래프

Page 45: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

45최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

구조적 프로그래밍 접근 입 / 출력 예

– 먼저 입력할 원을 1 월에서 12 월 사이 값으로 입력– 해당 월에 대한 기온 입력 (-10~40 도 사이의 값 )– 개괄적인 기온 결과 출력 후 그래프 출력 기간 입력을 통해 해당 기간의

그래프 출력

Page 46: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

46최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

구조적 프로그래밍 접근 관련 함수 및 식

– 1) 입력 월에 의해 입력 데이터 크기를 결정한다 . » 1, 3, 5, 7, 8, 10, 12월 : 31 일 (31 개의 입력 공간 ) » 4, 6, 9, 11월 : 30 일 (30 개의 입력 공간 ) » 2월 : 28 일 (28 개의 입력 공간 )

– 2) 동적 메모리 할당 함수 calloc() - <stdlib.h> – 3) 기온은 -10 도에서 40 도 사이의 값으로 입력한다 .

Page 47: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

47최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

구조적 프로그래밍 접근 알고리즘 (또는 플로우차트 )

1 단계 : 개괄적 알고리즘– 1. 데이터 입력

» 1.1 월을 입력한다 . » 1.2 월의 값에 대한 데이터 공간 크기를 얻어온다 . » 1.3 데이터 공간을 할당하고 값을 입력 받는다 .

– 2. 데이터 처리 » 2.1 월 최고 기온을 기록한 날짜를 계산한다 . » 2.2 월 최저 기온을 기록한 날짜를 계산한다 . » 2.3 월 평균 기온을 계산한다 .

– 3. 요약 정보 출력 » 3.1 월 요약 정보를 출력한다 . ( 최고 , 최저 , 평균 )

– 4. 그래프 출력 » 4.1 그래프 출력을 원하는 시작일 과 기간을 입력한다 . » 4.2 해당기간에 대한 그래프 출력

Page 48: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

48최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

구조적 프로그래밍 접근 알고리즘 (또는 플로우차트 )

2 단계 : 구조체차트 (Structure Chart) 작성

Page 49: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

49최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

구조적 프로그래밍 접근 3 단계 : 플로우차트

1.3 기온 입력 함수

4.2 그래프 출력 함수

Page 50: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

50최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

구조적 프로그래밍 접근 프로그램 작성

1 단계– 263페이지의 프로그램을 위의 분석 내용을 기반으로 빈 부분을 채워 넣은 후 프로그램을 작성하고 weather.c 이름으로 저장하자 .

①. getMonthDay(month) ②. getDays(days,dayNum) ③. getHiDay(days,dayNum) ④. getLowDay(days,dayNum) ⑤. getAve(days,dayNum) ⑥. display(days,start,count) ⑦. hi = *(days+i) ⑧. calloc(cnt,sizeof(double)) ⑨. (int)*(days+i)

Page 51: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

51최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

구조적 프로그래밍 접근 프로그램 작성

2 단계 - 컴파일이 정상적을 완료되면 다음 입력에 대한 결과 작성입력 조건 출력 결과

대상 월 :   3 월기온 데이터 (1~31)3.0 3.4 -2.0 4.0 1.2 -3.5 -5.0-2.0 1.0 3.0 3.5 4.0 5.0 3.35.3 7.9 8.0 9.8 5.0 7.0 6.6 7.7 9.1 9.9 13.5 16.8 12.0 11.110.1 9.0 8.8그래프 표시 기간 시작일 : 6    기간 : 10

                                                                             

                           

대상 월 :   2 월기온 데이터 (1~28)2.0 1.4 2.8 -4.0 -1.2 -5.5 -3.0-1.0 1.0 3.0 4.5 3.0 1.0 6.37.3 8.9 10.0 8.8 8.0 7.0 5.6 4.7 5.1 7.9 8.5 5.8 6.0 7.16.1 7.0 5.8그래프 표시 기간 시작일 : 2    기간 : 10

 

Page 52: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

52최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

실습시간 – 2 교시

사용자 정의 함수 활용

Page 53: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

53최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

사용자 정의 함수 활용 학습개요

사용자 함수 기반 프로그램을 작성한다 . 사용자에 의해 만들어지는 다양한 함수의 형태를 이해한다 . 함수의 전달과정과 순환 함수를 다룬다 .

Page 54: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

54최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

사용자 정의 함수 활용집합 연산자 만들기

문제 정의– C 언어는 산술 , 관계 , 논리 연산자등 다양한 연산자를 제공하고

있지만 집합에 대한 연산은 제공 하지 않는다 . 그러나 수치 집합들에 대한 처리 과정에서 집합 처리 연산이 요구되었다 . 필요한 집합연산은 합집합 (∪), 교집합 (∩), 차집합 ( )− 을 계산해야 한다 . 이러한 연산을 제공하는 프로그램을 작성하여라 .

입 / 출력 조건– 입력 조건

» 1) 정수형의 두 집합의 리스트 » 2) 각각의 집합에 대한 크기와 값들이 입력된다 .

– 출력 조건 » 1) 두 집합에 대한 합집합 (A∪B) » 2) 두 집합에 대한 교집합 (A∩B) » 3) 두 집합에 대한 차집합 (A B) −

Page 55: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

55최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

사용자 정의 함수 활용 관련 함수 및 식

– 1) 입력된 집합의 크기에 의해 동적으로 메모리 공간 확보 (calloc() 함수 이용 )

– 2) 집합 관계를 표현하는 사용자 정의 함수 » 2.1 합집합 unionSet

B의 요소가 A 집합의 요소가 아닐 경우 합집합 요소 이다 . 합집합 = A 의 집합 + A집합에 속하지 않은 B의 요소들

» 2.2 교집합 commSet B요소가 A집합의 요소 이면 합집합의 요소이다 . 합집합 = B요소가 A집합인 요소들

» 2.3 차집합 diffSet A 요소 이면서 B의 집합에 속하지 않는 경우 차집합의 요소이다 . 차집합 = A 요소 중 B의 집합에 속하지 않은 요소들

» 2.4 한 요소가 집합에 속하는지 여부 판별 : isElement

Page 56: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

56최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

사용자 정의 함수 활용 관련 함수 및 식

– 한 요소와 집합의 관계» 한 요소와 집합에서의 첫 번째 요소 비교 부분과 나머지들의 비교 부분» 순환 알고리즘으로 구성

Page 57: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

57최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

사용자 정의 함수 활용 알고리즘 (또는 플로우차트 )

개괄적 알고리즘 흐름– 1. 두 집합 입력

» 1.1 집합 A 의 크기와 값 입력 » 1.2 집합 B의 크기와 값 입력

– 2. 계산 결과 처리와 출력 » 2.1 합집합 계산 » 2.2 합집합 출력 » 2.3 교집합과 차집합은 2.1 과 2.2 순으로 동일하게 출력

Page 58: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

58최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

사용자 정의 함수 활용 구조체차트

Page 59: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

59최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

사용자 정의 함수 활용 프로그램 작성

1 단계– 271페이지의 프로그램을 빈 부분을 포함하여 작성한 후 set.c

파일로 저장하자 .

①. input(first,&fcnt) ②. input(second,&scnt) ③. first,fcnt,second,scnt,&rcnt ④. display(titles[i],result,rcnt) ⑤. isElement(*(second+i),first,fcnt) ⑥. isElement(element,++set, --cnt)

Page 60: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

60최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

사용자 정의 함수 활용 프로그램 작성

2 단계– 정상적으로 컴파일 되면 아래의 값을 입력하여 출력 결과를 기록하자 .

입력 조건 출력 결과

A 집합의 수 : 8 집합 : 4 5 3 8 6 9 13 15B 의 집합의 수 : 7 집합 : 1 2 4 5 7 8 12

A 집합의 수 : 9 집합 : 1 3 5 7 8 6 15 11 6B 의 집합의 수 : 5 집합 : 3 6 9 12 15

 

Page 61: 최신  C 프로그래밍 언어 문제해결에서 프로그래밍까지

61최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지

함수

The End.