함수의 개념 및 표준 함수
함수의 개념
수학에서의 함수
- 두 집합 X, Y에서 집합 X의 각 원소가 집합 Y의 원소에 반드시 하나씩 대응할 때, 이 대응을 집합 X에서 집합 Y로의 함수라 함
Program에서 함수
-
특정한 작업을 수행하는 기본 단위
-
program 작성 시 반복되는 명령의 그룹을 함수로 정의해 놓은 후 필요할 때 호출하여 사용
함수의 유용성
-
일을 나누어서 해결함 (Divide and Conquer)
-
기존에 main() 함수에서 모두 처리하던 일을 여러 부분으로 나누어서 각각 독립된 함수로 작성
- program의 구조화 및 module화
-
같은 code를 반복적으로 작성할 필요 없음
-
-
가독성 및 재사용성이 높아짐
-
code를 작고 독립된 기능 단위로 작성
- program이 한눈에 들어옴
-
이미 만들어진 함수를 다른 program 작성 시 다시 사용할 수 있음
- printf(), scanf()..
-
-
Code의 안정성 및 error 수정의 용이성
-
함수 단위로 code를 검증함으로써 전체적으로 완성도 높은 program을 작성할 수 있음
-
해당 부분에 대한 error 발생 시 한정된 범위에서 error 수정 가능
-
함수의 prototype 선언
- 함수를 사용하기 전에 반드시 함수가 구현되어 있거나, 함수의 prototype이 선언되어 있어야 함
반환값의 자료형 함수이름 (인수형, 인수이름, ...);
int add (int a, int b)
int add (int a, int b) {
// JS처럼 return이 되면 함수 종료
return a+b;
}
반환 값과 인자의 자료 유형
-
기본 자료 형과 사용자가 정의한 자료 형 등 모든 자료 형을 반환 값이나 인자의 자료 형으로 사용 가능
- char, short, int, long, float, double, char[], short[], …
-
C 언어에서 반환 값을 생략하는 것은 반환 값이 int 형임을 의미
- func();는 int func()와 같은 의미
-
반환 값을 생략하면 code의 가독성을 떨어뜨리므로 반환 값을 반드시 기술하는 것이 좋음
함수의 반환 값
void type
-
비어 있다는 의미의 type keyword로, 반환 값이 없는 경우 사용
-
인자가 하나도 없는 경우에 인자 목록에 void 사용 가능
- int func1(void);는 int func1();와 같은 의미
표준 함수
-
일반적으로 많이 사용하게 될 함수를 미리 만들어서 개발자들이 편리하게 사용하도록 한 것
-
표준 library 함수라고도 함
-
System 함수인 경우 함수의 prototype이 각각 다른 header file에 선언됨
-
함수 printf()의 prototype은 header file stdio.h에 선언되어 있음
-
함수의 구현된 내용은 library 또는 DLL과 같은 다른 file에 보관되어 있음
-
따라서 printf() 함수를 다시 구현하는 대신
#include<stdio.h>
를 source code에 삽입하면 printf()를 사용할 수 있음
-
-
C 언어에서는 다음과 같이 기능에 따라 다양한 header file을 제공
header file | 기능 |
---|---|
stdio.h | 표준 입출력 - printf(), scanf() 등 |
math.h | 수학 관련 - sqrt(), pow(), abs() 등 |
string.h | 문자열 관련 - strcmp(), strlen() 등 |
time.h | 시간 관련 - time() 등 |
ctype.h | 문자 관련 - isupper(), islower() 등 |
stdlib.h | 여러 utility - atoi(), exit() 등 |
입출력 함수
-
표준 입출력 함수
-
입출력 기능과 관련된 표준 library 함수는 header file stdio.h에 그 함수의 prototype이 정의
-
대표적인 함수
-
printf()
- 문자열과 출력할 자료를 인수로 받아 이를 문자열에 정의된 형식으로 표준 출력 장치에 출력
- format 문자열에서 출력할 값과 형과 출력 형식을 정하고 이에 필요한 값을
나머지 인수들에서 얻어 주어진 형식대로 출력 - 반환 값은 출력한 문자 수를 의미하고, 오류가 발생하면 이 값은 음수가 됨
- print formatted output의 약자
#include<stdio.h> // prototype 선언 void main() { float phi = 3.141592594; printf("%5.3f₩n", phi); // 호출 }
-
scanf()
- 문자열과 입력할 자료를 인수로 받아 이를 문자열에 정의된 형식으로 표준 입력 장치로부터 입력
- format 문자열에서 정의한 형식에 맞게 변수를 입력
- 이 때 변수는 반드시 주소 값을 주어야 함
- 반환 값은 성공적으로 입력한 변수의 개수를 의미하고, 오류가 발생하면 이 값은 EOF가 됨
- scan formatted input의 약자
#include<stdio.h> // prototype 선언 void main() { float val; scanf("%f", &val); // 호출 printf("%4.2f", val); }
-
puts()
- 인수로 들어온 문자열을 표준 입력 장치에서 한 줄에 출력
- 출력이 정상적으로 이루어지면 음수가 아닌 값을 반환하고, 오류가 발생하면 EOF 값을 반환
- put string의 약자
int puts(char *);
#include<stdio.h> // prototype 선언 void main() { char str1[] = "let's"; char str2[] = "go."; puts(str1); // 호출 puts(str2); // 호출 }
-
gets()
- 표준 입력 장치로부터 하나의 line을 입력하여 인수로 들어온 문자열에 저장
- 입력이 정상적으로 이루어지면 인수인 문자열을 반환하고, 오류가 발생하면 NULL 값을 반환
- get string의 약자
#include<stdio.h> // prototype 선언 void main() { char str[80]; gets(str); // 호출 printf("%s₩n", str); }
-
-
-
형식 지정자
- printf()와 scanf() 함수에서 입출력 할 자료의 형식을 지정
형식 지정자 자료의 형식 %c
단일 문자 %d
십진수 %e
과학 표기법으로 표시할 실수 %f
실수 %g
%e와 %f 중 더 짧은 것으로 표현 %s
문자열 %x
16진수 정수 -
형식 지정자와 자릿수
- printf()함수에서 출력할 자료의 자릿수를 지정하기 위해 사용
출력할 내용의 총 길이를 지정 "%5d" => " 314" - 총 5가지에 표시 - 이 경우 출력할 숫자가 3자리 10진수이므로 앞에 2자리는 blank로 채움 출력할 내용 중 소수점 이하 숫자의 개수를 지정 "%5.2f" => "3.14" - 소수점을 포함하여 총 5자리에 출력하되, 소수점 이하는 2자리만 표시
문자열 함수
-
대표적인 함수
-
strcmp()
- 두 문자열을 비교한 결과를 반환
- str1, str2를 인수로 받아, 사전 순서로 비교해서
str1이 앞에 오면 음수를, 반대면 양수를, 같으면 0을 반환 - string compare의 약자
#include<string.h> // 선언 #include<stdio.h> void main() { char str[10] = "happy"; printf("%d₩n", strcmp(str, "hope")); // 호출, 결과 : (hope...0) }
-
strlen()
- 인수로 받은 문자열에서 NULL 문자를 제외한 문자열의 길이를 반환
- 한 개의 문자열을 인수로 받고, 문자열의 길이를 계산하여 반환
- string length의 약자
#include<string.h> // prototype 선언 #include<stdio.h> void main(0 { char str[10] = "happy"; printf("%s...$d", str, strlen(str)); // 호출, 결과 : (happy...5) })
-
strcpy()
- 두 개의 문자열을 인수로 받아 앞 문자열에 뒤 문자열을 복사
- str1, str2를 인수로 받고, str2를 str1에 복사
- string copy의 약자
#include<string.h> // 선언 #include<stdio.h> void main() { char str[10] = "happy"; strcpy(str, "hope"); // 호출 printf("%s", str); }
-
strcat()
- 두 개의 문자열을 인수로 받아 앞 문자열에 뒤 문자열을 연결
- str1, str2를 인수를 받고, str2를 str1의 끝에 이어짐
- string concatenation의 약자
#include <string.h> // 선언 #include <stdio.h> void main() { char str[10] = "happy"; strcar(str, "hope"); // 호출 printf("%s", str); }
-
Utility 함수
-
Utility library 함수는 header fiel stdlib.h에 그 함수의 prototype이 선언
-
대표적인 함수
-
atoi()
- 문자열을 인수로 받아 숫자로 읽어 정수로 반환
- 문자열 str을 인수로 받고, str 안에서 숫자를 읽어 정수로 반환
- ascii to integer의 약자
#include<stdlib.h> // 선언 #include<stdio.h> void main() { int num; char str[10]; gets(str); num = atoi(str); // 호출 printf("%d", num * 2); // 40 }
-
atof()
- 문자열을 인수로 받아 숫자로 읽어 실수로 반환
-
exit()
- 인수로 상태를 나타내는 정수로 받고 program을 종료
- program 실행 중 예외적인 상황이 발생해서 더 이상 정상적인 실행이 불가능할 때
실행을 중단시키기 위해 사용됨 - 인수는 상태를 표시하는 정수
#include<stdlib.h> #include<stdio.h> void main() { ... if (failure) { printf("Error occurs, Program terminated.₩n"); exit(1); // 호출 // Error occurs, Program terminated. } }
-