求解多项式积分文档格式.docx
- 文档编号:17141600
- 上传时间:2022-11-28
- 格式:DOCX
- 页数:13
- 大小:28.27KB
求解多项式积分文档格式.docx
《求解多项式积分文档格式.docx》由会员分享,可在线阅读,更多相关《求解多项式积分文档格式.docx(13页珍藏版)》请在冰豆网上搜索。
年月日
评分等级
备注
评分等级有五种:
优秀、良好、中等、及格、不及格
一、课题内容和要求
题目描述:
输入待求函数,积分上下限,求出结果。
基本要求:
(1)能正确求解多项式的单重和双重积分(存在x和y两个积分变量);
(2)能处理用户输入错误以及基本的逻辑错误。
提高要求:
(1)能设计出简捷易操作的窗口界面;
(2)能处理多重积分。
设计提示:
可采用链表结构描述多项式。
二、需求分析
1、【目标需求】:
(1)基本目标:
设计出一个程序可以生成任何多项式,并且能求解出该多项式的一重积分和二重积分;
(2)较高目标:
该程序可以求解出该多项式的多重积分。
2、【输入功能需求】:
(1)设计的程序可通过界面或提示输入相应的多项式。
3、【求解功能需求】:
程序可以正确生成多项式并且能得出相应的结论。
4、【输出答案功能需求】:
生成多项式后可以直接输入相应的指令得出相应的结果。
5、【程序界面需求】:
界面设计应美观实用,方便用户输入给定条件,有较强的容错功能。
6、【时间需求】:
程序可以较快地计算出结果。
三、概要设计
1、【算法设计】:
本题是一个数学计算题,要求对已知的多项式进行积分,主要思想是首先要设计出生该多项式的算法,然后利用积分公式分别对该多项式进行一重积分和二重积分,然后再利用简单的多项式相减的方法求解出最后的积分值。
多项式的每项都用简单链表的每个节点表示,每个节点中包含了多项式的系数和指数,以及保存指向下一个节点地址的变量。
计算积分时按照节点顺序分别对每个项求积分。
2、【主要数据设计】:
多项式以链表表示,链表中包含:
X的系数a,
指数exponentX,
Y的系数b,
指数exponentY。
这些封装在结构体student中。
3、【功能函数设计】:
函数:
create(void):
创建多项式(链表)。
print(structstudent*head):
查看系数和指数。
view_polynomial(structstudent*head):
输出查看多项式。
calculous_df(structstudent*head):
计算一重积分。
calculous_ds(structstudent*head):
计算二重积分。
get_command():
获取输入选项。
showMenu():
查看菜单。
main():
主函数。
4、【程序界面设计】:
界面大方、美观,用户可随意选择条件而不需要更改代码进行判断。
做到操作简便。
四、详细设计
//求解多项式积分
#include<
stdio.h>
malloc.h>
math.h>
#defineNULL0
#defineLENsizeof(structstudent)
structstudent
{
floata;
intexponentX;
floatb;
intexponentY;
doubley_b;
////
structstudent*next;
};
intn;
structstudent*create(void)
structstudent*head;
structstudent*p1,*p2;
n=0;
p1=p2=(structstudent*)malloc(LEN);
scanf("
%f,%d,%f,%d"
&
p1->
a,&
exponentX,&
b,&
exponentY);
head=NULL;
while(p1->
a!
=0&
&
b!
=0)
{
n++;
if(n==1)head=p1;
elsep2->
next=p1;
p2=p1;
p1=(structstudent*)malloc(LEN);
}
p2->
next=NULL;
return(head);
}
voidprint(structstudent*head)//查看系数和指数
structstudent*p;
printf("
\nNow,These%drecordsare:
\n"
n);
p=head;
if(head!
=NULL)
do
printf("
%%5d%%5d\n"
p->
a,p->
exponentX,p->
b,p->
p=p->
next;
}while(p!
=NULL);
//输出多项式
voidview_polynomial(structstudent*head)//查看系数和指数
\nNow,Thepolynomialis:
);
if((int)(p->
a)==1)printf("
X"
elseprintf("
%1.1fX"
a);
if(p->
exponentX!
=1)printf("
^%d"
exponentX);
b)==1)printf("
Y"
%4.1fY"
b);
exponentY!
//printf("
%1.1fX^%d%4.1fY^%d"
if(p!
+"
//求积分
voidcalculous_df(structstudent*head)
floatx1,x2;
doubleresult1=0.0;
doubleresult2=0.0;
请分别输入X的积分上下限,用英文“,”隔开:
%f,%f"
x1,&
x2);
///////////////////
\n积分结果:
result1+=(p->
a)*pow(x1,(p->
exponentX)+1)/(p->
exponentX+1);
result2+=(p->
a)*pow(x2,(p->
%\n"
result1-result2);
voidcalculous_ds(structstudent*head)
floatx1,x2,y1,y2;
doubleresultY1=0.0;
doubleresultY2=0.0;
请分别输入Y的积分上下限,用英文“,”隔开:
y1,&
y2);
structstudent*p,*q;
\n二重定积分结果:
q=head;
//一次遍历,对X求定积分
result1=(p->
result2=(p->
p->
y_b=result1-result2;
//对Y求定积分
resultY1+=(p->
y_b)*(p->
b)*pow(y1,(p->
exponentY)+1)/(p->
exponentY+1);
resultY2+=(p->
b)*pow(y2,(p->
(float)(resultY1-resultY2));
charget_command()
charcom;
%c"
com);
returncom;
voidshowMenu()
-------------菜单-----------------\n"
'
1'
创建多项式\n"
2'
检查输入\n"
3'
查看多项式\n"
4'
算一重定积分(输入X的上限和下限)\n"
5'
算二重定积分(输入X、Y的上限和下限)\n"
q'
退出\n"
----------------------------------\n"
请输入:
"
voidmain()
structstudent*head;
charcommand;
showMenu();
command=get_command();
switch(command)
case'
:
printf("
请输入多项式X的系数和指数以及Y的系数和指数:
head=create();
恭喜创建成功\n"
break;
//创建多项式
print(head);
//检查输入
view_polynomial(head);
//查看多项式
calculous_df(head);
//计算一重积分
case'
calculous_ds(head);
//计算二重积分
break;
default:
}while(command!
='
五、测试数据及其结果分析
(1).先拿多项式XY举例输入,其运行结果如下:
-------------菜单-----------------
1.创建多项式
2.检查输入
3.查看多项式
4.算一重定积分(输入X的上限和下限)
5.算二重定积分(输入X、Y的上限和下限)
q.退出
----------------------------------
1(注:
创建多项式)
1,1,1,1
恭喜创建成功
2(注:
检查输入)
Now,These1recordsare:
1.011.01
3(注:
查看多项式)
Now,Thepolynomialis:
XY
4(对X求解一重积分)
2,1
积分结果:
5(对多项式XY求解二重积分)
二重定积分结果:
q(退出输入)
Pressanykeytocontinue
(2).再用复杂一点的多项式6X^2Y^3+12X^3Y^4+3X^2Y^4
1
2,2,3,3
3,3,4,4
1,2,3,4
3
2.0X^23.0Y^3+3.0X^34.0Y^4+X^23.0Y^4
4
5
q
六、调试过程中的问题
在调试中,遇到了一些问题。
如数字的精度问题,之前系数采用的是int整型做的,但是结果不够精确,所以采用了float做,但到在调用POW函数的时候,返还的类型是DOUBLE型,所以最后返还类型是double型的。
还有就是关于系数为1和-1的的情况,的处理,如果系数是1或者-1就没有必要再显示了。
找个问题得以解决。
程序虽然能正确算出一二重定积分,但是在显示查看多项式的时候还没有解决XY的系数相乘问题。
七、课程设计总结
通过这次程序设计,我对逻辑推理方面的问题设计和实现有了一定的经验。
了解了解决相关问题的通用方法。
同时也遇到了很多问题,但是通过与同组同学讨论,总是能够找到合理的解决办法;
同组同学互相学习、互相帮助、互相提醒,逐步完善程序,我们都意识到团队合作的重要性。
这次程序设计中,调试显得极其重要,很多不易发现的错误通过调试可以轻松找到,程序调试能力在设计中占有重要地位,同时也进一步提高了VC++的使用能力。
这次实验的算法中还是有很多不足的地方,例如,输入多项式之后,多项式之间自己就没有相乘的能力去合并同次方的项,所以,我还是要多加强对有些知识的理解,多多运用,实践!
另外,最后,感谢老师对我们的悉心指导,提前祝暑假愉快!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 求解 多项式 积分