페이지가 로드되지 않나요? 여기를 눌러보면 고쳐질 수도 있어요.
Placeholder

#8780
인터랙티브
언어 제한

[속성 C언어] 함수 1s 1024MB

문제

C언어 함수의 특징은 해당 함수가 return할 값의 자료형을 함수 이름 앞에 작성해야 한다는 것이다.

즉, 파이썬의 함수에서 defint, double, char과 같이 바꿔줘야 한다.

단, return할 값이 없다면 void로 작성한다.

함수에서 인자로 배열을 받을 때는 파이썬에서 리스트를 받을 때와 마찬가지로 참조 복사(reference copy)가 된다.

이 때, 1차원 배열은 크기를 특정하지 않고 자료형 배열이름[] 형태로 받아주면 되고,
2차원 배열은 자료형 배열이름[][열크기] 형태로 열의 크기는 특정하여야 한다. (int arr[][3])

#include <stdio.h>

int sum(int arr[], int n)
{
    int ret = 0;
    for (int i = 0; i < n; i++) ret += arr[i];
    return ret;
}

void print_avg(int arr[], int n)
{
    printf("%.1f \n", sum(arr, n) / double(n));
}

int main()
{
    int A[5] = {1, 2, 3};
    int N = 3;
    print_avg(A, N);
    return 0;
}

파이썬에서 global을 이용하면 함수 밖의 변수를 수정하는 것이 가능했다.

C언어에서는 아래 두 가지 방법을 이용하면 같은 기능을 구현할 수 있다.

  1. 값에 의한 전달(call by value) / 참조에 의한 전달(call by reference)

    #include <stdio.h>
    
    void f(int &a, int &b)
    {
        a += b++;
    }
    
    int main()
    {
        int x = 0, y = 1;
        f(x, y);
        printf("x = %d, y = %d", x, y);  // x = 1, y = 2
        return 0;
    }
  2. 전역 변수

    #include <stdio.h>
    
    int x = 0, y = 1;
    
    void f()
    {
        x += y++;
    }
    
    int main()
    {
        f();
        printf("x = %d, y = %d", x, y);  // x = 1, y = 2
        return 0;
    }

[연습문제]

다음 파이썬 함수들을 C언어로 구현해보시오.

파이썬 코드

C언어 코드

A = [1, 2, 4, 8, 16]
print("min =", min(A))
print("max =", max(A))

a, b = 10, 20
a, b = b, a
print(f"a = {a}, b = {b}")
#include <stdio.h>

// min 함수 구현

// max 함수 구현

// swap 함수 구현

int main()
{
    int N = 5;
    int A[5] = {1, 2, 4, 8, 16};
    printf("min = %d \n", min(A, N));
    printf("max = %d \n", max(A, N));
    
    int a = 10, b = 20;
    swap(a, b);
    printf("a = %d, b = %d", a, b);
    
    return 0;
}

입력

해당 문제는 함수만 작성하여 제출하는 문제입니다.


출력

함수 내에서 값을 출력하면 안됩니다.


출처

klee
로그인해야 코드를 작성할 수 있어요.