June is Combung

함수 기본 예제 본문

C/함수

함수 기본 예제

june__Park 2021. 3. 29. 16:50
#include <stdio.h>
double circle_area(int r);  // 함수 선언 (있어도 되고, 없어도 되는데.. 왠만하면 있는게 좋다) 
// double circle_area(int); // 함수 원형 (원래는 매개변수 이름은 생략하는게 맞음)
int get_arr_max(int[5]);
void greet(char[20], int);
double get_max(double, double);
void print_stars(int);

/*
	인자 : 반지름 1개(정수)
	하는 일 : 원의 넓이 구하기 
	리턴값 : 원의 넓이
*/
double circle_area(int r){
	double area = r * r * 3.14;
	printf("함수 실행! 반지름 : %d \n", r);
	return area;
	// return r * r * 3.14;
	// ** 함수 호출 1회 당, 반환 받을 수 있는 리턴값은 최대 1개
	
	// 매개변수, 함수 내 지역변수는
	//  호출 시 생성되고, 리턴(종료)되면 해제된다. 

	// return : 
	//  돌아가라 ==> 호출된 자리로 
	//  반환하라 ==> 리턴값이 있으면 그 값을
	//  종료하라 ==> 이 함수를 
}
void ex01(){
	/*
		< 함수(function) >
		- 기계!! 
		- 복잡한 작업을 미리 기계로 만들어두고(정의), 이를 필요할 때마다 실행(호출)한다.
		- 단어() <== 함수
			printf(), scanf_s(), .... 
			단, 제어문/sizeof() 제외

		- 함수 호출 (= 기계 실행하기!) 
			형식) 함수명(인자값1, 인자값2)
			     -----------------------
					- 이 자리가 함수의 리턴값(결과값)이 반환되는 자리 
					- 매개변수 형식과 개수에 맞게 인자값(재료)를 넣어야 한다.

		- 함수 정의 (= 기계 만들기!)
			형식)
				리턴자료형 함수명(매개변수1 선언, 매개변수2 선언){
					// 함수의 Body (중괄호 영역)
					return 리턴값;
				}
			- 매개변수 생략가능, 여러 개 선언 가능
			- 리턴값 생략 가능
				return 만 쓰거나, 아예 생략가능 
				리턴값이 없는 함수라면 리턴자료형은 void이다. 
			- 리턴자료형 : 리턴값의 자료형 
	*/
	
	double a, b;
	a = circle_area(10); // 314
	b = circle_area(20); // 1256
	printf("%lf \n", circle_area(100));
	printf("%lf \n", a);
	printf("%lf \n", b);
}

/*
	인자 : 정수 1개
	하는 일 : 정수 만큼 '*' 출력
	리턴값 : X
*/
void print_stars(int cnt){
	for (; cnt > 0; --cnt){
		printf("*");
	}
	printf("\n");
}


/*
	인자 : 실수 2개 
	하는 일 : 둘 중 큰 수를 찾음
	리턴값 : 큰 수 
*/
double get_max(double a, double b){
	return a > b ? a : b;
}

/*
	인자 : 이름, 나이
	하는 일 : 
		성인 => XX님 안녕하세요~ 을 출력
		미성년 => XX(아)야, 안녕? 을 출력
	리턴값 : X
*/
void greet(char name[20], int age){
	if (age >= 20){
		printf("%s님, 안녕하세요? \n", name);
		return;
	}
	printf("%s(아)야, 안녕? \n", name);
}
void quiz01(){
	print_stars(5); // *****

	double a = 10;
	double b = 20;
	double c = get_max(a, b);
	printf("%lf \n", c); // 20

	greet("홍길동", 20); 
	greet("고길동", 15); 
}


/*
	get_arr_max() 
	인자값 : 정수형 5칸 1개
	리턴값 : 해당 배열 중 가장 큰 수 
*/
int get_arr_max(int arr[5]){
	int i;
	int max = arr[0];
	for (i = 1; i < 5; ++i){
		if (max < arr[i]){
			max = arr[i];
		}
	}
	return max;
}
void quiz02(){
	int a[5] = {10, 4, 25, 45, 20};
	// printf("%d \n", get_arr_max(a));
	int max = get_arr_max(a);
	printf("%d \n", max);
}


int factorial(int n){ // n : 5
	if (n == 1){
		return 1;
	}
	return n * factorial(n-1);
}

void ex02(){
	/*
		< 재귀 호출 (Recursive call) >
		- 함수 내부에서 자기 자신을 호출하는 것 
	*/
	printf("%d \n", factorial(5));
}

void swap(int a, int b){
	int tmp; 
	tmp = a; 
	a = b; 
	b = tmp;
}
void ex03(){
	int a, b;
	printf("정수1:"); scanf_s("%d", &a);  //100
	printf("정수2:"); scanf_s("%d", &b);  //200
	printf("변환 전 a:%d b:%d \n", a, b); //100 200
	swap(a, b);
	printf("변환 후 a:%d b:%d \n", a, b); //200 100
}
void main(void){
	ex03();
}

'C > 함수' 카테고리의 다른 글

문자열 함수  (0) 2021.03.29
함수 이론  (0) 2021.03.29
Comments