)
Else两链表指针都后移;if(链表1到头)输出链表2剩余的节点;else(即链表二到头)输出链表1剩余的节点;}〕求值函数:
voidCalc(){输入x的值;依次调用链表一的节点,求出单项式的值相加后输出;}7〕求导函数:
voidDaohanshu(){输出多项式一的导函数;}三、详细设计#include#include#includetypedefstructLNode//元素类型{floatxishu;intzhishu;structLNode*next;}LNode,*Linklist;
LinklistList1=NULL;LinklistList2=NULL;LinklistIn(LinklistL)//依次往链尾插{Linklistp;floata;intb;Linklisthead=(Linklist)malloc(sizeof(LNode));L=head;head->zhishu=0;//head->zhishu头结点放的是多项式的项数p=head;p->next=NULL;printf("请输入一个多项式:
\n");while(scanf("%f%d",&a,&b)&&(a||b))//默认多项式是按指数由小到大输入{//printf("%f%d\n",a,b);(head->zhishu)++;//printf("%3d\n",L->zhishu);Linklistq=(Linklist)malloc(sizeof(LNode));q->xishu=a;q->zhishu=b;if(p->next==NULL){p->next=q;q->next=NULL;p=head;}else{if(p->next->zhishu<=q->zhishu){q->next=p->next;p->next=q;p=head;}else{p=p->next;}}}printf("您已成功输入一个多项式!
!
\n");
returnL;}voidInput(){List1=In(List1);List2=In(List2);}voidOut(LinklistL){Linklistp;p=L->next;printf("此多项式有%3d项",L->zhishu);while(p!
=NULL)//按指数由大到小输出{%3d",p->xishu,p->zhishu);p=p->next;}printf("\n");}voidOutput(){printf("第一个多项式为:
\n");Out(List1);printf("第二个多项式为:
\n");Out(List2);}voidAdd(){Linklistp1,p2;p1=List1->next;p2=List2->next;printf("相加后的多项式为:
\n");while(p1&&p2){if(p1->zhishu>p2->zhishu){
%3dp1=p1->next;
",p1->xishu,p1->zhishu);
}elseif(p1->zhishuzhishu)
{
%3dp2=p2->next;
",p2->xishu,p2->zhishu);
}else{
%3dp1=p1->next;p2=p2->next;
",p1->xishu+p2->xishu,p1->zhishu);
}}if(p1==NULL){while(p2){
%3dp2=p2->next;
",p2->xishu,p2->zhishu);
}}else{while(p1){
%3dp1=p1->next;
",p1->xishu,p1->zhishu);
}}printf("\n");
}voidSub(){Linklistp1,p2;p1=List1->next;p2=List2->next;printf("相减后的多项式为:
\n");while(p1&&p2){if(p1->zhishu>p2->zhishu){
%3dp1=p1->next;
",p1->xishu,p1->zhishu);
}elseif(p1->zhishuzhishu)
{
%3dp2=p2->next;
",-p2->xishu,p2->zhishu);
}else{if(p1->xishu-p2->xishu!
=0){%3d",p1->xishu-p2->xishu,p1->zhishu);}p1=p1->next;p2=p2->next;}}if(p1==NULL){while(p2){%3d",-p2->xishu,p2->zhishu);p2=p2->next;}}else{while(p1){
%3dp1=p1->next;
",p1->xishu,p1->zhishu);
}}printf("\n");
}voidCalc(){intx;doublesum=0;Linklistp;printf("请输入x的值:
");scanf("%d",&x);p=List1->next;while(p){
sum+=p->xishu*pow(x,p->zhishu);p=p->next;}printf("多项式1在x处的值为:
%0.1lf",sum);printf("\n");}voidDaohanshu(){Linklistp;p=List1->next;printf("多项式1的导函数为:
\n");while(p){%3d",p->xishu*p->zhishu,p->zhishu-1);p=p->next;}printf("\n");}intmain(){intnum;while
(1){printf("-----------------------------------------------\n");printf("1-------输入并建立多项式;\n");printf("2-------输出其指系数排列;\n");printf("3-------多项式相加;\n");printf("4-------多项式相减;\n");printf("5-------计算多项式在x处的值;\n");printf("6-------求多项式a的导函数a';\n");printf("0-------退出\n");printf("-----------------------------------------------\n");printf("请输入您要选择的功能:
");scanf("%d",&num);switch(num){case1:
Input();break;//输入函数case2:
Output();break;//输出函数case3:
Add();break;//函数相加case4:
Sub();break;//函数相减case5:
Calc();break;//计算函数在x处的值case6:
Daohanshu();break;//求函数的导函数
case0:
exit
(1);default:
printf("输入错误,请重新输入!
!
!
");}}free(List1);free(List2);return0;}四、调试分析由于链表是设置成为全局变量,所以任意函数都可以修改它,存在一定风险性。
但这也为后来的函数方便了,所有的函数统一没有参数。
刚开始时曾忽略了一些变量的类型以及没有考虑到指针的返回问题,使调试程序浪费了一定的时间。
今后应重视确定参数的变量和赋值属性的区分和标识。
本程序模块简洁,在main()函数里得到充分表达;链表默认用户输入是按指数从小到大的顺序输入的,而默认输出时按指数从大到小;输入时,依次把节点插在链表的末端。
五、用户手册1.本程序运行环境为Windows操作系统,执行文件为:
进入演示程序后显示的界面:
六、测试结果
中南民族大学数据结构课程设计报告
姓
名:
康宇
年
级:
2021
学
号:
10061014
专
业:
计算机科学与技术
指导老师:
宋中山