C 과제: Finding the y value
질문
내용
다음 함수의 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;
}
댓글남기기