题目描述:
设计函数求一元多项式的导数。(注:xn(n为整数)的一阶导数为nx^n−1 。)
输入格式:
以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过 1000 的整数)。数字间以空格分隔。
输出格式:
以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。注意“零多项式”的指数和系数都是 0,但是表示为 0 0。
输入样例:
3 4 -5 2 6 1 -2 0
输出样例:
12 3 -10 1 6 0
程序思想
- 数列中偶数位置存放系数,奇数位置存放指数;
- 由于程序用指数递降方式输入多项式非零项系数,故可以用指数为0判断输入结束;
- 计算:系数 = 原来的系数 * 原来的指数, 指数 = 原来的指数 - 1(指数小于0也没关系,不会输出);
- 打印输出。
#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;
}