함수와 기억 클래스 - 1
C 언어에서 함수의 개념, 표준함수와 사용자 정의 함수, 함수의 선언, 정의, 호출 방법.
학습 목표
- 함수의 개념과 중요성 이해.
- 표준함수와 사용자 정의함수 이해.
- 함수의 선언, 정의, 호출 방법 이해.
- 표준함수에 대한 헤더파일 사용.
프로그램 언어의 제어 구조
- 함수 : 특정한 작업(기능)을 수행하도록 설계된 독립적인 프로그램.
- 표준 함수 : C 언어에서 자체적으로 제공하는 함수.
- 사용자 정의함수 : 사용자가 정의하여 사용하는 함수.
- 함수 원형 : 함수를 프로그램에서 사용하기 위한 함수의 양식.
- 함수 호출 : 사용할 함수를 부르는 것.
- 매개변수 : 호출하는 함수와 호출 당하는 함수에 쓰이는 변수.
함수의 개념
특정한 작업(기능)을 수행하도록 설계된 독립적인 프로그램.
정해진 순서에 따라 실행 됨으로 프로그램의 기능을 수행 함.
C 프로그램은 함수들로 구성
- 전체의 실행 내용을 몇 개의 모듈(module)로 분류.
- 각각의 모듈에 해당하는 내용을 함수로 작성.
- 실행 순서에 따라 그 함수들을 차례로 호출하여 실행.
함수의 특성
- 함수들은 서로를 자유롭게 호출 가능.
- 모든 함수는 서로 독립적.
함수의 장점
- 프로그램의 수정이 쉽다.
- 함수의 재사용으로 코드 중복을 최소화 함.
- 프로그램 기능을 한 눈에 파악할 수 있게 함으로 유지보수가 쉬움.
단위 프로그램을 하나의 함수에 기술 한 경우
void main() {
// 성적 입력 코드
...
// 성적 수정 코드
...
// 성적 처리 코드
...
// 성적 출력 코드
...
}
- 함수의 길이가 커짐.
- 프로그램 가독성이 낮음.
- 수정의 어려움이 있음.
- 일부분만 재호출 불가능.
표준 함수
C 언어에서의 함수
- 표준함수 : C 언어 자체에서 제공하는 함수.
- 사용자 정의함수 : 사용자가 정의하여 사용하는 함수.
표준 함수
- 표준함수의 원형은 헤더파일(*.h)에 정의.
- 표준함수의 실체는 라이브러리 파일에 수록.
- 표준함수를 사용하려면 원형이 선언되어 있는 헤더파일을 #include 해줘야 함.
표준 함수의 원형 예
- prntf(), scanf() 의 원형.
int printf(const char * format, ...); int scanf(const char * format, ...);
- stdio.h(standard input output의 약자)헤더파일에 정의 되어 있음.
- 표준 함수를 사용하려면 #include <stdio.h>를 꼭 해야 함.
- sin(), cos() 의 원형.
double sin(double x); double cos(double x);
- math.h 헤더파일에 정의되어 있음.
- 표준함수를 사용하려면 #include <math.h>
C 언어 표준 함수의 대표적인 예
헤더 파일 | 선언된 함수 | EX |
---|---|---|
stdio.h | 입출력함수 | printf(), scanf(), getchar(), putchar(), ... |
stdio.h | 파일 관련 함수 | fopen(), fclose(), fprintf(), ... |
conio.h | 콘솔 입출력 함수 | putch(), cputs(), cprintf()(), getch(), chetche(), cscanf(), ... |
string.h | 문자열 처리 함수 | strcat(), strcmp(), strcpy(), strlen(), strncat(), strncpy(), ... |
math.h | 수학 함수 | sqrt(), sin(), cos(), tan(), log(), exp(), pow(), abs(), asin(), acos(), atan(), cosh(), ... |
ctype.h | 문자 형태 판별 함수 | isalpha(), isdigit(), islower(), ... |
ctype.h | 문자 변환 함수 | tolower(), toupper() |
stdlib.h | 수치변환 함수 | atoi(), itoa() |
stdlib.h | 난수 관련 함수 | rand(), srand() |
stdlib.h | 정렬/검색 함수 | qsort(), lfind() |
표준함수 사용의 예
#include <stdio.h> // 입출력 함수를 처리하기 위한 헤더파일 (standard input output) #include <math.h> // 수학 함수를 처리하기 위한 헤더파일 #include <stdlib.h> int main() { int a, b, c; int i = -5, j = 2; double x = 12.34; printf("abs( -5 ) = %d\n", abs(i)); // x의 절댓값. a = ceil(x); printf("ceil( 12, 34 ) = %d\n", a); // x 이상의 최소 정숫값. printf("cos( 10 ) = %f\n", cos(10)); printf("exp( 2 ) = %.f\n", exp(j)); // x의 지숫값 b = floor(x); printf("floor( 12.34 ) = %d\n", b); // x 미민의 printf("sqrt( 2 ) = %5f\n", sqrt(j)); c = pow(4, j); printf("pow( 4, 2) = %d\n", c); // pow(x, y) : x의 y제곱 값. return 0; }
#include <stdio.h> #include <string.h> // 문자열 처리 함수를 위한 헤더파일 #include <ctype.h> // 문자형태 판별 함수(isalphat, isdigit)을 위한 헤더 int main() { int i, alp = 0, no = 0, et = 0; char s[20]; printf("\n STRING : "); scanf("%s", s); for (i = 0; i < strlen(s); i++) { if (isalpha(s[i])) alp++; else if (isdigit(s[i])) no++; else et++; } printf("alphabe = %d\n", alp); printf("number = %d\n", no); printf("etc = %d\n", et); printf("totoal = %d\n", strlen(s)); return 0; }
사용자 정의 함수
사용자가 단위 프로그램을 함수로 정의하여 사용.
C 프로그램에서의 함수
- main()함수 안에 표준 함수를 사용하는 형태
- 동일 블럭 내의 프로그램 길이가 길어지면, 전체 프로그램은 복잡해 지고 이해하기가 어려워짐.
- 전체 프로그램을 짧은 단위 프로그램으로 나누어 정의함으로 프로그램의 작성과 이해를 쉽게 할 필요가 있음.
사용자 정의 함수의 예
#include <stdio.h> int sum(int a, int b); int main() { int x, y, c; printf("\nx : "); scanf("%d", &x); printf("y : "); scanf("%d", &y); c = sum(x, y); printf("\nSUM : %d\n", c); return 0; } int sum(int a, int b) // 사용자 정의함수 { return a + b; }
함수 정의의 구조
반환_자료형 함수명( 자료형 매개변수1, 자료형 매개변수2, ...) // 함수 헤더 { // 함수 시작 // 함수 몸체 } // 함수 끝
int sum(int a, int b) { return a + b; }
함수 헤더.
- 반환 자료형.
- 함수의 결과 값을 호출한 함수에 되돌려 줄 때의 자료형.
- 사용될 수 있는 자료형은 C 언어에서 사용 가능한 모든 자료형.
- 생략 가능하며, 생략할 경우 자료형은 int로 간주.
- 반환 값이 없는 함수인 경우 void 형으로 선언(생략시 int로 처리).
- 함수명
- 변수명을 정하는 규칙과 동일한 방식으로 함수명을 정함.
- 의미 있는 함수명을 정하는 것이 함수를 이해하는 데 도움을 줌.
- 자료형과 매개변수
- 자료형은 매개변수의 자료형을 나타냄.
- 매개변수는 호출 함수와 피호출 함수 사이에 자료를 주고받기 위헤 사용.
- 매개변수는 해당 함수 내에서 변수처럼 사용.
- 매개변수가 여러 개일 경우에는 콤마(,)로 구분.
- 매개변수가 없으면 void 형으로 사용.
함수 몸체
- 함수가 하는 일을 정의하는 부분.
- 중괄호 {}를 이용하여 함수의 시작과 끝을 나타냄.
- C언어의 기본 구조와 동일.
함수의 사용
- 함수를 사용하기 위해서는 함수의 원형 선언, 함수의 호출, 함수의 정의로 구성.
함수의 원형 선언
함수는 변수와 같이 사용되기 전에 미리 선언.
함수의 원형 선언은 일반적으로 main() 이전에 함.
- 컴파일 시, main()을 먼저 컴파일 하기 때문에, main()에서 사용할 함수를 미리 선언해 줘야 함.
원형선언은 함수정의 부분의 헤더부분에 세미콜론(;)만 추가 하면 됨.
- 함수 원형선언은 함수와 관련된 3가지 성질을 선언.
- 함수의 반환형.
- 배개변수의 개수.
- 배개변수의 자료형.
- 함수 원형선언은 함수와 관련된 3가지 성질을 선언.
피호출 함수가 main() 뒤에 선언된 경우 함수의 원형선언이 필요.
#include <stdio.h> int sum(int a, int b); int main() { printf("sum = %d\n", sum(10, 20)); return 0; } int sum(int a, int b) { return (a + b); }
피 호출 함수가 main() 앞에 선언된 경우 원형선언 필요 X.
#include <stdio.h> int sum(int a, int b) { return (a + b); } int main() { printf("sum = %d\n", sum(10, 20)); return 0; }
함수의 호출
- 함수는 일종의 부 프로그램.
- 함수의 호출이 있어야 함.
- 함수 호출의 방법.
- 함수명과 매개변수의 열거.
- 함수 호출과 프로그램 실행순서.
- main() 시작.
- ()를 만나면 함수의 호출이 발생.
- 해당 함수 시작.
- 해당 함수 수행 결과 반환.
- main()의 남은 부분 수행
매개변수
- 실 매개변수
- 함수를 호출하는 함수(호출함수)에 쓰이는 매개변수.
- 형식 매개변수
- 호출 당하는 함수(피 호출함수)에 쓰이는 매개변수.
- 실 매개변수와 형식 매개변수 사이에는 자료형과 변수의 개수가 일치해야 함.
- 자료형이 일치하지 않을 경우 형 변환 발생.
- 변수의 개수가 일치하지 않을 경우 컴파일 에러 발생.
- 예
void main() { fnc1( a, b, c ); // 호출함수로서 a, b, c는 실 매개변수 } void fnc1(int x, float y, double z) { // 피 호출 함수로서 x, y, z는 형식매개변수 }
결과값 반환 return
기능 :
- 함수를 끝내고 제어와 함수 수행 결과를 호출 함수로 넘김.
형식 :
- return (수식);
- return 수식;
사용 예
return 0; -> 상수 0 반환. (정상적인 종료 의미.) return 1; -> 상수 1 반환. return x; -> x 값 반환. return (x + y * z); -> 수식의 결과 값 반환. return ( sum( 10, 20 ) ); -> 다른 함수 호출.
#include <stdio.h> int max(int x, int y); int min(int x, int y); int main() { int i = 10, j = 20; printf("max( %d, %d ) => %d\n", i, j, max(i, j)); printf("min( %d, %d ) => %d\n", i, j, min(i, j)); return 0; } int max(int x, int y) { return (x > y ? x : y); } int min(int x, int y) { if (x > y) return y; else return x; }
함수의 여러 가지 사용 예
#include <stdio.h>
// 함수 원형 선언.
int sum(int, int);
void test();
// main.
int main()
{
int s;
// 단순 호출.
test();
sum(10, 20);
// 함수 결과를 변수에 반환.
s = sum(30, 40);
printf("sum from 30 to 40 = %d\n", s);
// 호출 결과를 직접 사용.
printf("sum from 100 to 200 = %d\n", sum(100, 200));
return 0;
}
void test()
{
printf("FUNCTION EXAMPLE\n");
}
int sum(int a, int b)
{
int i, s = 0;
for (i = a; i <= b; i++)
s = s + i;
return s;
}
728x90
반응형
'Language > C' 카테고리의 다른 글
[C] 배열과 포인터 - 1 (0) | 2020.12.25 |
---|---|
[C] 함수와 기억 클래스 - 2 (0) | 2020.12.25 |
[C] 선택 제어문과 반복 제어문 (0) | 2020.12.20 |
[C] 입출력 함수와 연산자 - 2 (0) | 2020.12.20 |
[C] 입출력 함수와 연산자 - 1 (0) | 2020.12.15 |