함수

한준수·2023년 6월 14일
0

C-Lang

목록 보기
4/12

📖 함수의 개념

함수(Function) : "무엇을 넣으면, 어떤 것을 돌려주는 신비로운 자식"

함수는 '매개변수(또는 인수)'를 입력 받은 후 그 매개변수를 가공하고 처리한 후 '반환값'을 돌려줌

C언어 프로그램 자체에서 제공하는 함수와 직접 정의한 함수가 있다.

  • 제공 함수 ex
    printf();
  • 사용자 정의 함수
    함수_이름();

✍ 함수는 왜 언제 사용할까?

예를 들어 똑같은 내용을 출력해야 하는데 이런 출력 코드가 여러곳에서 사용된다고 했을 때
함수를 사용하지 않으면, 코드가 지저분해지고 효율도 떨어진다
함수를 통해 해당 출력문을 미리 정의해두면 가독성도 좋고 효율성까지 두마리 토끼를 다 잡을 수 있다.

함수를 이용하여 주문을 받아보자

#include <stdio.h>

int coffe_machine(int button){
	printf("\n# 1.(자동으로) 뜨거운 물을 준비한다. \n");
    printf("\n# 2.(자동으로) 종이컵을 준비한다. \n");
    
    switch(button){
    	case 1 : printf("# 3.(자동으로) 보통커피를 탄다");
        case 2 : printf("# 3.(자동으로) 설탕커피를 탄다");
        case 3 : printf("# 3.(자동으로) 블랙커피를 탄다");
        default : printf("# 3.(자동으로) 아무거나 탄다");
    }
    
    printf("# 4. (자동으로) 물을 붓는다.");
    printf("# 5. (자동으로) 스푼으로 저어서 녹인다.");
    
    return 0;
}

void main(){
	int coffee;
    int ret;
    
    printf("A님, 어떤 커피를 드릴까요?(1:보통, 2:설탕, 3:블랙)");
    scanf("%d",&coffee);
    printf("A님 커피 여기 있습니다.\n\n");
    
    printf("B님, 어떤 커피를 드릴까요?(1:보통, 2:설탕, 3:블랙)");
    scanf("%d",&coffee);
    printf("B님 커피 여기 있습니다.\n\n");
    
    printf("C님, 어떤 커피를 드릴까요?(1:보통, 2:설탕, 3:블랙)");
    scanf("%d",&coffee);
    printf("C님 커피 여기 있습니다.\n\n");
}

coffee_machine 이라는 함수로 기능을 정의해두지 않았다면 main함수에서 똑같은 코드를 세번이나 작성해야 했을거다.

⌨ 매개변수 활용

매개변수를 이용해서 간단한 더하기 계산기를 만들어보자

int plus(int v1, int v2){
	int result;
    result = v1 + v2;
    return result;
}

voimd main(){
	int hap;
    
    hap = plus(100, 200);
    
    printf("%d",hap);
}

💻 결과

당연히 300 이 나온다.


📖 지역 변수와 전역 변수


지역 변수 : 한정된 지역(local)에서만 사용되는 변수
전역 변수: 프로그램 전체(global)에서 사용되는 변수

#include<stdio.h>

int a = 100;

void func1(){
	int a = 200;
    printf("func1()에서 a의 값 ==>%d\n", a);
}

void main(){
	func1();
    printf("main()에서 a의 값 ==> %d\n", a);
}

💻


📖 함수의 반환값과 매개변수



📖 포인터 매개변수 활용

#include<stdio.h>
void func1(int a){
	a = a + 1;
    printf("전달받은 a ==> %d\n",a);
}

void main(){
	int a = 10;
    
    func1(a);
    printf("func1() 실행 후의 a ==> %d\n",a);
}

💻

위 코드에서 func1은 리턴타입으로 a의 결과를 되돌려준 것도 아니고 포인터로 실제 값을 조작한 것도 아닌
func1의 지역변수에서의 계산을 한 것이라
두 개의 값이 다르다

#include<stdio.h>

void func1(int *a){
	*a = *a + 1;
    printf("전달받은 a ==> %d\n", *a);
}

void main(){
	int a = 10;
    
    func1(&a);
    printf("func1() 실행 후의 a ==> %d\n", a);
}

💻

포인터를 통해 a변수 메모리 주소에 직접 접근하여 값은 변경한 것으로 두 개의 값이 동일하다.


📃퀴즈

  • gugu()함수를 사용하여 구구단을 출력하는 프로그램을 작성하시오
    • 실행결과

#include<stdio.h>

int gugu(int i){

	for(int a = 1; a < 10; a++)
    {
    	printf("%d X %d= %2d\n", i, a, i * a );
    }
    
    return 0;
}

void main(){
int input;
	printf("출력하고 싶은 단을 입력 : ");
    scanf("%d", &input);
    
    gugu(input);
}

0개의 댓글