两个多项式相加 — c语言【数组下标—记幂次;符号位—有输出且下一项不为0才添加;1,-1,0—幂次,系数需特殊对待】

题目:

一个多项式可以表达为x的各次幂与系数乘积的和,比如:2x6+3x5+12x3+6x+20 现在,你的程序要读入两个多项式,然后输出这两个多项式的和,也就是把对应的幂上的系数相加然后输出。程序要处理的幂最大为100。

输入格式:

总共要输入两个多项式,每个多项式的输入格式如下:

每行输入两个数字,第一个表示幂次,第二个表示该幂次的系数,所有的系数都是整数。第一行一定是最高幂,最后一行一定是0次幂。

注意第一行和最后一行之间不一定按照幂次降低顺序排列;如果某个幂次的系数为0,就不出现在输入数据中了;0次幂的系数为0时还是会出现在输入数据中。

输出格式:

从最高幂开始依次降到0幂,如:2x6+3x5+12x3-6x+20

注意其中的x是小写字母x,而且所有的符号之间都没有空格,如果某个幂的系数为0则不需要有那项。


思路:

1.用数组依次接收两个多项式。每个多项式从最高幂次开始输入,0幂次结束,中间顺序不定;为了便于计算相同幂次相加后的系数和,可以将幂次设定为数组下标,这样接收完第二个多项式后数组内保存的便是两个多项式对应幂次的系数和。

2.将相加后的结果输出。此处应分为幂次大于1,幂次等于1和幂次小于1(即幂次为0的常数项)三种情况输出;其次,还应再细分为系数等于1,系数等于-1及系数既不等于1也不等于-1三种情况输出;另要特别注意符号位的添加,具体见代码注释。


代码:

#include<stdio.h>

//添加符号位:若下一项系数为正,则加“+”;系数为负则无需再次添加“-”
void is_pos(int num) {
	if (num > 0) {
		printf("+");
	}
}

int main() {
	//1.两个多项式相加,保存在数组中
	int arr[101] = { 0 };
	int m = 0, n = 0,flag=-2,max=0;
	do {
		if (scanf("%d %d", &m, &n)) {
			arr[m] += n;	 //将多项式幂次相同的系数相加		
			if (m > max) {	//记录出现的最高次幂
				max = m;
			}
			if (m == 0) { //设定循环次数:输入两个多项式(即幂次为0出现两次)后,循环结束
				flag++;
			}
		}
	} while (flag);

	//2.输出结果(根据幂次大于1、等于1和幂次为0{即常数项}三种情况输出)

	int i = 0,f = 0;	//f用来标记目前的多项式有无内容输出,便于判断符号位是否添加

//1)幂次大于1时,分系数为1,系数为-1和系数既不为1也不为-1这3种情况输出
    for (i = max; i > 1; i--) {	
		if (arr[i] != 0) {
			f = 1;
			if (arr[i] != 1&&arr[i]!=-1) {    //系数既不为1也不为-1时输出
				printf("%dx%d", arr[i], i);
			}
			else if (arr[i] == 1) {    //系数为1时输出
				printf("x%d", i);
			}
			else if (arr[i] == -1) {    //系数为-1时输出
				printf("-x%d", i);
			}
            //符号位:前面有输出,中间项的系数不为0且下一项系数也不为0时,添加符号
			if (arr[i - 1] != 0) { 
				is_pos(arr[i - 1]);
			}
		}
		else {	//符号位:前面没有输出,此项系数为0但下一项系数不为0时,不添加符号
                //符号位:前面有输出,此项系数为0但下一项系数不为0时,添加符号
			if (0!=f&&arr[i - 1] != 0) {
				is_pos(arr[i - 1]);
			}
		}
	}

//2)幂次等于1时,按系数为1,系数为-1和系数既不为1也不为-1这3种情况输出
	if (i == 1) {	
		if (arr[i] != 0) {
			f = 1;
			if (arr[i] != 1 && arr[i] != -1) {
				printf("%dx", arr[i]);
			}
			else if (arr[i] == 1) {
				printf("x");
			}
			else if (arr[i] == -1) {
				printf("-x");
			}
			is_pos(arr[0]);
		}
		else {
			if (0 != f && arr[i - 1] != 0) {
				is_pos(arr[0]);
			}
		}
		i--;
	}

//3)幂次为0时,按照前面有输出,且常数项系数不为0;前面无输出,只输出常数项系数这2种情况输出
	if (i == 0) {		
		if (f&&arr[0]!=0) {
			printf("%d", arr[0]);
		}
		else if (f==0) {		
			printf("%d", arr[0]);
		}
	}

	return 0;
}

结果:


★要是觉得还不错,就点个赞吧☛

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一元多项式相加C语言数组实现: ```c #include <stdio.h> #include <stdlib.h> #define MAX_TERMS 101 // 多项式最多项数 typedef struct { float coef; // 系数 int exp; // 指数 } term; void poly_add(term a[], int na, term b[], int nb, term c[], int *nc) { int pa = 0, pb = 0, pc = 0; while (pa < na && pb < nb) { if (a[pa].exp == b[pb].exp) { float sum = a[pa].coef + b[pb].coef; if (sum != 0) { c[pc].coef = sum; c[pc].exp = a[pa].exp; pc++; } pa++; pb++; } else if (a[pa].exp > b[pb].exp) { c[pc].coef = a[pa].coef; c[pc].exp = a[pa].exp; pc++; pa++; } else { c[pc].coef = b[pb].coef; c[pc].exp = b[pb].exp; pc++; pb++; } } while (pa < na) { c[pc].coef = a[pa].coef; c[pc].exp = a[pa].exp; pc++; pa++; } while (pb < nb) { c[pc].coef = b[pb].coef; c[pc].exp = b[pb].exp; pc++; pb++; } *nc = pc; } void print_poly(term poly[], int n) { for (int i = 0; i < n; i++) { printf("%.2f", poly[i].coef); if (poly[i].exp == 0) { printf(" + "); } else if (poly[i].exp == 1) { printf("x + "); } else { printf("x^%d + ", poly[i].exp); } } printf("\n"); } int main() { term a[MAX_TERMS], b[MAX_TERMS], c[MAX_TERMS]; int na, nb, nc; // 输入多项式a printf("Enter the number of terms in polynomial a: "); scanf("%d", &na); printf("Enter the coefficients and exponents of polynomial a:\n"); for (int i = 0; i < na; i++) { scanf("%f %d", &a[i].coef, &a[i].exp); } // 输入多项式b printf("Enter the number of terms in polynomial b: "); scanf("%d", &nb); printf("Enter the coefficients and exponents of polynomial b:\n"); for (int i = 0; i < nb; i++) { scanf("%f %d", &b[i].coef, &b[i].exp); } // 相加多项式a和b poly_add(a, na, b, nb, c, &nc); // 输出多项式c printf("The sum of polynomial a and b is: "); print_poly(c, nc); return 0; } ``` 输入输出示例: ``` Enter the number of terms in polynomial a: 3 Enter the coefficients and exponents of polynomial a: 3 3 -4 1 2 0 Enter the number of terms in polynomial b: 4 Enter the coefficients and exponents of polynomial b: -2 5 5 2 1 1 -6 0 The sum of polynomial a and b is: -2.00x^5 + 3.00x^3 + 5.00x^2 - 3.00x - 4.00 ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值