PAT1010 一元多项式求导(C语言)

该博客介绍了如何使用C语言设计函数求解一元多项式的导数。程序思路是利用指数递降的方式读取输入的非零项系数和指数,通过计算新的系数(原系数乘以原指数)和更新指数(减1),得到导数多项式,并以相同格式输出。样例展示了输入和输出的格式,强调了指数为0的特殊情况及其处理方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述:
设计函数求一元多项式的导数。(注:x​n​​(n为整数)的一阶导数为nx^​n−1​​ 。)
输入格式:
以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过 1000 的整数)。数字间以空格分隔。
输出格式:
以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。注意“零多项式”的指数和系数都是 0,但是表示为 0 0。
输入样例:

3 4 -5 2 6 1 -2 0

输出样例:

12 3 -10 1 6 0
程序思想
  1. 数列中偶数位置存放系数,奇数位置存放指数;
  2. 由于程序用指数递降方式输入多项式非零项系数,故可以用指数为0判断输入结束;
  3. 计算:系数 = 原来的系数 * 原来的指数, 指数 = 原来的指数 - 1(指数小于0也没关系,不会输出);
  4. 打印输出。
#include <stdio.h>
int eqt[100];
int main() {
	int i = 0, k;
	//输入数值,k中存放的数值的个数
	do {
		scanf("%d %d", &eqt[i], &eqt[i + 1]);
		i += 2;
	} while (eqt[i - 1] != 0);
	k = i;
	//进行求导计算
	for (i = 0; i < k; i++) {
		if (i % 2 == 0) {
			eqt[i] = eqt[i] * eqt[i + 1];
		} else {
			eqt[i] -= 1;
		}
	}

	//打印输出
	i = 0;
	//注:当输入0 0时,输出0 0,这是个坑,大家要注意。
	if (eqt[i] == 0) {
		printf("0 0");
	}
	for (; i < k; i++) {
		//退出打印的条件
		if (eqt[i] == 0 && i % 2 == 0) {
			break;
		}
		printf("%d", eqt[i]);
		//最后值后面无空格,故存在这一判断
		if (!(eqt[i + 1] == 0 && (i + 1) % 2 == 0)) {
			printf(" ");
		}
	}
	printf("\n");
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值