设计函数求一元多项式的导数。
输入格式:
以指数递降方式输入多项式非零项系数和指数。
输出格式:
以与输入相同的格式输出导数多项式非零项的系数和指数。“零多项式”的指数和系数都是 0,但是表示为 0 0。
输入样例:
3 4 -5 2 6 1 -2 0
输出样例:
12 3 -10 1 6 0
我的答案
#include<stdio.h>
#include<stdlib.h>
typedef struct term{
int coe;
int exp;
struct term* next;
}Term;
int main(void)
{
Term* head = (Term*)malloc(sizeof(Term));
Term* p, *tail = head;
while(1){
p = (Term*)malloc(sizeof(Term));
scanf("%d %d", &p->coe, &p->exp);
tail->next = p;
tail = p;
if(getchar()==0x0A)break; //★一种检查结束机制!!!
//scanf的输入会被空白符打断,但不吸收后面的空白符(只吸收%的之前的空白符)
//因此最后的enter和中间间隔的space都会被getchar读入作判断
}
tail->next = NULL;
if(head->next->coe == 0 && head->next->exp == 0){
printf("0 0");
return 0;
}
for(p=head->next; p!=NULL; p = p->next){
p->coe = p->coe * p->exp;
if(p->exp!=0)p->exp--;
else if(p->exp==0)p->exp==0;
}
for(p=head->next; p!=NULL; p = p->next){
if(p==tail || p->next->coe==0&&p->next->next==NULL)
//这里||前后的顺序不能换,先发现是tail则不做后面的,避免了NULL被访问
//写if条件里的&&||时均要注意这一点,避免因为判断对NULL进行访问
{printf("%d %d", p->coe, p->exp); break;}
else printf("%d %d ", p->coe, p->exp);
}
return 0;
}