你可以修改代码中的输出部分,将第一项与其他项分开处理。以下是修改后的代码:
void Exp(HLink H) {
HLinkNode* current = H->next;
HLinkNode* prev = H;
int isMerged = 0; // 标记是否已经合并了系数
while (current != NULL) {
if (current->next != NULL && current->exponent == current->next->exponent) {
// 如果下一个节点的指数与当前节点相同,则合并系数
current->coefficient += current->next->coefficient;
HLinkNode* temp = current->next;
current->next = current->next->next;
free(temp); // 释放合并的节点
isMerged = 1;
} else {
if (isMerged) {
// 如果已经合并了系数,则输出合并后的系数
if (current->coefficient != 0) {
printf("%+f", current->coefficient);
if (current->exponent != 0) {
printf("x^%d ", current->exponent);
}
}
isMerged = 0;
} else {
// 否则按照原始系数输出
if (prev == H || prev == NULL) { // 处理第一项
if (current->coefficient != 0) {
if (current->coefficient != 1) {
printf("%fx^%d ", current->coefficient, current->exponent);
} else {
if (current->exponent == 0) {
printf("%f ", current->coefficient);
} else if (current->exponent == 1) {
printf("x ");
} else {
printf("x^%d ", current->exponent);
}
}
}
} else {
if (current->coefficient != 0) {
if (current->coefficient != 1) {
printf("%+fx^%d ", current->coefficient, current->exponent);
} else {
if (current->exponent == 0) {
printf("%+f ", current->coefficient);
} else if (current->exponent == 1) {
printf("+x ");
} else {
printf("+x^%d ", current->exponent);
}
}
}
}
}
prev = current;
current = current->next; // 移动到下一个节点
}
}
}
现在,输出函数将能够正确合并指数相同的项,并正确输出第一项。
内容由零声教学AI助手提供,问题来源于学员提问