题目描述:
设计函数求一元多项式的导数。(注:xn(n为整数)的一阶导数为n*xn-1。)
输入格式:以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。
输出格式:以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。注意“零多项式”的指数和系数都是0,但是表示为“0 0”。
输入样例:3 4 -5 2 6 1 -2 0输出样例:
12 3 -10 1 6 0
思路:
运用while...EOF来判断是否输入结束。
(1)用数组将指数和系数存储,对于指数为0的项需要特判为0;需要记录不为零的项,用以确定是否输出空格。
(2)在循环中输入的同时输出结果;
调试时可以用ctrl+z 之后回车触发EOF。
(1)代码如下:
#include <cstdio>
const int max_n = 1010;
int main()
{
int n, a, count = 0;
int p[max_n] = {};
while (scanf ("%d %d", &a, &n) != EOF)
{
p[n] = a;
}
p[0] = 0; //对幂次为0项的特判;
for (int i = 1; i <= 1000; i++)
{
p[i - 1] = p[i] * i;
p[i] = 0; //该循环中边界情况a[1000]的值无法覆盖为0,或者将for循环中的判断条件该位i <= 1001;
if (p[i - 1] != 0) count++; //否则会影响对非零项的统计;
}
if (count == 0) printf ("0 0"); //若不存在非零项,则认为是零项式。
else
{
for (int i =1000 ; i >= 0; i--)
{
if (p[i] != 0)
{
printf ("%d %d", p[i], i);
count--;
if (count != 0) printf (" "); //
}
}
}
return 0;
}
(2)代码如下:
#include <cstdio>
int main()
{
int exp, coe, f = 1; // f为判别条件,判断是够为零项式
while (scanf("%d%d", &coe, &exp) != EOF)
{
if (exp != 0)
if (f == 1)
{
printf ("%d %d", exp * coe, exp - 1);
f = 0;
}
else
{
printf (" %d %d", exp * coe, exp - 1);
}
}
if (f == 1) printf ("0 0");
return 0;
}