문제 개요
이번 글에서는 다음 급수식의 합을 계산하는 C 프로그램을 살펴보겠습니다.
Sum = 1 - n²/2! + n⁴/4! - n⁶/6! + n⁸/8! - n¹⁰/10!
사용자는 프로그램 실행 중에 n 값을 직접 입력하며, math.h 헤더 파일에 미리 정의되어 있는 거듭제곱 함수 pow()를 활용해 급수의 합을 구하게 됩니다.
해결 방법
급수의 각 항은 두 부분으로 나눌 수 있습니다. 분자는 num의 짝수 거듭제곱(pow(num, i))이고, 분모는 해당 차수의 팩토리얼(i!)입니다. 차수가 2, 6, 10인 항은 음수(-) 부호를, 차수가 4, 8인 항은 양수(+) 부호를 가집니다. 따라서 반복문 안에서 팩토리얼을 누적으로 계산하고, 부호 조건에 따라 각 항을 더하거나 빼주면 됩니다.
알고리즘
미리 정의된 함수를 사용하여 급수의 합을 계산하는 절차는 다음과 같습니다.
1단계 − num 값을 입력받습니다.
2단계 − fact = 1, sum = 1, n = 5로 초기화합니다.
3단계 − i를 1부터 n까지 반복하면서 다음을 수행합니다.
a. fact = fact * i 로 팩토리얼을 누적 계산 b. i % 2 == 0 인지 확인 (짝수 차수 항만 처리) c. i == 2 또는 i == 6 또는 i == 10 이면 d. sum += -pow(num, i) / fact (음수 항) e. 그렇지 않으면 sum += pow(num, i) / fact (양수 항) f. 최종 sum 을 출력
C 프로그램 전체 코드
다음은 미리 정의된 함수 pow()를 사용하여 급수의 합을 계산하는 C 프로그램입니다.
#include<stdio.h>
#include<conio.h>
#include<math.h>
void main(){
int i,n=5,num;
long int fact=1;
float sum=1;
printf("Enter the n value:");
scanf("%d", &num);
for(i=1;i<=n;i++){
fact=fact*i;
if(i%2==0){
if(i==2||i==6||i==10)
sum+= -pow(num,i)/fact;
else
sum+=pow(num,i)/fact;
}
}
printf("sum is %f", sum);
}
코드 설명
- #include<math.h> : 거듭제곱 계산에 필요한
pow()함수를 사용하기 위해 포함합니다. - fact 변수 : 반복문이 진행됨에 따라 1!, 2!, 3!, 4!, 5! 순으로 팩토리얼 값이 누적 저장됩니다.
- 부호 처리 : 차수가 2, 6, 10인 항은 마이너스(-)로, 차수가 4, 8인 항은 플러스(+)로 더해집니다.
- 변수 n의 값을 5보다 크게 설정하면 n⁶, n⁸, n¹⁰처럼 더 많은 항까지 계산할 수 있습니다.
실행 결과
위 프로그램을 컴파일하여 실행하면 다음과 같은 결과가 출력됩니다.
Enter the n value:10 sum is 367.666656
n에 10을 입력한 경우, sum = 1 − 10²/2! + 10⁴/4! = 1 − 50 + 416.67 ≈ 367.67이 되어 출력 결과와 일치하는 것을 확인할 수 있습니다.