1. 함수
함수란 특정한 작업을 수행하도록 설계된 독립적인 프로그램을 의미합니다. C에서는 이러한 함수들이 정해진 순서에 따라 실행됨으로써 프로그램의 기능을 수행합니다.
C 프로그램은 이러한 함수들로 구성되어있습니다.
즉 전체의 실행내용을 몇개의 모듈로 분류하여 각각의 모듈에 해당하는 내용을 함수로 작성하며 실행순서에 따라 그 함수들을 차례로 호출하여 실행됩니다.
이러한 함수의 특성으로는 서로를 자유롭게 호출가능하며 모든 함수는 서로 독립적입니다.
함수의 장점으로는 프로그램의 수정이 용이하고, 함수는 재사용이 가능하기때문에 코드 중복을 최소화 할 수 있고, 프로그램의 기능을 한눈에 파악할 수 있게 해줌으로써 유지관리가 쉽다는 것입니다.
단위 프로그램을 하나의 실행 함수에 기술한 경우 실행 함수의 길이가 커지고, 프로그램의 가독성이 안좋아지며, 수정이 어렵고 일부분만 호출할 수 없다는 문제가 발생합니다.
따라서 이러한 문제를 해결하기 위해 기능별로 독립된 단위로 프로그램을 구성해야 효율화할 수 있습니다.
즉, 독립된 함수를 여러개 만들어 실행함수 안에 만든다는 것입니다.
C언어에서의 함수는 표준 함수와 사용자 정의 함수가 있습니다.
1) 표준 함수
C언어 자체에서 제공하는 함수입니다.
표준함수의 원형은 헤더파일에 정의되어 있고, 표준함수의 실체는 라이브러리 파일에 수록되어있습니다.
이러한 표준함수를 사용하기 위해서는 원형이 선언되어 있는 헤더파일을 #include 시켜주어야합니다.
예컨대 입출력 함수인 printf() 와 scanf()함수의 원형은 stdio.h 헤더파일에 정의되어 있으므로 이 함수를 사용하려면 아래코드를 include해야합니다.
#include <stdio.h>
또한 sin(),cos()같은 삼각함수의 원형은 math.h 헤더파일에 정의되어있으므로 이 함수들을 사용하려면 아래처럼 헤더파일을 include 해야합니다.
#include <math.h>
헤더파일 | 표준 함수 | 사용 함수 |
stdio.h | 입출력 함수 | printf(),scanf(),getchar(),putchar(),.. |
파일관련 함수 | fopen(),fclose(),fprintf(),.. | |
conio.h | 콘솔 입출력 함수 | putch(),cputs(),cprintf(),getch(),getche(),cscanf(),… |
string.h | 문자열 처리 함수 | strcat(),strcmp(),strcpy(),strlen(),strncat(),strncpy(),.. |
math.h | 수학 함수 | sqrt(),sin(),cos(),tan(),log(),exp(),pow(),abs(),asin(),acos(),… |
ctype.h | 문자형태 판별 함수 | isalpha(),isdigit(),islower(),.. |
문자변환 함수 | tolower(),toupper() | |
stdlib.h | 수치변환 함수 | atoi(),itoa() |
난수관련 함수 | rand(), srand() | |
정렬, 검색 함수 | qsort(),lfind() |
사용예제1)
#include <math.h>
#include <stdio.h>
void main() {
double x = 12.34;
int i =-5, j =2;
int a,b,c;
a = ceil(x);
b = floor(x);
c = pow(4,j);
printf("abs(-5) = %d\n", abs(i)); // abs(-5) = 5
printf("ceil(12.34) = %d\n", a); // ceil(12.34) = 13
printf("cos(10) = %f\n", cos(10)); //cos(10) = -0.839072
printf("exp(2) = %f\n", exp(i)); // exp(2) = 0.006738
printf("floor(12.34) = %d\n",b); // floor(12.34) = 12
printf("sqrt(2) = %5f\n", sqrt(j));// sqrt(2) = 1.414214
printf("pow(4,2) = %d\n",c); // pow(4,2) = 16
}
사용예제2)
#include <math.h>
#include <stdio.h>
#include <ctype.h>
void main() {
int i, alp = 0, no =0, et = 0;
char s[20];
printf("문자");
scanf("%s",s);
for(i=0;i<strlen(s);i++){
if(isalpha(s[i])) //영문자 여부를 구하는 함수
alp++;
else if(isdigit(s[i])) // 숫자 여부를 구하는 함수
no++;
else
et++;
}
//입력값: 테스트1234abcd
printf("알파벳 = %d\n",alp); //알파벳 = 4
printf("숫자 = %d\n",no); // 숫자 = 4
printf("기타 = %d\n",et); // 기타 =9(한글은 기타로 인식)
}
2) 사용자 정의 함수
사용자가 단위 프로그램을 함수로 정의해서 사용하는 것이 사용자 정의함수입니다.
예제)
#include <stdio.h>
int sum(int a, int b); //함수의 원형 선언
void main() {
int result;
result = sum(10,20); // 함수 호출 // 10,20은 실매개변수
printf("result=%d\n",result); // result=30
printf("result2 = %d\n",sum(20,30)); //result2 = 50
}
// 함수 정의
int sum(int a, int b){ // a=10, b=20 는 형식매개변수 // 반환자료형 중 int는 생략 가능-> 즉 sum(int a, int b){} 도 가능
int s;
s=a+b; //s =30
return s;
}
C언어는 절차지향언어이기때문에 순서대로 실행이 됩니다. 따라서 main함수 아래에 함수를 정의한다면 원형선언을 해줘야 합니다. 그러나 함수를 main함수 위에서 정의를 한다면 함수의 원형선언이 꼭 필요한 것은 아닙니다.
3) return 문
return문은 함수를 정의할때 void타입을 제외한 모든 타입, 즉 반환타입이 있는 경우 결과를 호출함수로 넘기는데 사용하는 문법입니다.
위 예제에서 sum이라는 함수는 반환형 int를 가지기 때문에 return값도 int형이어야 합니다.
return문에는 수식을 반환할 수도 있고 값을 반환할 수도 있습니다. 아래형식으로 사용가능합니다.
return 0; // 상수 0을 반환 -> 정상적인 종료를 의미
return 1; //상수 1을 반환
return x; //x값을 반환
return (x+y*z) // 수식의 결과값을 반환
return (sum(10,20)) // 함수를 호출하여 결과값을 반환
'C Programming > C' 카테고리의 다른 글
[C] 배열 (1) | 2024.05.02 |
---|---|
[C] 기억 클래스 (1) | 2024.04.26 |
[C] goto문 (0) | 2024.04.26 |
[C] 연산자 (1) | 2024.04.26 |
[C] 표준 입출력 함수 (0) | 2024.04.26 |