2022. 3. 7. 20:39ㆍC
함수란?
특정 작업을 수행하는 명령어들의 모음에 이름을 붙인 것
왜 함수를 쓰는가?
for(int i = 0; i < 30; i++){
printf("*");
}
for(int i = 0; i < 30; i++){
printf("*");
}
위와 같이 비슷하거나 똑같은 코드가 있다. 이것들이 main함수에 있으면 조잡하고 코드를 읽기 복잡할 것이다.
함수를 이용하면
void print_stars(){
for(int i = 0; i < 30; i++){
printf("*\n");
}
}
int main(void) {
print_stars();
print_stars();
}
훨씬 코드가 깔끔해지며 읽기 쉬워진다.
단순히 그 이유 때문에만 쓰는 것은 아니다.
함수는 한번 만들어지면 다른 프로그램에서도 재사용될 수 있으며 유지관리도 쉬워진다.
함수는 컴파일러에서 미리 작성하여서 제공되기도 하고 우리가 직접 작성할 수 있다.
컴파일러에서 지원되는 함수들을 라이브러리 함수라고 칭한다. 예를 들면 printf(), scanf() 등등.. 우리가 익숙히 써왔던 것들이 모두 라이브러리 함수이다.
int main() { //이 부분을 함수 헤더라고 칭한다.
//이 부분을 함수 몸체라고 칭하며 작업에 필요한 문장들이 들어가는 곳이다.
}
int = 반환 형식 main = 함수 이름 () = 매개변수
1. 반환 형식 : 우리가 사용하는 함수는 값을 넣으면, 내부 계산 후 결과를 출력 해주는데 그 결과값의 형식
int형인 경우 int형 결과 값을, double형인 경우 double형 결과값을 반환 해준다.
단 아무것도 반환 하지 않을 때는 void를 사용한다.
2. 함수 이름 : 변수처럼 함수도 이름 필요
3.매개 변수(인자) : 함수에 입력하는 값(서식지정자나 변수 값 등)
예시
void printNum(int a){
printf("%d", a);
}
int main() {
printNum(6);
}
출력 결과
6
*return : 함수가 끝나고 돌려줄 값을 정해주는 역할
시간을 계산하는 예제이다.
int hour;
int minute;
int minuteAdd;
void counter(){
minute += minuteAdd;
hour += minute / 60;
minute %= 60;
hour %= 24;
}
int main() {
printf("시를 입력하세요 : ");
scanf("%d", &hour);
printf("분을 입력하세요 : ");
scanf("%d", &minute);
printf("더할 분을 입력하세요 : ");
scanf("%d", &minuteAdd);
counter();
printf("더해진 시간은 %d시 %d분 입니다.\n", hour, minute);
}
출력 결과
시를 입력하세요 : 6
분을 입력하세요 : 55
더할 분을 입력하세요 : 5
더해진 시간은 7시 0분 입니다.
counter함수를 통해 main함수가 훨씬 깔끔해져 가독성이 좋다.
또한 필요할때마다 몇번이나 다시 호출하여 재사용이 가능하기 때문에 정말 효율적이라고 생각한다.
C언어는 절차지향적 언어이기에 위에서 아래로 코드를 읽어 내려간다.
int main() {
int a = 10;
int b = 20;
int result = getSum(a,b);
printf("%d\n", result);
return 0;
}
int getSum(int n1, int n2) {
return n1 + n2;
}
이 코드는 실행 되지 않을 것이다.
왜냐하면 4번째 줄에서 getSum에 대한 정보가 없기 때문이다. 이를 해결하기 위해서
int getSum(int n1, int n2);
int main() {
int a = 10;
int b = 20;
int result = getSum(a,b);
printf("%d\n", result);
return 0;
}
int getSum(int n1, int n2) {
return n1 + n2;
}
이렇게 메인함수 윗줄에 "이 아래 구문에 함수 정의가 존재한다"고 미리 알려준다.
= 함수의 원형을 제공한다.
//특정한 금액을 받아서 가장 적은 거스름돈 화폐의 개수를 구하는 함수
int smallest(int number){
int count = 0;
while(number >= 50000){
number -= 50000;
count++;
}
while(number >= 10000){
number -= 10000;
count++;
}
while(number >= 5000){
number -= 5000;
count++;
}
while(number >= 1000){
number -= 1000;
count++;
}
while(number >= 500){
number -= 500;
count++;
}
while(number >= 100){
number -= 100;
count++;
}
while(number >= 50){
number -= 50;
count++;
}
while(number >= 10){
number -= 10;
count++;
}
return count;
}
int main() {
int number;
printf("금액을 입력하세요 : ");
scanf("%d",&number);
printf("최소로 줄 수 있는 화폐의 개수는 %d입니다.", smallest(number));
return 0;
}
출력 결과
금액을 입력하세요 : 3700
최소로 줄 수 있는 화폐의 개수는 6입니다.
6개인 이유는 1천원짜리 3개 500원 1개 100원 2개로 총 6개의 화폐가 사용이 된 것이다.
//1월 1일부터 현재 날짜까지의 날짜 차이를 구하기
int getDays(int month, int day){
int i, sum = 0;
for (int i = 1; i < month; i++) {
if(i == 2){
sum += 28;
}
else if(i % 2 == 0){
sum += 30;
}
else{
sum += 31;
}
}
return sum + day;
}
int main() {
int month, day, i;
scanf("%d %d", &month, &day);
printf("1월 1일부터 해당 날짜 %d월 %d일의 날짜 차이는 %d일 입니다.", month, day ,getDays(month, day));
}
출력 결과
3
1
1월 1일부터 해당 날짜 3월 1일의 날짜 차이는 60일 입니다.
역시 함수를 이용하니 main함수가 깔끔한 것 같다.
간단한 숫자 피라미드 예제
int print(int a){
int i, j;
for (int i = 0; i < a; i++) {
for (int j = 0; j <= i; j++) {
printf("%d", j+1);
}
printf("\n");
}
}
int main() {
int a;
printf("숫자 입력 : ");
scanf("%d", &a);
print(a);
return 0;
}
출력 결과
숫자 입력 : 6
1
12
123
1234
12345
123456
내용 정리
함수의 원형은 main함수 위에 선언할것
void형을 제외한 반환형식을 가진 함수는 return이 필요하다
매개변수는 단지 값만 전달한다
'C' 카테고리의 다른 글
C - 자동변수와 정적변수 (0) | 2022.03.08 |
---|---|
C - 재귀함수 (0) | 2022.03.07 |
C - 포인터와 배열 (0) | 2022.03.07 |
간단한 제어문 예제 (0) | 2022.03.07 |
C - 전처리기 (0) | 2022.03.07 |