您的位置:首页 > 编程语言 > Python开发

手动制作python的exe可执行程序

2008-03-05 19:05 459 查看
// polynomial.cpp : Defines the entry point for the console application.
/************************************************************************/
/* 链表之多项式计算相关算法 */
/* 作者:jizhonglee 时间:2012.10.22 */
/************************************************************************/
#include "stdafx.h"
#include <malloc.h>
#include <math.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
//多项式结点
typedef struct polynode
{
float coef;
int power;
}PolyNode;
//多项式链表表示存储结构: f(x)=an*x^n+an-1*x^n-1+...+a3*x^3+a2*x^2+a1*x^1+a0*x^0
typedef struct polynomial
{
PolyNode info;
polynomial *next;
}PolyNomial;
 
/************************************************************************/
/* 在多项式上增加一个结点 */
/************************************************************************/
PolyNomial *AddNewItem(PolyNomial *polynomialExpress,polynode item)
{
PolyNomial *p=polynomialExpress;
if(p==NULL)
{
p=(PolyNomial*)malloc(sizeof(polynomial));
p->info=item;
p->next=NULL;
return p;
}
else
{
int flag=0; //标记item是否在多项式中存在
for (PolyNomial *temp=p; temp!=NULL;temp=temp->next)
{
if(temp->info.power==item.power) //如果指数相同,增item与polynomialExpress相加
{
flag=1;
temp->info.coef+=item.coef;
return polynomialExpress;
}
}
if(flag==0)
{
PolyNomial *t=(PolyNomial *)malloc(sizeof(polynomial));
t->info=item;
t->next=p;
return t;
}
}
}
/************************************************************************/
/* 两个多项式相加或相减 */
/************************************************************************/
PolyNomial *AddorSubPoly(polynomial first,polynomial second)
{
for ( polynomial *temp=&second;temp!=NULL;temp=temp->next)
{
first=*AddNewItem(&first,temp->info);
}
return &first;
}
/************************************************************************/
/* 两多项式相乘 */
/************************************************************************/
PolyNomial *MultiplyPoly(polynomial first,polynomial seconds)
{
polynomial *result=NULL;
for(polynomial *tf=&first;tf!=NULL;tf=tf->next)
{
for (polynomial *ts=&seconds;ts!=NULL;ts=ts->next)
{
PolyNode *node=(PolyNode *)malloc(sizeof(PolyNode));
node->power=tf->info.power+ts->info.power;
node->coef=tf->info.coef*ts->info.coef;
result=AddNewItem(result,*node);
}
}
return result;
}
/************************************************************************/
/* 求多项式的微分 */
/************************************************************************/
PolyNomial *DiffPoly(PolyNomial poly)
{
PolyNomial *result=NULL;
for (PolyNomial *temp=&poly;temp!=NULL;temp=temp->next)
{
PolyNode *node=(PolyNode *)malloc(sizeof(polynode));
node->coef=temp->info.power*temp->info.coef;
node->power=temp->info.power-1;
result=AddNewItem(result,*node);
}
return result;
}
/************************************************************************/
/* 求多项式的积分 */
/************************************************************************/
PolyNomial *IntPoly(polynomial poly)
{
polynomial *result=NULL;
for (polynomial *temp=&poly;temp!=NULL;temp=temp->next)
{
PolyNode *node=(PolyNode *)malloc(sizeof(PolyNode));
node->coef=temp->info.coef/(temp->info.power+1);
node->power=temp->info.power+1;
result=AddNewItem(result,*node);
}
return result;
}
/************************************************************************/
/* 计算给定值Value的多项式值f(Value) */
/************************************************************************/
double EvaluatePoly(polynomial poly,double value)
{
double result=0;
for (polynomial *temp=&poly;temp!=NULL;temp=temp->next)
{
result+=temp->info.coef*pow(value,temp->info.power);
}
return result;
}
/************************************************************************/
/* 计算给定值的定积分的值 */
/************************************************************************/
double DefIntPoly(polynomial poly,double lowwerBound,double UpperBound)
{
double result;
polynomial *intPoly=IntPoly(poly);
result=EvaluatePoly(*intPoly,UpperBound)-EvaluatePoly(*intPoly,lowwerBound);
return result;
}
 
/************************************************************************/
/* 复合函数的值 */
/************************************************************************/
double CompositeFun(polynomial f,polynomial g,double Vaule)
{
double result;
result=EvaluatePoly(f,EvaluatePoly(g,Vaule));
return result;
}
/************************************************************************/
/* 创建多项式 */
/************************************************************************/
PolyNomial *CreatePoly()
{
PolyNomial *polynomialExpress=NULL;
printf("Input 0 will end the input!\n");
while(1)
{
printf("InputPolynode:\n");
//PolyNode *node=(PolyNode*)malloc(sizeof(PolyNode));
PolyNode node;
std::cin>>node.coef;
std::cin>>node.power;
if(node.coef==0) break;
else
{
polynomialExpress=AddNewItem(polynomialExpress,node);
}
}
return polynomialExpress;
}
/************************************************************************/
/* 显示多项式 */
/************************************************************************/
void Display(PolyNomial polynomialExpress)
{
printf("PloymialExpress IS:");
for (polynomial *temp=&polynomialExpress; temp!=NULL; temp=temp->next)
{
if(temp->info.coef>=0)
{
std::cout<<"+"<<temp->info.coef<<"*x^"<<temp->info.power;
}else
{
std::cout<<"-"<<temp->info.coef<<"*x^"<<temp->info.power;
}
}
std::cout<<endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
PolyNomial *polynomialExpressA=CreatePoly();
Display(*polynomialExpressA);
//计算f(3)
//std::cout<<EvaluatePoly(*polynomialExpress,3);
//计算复合函数
/*PolyNomial *polynomialExpressB=CreatePoly();
Display(*polynomialExpressB);
std::cout<<CompositeFun(*polynomialExpressA,*polynomialExpressB,3);*/
//微分f(x)'
//Display(*DiffPoly(*polynomialExpressA));
//多项式积分求解
//Display(*IntPoly(*polynomialExpressA));\
//定积分求解
//std::cout<<DefIntPoly(*polynomialExpressA,1,3);
//计算f(x)+g(x)
/*PolyNomial *polynomialExpressB=CreatePoly();
Display(*polynomialExpressB);
PolyNomial *result=AddorSubPoly(*polynomialExpressA,*polynomialExpressB);
PolyNomial *p=result;
Display(*result);*/
//两个多项式相乘
PolyNomial *polynomialExpressB=CreatePoly();
Display(*MultiplyPoly(*polynomialExpressA,*polynomialExpressB));
system("pause");
return 0;
}本文出自 “程序人生” 博客,请务必保留此出处http://jizhonglee.blog.51cto.com/3003732/1033673
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: