680 likes | 1.13k Views
최신 C 프로그래밍 언어 문제해결에서 프로그래밍까지. 개정판. 9 장 : 함수 도서출판 - 인터비젼. 9 장 함수. 학습목표 1. 함수의 정의 및 선언 그리고 함수 프로토타입 ( 원형 ) 에 대해 이해한다 . 2. 함수들 간의 매개변수 전달 방법을 이해한다 . 3. 구조적 프로그래밍 기법에 대해 이해한다 . 4. 순환함수 및 함수포인터에 대해 이해한다 . 5. 메인함수를 보다 자세히 이해한다. 목차. 9 장 함수 예습시간 함수의 기본 개념 이해 구조적 프로그래밍
E N D
최신 C프로그래밍 언어문제해결에서 프로그래밍까지 개정판 9장 : 함수 도서출판 - 인터비젼
9장 함수 • 학습목표 • 1. 함수의 정의 및 선언 그리고 함수 프로토타입(원형)에 대해 이해한다. • 2. 함수들 간의 매개변수 전달 방법을 이해한다. • 3. 구조적 프로그래밍 기법에 대해 이해한다. • 4. 순환함수 및 함수포인터에 대해 이해한다. • 5. 메인함수를 보다 자세히 이해한다.
목차 • 9장 함수 • 예습시간 • 함수의 기본 개념 이해 • 구조적 프로그래밍 • 순환 함수와 함수 포인터 그리고 메인 함수 • 실습시간 • 구조적 프로그래밍 접근 • 사용자 정의 함수 활용 • 연습시간 • 사용자 함수 및 관계 분석
함수의 기본 개념 이해 예습시간 – 1 교시
함수의 기본 개념 이해 • 학습 개요 • 함수의 의미와 구조에 대해 이해한다. • 사용자 정의 함수에 대해 이해한다. • 함수간의 데이터 전달 방법을 이해한다. • 함수의 결과 값 전달 방식에 대해 이해한다.
함수의 기본 개념 이해 • 함수의 기본 개념 • 함수란 • 프로그램의 일부를 그룹화 한 하나의 모듈 • 어떠한 입력에 대한 특정 일을 수행하고 처리 결과를 제공한다. • 블랙박스 구조의 모듈 • 함수의 종류 • 라이브러리 함수 (표준 함수) • 표준으로 미리 정의된 함수로 컴파일러에 의해 제공 • 사용자 정의 함수 • 사용자가 임으로 만들어 사용하는 함수 • 함수 사용의 장점 • 프로그램의 반복적인 내용을 효율적으로 만들고 사용 가능하게 한다. • 함수의 재사용이 용이하다. • 프로그램을 특정 단위로 모듈화함으로써 이해가 용이하다.
함수의 기본 개념 이해 • 사용자 정의 함수의 정의와 사용 • 함수의 형식 • ❶ 결과 반환 데이터형 : 함수 처리 후 결과 반환 데이터 형 • ❷ 함수의 이름 : 사용자 정의 함수 이름 • ❸ 매개변수 리스트 : 호출 시 전달되는 변수 이름 • ❹ 함수 내부 지역 변수 선언 : 함수 내부 변수 • ❺ 함수 실행 문장들 • ❻ return [결과데이터] : 처리 결과 전달 문 [❶ 결과 반환 데이터형] [❷ 함수의 이름]([❸ 매개변수 리스트]){ // ❹ 함수 내부 지역 변수 선언 // ❺ 함수 실행 문장들 ... ❻ return [결과데이터]; }
함수의 기본 개념 이해 • 사용자 정의 함수 작성 예 • 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
함수의 기본 개념 이해 • 함수의 사용 • 함수의 사용은 함수의 이름을 호출하고 매개변수를 전달하는 과정으로 이루어진다. • 함수를 포함한 프로그램 구조 • 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 } • 함수의 원형 • 함수의 원형의 선언은 컴파일러에게 함수의 사용을 알려준다. • 함수의 호출 • 함수의 이름을 이용해 함수를 호출 • 매개변수 존재할 경우 매개 변수 전달 • 함수의 정의 • 함수의 구현 부로 실제 처리 담당
함수의 기본 개념 이해 • 함수의 사용 • 함수의 호출과정과 제어 흐름
함수의 기본 개념 이해 • 함수간의 데이터 전달 방법 • 함수 호출과정에서 매개변수 전달 방법 • 종류 • 값에 의한 전달방식 (Call by Value) • 주소에 의한 전달방식 (Call by Reference) • 매개변수의 분류 • 실 매개변수 • 함수 호출 시 전달되는 실제 데이터 • 함수 호출을 위해 전달되는 매개변수 • 형식 매개변수 • 실제 데이터를 받아들이는 변수 • 함수에 선언된 매개변수
함수의 기본 개념 이해 • 값에 의한 매개변수 전달방식(Call by Value) • 실제 값을 매개변수로 전달 • 값의 복사가 이루어짐 • 전달 예>
함수의 기본 개념 이해 • 값에 의한 매개변수 전달방식(Call by Value) • 실 매개변수와 형식 매개변수는 각기 독립적인 공간을 가진다. • 이들 변수 사이에 값이 복사 되어 전달 • 함수들간의 독립성이 보장되고 함수내의 값의 변화에 영향을 받지 않는다. • 사용 예> 01 #include <stdio.h> 02 int send(int x); // 함수의 원형 03 void main(){ 04int data, result; 05data = 30; 06result = send(data); 07printf("main() : data = %d \n", data); 08 } 09 int send(int data){ 10data = data + 30; 11printf("send() : data = %d \n", data); 12return 0; 13 } 출력 결과 main() : data = ________________ send() : data = ________________ 30 60
함수의 기본 개념 이해 • 주소에 의한 호출 방법(Call by Reference) • 함수에 값이 아닌 값이 저장된 메모리 주소를 전달 • 포인터를 이용한 호출 방법 • 주소의 조작을 통해 호출한 위치의 값이 함수 내부에서 변경될 때 그 값은 영향을 받는다. • 사용 예> 01 #include <stdio.h> 02 void exchange(int *px, int *py); 03 void main(){ 04int x = 10; 05int y = 20; 06exchange(&x,&y); 07printf(" x = %d , y = %d \n"); 08 } 09 void exchange(int *px, int *py){ 10int temp; 11temp = *px; 12*px = *py; 13*py = temp; 14 } 출력 결과 x = ________________ y = ________________ 20 10
함수의 기본 개념 이해 • 주소에 의한 호출 방법(Call by Reference) • 프로그램 분석
함수의 기본 개념 이해 • 매개변수로 배열 전달 • 주소에 의한 매개변수 전달 방법을 취함(Call by Reference) • 함수의 매개변수로 배열의 대표명이 전달될 경우 주소로써 전달된다. • 배열의 대표명은 주소의 역할을 가짐 • 배열을 매개변수를 전달할 경우 두 가지 형태로 그 배열을 받아들일 수 있다. • 포인터 변수를 이용한 배열의 주소 값으로 • 배열형식으로 배열을 받아 들임. 이때 배열의 크기는 전달되지 않는다.
함수의 기본 개념 이해 • 매개변수로 배열 전달 • 사용 예> 13 int min(int *x){ //포인터 변수로 인자 얻음 14int i, result = *x; // 첫번째 값 결과에 15for(i=1;i<10;i++){ 16x++; // 다음 번지로 이동 17if(result > *x){ 18result = *x; 19} 20} 21return result; 22 } 23 int max(int x[]){ //배열 명으로 인자 얻음 24int i, result = x[0]; // 첫번째 값 결과에 25for(i=1;i<10;i++){ 26if(result < x[i]){ 27result = x[i]; 28} 29} 30return result; 31 } 포인터 변수로써 01 #include <stdio.h> 02 // 함수의 원형 03 int min(int *x); 04 int max(int x[]); 05 // 메인 함수 06 void main(){ 07static a[]={11,23,13,54,25,36,47,78,19,20}; 08int mi,ma; 09mi = min(a); // 배열의 대표명으로 인자 전달 10ma = max(a); // 배열의 대표명으로 인자 전달 11printf("mi = %d ma = %d \n",mi,ma); 12} 배열 명으로써
함수의 기본 개념 이해 • 함수의 결과 값 전달 • 함수의 처리 결과는 return문을 통해 전달 • 함수 처리 과정 중 return 문을 만나면 함수의 호출위치로 제어가 이동됨 • return 문 사용형태 • return; //아무 값도 전달하지 않고 함수 호출 위치로 제어 이동 • return value; // value에 포함된 값을 전달한다. • return 0; // 0 값을 전달한다. • return 문의 전달 값은 함수 선언 시 정의된 함수의 리턴 타입과 동일해야 한다. • 예> • 리턴 타입이 void일 경우 return문 생략 가능 double getAve(int value, int count){ double result; ... return result;
함수의 기본 개념 이해 • 사용자 정의 함수의 분류 • 함수의 결과 유형과 매개변수 전달 방법에 따른 분류
구조적 프로그래밍 예습시간 – 2 교시
구조적 프로그래밍 • 학습 개요 • 함수 기반의 구조적 프로그래밍에 대해 알아본다. • 구조적 프로그래밍 설계 기법에 대해 다룬다. • 하향식 설계 기법을 이해한다.
구조적 프로그래밍 • 프로그래밍 설계 기법 • 현실적으로 프로그램은 매우 크고 복잡한 구조를 가진다. • 어떻게 프로그램을 분석하고 설계할 것인가? • 분할 정복 방식 (Divide and Conquer) • 큰 문제를 여러 개의 작은 단위로 분리하고 그 작은 단위의 문제부터 해결해 나가는 방식 • 하향식 설계 원리 • 해결 가능한 최소의 단위를 함수를 통해 구성한다. • 구조체 차트(Structure Chart) 활용 • 한 문제와 다른 문제 사이의 관계를 효율적으로 분석 • 알고리즘 및 플로우차트 • 각 단위의 문제에 대한 흐름 파악
구조적 프로그래밍 • 하향식 접근 방식을 통한 프로그램 설계 흐름 • 1) 문제의 이해 • 2) 알고리즘 작성 • 3) 보다 작은 단위의 문제로 분할 • 4) 작은 부 문제를 이용해 구조체 차트 작성 • 5) 각 요소 중 보다 상세한 기술이 요구되는 부분을 위해 흐름도(플로우차트)작성 • 6) 분할된 요소를 중심으로 프로그램 작성 • 7) 테스트
구조적 프로그래밍 • 하향식 접근 방식을 통한 프로그램 설계 흐름 예 • 문제 정의 • 산술처리를 담당하는 프로그램을 작성해야 한다고 가정해 보자. 이 프로그램은 사용자의 입력에 의해 사칙 연산을 수행하고 이 입력 결과를 화면에 출력한다. • 알고리즘 작성 • 프로그램 작성 과정을 문장을 통해 간략히 기술한다. • 알고리즘 • 1. 데이터 입력 • 1.1 데이터 값을 입력 받는다. • 1.2 연산형태를 입력 받는다. • 2. 계산 처리 • 2.1 + 연산자 : 덧셈 처리 • 2.2 - 연산자 : 뺄셈 처리 • 2.3 * 연산자 : 곱셉 처리 • 2.4 / 연산자 : 나눗셈 처리 • 3. 계산 결과 출력
구조적 프로그래밍 • 작은 단위의 문제 분할 • 분할 정책 • 부 문제로 분류할 부분을 찾아 함수로 분할 • 분할된 문제가 더 작은 단위로 분할 가능한지를 분석 • 부 문제는 그 분할된 의미가 분명해야 하며 다른 곳에서 사용 가능한지 여부를 고려하여 구분한다. • 이 프로그램은 사칙 연산에 대한 부분을 작은 단위로 분리하고 함수로 정의 한다. • 덧셈 처리 : int add(int x, int y) • 뺄셈 처리 : int sub(int x, int y) • 곱셈 처리 : int mul(int x, int y) • 나눗셈 처리 : double div(int x, int y)
구조적 프로그래밍 • 부문제를 포함하여 구조체 차트 작성 • 해설 • 구조체 차트는 레벨을 가지고 있으며 최상위 문제에서 분할된 부 문제와 다시 그 부 문제에서 분할된 부 문제로 나누어져 구성됨
구조적 프로그래밍 • 요소 중 상세한 기술이 요구되는 부분에 대한 흐름도 작성 • 해설 • 흐름도(플로우차트)는 하나의 구성요소에서의 제어 흐름을 세부적으로 보여줄 수 있다. • 제어 흐름이 많거나 중요한 부분을 대상으로 흐름도를 작성한다. • 이 프로그램에서는 [0.산술처리]가 다양한 요소를 포함하고 있기 때문에 이 부분에 대한 흐름도를 작성한다.
구조적 프로그래밍 • 프로그램 코드 작성 • 프로그램 분석 완료 후 이들 알고리즘,구조체차트 그리고 흐름도를 이용해 코드로 작성한다. • 프로그램 코드 248페이지 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); 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);
구조적 프로그래밍 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 }
순환 함수와 함수 포인터 그리고 메인 함수 예습시간 – 3 교시
순환 함수와 함수 포인터 그리고 메인 함수 • 학습 개요 • 순환(재귀)함수에 대해 이해한다. • 함수 주소를 이용한 함수 포인터에 대해 다룬다. • 메인 함수를 보다 자세히 이해한다.
순환 함수와 함수 포인터 그리고 메인 함수 • 순환(재귀)함수 • 자기 자신을 호출 하는 함수 • 재귀적으로 서로 상이한 매개변수 값을 가지고 자기 자신을 호출하는 구조 • 반복 처리의 대안으로 널리 이용됨 • 반복 구조에 비해 처리 면에서 다소 느리지만 복잡한 구조를 간결하게 구성할 수 있게 한다. • 순환 함수의 구성 • 자기자신과 나머지의 집합 • 종결조건
순환 함수와 함수 포인터 그리고 메인 함수 • 순환(재귀)함수 프로그램 예 • N! 계산 프로그램 • N과 나머지의 곱으로 해석 • 그 나머지는 다시 N과 나머지의 곱으로 구성 • 종결조건 : N == 0 또는 N = 1 일 경우 1값
순환 함수와 함수 포인터 그리고 메인 함수 • 순환(재귀)함수 프로그램 예 • N! 프로그램 (반복과 순환함수 비교) 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 } 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}
순환 함수와 함수 포인터 그리고 메인 함수 • 순환(재귀)함수 프로그램 예 • 순환 함수 호출 흐름
순환 함수와 함수 포인터 그리고 메인 함수 • 함수 포인터 • 함수 역시 특정 주소에 저장되어진다. • 그 결과 함수 주소에 대한 포인터 연산이 가능 • 함수 포인터 선언과 할당 • 선언 방법 • [데이터 형] (*[포인터명])([매개변수리스트]) • [데이터 형] 함수의 리턴 타입 형 • (*[포인터명]) : 함수의 주소를 저장할 함수 포인터 이름 • [매개변수리스트] : 함수에 전달되는 매개변수 리스트
순환 함수와 함수 포인터 그리고 메인 함수 • 함수 포인터 사용 예 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 } 함수 포인터 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 }
순환 함수와 함수 포인터 그리고 메인 함수 • 함수 포인터 배열 • 함수 포인터 역시 배열로 관리 될 수 있다. • 함수 포인터 배열 선언 • [데이터형](*[포인터명][배열의크기])([매개변수리스트]) • [데이터 형] 함수의 리턴 타입 형 • *[포인터명] : 함수의 주소를 저장할 함수 포인터 이름 • [배열의 크기] : 함수 포인터 배열의 크기 • [매개변수리스트] : 함수에 전달되는 매개변수 리스트 • 동일 유형의 함수 구조를 그룹화하여 관리 가능 • 사용 예 : • int (*pfuns[2])(int *); • 포인터 배열 활용예 – 페이지 256
순환 함수와 함수 포인터 그리고 메인 함수 • 메인 함수(main)의 확장 • 메인 함수의 원형 • [반환 데이터형] main([매개변수 리스트]); • [반환 데이터형] : 정수형 이나 void 형 사용 • main함수의 실행이 정상적인지 아닌지를 판단하기 위해 사용 • 함수의 정상종료 시 : 0 • 비정상 종료 시 : 1 • [매개변수 리스트] • 명령라인에서 입력된 값을 얻기 위해 사용 • 두 개의 인자 존재 • 1. 명령 라인에 입력된 인자의 수 (정수형) • 2. 명령 라인에 입력된 실제 데이터 배열 공간 (문자열 포인터 배열 변수)
순환 함수와 함수 포인터 그리고 메인 함수 • 메인 함수(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[] : 입력된 인자의 문자열 배열
순환 함수와 함수 포인터 그리고 메인 함수 • 메인 함수(main)의 확장 • 사용 예: 명령 라인에서 다음과 같이 입력 후 두 인자의 결과 • C:> maintest.exe Hi 2030 world ꎠ • maintest.exe는 프로그램의 이름 • argc와 *argv[]의 저장 값
구조적 프로그래밍 접근 실습시간 – 1 교시
구조적 프로그래밍 접근 • 학습개요 • 구조적 프로그래밍 방법에 의한 프로그램 분석방법을 학습 • 함수와 이들간의 관계 그리고 프로그래밍 절차를 알아본다.
구조적 프로그래밍 접근 • 월간 기온 변화에 대한 보고서 • 문제 정의 • 기상 관측소에서 월간 기온 자료를 통해 그 달의 기온 변화에 대한 보고서를 만들려고 한다. 특정 월에 대한 입력을 통해 그 달의 기온 값을 입력하고 그 기간 동안의 가장 더운 날과 가장 추운 날 그리고 한달 평균 온도를 계산하여 출력한다. 또한 특정 기간에 대한 온도 변화 그래프를 출력할 수 있게 한다. • 입/출력 조건 • 입력 조건 • 1) 입력을 원하는 달 (1월 12월) : 정수형(int) • 2) 해당 월에 대한 기온 리스트 : 실수형(double) • 3) 그래프 출력을 위한 시작일(int)와 기간(int) • 출력 조건 • 1) 그 달의 가장 더운 날 • 2) 그 달의 가장 추운 날 • 3) 그 달의 평균 기온 • 4) 그 달의 특정 기간에 대한 기온 그래프
구조적 프로그래밍 접근 • 입/출력 예 • 먼저 입력할 원을 1월에서 12월 사이 값으로 입력 • 해당 월에 대한 기온 입력 (-10~40도 사이의 값) • 개괄적인 기온 결과 출력 후 그래프 출력 기간 입력을 통해 해당 기간의 그래프 출력
구조적 프로그래밍 접근 • 관련 함수 및 식 • 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도 사이의 값으로 입력한다.
구조적 프로그래밍 접근 • 알고리즘 (또는 플로우차트) • 1단계 : 개괄적 알고리즘 • 1. 데이터 입력 • 1.1 월을 입력한다. • 1.2 월의 값에 대한 데이터 공간 크기를 얻어온다. • 1.3 데이터 공간을 할당하고 값을 입력 받는다. • 2. 데이터 처리 • 2.1 월 최고 기온을 기록한 날짜를 계산한다. • 2.2 월 최저 기온을 기록한 날짜를 계산한다. • 2.3 월 평균 기온을 계산한다. • 3. 요약 정보 출력 • 3.1 월 요약 정보를 출력한다. (최고, 최저, 평균) • 4. 그래프 출력 • 4.1 그래프 출력을 원하는 시작일 과 기간을 입력한다. • 4.2 해당기간에 대한 그래프 출력
구조적 프로그래밍 접근 • 알고리즘 (또는 플로우차트) • 2단계 : 구조체차트(Structure Chart) 작성
구조적 프로그래밍 접근 • 3단계 : 플로우차트 4.2 그래프 출력 함수 1.3 기온 입력 함수
구조적 프로그래밍 접근 • 프로그램 작성 • 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)