June is Combung
함수 기본 예제 본문
#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();
}
Comments