C 과제: Finding the y value

1 분 소요

질문

내용

다음 함수의 y값을 구하는 프로그램을 작성하시오.

\[y = 7x^3+6x^2+9ax^2+bx+c\] \[a = 2, b = 3, c = 5, x = 2\]

답변

내용

이 문제는 주어진 조건들을 식에 대입하여 계산한 후, y값을 찾기만 하면 되는 아주 단순하고 쉬운 문제이다.

먼저 다음의 문제 조건에 해당하는 정보들을 main 함수 내에 변수로 선언해주자.

(모두 정수형이므로 정수형 중 보편적으로 많이 사용되는 int형을 사용해주자.)

\[a = 2, b = 3, c = 5, x = 2\]
int main(void) {
    int a = 2, b = 3, c = 5, x = 2;

    return 0;
}

동일한 방식으로 정수형 변수 y도 선언해주어, 다음의 식 계산 후 도출된 값을 저장해주자.

\[y = 7x^3+6x^2+9ax^2+bx+c\]

즉,

int main(void) {
    int a = 2, b = 3, c = 5, x = 2;
    int y = 7*x*x*x+6*x*x+9*a*x*x+b*x+c;

    return 0;
}

마지막으로 y값을 출력하기 위한 적절한 출력문과 이에 필요한 헤더파일(stdio.h) 선언도 해주자.

#include <stdio.h>

int main(void) {
    int a = 2, b = 3, c = 5, x = 2;
    int y = 7*x*x*x+6*x*x+9*a*x*x+b*x+c;

    printf("y값: %d\n", y);

    return 0;
}

위의 방식으로 이 문제를 풀이해도 되지만, 필자는 여기서 한 가지 패턴(Pattern)을 발견하였다.

즉, 다음과 같이 식을 동류항끼리 묶어 정리해보면,

\[y = 7x^3+(6+9a)x^2+bx+c\]

주어진 식의 차수가 한 차수씩 작아진다.

그래서 필자는 먼저 주어진 식의 계수들을 배열에 담은 뒤, 반복문을 통해 x의 차수를 줄여나가면서 계산하는 방식으로 코드를 작성해보았다.

즉, 이를 코드로 보이면 다음과 같다.

#include <stdio.h>

// 아래의 a, b, c는 전처리기에 의하여 각각 2, 3, 5로 변경된다.

#define a 2     // 문제에 주어진 a 값은 2이므로
#define b 3     // 문제에 주어진 b 값은 3이므로
#define c 5     // 문제에 주어진 c 값은 5이므로

int main(void) {
    int arr[4] = {7, 6+9*a, b, c};      // 전처리기에 의해 arr 배열은 {7, 24, 3, 5}로 초기화가 이루어진다.
    int x=2;        // 문제에 주어진 x 값은 2이므로 2로 초기화
    int y=0;        // y 값은 0으로 초기화

    for(int i=0;i<4;i++) {         // 식의 총 항의 개수(arr 배열의 길이): 0~3까지 총 4회 반복.
        for(int j=3;j>i;j--)       // 식의 x 차수: 3->2->1->0, x 차수가 0일 때는 x를 곱할 필요가 없으므로 반복문이 실행되지 않게끔 구성함. 
            arr[i] *= x;    // arr[0]에 x는 3번->arr[1]에 x는 2번->arr[2]에 x는 1번 곱한 후 다시 arr[i]에 저장.
    
        y += arr[i];   // 그리고 arr[i]의 값을 y에 더한다. (주어진 식을 보면 각 항이 더해지고 있으므로)
    }
    
    printf("%d\n", y);      // y 값 출력

    return 0;
}

댓글남기기