题目描述:
设计函数求一元多项式的导数。(注:xn(n为整数)的一阶导数为n*xn-1。)
输入格式:以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。
输出格式:以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。注意“零多项式”的指数和系数都是0,但是表示为“0 0”。
输入样例:3 4 -5 2 6 1 -2 0输出样例:
12 3 -10 1 6 0
题目分析:
题目中因为没有说明将会输入的整数个数,所以需要借用while循环,通过观察发现,每次可以在输入两个整数后进行求导的操作,当最后一个整数输入时,下面时换行符而不再是空格,因此这可以当作退出循环的条件。另外还需要空格的输出以及对零多项式的判断,在求导的时候当读入的这一组的系数和指数中,指数等于0,那么这一组不用处理,其求导结果为零,不许输出,只有连系数也为零的指数多项式才需要输出两个0。
请看代码:
#include<stdio.h>
int main()
{
int xi,zhi,flag=0; //分别对应某一项的系数和指数 ,flag用于控制空格的输出
while(1){ //持续读入
scanf("%d%d",&xi,&zhi); //每当读入一组系数和未知数时进行求导操作。
if(zhi!=0){ //只有指数不为零才需要求导,指数为零的常数项在求导时会变成零。
if(flag){ //只有第一次求导时不行输出空格
printf(" ");
}else flag=1;
printf("%d %d",xi*zhi,zhi-1);
}
if(getchar()!=' ') break; //如果每次求导之后,下一个字符不是空格了,说明输入完毕,推出循环
}
if(!flag)printf("0 0"); //如果没有做过一个求导操作,说明输入的为常数项,求导之后为零多项式
return 0;
}