马上线性结构(C语言)就要考试了,感觉都没怎么学,赶快把实验重新敲一下。
要求:
- 输入格式说明:以指数递降方式输入多项式非零系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。
- 输出格式说明:以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格
- 样例输入与输出:
序号 输入 输出 1 3 4 -5 2 6 1 -2 0 12 3 -10 1 6 0 2 5 20 -7 4 3 1 100 19 -28 3 3 0 3 1000 0 0 0 4 -1000 1000 999 0 -1000000 999
#include <iostream>
using namespace std;
typedef struct{ //项的表示
float coef; //系数
int expn; //指数
}term,ElemType;
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
typedef LinkList polynomial; //用代表头节点的有序链表表示多项式
//存储多项式
polynomial CreatPolyn(){
//创建一个空链表
LinkList P = (LNode*)malloc(sizeof(LNode));
P->next = NULL;
//输入数据
cout<<"请输入多项式:"<<endl;
LinkList p = P;
char ch;
while(ch!='\n'){
LinkList s = (LNode*)malloc(sizeof(LNode));
cin>>s->data.coef>>s->data.expn;
cin.get(ch);
p->next = s;
s->next = NULL;
p = s;
}
return P;
}
//打印输出多项式
void PrintPolyn(LinkList P){
LinkList p = P->next;
cout<<p->data.coef<<" "<<p->data.expn;
p = p->next;
while(p&&p->data.coef){
cout<<" "<<p->data.coef<<" "<<p->data.expn;
p = p->next;
}
}
//计算求导后的多项式
polynomial ComputePolyn(LinkList P){
LinkList S = (LNode*)malloc(sizeof(LNode));
S->next = NULL;
LinkList p = P->next;
LinkList t = S;
while(p){
LinkList s = (LNode*)malloc(sizeof(LNode)); //临时节点必须放在循环里
s->data.coef = p->data.coef*p->data.expn;
s->data.expn = p->data.expn-1<0?0:p->data.expn-1;
t->next = s;
s->next = NULL;
t = s;
p = p->next;
}
return S;
}
int main(){
LinkList P = CreatPolyn(); //原多项式
LinkList S = ComputePolyn(P); //求导后的多项式
cout<<"求导后的多项式:"<<endl;
PrintPolyn(S); //输出多项式
}
刚学的很新鲜,如有不足还请大佬们指正。