从控制台分别输入两个关于x的多项式,其中各项系数均为整数,输入时乘号不可忽略,乘方以“^”表示,x的指数按降序排列。各操作数、运算符之间用空格分隔。输出两个多项式相乘的结果,其中x的指数按降序排列。要求:使用队列的顺序存储实现。
稍等,初始化队列,入队这些就不用说明了,一个大一的孩子都知道:
#include <stdio.h>
#include <stdlib.h>
#define MAX_TERMS 100
#define MAX(a, b) ((a) > (b) ? (a) : (b))
typedef struct {
int coef;
int expon;
} term;
typedef struct {
term terms[MAX_TERMS];
int front;
int rear;
} queue;
void init_queue(queue *q) {
q->front = 0;
q->rear = 0;
}
int is_empty(queue *q) {
return q->front == q->rear;
}
int is_full(queue *q) {
return q->rear == MAX_TERMS - 1;
}
void enqueue(queue *q, term t) {
if (is_full(q)) {
printf("队列已满\n");
exit(1);
}
q->terms[q->rear] = t;
q->rear++;
}
term dequeue(queue *q) {
if (is_empty(q)) {
printf("队列为空\n");
exit(1);
}
term t = q->terms[q->front];
q->front++;
return t;
}
void read_polynomial(queue *q) {
int coef, expon;
char ch;
do {
scanf("%d%c%d", &coef, &ch, &expon);
term t;
t.coef = coef;
t.expon = expon;
enqueue(q, t);
} while (ch != '\n');
}
term multiply_terms(term t1, term t2) {
term result;
result.coef = t1.coef * t2.coef;
result.expon = t1.expon + t2.expon;
return result;
}
void multiply_polynomials(queue *q1, queue *q2, queue *result) {
int i, j;
init_queue(result);
while (!is_empty(q1)) {
term t1 = dequeue(q1);
queue temp;
init_queue(&temp);
while (!is_empty(q2)) {
term t2 = dequeue(q2);
term t = multiply_terms(t1, t2);
enqueue(&temp, t);
}
while (!is_empty(&temp)) {
term t = dequeue(&temp);
enqueue(result, t);
}
init_queue(&temp);
q2->front = 0;
q2->rear = 0;
}
}
void sort_polynomial(queue *q) {
int i, j, n;
term temp;
n = q->rear - q->front;
for (i = q->front; i < q->rear - 1; i++) {
for (j = i + 1; j < q->rear; j++) {
if (q->terms[i].expon < q->terms[j].expon) {
temp = q->terms[i];
q->terms[i] = q->terms[j];
q->terms[j] = temp;
}
}
}
}
void print_polynomial(queue *q) {
int i;
for (i = q->front; i < q->rear; i++) {
printf("%dx^%d ", q->terms[i].coef, q->terms[i].expon);
if (i < q->rear - 1) {
printf("+ ");
}
}
printf("\n");
}
int main() {
queue q1, q2, result;
init_queue(&q1);
init_queue(&q2);
init_queue(&result);
printf("输入第一个多项式:");
read_polynomial(&q1);
printf("输入第二个多项式:");
read_polynomial(&q2);
multiply_polynomials(&q1, &q2, &result);
sort_polynomial(&result);
printf("两个多项式的积为:");
print_polynomial(&result);
return 0;
}