Skip to main content

Command Palette

Search for a command to run...

Function in Programming (1/2)

C언어

Updated
14 min read

Contents


1️⃣ 함수(function)의 개념과 특징


1️⃣ 함수(function)의 개념과 특징

함수의 개념 🔽

💡요약: 함수는 입력을 받아 특정한 규칙에 따라 처리를 하고, 그 결과를 출력으로 내보내는 일련의 과정으로 이해하면 된다. 함수는 코드의 재사용성을 높이고, 복잡한 작업을 더 쉽게 수행할 수 있게 해주는 중요한 도구이다.

함수는 입력(input)을 받아서 특정한 작업을 수행한 후 출력(output)을 제공하는, 일종의 블랙 박스(black box)처럼 동작한다고 볼 수 있다. 여기서 max() 함수가 예시로 사용되었는데, 이는 입력받은 값들 중에서 가장 큰 값을 출력으로 반환하는 함수이다.

  • 함수(function): 입력 값을 받아 특정 작업을 수행하고 그 결과를 반환하는 도구이다. 복잡한 계산이나 작업을 쉽게 처리할 수 있도록 도와준다.

  • 입력(input): 함수가 작업을 수행하기 위해 받는 값을 뜻한다. 예를 들어, max() 함수는 여러 숫자를 입력으로 받아 그중 가장 큰 값을 찾아준다.

  • 출력(output): 함수가 작업을 수행한 후 결과로 반환하는 값이다. max() 함수의 경우 가장 큰 값이 출력으로 반환된다.


함수가 필요한 이유 (Why Functions are Necessary) 🔽

💡요약: 동일한 코드를 여러 곳에서 사용해야 할 때, 함수는 코드의 재사용성(reusability)을 높여주고, 코드의 중복(duplication)을 줄여준다. 함수를 사용하면 동일한 작업을 수행하는 코드를 여러 번 작성할 필요 없이 함수 호출만으로 같은 작업을 반복할 수 있다.

  • 재사용성(reusability): 동일한 작업을 여러 번 수행할 때, 함수를 사용하면 코드의 중복을 줄이고 유지보수를 쉽게 할 수 있다.

  • 중복 제거(removal of duplication): 동일한 코드를 여러 곳에 반복해서 작성하는 대신, 함수로 정의하여 필요할 때마다 호출할 수 있다.

동일한 코드를 여러 번 작성해야 하는 상황이다. 예를 들어, 별(*)을 30번 출력하는 코드를 두 번 작성하는 경우, 중복된 코드가 생기게 된다. 이는 유지보수가 어렵고, 실수할 가능성도 높아지게 된다. 이를 함수를 작성하여 동일한 코드를 하나로 만들 수 있게된다.

print_stars()라는 함수(function)를 작성하여 별을 출력하는 코드를 함수로 묶은 예제이다. 이제 별을 출력하려면 print_stars();라는 함수 호출만 하면 된다. 이렇게 하면 동일한 작업을 수행할 때마다 코드를 복사해서 붙여넣지 않아도 되므로 더 효율적이다.


함수의 특징 (Characteristics of Functions)🔽

💡요약: 함수는 특정한 작업을 수행하기 위해 필요한 명령어들의 모음으로, 반복적인 작업을 효율적으로 처리할 수 있게 도와준다.

  • 명령어들의 모음(sets of commands): 함수는 특정 작업을 수행하기 위해 여러 명령어가 모여 있는 집합체이다. 이러한 명령어들은 함께 묶여서 한 번에 실행된다.
  • 서로 구별되는 이름(distinct names): 함수는 각기 다른 이름을 가지고 있어, 코드 내에서 쉽게 구분할 수 있다. 예를 들어, 덧셈을 수행하는 함수는 add()로 명명한다.

  • 특정한 작업 수행(executing a specific task): 각 함수는 특정한 작업을 수행하도록 설계되어 있다. add() 함수는 두 수를 더하는 작업을 수행하는 예이다.

  • 입력과 출력(input and output): 함수는 입력값을 받아서, 그 결과를 출력으로 반환할 수 있다.

add()라는 함수는 입력값으로 37을 받아 이를 더하고, 결과로 10을 출력한다.


함수의 장점 (Advantages of Functions) 🔽

  • 코드 중복 방지(prevent code duplication): 함수를 사용하면 동일한 작업을 여러 곳에서 반복할 때, 코드의 중복을 피할 수 있다. 동일한 기능을 매번 다시 작성하지 않고, 함수로 정의해 필요할 때마다 호출할 수 있게 된다.

  • 재사용성(reusability): 한 번 작성된 함수는 여러 번 재사용할 수 있어, 개발 시간을 줄이고 코드를 간결하게 유지할 수 있다.

  • 모듈화(modularity): 함수를 사용하면 전체 프로그램을 여러 작은 모듈로 나눌 수 있다. 이렇게 하면 각 모듈을 독립적으로 개발하고 유지할 수 있어, 프로그램의 체계성을 높이고 유지보수를 쉽게 할 수 있다.

레고 블록을 사용하여 함수 이해해보자. 프로그램을 레고 블록처럼 작은 부분들로 나누어 각각의 블록이 특정한 기능(함수)을 수행하도록 설계하는 것이다. 이렇게 큰 작업을 여러 개의 작은 작업으로 나누어하는 개념을 “모듈화(modularity)”라고 하고 “작은 작업”을 함수로 정의한다. 이렇게 하면 프로그램이 체계적이고 이해하기 쉬워지며, 개발 과정과 유지보수도 수월해지게 된다.


함수의 종류 (Types of Functions)🔽

  • 사용자 정의 함수(user-defined functions): 프로그래머가 필요에 따라 직접 만드는 함수이다. 기본적으로 제공되지 않는 특별한 기능이 필요할 때, 사용자가 함수를 정의하여 사용할 수 있다.

  • 라이브러리 함수(library functions): 프로그래밍 언어에서 기본적으로 제공하는 함수들로, 자주 쓰이는 기능을 쉽게 사용할 수 있도록 만들어졌다. 예를 들어, printf(), scanf(), sqrt() 같은 함수들이 있다.

사용자 정의 함수는 원하는 기능을 직접 추가할 수 있는 유연함을 제공하고, 라이브러리 함수는 이미 제공된 기능을 손쉽게 사용할 수 있는 장점을 제공한다. 필요에 따라 직접 함수를 작성하거나, 이미 제공된 라이브러리 함수를 사용함으로써 개발 시간을 절약할 수 있다.


중간 점검 (Midpoint Check)🔽

  • 함수가 필요한 이유는 무엇인가?

    • 함수는 코드 중복을 방지(prevent code duplication)하고 재사용성(reusability)을 높이며, 프로그램을 체계적(organized)으로 유지할 수 있도록 도와준다. 동일한 작업을 반복할 때 함수로 정의하면 코드가 더 깔끔해지고 유지보수가 쉬워진다.
  • 함수와 프로그램의 관계는?

    • 함수는 프로그램 내에서 특정 작업(specific tasks)을 수행하는 작은 단위이다. 프로그램은 여러 함수로 구성될 수 있으며, 이 함수들이 상호작용하여 프로그램의 전체적인 기능을 완성한다. 함수를 사용하면 프로그램을 모듈화할 수 있어(modularize the program) 각 기능을 독립적으로 관리할 수 있게 된다.
  • 컴파일러에서 지원되는 함수를 _______ 함수라고 한다.

    • 라이브러리 함수(library functions)라고 한다. 라이브러리 함수는 프로그래밍 언어에서 기본적으로 제공되는 함수로, 자주 사용하는 기능을 쉽게 활용할 수 있도록 미리 구현된 함수들이다.

함수의 정의 (Function Definition) #1 - 구문(Syntax) 🔽

💡요약: 함수는 코드의 일부 작업을 묶어서 재사용할 수 있게 해주는 중요한 도구이며, 반환형, 이름, 매개변수, 몸체로 구성된다.

1. 반환형 (Return Type)

  • 반환형(return type)은 함수가 작업을 수행한 후 반환하는 데이터의 자료형(data type)을 나타낸다. 예를 들어, void는 함수가 아무 값도 반환하지 않는다는 뜻이다.

  • 반환형이 int라면, 함수는 정수형 데이터를 반환한다.

  • 예시: int로 설정된 함수는 정수를 반환해야 한다.

2. 함수 이름 (Function Name)과 매개변수 (Parameters)

  • 함수 이름(function name)은 함수가 호출될 때 사용되는 식별자이다. 이름은 함수의 역할을 잘 설명하도록(descriptive name) 지정하는 것이 좋다. 예를 들어, print_stars는 별을 출력하는 함수이다. 또한 이름을 지을 때 동사 + 명사(verb + noun) 형태로 기능을 명확하게 나타내는 것이 좋다. 예를 들어, compute_average()는 평균을 계산하는 함수임을 쉽게 알 수 있다.

  • 매개변수(parameters)는 함수가 필요로 하는 입력 값들이다. 위 예시에서는 매개변수가 없지만, 일반적으로 () 안에 변수 이름과 자료형을 지정하여 함수가 필요로 하는 값을 받도록 할 수 있다.

3. 함수 몸체 (Function Body)와 함수 헤더 (Function Header)

  • 함수 헤더(function header)는 반환형, 함수 이름, 매개변수로 구성된 첫 줄을 일컫는다. 이 부분에서 함수의 역할을 정의하고, 필요한 값을 받는 형식을 지정한다.

  • 함수 몸체(function body)는 {} 안에 있는 부분으로, 함수가 수행할 작업을 포함한다. 이 예제에서 for 문은 별을 30번 출력하는 작업을 수행하게 된다.

💡예시상황: 함수 이름의 예제이다. 아래와 같은 방식으로 함수 이름을 지으면, 코드의 가독성이 높아지고, 함수의 기능을 쉽게 파악할 수 있게 된다.

  • int square() : 정수를 제공하는 함수

  • double compute_average() : 평균을 구하는 함수

  • void set_cursor_type() : 커서의 타입을 설정하는 함수


함수 호출 (Function Call) #1 🔽

💡요약: 함수 호출은 프로그램이 함수의 이름을 불러 함수 내의 작업을 수행하도록 지시하는 과정이다. 이는 코드의 흐름을 제어하고, 원하는 작업을 특정 위치에서 반복적으로 실행할 수 있도록 도와주는 중요한 개념이다.

  • 함수 호출(function call)

    • 함수 호출이란 print_stars()와 같이 함수의 이름을 불러(calling the function by its name) 함수를 실행하도록 지시하는 것이다..
  • 실행 흐름의 중단과 이동

    • 함수 호출이 발생하면 현재 실행 중이던 코드가 일시 중단(temporarily paused)되고, 프로그램 흐름이 호출된 함수로 이동한다. 함수 내부의 코드가 순서대로 실행되며, 호출된 함수의 작업이 완료될 때까지 기존 코드의 실행은 멈추게 된다.
  • 실행 후 복귀

    • 호출된 함수의 실행이 끝나면 프로그램은 다시 원래 위치로 돌아가(returns to the original location) 남은 코드를 계속 실행한다.

💡예시상황: 예제에서는 print_stars()라는 함수를 호출하고 있다. 이 함수는 별(*)을 30번 출력하는 기능을 한다.

  • 프로그램이 print_stars();를 만나면 함수를 호출하고, 함수 내부 코드(for문)가 실행됨

  • for문은 printf("*");를 30번 반복하여 별을 출력함

  • 함수 실행이 끝나면 프로그램은 호출 위치로 돌아와 다음 코드를 계속해서 실행함.

💡추가정보

  • 위의 예제처럼 함수는 여러번 호출될 수 있다.

예제 🔽

print_stars() 함수를 두 번 호출하여 화면에 별을 출력하고, 그 사이에 "Hello World!"를 출력하는 코드를 작성해본다.

  • 함수 정의: print_stars() 함수는 별(*)을 30번 출력하는 기능을 수행한다. 함수 내부의 for 반복문이 이를 수행하게 된다.

  • 함수 호출(function call): print_stars();라는 구문을 통해 함수를 호출한다. main() 함수 내에서 두 번 호출되었으며, 첫 번째 호출 후 "Hello World!"가 출력되고, 다시 print_stars()가 호출된다.

  • 출력 흐름:

    • 첫 번째 print_stars() 호출로 별이 30번 출력된다.

    • "Hello World!"가 새로운 줄에 출력된다.

    • 두 번째 print_stars() 호출로 별이 다시 30번 출력된다.

#include <stdio.h>

void print_stars() // 별을 출력하는 함수 정의
{
    for (int i = 0; i < 30; i++)
        printf("*");
}

int main(void)
{
    print_stars(); // 첫 번째 함수 호출
    printf("\nHello World!\n"); // "Hello World!" 출력
    print_stars(); // 두 번째 함수 호출
    return 0;
}

  • 실행결과

매개 변수(Parameters) 및 반환값(Return Value) 🔽

  • 매개 변수 (Parameters)

    • 매개 변수(parameters)는 함수가 작업을 수행할 때 필요한 입력값이다. 이 예제에서는 int xint y라는 두 매개 변수를 사용하여 두 개의 정수를 함수에 전달한다.
  • 함수 몸체 (Function Body)와 반환값 (Return Value)

    • 함수 몸체(function body)는 {} 안에 있는 부분으로, 함수가 수행할 작업을 포함하는데, 이 예제에서는 if 조건문을 사용하여 xy 중 큰 값을 결정하고 반환한다.

    • 반환값(return value)은 함수가 실행을 완료한 후 호출한 위치로 전달하는 값이다. 이 함수는 return x; 또는 return y;를 통해 두 값 중 큰 값을 반환다.

💡요약: 위의 예제는 max() 함수가 두 개의 정수 입력을 받아, 그 중 더 큰 값을 찾아 반환하는 과정을 설명한다. 함수는 입력을 받아서 조건문을 통해 큰 값을 결정하고, 그 값을 결과로 반환한다. 함수는 매개 변수를 통해 필요한 입력을 받아 작업을 수행하고, 반환값을 통해 결과를 제공한다.


인수(Argument)와 매개변수(Parameter) #1 🔽

  • 인수 (Argument)

    • 인수(argument)는 함수가 호출될 때 실제로 함수에 전달되는 값(actual value passed to the function)이다. 인수는 함수가 작업을 수행하기 위해 사용하는 구체적인 데이터이다.

    • 예를 들어, max(10, 20);에서 1020max 함수로 전달되는 인수이다.

  • 매개변수 (Parameter)

    • 매개변수(parameter)는 함수가 인수를 받아들이기 위해 사용하는 변수(variable that receives the argument value)이다. 매개변수는 함수가 호출될 때 전달된 인수를 저장하여 함수 내에서 사용하게 해준다.

    • 예를 들어, int max(int x, int y)에서 xy는 매개변수이며, 함수가 호출될 때 인수 1020을 각각 받아오게 된다.

💡예시상황: 위의 이미지에서는 value = max(10, 20);라는 코드가 있다. 여기서 1020인수이고, int max(int x, int y) 함수 내의 xy매개변수이다. 인수 1020이 매개변수 xy에 전달되어, max 함수가 그 값을 사용하여 두 값 중 큰 값을 결정하고 반환하게 된다. 인수와 매개변수를 이해하면 함수 호출 시 데이터가 어떻게 전달되고, 함수 내에서 어떻게 사용되는지 쉽게 이해할 수 있게 된다.


인수(Argument)와 매개변수(Parameter) #2 - 추가적인 규칙 🔽

  • 매개변수가 없는 함수 (Function without Parameter)

    • 매개변수가 없는 함수는 print_stars(void)처럼 매개변수 위치에 void를 쓰거나, print_stars()처럼 아무것도 적지 않아도 된다. 이는 함수가 호출될 때 별도의 값을 받지 않는다는 것을 의미한다.
  • 인수의 다양성 (Variety of Argument)

    • 함수가 호출될 때마다 인수는 다르게 설정될 수 있다. 즉, 매번 호출 시 다른 값을 함수에 전달할 수 있다는 뜻이다. 이를 통해 함수는 다양한 입력을 처리할 수 있게 된다.
  • 매개변수와 인수의 개수 일치 (Parameter and Argument must match exactly)

    • 매개변수의 개수는 정확히 인수의 개수와 일치(must match exactly)해야 한다. 만약 매개변수와 인수의 개수가 일치하지 않으면 오류(error)가 발생하게 된다. 예를 들어, max(int x, int y)라는 함수가 두 개의 매개변수를 요구하는데, 인수를 한 개만 전달하면 오류가 발생한다.

💡예시상황: 매개변수의 개수가 맞지 않을 때 발생하는 상황을 생각해보자. 예를 들어 max(10);처럼 인수를 하나만 전달할 경우나 max(); 처럼 void인 경우 max 함수는 두 개의 매개변수를 요구하므로 오류가 발생하게 된다. 따라서 인수의 개수와 매개변수의 개수는 항상 일치해야 함을 기억하자


반환값(Return Value) 🔽

💡요약: 반환값은 함수가 작업을 수행한 후 호출된 위치로 결과를 돌려주는 값이다. 반환값은 함수가 수행한 계산이나 작업의 최종 결과라고 할 수 있다.

  • 반환값 (Return Value)

    • 반환값은 함수가 작업을 완료하고 호출한 곳으로 전달하는 결과 값이다. 이 값은 함수가 끝난 후 return 문을 사용하여 반환된다.
  • return

    • return 문은 함수가 호출된 위치로 값을 돌려보낼 때 사용한다. return 뒤에 계산된 값을 적으면 그 값이 반환된다.

    • 예를 들어, return x;라고 하면 함수는 x의 값을 호출한 곳으로 돌려준다.

  • 반환값의 개수

    • 함수는 여러 개의 인수(multiple arguments)를 받을 수 있지만, 반환값은 오직 하나(only one return value)만 가능하다. 이는 함수가 하나의 작업 결과만 반환한다는 것을 의미한다.

💡예시상황: 위의 이미지에서는 value = max(10, 20);라는 코드가 있다. 여기서 max(10, 20) 함수가 실행되어, 1020 중 더 큰 값이 반환되게 된다. 반환된 값은 value 변수에 저장된다.


중간 점검(Midpoint Check)

  • 함수의 반환형이 없는 경우에는 어떻게 표시하는가?

    • 반환형이 없는 함수(function without a return type)는 void 키워드를 사용하여 표시한다. 예를 들어, void print_stars()는 반환값이 없는 함수이다.
  • 수식 (x+y+z)의 값을 반환하는 문장을 작성해보자.

    • 수식 (x + y + z)의 값을 반환하는 return 문은 다음과 같다:

        return x + y + z;
      
    • return 문은 x, y, z의 합을 계산하여 호출한 곳으로 돌려준다.

  • double형 변수 f를 매개 변수로 가지고 double형의 값을 반환하는 fabs() 함수 헤더를 정의해보자.

    • fabs() 함수는 double형 매개 변수를 하나 받고, double형 값을 반환한다. 함수 헤더는 다음과 같이 정의할 수 있다.

        double fabs(double f);
      
    • 여기서 double은 반환형을 나타내고, fdouble형 매개 변수이다.


예제 🔽

#include <stdio.h>

int max(int x, int y) // 두 정수 중 더 큰 값을 반환하는 함수
{
    if (x > y)
        return x;
    else
        return y;
}

int main(void)
{
    int x, y, larger;

    printf("정수 2개를 입력하세요: ");
    scanf("%d %d", &x, &y); // 사용자로부터 두 정수 입력 받기

    larger = max(x, y); // max 함수 호출하여 더 큰 값 찾기
    printf("더 큰 값은 %d입니다.\n", larger); // 결과 출력

    return 0;
}
  • max() 함수: max() 함수는 두 개의 정수를 매개변수로 받아, 더 큰 값을 반환하는 함수이다. if 문을 사용하여 xy보다 큰 경우 x를 반환하고, 그렇지 않으면 y를 반환한다.

  • main() 함수

    • main() 함수에서는 사용자로부터 두 개의 정수를 입력받고, max() 함수를 호출하여 더 큰 값을 찾는다.

    • scanf() 함수를 사용하여 사용자의 입력을 받아 변수 xy에 저장한다.

    • larger 변수에 max(x, y)의 결과를 저장한 후, printf() 함수를 사용하여 더 큰 값을 화면에 출력한다.


생일 축하 함수 🔽

cCopy code#include <stdio.h>

void happyBirthday() // 생일 축하 메시지를 출력하는 함수
{
    printf("생일축하 합니다! \n");
    printf("생일축하 합니다! \n");
    printf("사랑하는 친구의 ");
    printf("생일축하 합니다! \n");
}

int main(void)
{
    happyBirthday(); // happyBirthday 함수 호출
    return 0;
}
  • 함수 정의

    • happyBirthday() 함수는 반환형이 없는 void형 함수로, 생일 축하 메시지를 여러 줄로 출력한다.

    • printf() 함수를 사용하여 각 줄마다 생일 축하 메시지를 출력한다.

  • 함수 호출

    • main() 함수에서는 happyBirthday() 함수를 호출하여 생일 축하 메시지를 화면에 출력한다.

    • happyBirthday()가 호출되면 정의된 메시지가 차례로 출력된다.


정수를 입력받는 get_integer()함수 🔽

  • 함수 정의

    • get_integer() 함수는 반환형이 int형이므로 정수 값을 반환한다.

    • 이 함수는 매개변수를 받지 않으므로 (void)로 표시하여 인수를 필요로 하지 않는 함수임을 나타낸다.

  • 입력 안내와 입력값 저장

    • printf("정수를 입력하세요: ");는 사용자에게 입력을 요청하는 메시지를 화면에 출력한다.

    • scanf("%d", &value);는 사용자가 입력한 정수를 value 변수에 저장한다. & 기호는 value 변수의 메모리 주소를 가리키며, scanf가 입력값을 해당 변수에 저장하도록 한다.

  • 반환값

    • return value;는 함수가 value 변수에 저장된 입력값을 호출한 위치로 반환하게 한다. 이로써 함수는 사용자로부터 입력받은 정수를 반환하게 된다.
#include <stdio.h>

// 사용자로부터 정수를 입력받아 반환하는 함수
int get_integer(void)
{
    int value; // 정수를 저장할 변수 선언

    printf("정수를 입력하세요: "); // 사용자에게 안내 메시지 출력
    scanf("%d", &value); // 입력받은 정수를 value에 저장

    return value; // 입력된 정수를 반환
}

int main() {
    int number = get_integer(); // get_integer 함수 호출하여 입력받은 정수 저장
    printf("입력한 정수는 %d입니다.\n", number); // 결과 출력

    return 0;
}

이 코드를 실행하면 다음과 같은 흐름으로 진행된다:

정수를 입력하세요: 15
입력한 정수는 15입니다.

정수의 합을 계산하는 add() 함수 🔽

  • get_integer() 함수: 사용자에게 정수를 입력하도록 요청하고, 입력받은 값을 반환한다. 이 함수는 여러 번 호출되어도 같은 방식으로 작동하여 정수를 입력받아 반환할 수 있다.

  • add() 함수

    • 두 개의 정수를 매개변수로 받아, 두 값의 합을 계산하여 반환한다. return x + y; 문을 통해 두 수의 합을 반환한다.
  • main() 함수의 동작 흐름

    • get_integer() 함수를 두 번 호출하여 사용자로부터 두 정수를 입력받고, 각각 xy에 저장한다.

    • add(x, y) 함수를 호출하여 xy의 합을 계산하고, 그 결과를 sum에 저장한다.

    • printf()를 통해 두 수의 합을 출력한다.

#include <stdio.h>

// 사용자로부터 정수를 입력받아 반환하는 함수
int get_integer()
{
    int value;
    printf("정수를 입력하세요: ");
    scanf("%d", &value);
    return value;
}

// 두 정수를 더하여 반환하는 함수
int add(int x, int y)
{
    return x + y;
}

int main(void)
{
    int x = get_integer(); // 첫 번째 정수 입력
    int y = get_integer(); // 두 번째 정수 입력

    int sum = add(x, y); // 두 수의 합 계산
    printf("두 수의 합은 %d입니다.\n", sum); // 결과 출력

    return 0;
}

이 프로그램을 실행하면 다음과 같은 흐름으로 진행된다:

정수를 입력하세요: 10
정수를 입력하세요: 20
두 수의 합은 30입니다.

중간점검 🔽

  • 인수와 매개변수는 어떤 관계가 있는가?

    • 인수(argument)는 함수가 호출될 때 실제로 함수에 전달되는 값이다.

    • 매개변수(parameter)는 함수가 인수를 받아들이기 위해 선언하는 변수이다.

    • 관계적으로, 인수는 매개변수에 전달되는 실제 값이며, 매개변수는 함수가 그 값을 사용할 수 있도록 정의된 변수이다.

    • 예를 들어, add(5, 10)에서 510은 인수이며, add 함수의 매개변수 xy는 이 값을 받아 작업에 사용하게 된다.

  • 반환값이 double형으로 정의된 함수에서 정수를 반환하면 어떤 일이 발생할까?

    • 함수가 double형으로 정의되었다면 반환되는 값은 자동으로 double형으로 변환된다.

    • 함수가 정수를 반환해도 컴파일러가 정수를 double형으로 변환하여 반환하므로 오류는 발생하지 않는다. 대신, 정수 값이 소수점이 있는 double형으로 변환된다. 예를 들어, 3이 반환되면 3.0으로 변환된다.


소수(prime number)

  • 소수의 정의

    • 소수는 양의 정수 중에서 1과 자기 자신만을 약수로 가지는 수입니다. 예를 들어, 2, 3, 5, 7 등은 소수이다.

    • 소수 판별 프로그램은 입력된 정수를 2부터 해당 숫자 - 1까지 나누어 나머지가 0인 경우가 있으면 소수가 아닌 것으로 판단하게 된다.

  • 알고리즘

    • 입력된 정수를 변수 n에 저장한다.

    • for 루프를 이용해 i를 2부터 n - 1까지 증가시키면서 ni로 나누어 나머지가 0인지 확인한다.

    • 나머지가 0인 경우 약수가 존재하므로 소수가 아니다. 그렇지 않으면 소수이다.

  • 함수 설명

    • get_integer() 함수는 사용자로부터 정수를 입력받아 반환한다..

    • is_prime(int n) 함수는 입력된 정수가 소수인지 판별하여 결과를 반환한다. 소수일 경우 1을, 소수가 아닐 경우 0을 반환한다.

#include <stdio.h>

// 사용자로부터 정수를 입력받아 반환하는 함수
int get_integer(void)
{
    int n;
    printf("정수를 입력하세요: ");
    scanf("%d", &n);
    return n;
}

// 입력된 정수가 소수인지 판별하는 함수
int is_prime(int n)
{
    int i;
    for (i = 2; i < n; i++) {
        if (n % i == 0) // 나누어 떨어지면 소수가 아님
            return 0;
    }
    return 1; // 나누어 떨어지지 않으면 소수
}

int main(void)
{
    int n;
    n = get_integer(); // 사용자로부터 정수 입력 받기

    // 소수 여부를 출력
    if (is_prime(n) == 1)
        printf("%d는 소수입니다.\n", n);
    else
        printf("%d는 소수가 아닙니다.\n", n);

    return 0;
}

이 프로그램을 실행하면 다음과 같은 흐름으로 진행된다.

정수를 입력하세요: 12229
12229는 소수가 아닙니다.
Function in Programming (1/2)