혼자 공부하는 C언어(개정판) 4주차

2023. 7. 24. 00:50C언어/혼공학습단 10기

728x90

혼공단 - 혼자 공부하는 C언어(개정판)

 

# 진도 기본 미션 선택 미션
4주차
(7/24 ~ 7/30)
Chapter 07 함수의 유형을 정리하여 공유하기 p. 226 7-5. 직접 해보는 손코딩 예제 테스트 후 apple 출력하고 종료한 화면 캡처하기
왜 무한대로 출력 되지 않는지 이유에 대해 생각하고 정리해보기

 

 

각 Chapter의 '학습목표'를 바탕으로 책의 내용을 정리했습니다.

 

□ Chapter 07

함수를 만들 때 중요한 함수 선언, 함수 정의, 함수 호출에 관한 이해
 - 함수 선언: 프로그램의 상단에서 어떤 함수를 사용할 것이라고 컴파일러에 정보를 주는 역할 ( 함수의 형태를 미리 알릴 수 있음 )
  . 함수 선언이 필요한 이유
   ① 함수 선언에서 반환값의 형태를 확인
   ② 함수에 호출 형식에 문제가 없는지 검사
 - 함수 정의: 함수를 실제 코드로 만드는 것으로 함수의 기능을 구현
  . 함수 정의를 위한 질문 ( 함수 원형 )
   ① 함수의 기능에 맞는 이름은 무엇인가? ( 함수명: 함수의 기능을 예상할 수 있는 적절한 단어 )
   ② 함수가 기능을 수행할 때 필요한 데이터는 무엇인가? ( 매개변수: 함수가 처리할 데이터를 저장하는 변수 )
   ③ 함수가 수행된 후의 결과는 무엇인가? ( 반환형: 함수가 기능을 수행한 후 호출한 곳으로 돌려줄 값의 자료형 )
 - 함수 호출: 만든 함수를 사용하기 위해 호출 ( 함수의 이름을 사용하며, 필요한 데이터인 인수를 넣어줌 )

구분
설명  
함수 선언  int sum(int x, int y);
함수의 형태를 알린다.
함수 원형에 세미콜론을 붙인다.
함수 정의  int sum(int x, int y) { return x + y; }
함수를 만든다.
반환값의 형태, 이름, 매개변수를 표시하고 블록 안에 기능을 구현한다.
함수 호출 sum(10, 20);
함수를 사용한다.
함수에 필요한 값을 인수로 준다.


함수를 제어하는 return과 빈 공간을 나타내는 void에 관해 확인
 - return문: 호출된 함수의 실행을 끝내고 호출한 곳으로 돌아가거나, 돌아가서 값을 반환할 때 사용
 - void: 매개변수와 반환값이 없을 때 함수의 괄호 안에 적어둠

매개변수가 없는 함수, 반환값이 없는 함수, 재귀호출 함수 등 여러가지 함수 유형을 확인
 - 매개변수가 없는 함수: 처리할 데이터를 스스로 입력하여 매개변수가 불필요한 함수
 - 반환값이 없는 함수: 전달받은 데이터를 화면에 출력하는 함수 ( return문을 단독으로 사용하거나, 생략 가능 )
 - 매개변수와 반환값이 모두 없는 함수: 같은 내용을 단지 화면에 출력하는 함수
 - 재귀호출 함수: 함수 안에서 자기 자신을 다시 호출
  . 복잡한 반복문을 경우에 따라 간단히 표현할 수 있으나, 코드 읽기가 어렵고 반복 호출되면서 메모리를 사용하므로 제한적으로 사용

형태 구분 실행  
매개변수가 없는 함수 선언 int get_num(void); 또는 int get_num();
특징 호출할 때 인수 없이 괄호만 사용한다.
반환값이 없는 함수 선언 void print_char(char ch, int count);
특징 반환할 때 return문을 쓰지 않거나 return문만 사용한다.
호출 문장을 수식의 일부로 쓸 수 없다.
매개변수와 반환값이 모두 없는 함수 선언 void print_title(void);
특징 2가지 경우의 특징을 모두 포함한다.
재귀호출 함수 정의 정의 void fruit() { ... fruit() ... }
특징 특징 함수 안에 재귀호출을 멈추는 조건이 있어야 한다.

 

 

■ 기본 미션

함수의 유형을 정리하여 공유하기

 1. 내장 함수 (Built-in Function): 기본적으로 제공되는 함수로 표준 라이브러리(stdio.h, math.h)에 정의되어 별도의 선언 없이 사용 가능  → 예) printf(), scanf(), strlen()

 2. 사용자 정의 함수 (User-defined Function): 사용자가 직접 정의하여 만드는 함수로 프로그램의 특정 기능을 수행하기 위해 사용. 필요에 따라 매개변수나 반환값을 갖음

   . 매개변수와 반환값에 따른 유형: 매개변수와 반환값을 조합하여 다양한 상황에 맞는 함수를 작성할 수 있으며, 함수의 목적과 요구사항에 따라 그 쓰임이 다름

     ① 매개변수와 반환값이 모두 없는 함수: 어떠한 입력도 결과도 받지 않으며, 주로 프로그램의 특정 동작을 수행하기 위해 사용  → 예: 화면에 특정 메시지 출력, 파일 생성 

void greet() { printf("Hello, World!\n"); }

     ② 매개변수가 있고 반환값이 없는 함수: 한 개 이상의 매개변수를 받지만 어떤 결과도 반환하지 않으며, 주로 함수 내에서 매개변수로 전달된 값을 가공하거나 처리하기 위해 사용

       → 예: 두 개의 정수를 받아 더한 후 그 결과를 출력 

void addNumbers(int a, int b) { int sum = a + b; printf("두 수의 합은 %d\n", sum); }

     ③ 매개변수가 없고 반환값이 있는 함수:어떠한 입력도 받지 않지만 결과값을 반환하며, 주로 계산 결과를 반환하거나 프로그램의 특정 상태나 값을 반환하는데 사용  예: 현재 시간을 반환

time_t getCurrentTime() { time_t currentTime = time(NULL); return currentTime; }

     ④ 매개변수와 반환값이 모두 있는 함수: 한 개 이상의 매개변수를 받고 처리한 결과를 반환하며, 주로 함수 내부에서 매개변수로 전달된 값을 가공하고 그 결과를 반환하는 데 사용  예: 두 개의 정수를 받아 더한 후 그 결과를 반환

int addNumbers(int a, int b) { int sum = a + b; return sum; }

 

 

■ 선택 미션

 - p. 226 7-5. 직접 해보는 손코딩 예제 테스트 후 apple 출력하고 종료한 화면 캡처하기

 

  . 왜 무한대로 출력 되지 않는지 이유에 대해 생각하고 정리해보기

    : 함수가 재귀적으로 반복 호출되면서 메모리를 계속해서 사용하므로, 결국 프로그램이 쓸 수 있는 메모리를 모두 사용하게 되어 메모리 부족으로 강제 종료됩니다. 이는 컴파일러가 표시하는 경고 메시지로도 알 수 있습니다.

 

#include <stdio.h>

void fruit(void);

int main(void)
{
    fruit();

    return 0;
}

void fruit(void)
{
    printf("apple\n");
    fruit();
}














 

728x90