酷代码 AI
菜单
全部AI  /  热门  /  AI写代码神器
服务商

C语言题 输入两个最高幂为16的多项式,输出其乘积,格式如下: 2 1.362 1 8.8 2 -5.02 0 30.3 3 6.6 0 0 表示多项式1是 1.362x^2+8.8x^1-5.02x^2+30.3,多项式2是6.6x^3。 读入0次幂及其系数后停止输入; 输入并不需要按照幂次高低顺序,除0次幂外同一幂次可多次输入; 输出格式:从最高幂开始依次降到0幂,系数为0不输出,最高次幂的系数为正数时的正号不输出,输出保留两位小数: 200.03x^8+300.23x^2-1.00x^1+30.26

# 多项式乘法程序 以下是一个C语言程序,用于计算两个最高幂为16的多项式的乘积: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> #define MAX_POWER 32 // 16+16=32 typedef struct { double coeff; int power; } Term; void read_polynomial(Term poly[], int *count) { *count = 0; while (1) { int power; double coeff; scanf("%d %lf", &power, &coeff); if (power == 0) { poly[*count].power = 0; poly[*count].coeff = coeff; (*count)++; break; } poly[*count].power = power; poly[*count].coeff = coeff; (*count)++; } } void multiply_polynomials(Term poly1[], int count1, Term poly2[], int count2, double result[]) { for (int i = 0; i <= MAX_POWER; i++) { result[i] = 0.0; } for (int i = 0; i < count1; i++) { for (int j = 0; j < count2; j++) { int power = poly1[i].power + poly2[j].power; result[power] += poly1[i].coeff * poly2[j].coeff; } } } void print_polynomial(double result[]) { int first_term = 1; for (int power = MAX_POWER; power >= 0; power--) { if (fabs(result[power]) > 1e-6) { // 非零系数 if (!first_term) { printf("%c", result[power] > 0 ? '+' : '-'); } else if (result[power] < 0) { printf("-"); } double abs_coeff = fabs(result[power]); if (power == 0) { printf("%.2f", abs_coeff); } else if (fabs(abs_coeff - 1.0) < 1e-6) { printf("x^%d", power); } else { printf("%.2fx^%d", abs_coeff, power); } first_term = 0; } } if (first_term) { // 所有系数都是0 printf("0"); } printf("\n"); } int main() { Term poly1[100], poly2[100]; int count1, count2; double result[MAX_POWER + 1]; read_polynomial(poly1, &count1); read_polynomial(poly2, &count2); multiply_polynomials(poly1, count1, poly2, count2, result); print_polynomial(result); return 0; } ``` ## 程序说明 1. 数据结构:使用结构体`Term`存储多项式的每一项,包含系数和幂次。 2. 输入处理: - `read_polynomial`函数读取多项式,直到遇到0次幂为止 - 输入格式为"幂次 系数"对,可以乱序输入 3. 乘法计算: - 初始化一个数组`result`来存储乘积结果 - 使用双重循环计算两个多项式的乘积 - 结果按幂次存储在数组中 4. 输出处理: - 从最高次幂开始输出 - 系数为0的项不输出 - 处理正负号和系数为1的特殊情况 - 保留两位小数 ## 注意事项 1. 多项式乘积的最高次幂可能达到32(16+16),因此结果数组大小需要足够。 2. 浮点数比较使用`fabs()`函数和一个小阈值(1e-6)来判断是否为0,避免浮点精度问题。 3. 输出时处理了首项的正号不显示,以及系数为1时的简化显示。 [2025-04-06 12:44:18 | AI写代码神器 | 907点数解答]

相关提问