#include #include #include #define MAX_TERMS 100 typedef struct poly_node *poly_pointer; typedef struct poly_node{ float coef; int expon; poly_pointer link; }poly_node; typedef struct y_node *y_pointer; typedef struct y_node{ char ex; y_pointer link; }y_node; y_pointer pm; y_pointer p; poly_pointer a; poly_pointer ptrA; void attach(float coefficient, int exponent, poly_pointer *ptr); void attach2(char , y_pointer*); float CalcPoly(poly_pointer* ,int , float, y_pointer* ); void main(){ int num; float x; while(1){ printf("--------¸Þ´º---------\n"); printf("1.ÀÔ·Â\n"); printf("2.¿¬»ê\n"); printf("3.Á¾·á\n"); scanf("%d",&num); switch(num) { case 1: int i; int numOfTerm1; ptrA = (poly_pointer)malloc(sizeof(poly_node)); pm = (y_pointer)malloc(sizeof(y_pointer)); a = ptrA; p = pm; printf("Ç×ÀÇ °³¼ö¸¦ ÀÔ·ÂÇϼ¼¿ä : "); scanf("%d",&numOfTerm1); getchar(); float temp; for(i = 0; i < numOfTerm1; i++) { printf("%d °è¼ö : ", i+1); scanf("%f", &temp); getchar(); a->coef = temp; printf("%d Â÷¼ö : ", i+1); scanf("%d", &a->expon); getchar(); if(i != numOfTerm1-1) { printf("%d ¿¬»ê(+,-,*,/) : ", i+1); scanf("%c", &p->ex); getchar(); attach2(p->ex,&pm); } fflush(stdin); attach(a->coef,a->expon,&ptrA); } pm ->link = NULL; ptrA->link = NULL; a = a->link; p = p->link; break; case 2: printf("x value : "); scanf("%f", &x); getchar(); printf("%f\n", CalcPoly(&a, numOfTerm1, x, &p)); break; // ÇÁ·Î±×·¥ Á¾·á case 3: printf("ÇÁ·Î±×·¥À» Á¾·áÇÕ´Ï´Ù.\n"); exit(0); default : printf("¸Þ´º¸¦ À߸ø ¼±ÅÃÇϼ̽À´Ï´Ù.\n"); } } } void attach(float coefficient, int exponent, poly_pointer *ptr) { poly_pointer temp; //temp¶ó´Â ³ëµå¸¦ »ý¼º temp = (poly_pointer)malloc(sizeof(poly_node)); temp -> coef = coefficient; //tempÀÇ coef °ª¿¡ coefficient°ªÀ» ÀúÀå temp -> expon = exponent; //tempÀÇ expon °ª¿¡ exponent°ªÀ» ÀúÀå (*ptr) -> link = temp; //*ptrÀÇ link °ªÀ» temp°ª ÀúÀå *ptr = temp; //*ptrÀÇ °ª¿¡ temp°ª ÀúÀå } void attach2(char ex, y_pointer *ptr2) { y_pointer temp2; temp2 = (y_pointer)malloc(sizeof(y_node)); temp2 -> ex = ex; (*ptr2) -> link = temp2; *ptr2 = temp2; } float CalcPoly(poly_pointer *ptr,int nt, float x, y_pointer *p) { float result = 0; int i; for(i = 0; i < nt; i++) { if(i == 0) { result += ((*ptr)->coef) * pow(x, (*ptr)->expon); continue; } if((*p)->ex == '+') result += (*ptr)->coef * pow(x, (*ptr)->expon); // °è¼ö * Áö¼ö else if((*p)->ex == '-') result -= (*ptr)->coef * pow(x, (*ptr)->expon); else if((*p)->ex == '*') result *= (*ptr)->coef * pow(x, (*ptr)->expon); else if((*p)->ex == '/') result /= (*ptr)->coef * pow(x, (*ptr)->expon); (*ptr) = (*ptr)->link; (*p) = (*p)->link; } return result; }