티스토리 뷰
C언어를 이용한 자료구조 실습입니다.
I. 문제
2개의 다항식을 입력받아서 이들을 빼고, 그 결과 다항식을 출력하는 C 프로그램을 다음과 같이 작성하고, 실행을 통해서 테스트하라.
- 다항식의 타입 poly를 정의하라. (다항식의 각 차수에 대해서 한 개의 항이 표현됨)
- 2개의 다항식을 선언시 초기화하여 정의하라.
- 매개변수로 전달된 다항식 p를 다항식의 형식으로 출력하는 함수 print_poly(p)를 작성하라.
- 2개의 다항식, p1, p2를 전달받고, 이들을 빼고 그 결과 다항식 p3를 반환하는 sub_poly(p1, p2, p3)를 작성하라.
- 다항식 p와 x 값을 매개변수로 전달받아서 다항식의 값을 계산하여 반환하는 함수 eval_poly (p, x)를 작성하라.
II. 구현
#include <stdio.h>
#include <math.h>
// poly 정의
typedef struct {
int degree; // 차수
int coef[10]; // 계수
}poly;
// 구조체 poly 형식의 다항식 p1,p2를 입력받아 p-p2 결과 p3를 반환
poly sub_poly(poly p1, poly p2)
{
poly p3;
int p1i = 0, p2i = 0, p3i = 0; // 인덱스
int a_Degree = p1.degree, b_Degree = p2.degree; // 최고 차항으로 차수 초기화
while (p1i <= p1.degree && p2i <= p2.degree) {
if (a_Degree > b_Degree) { // p1의 차수 > p2의 차수 -> p3에 p1값 삽입
p3.degree = p1.degree;
p3.coef[p3i++] = p1.coef[p1i++];
a_Degree--;
}
else if (b_Degree > a_Degree) { // p1의 차수 < p2의 차수 -> p3에 p2값 삽입
p3.degree = p2.degree;
p3.coef[p3i++] = p2.coef[p2i++];
b_Degree--;
}
else { // 차수가 같다면 -> p1-p2 값 삽입
p3.degree = p1.degree;
p3.coef[p3i++] = p1.coef[p1i++] - p2.coef[p2i++];
}
}
return p3;
}
//출력함수
void print_poly(poly p)
{
int point = 0;
// 1차까지 출력
for (int i = p.degree; i > 0; i--){
printf("%d*X^%d + ", p.coef[point], i);
point++;
}
// 상수항 출력
printf("%d\n", p.coef[point]);
}
// 다항식 p와 x값을 받아 계산 결과를 반환
double eval_poly(poly p, double x)
{
int point = 0;
double res = 0;
for (int i = p.degree; i > 0; i--){
res += p.coef[point] * pow(x, i); // pow 함수 이용
point++;
}
res += p.coef[point];
return res;
}
int main()
{
double x = 0.0, res = 0;
poly p1 = { 4, {1,3,2,1,3} };
poly p2 = { 2, { 1,0,1} };
//poly p1 = { 3, {1,3,2,5} };
//poly p2 = { 2, { 2,1,4} };
printf("p1: ");
print_poly(p1);
printf("p2: ");
print_poly(p2);
// p3 구하기
poly p3 = sub_poly(p1, p2);
printf("p3: ");
print_poly(p3);
// p3의 x결과 출력
printf("\n x값을 입력해주세요 : ");
scanf("%lf", &x);
res = eval_poly(p3, x);
printf("(x,res) = (%0.2lf , %0.2lf)\n", x, res);
return 0;
}
III. 결과
'C | 자료구조' 카테고리의 다른 글
[C/자료구조] 연결리스트 생성 구현하기 (0) | 2023.10.28 |
---|---|
[C/자료구조] 희소행렬의 표현과 덧셈함수 구현하기 (0) | 2023.10.28 |
[C/자료구조] 순환을 이용해 셀 채우기 (0) | 2023.10.27 |
[C/자료구조] Ackermann 함수 (0) | 2023.10.27 |
[C] 지뢰 찾기 게임 구현하기 (0) | 2022.10.07 |
댓글