函数在程序中的作用和特点,我说一下我的见解,一家之言,就如二楼说的,提高代码的复用性,因为java是面向对象的吗?调用函数他就会返回一个你想要的值。这个是很好的。我就想起了,我搞的一个数据结构课程设计,做什么一元多次项的操作,只是进行简单的加减乘。给你两个字符串进行运算。
例如给你 这么个东西:
6x^(-3)-x+4.4x^2-1.2x^9 -6x^(-3)+5.4x^2-x^2+7.8x^15
求这连个东西的加减乘的结果:
(6x^(-3)-x+4.4x^2-1.2x^9)+(-6x^(-3)+5.4x^2-x^2+7.8x^15)= -x+8.8x^2-1.2x^9+7.8x^15
(6x^(-3)-x+4.4x^2-1.2x^9)-(-6x^(-3)+5.4x^2-x^2+7.8x^15)= 12x^(-3)-x-1.2x^9-7.8x^15
(6x^(-3)-x+4.4x^2-1.2x^9)*(-6x^(-3)+5.4x^2-x^2+7.8x^15)= -36x^(-6)+6x^(-2)
我给你贴代码吧!我的表达能力确实不照。- #include<iostream>
- #include<string>
- #include<cmath>
- using namespace std;
- struct Node
- {
- double x,y;
- };
- int N=45,NN=43;
- int cmp(Node A,Node B)
- {
- if(A.y>B.y)return 0;
- else return 1;
- }
- int huajian(Node AB[],int n)
- {
- sort(AB,AB+n,cmp);
- int s=0;
- for(int i=0;i<n;i++)//合并同类项
- {
- for(int j=i+1;j<n;j++)
- if(AB[i].y==AB[j].y&&AB[i].x!=0)
- {
- AB[i].x+=AB[j].x;
- AB[j].x=0; // 标记 是否有同类项
- }
- }
- for(int i=0;i<n;i++)
- {
- if(AB[i].x!=0)
- AB[s++]=AB[i];
- }
-
- return s;
- }
- int zhuanhuan(char A[],string AB[])
- {
- string B="";
- int s=0;
- for(int i=0;i<strlen(A);i++)
- {
- if( (A[i]=='+'||A[i]=='-') && ( A[i-1]==')'||A[i-1]=='x' )&&i!=0)
- {
- AB[s++]=B;
- B="";
- }
- if( (A[i]=='+'||A[i]=='-') && ( A[i-1]<='9'&&A[i-1]>='0' ) )
- {
- AB[s++]=B;
- B="";
- }
- B=B+A[i];
- if(i==strlen(A)-1)
- {
- AB[s++]=B;B="";
- }
- }
- return s;
- }
- int Tiqu(string A,Node AB[],int S)
- {
- int l,BJ=-1,bj=-1,i,B[2],s=0,Bj=-1;
- double x=0,y=0;
- l=A.length();
- memset(B,-1,sizeof(B));
- for(int i=0;i<l;i++)
- {
- if(A[i]=='x')
- {
- BJ=i;// x 的位置
- break;
- }
-
- if(A[i]=='.')
- B[0]=i;//因子 小数点的 位置
- }
- for(i=l-1;i>=BJ;i--)
- {
- if(A[i]=='(') bj=i; // 括号的位置
- if(A[i]=='.') B[1]=i; //指数 小数点的 位置
- if(A[i]=='-') Bj=i; //判断有无 '-'
- if(A[i]=='^')break;
- }
- //***********************处理因子******************************************
- if(BJ!=-1)//********************
- {//x^n n!=0
- for(int j=0;j<BJ;j++)
- {
- if(A[j]>='0'&&A[j]<='9')
- x=x*10+A[j]-'0';
- }
- if((A[0]=='+'||A[0]=='-')&&A[1]=='x')x=1;
- if(A[0]=='x')x=1;
- if(A[0]=='-')x=-x;
- if(B[0]!=-1)
- x=x*pow(0.1,BJ-B[0]-1);
- }
- //*****************
- if(BJ==-1)// x^n n=0
- {
- for(int j=0;j<l;j++)
- {
- if(A[j]>='0'&&A[j]<='9')
- x=x*10+A[j]-'0';
- }
- if(A[0]=='-')x=-x;
- if(B[0]!=-1)
- x=x*pow(0.1,l-B[0]-1);
-
- }
- //****************************处理指数***************************************
- if(BJ==-1)y=0;//没有指数 也就是指数为0
- if(BJ!=-1)
- {
- for(int j=BJ+1;j<l;j++)
- {
- if(A[j]>='0'&&A[j]<='9')
- y=y*10+A[j]-'0';
- }
- if(BJ+1==l)y=1;
- if(B[1]!=-1)
- {
- if(bj!=-1)
- {//有括号
- y=y*pow(0.1,l-2-B[1]);
- }
- if(bj==-1)
- {
- y=y*pow(0.1,l-B[1]-1);
- }
- }
- }
- if(Bj!=-1)y=-y;
- AB[S].x=x;
- AB[S].y=y;
- S++;
- //************************************************************************
- return S;
- }
- int Multi(Node AB1[],int n,Node AB2[],int m,Node AB3[])
- {
- int s=0;
- for(int i=0;i<n;i++)
- {
- for(int j=0;j<m;j++)
- {
- AB3[s].x=AB1[i].x*AB2[j].x;
- AB3[s].y=AB1[i].y+AB2[j].y;
- s++;
- }
-
- }
- for(int i=0;i<s;i++)
- {
- for(int j=i+1;j<s;j++)
- {
- if(AB3[i].y==AB3[j].y)
- {
- AB3[i].x+=AB3[j].x;
- AB3[j].x=0; // 标记 是否有同类项
- // cout<<AB1[i].x<<" "<<AB1[i].y<<endl;
- }
- }
- }
- sort(AB3,AB3+s,cmp);
- return s;
- }
- int add_sub(Node tmp1[],int n,Node tmp2[],int m,Node AB3[],int N) // 0 - 1 + NM=0,MN=1;
- {
- Node AB1[100], AB2[100];
- for(int i=0;i<n;i++)
- AB1[i]=tmp1[i];
- for(int i=0;i<m;i++)
- {
- AB2[i]=tmp2[i];
- if(N==0)
- AB2[i].x*=-1;
- }
- for(int i=0;i<n;i++)
- {
- for(int j=0;j<m;j++)
- if(AB1[i].y==AB2[j].y)
- {
- AB1[i].x+=AB2[j].x;
- AB2[j].x=0; // 标记 是否有同类项
- }
- AB3[i]=AB1[i];
- }
- for(int j=0;j<m;j++)
- {
- if(AB2[j].x!=0)
- AB3[n++]=AB2[j];
- }
- for(int i=0;i<n;i++)
- {
- for(int j=i+1;j<n;j++)
- {
- if(AB3[i].y==AB3[j].y)
- {
- AB3[i].x+=AB3[j].x;
- AB3[j].x=0; // 标记 是否有同类项
- // cout<<AB1[i].x<<" "<<AB1[i].y<<endl;
- }
- }
- }
- sort(AB3,AB3+n,cmp);
- return n;
- }
- void output(Node A[],int n)
- {
- double x,y;
- int BJ=0;
- for(int i=0;i<n;i++)
- {
- x=A[i].x;
- y=A[i].y;
- if(x!=0)BJ=1;
- if(x>0&&i!=0)cout<<'+';
- if(x<0)cout<<'-';
- if(y==0)
- {
- cout<<fabs(x);
- }
- else if(y==1)
- {
- if(fabs(x)!=1)
- cout<<fabs(x)<<'x';
- else cout<<'x';
- }
- else if(y<0)
- {
- if(fabs(x)!=1)
- cout<<fabs(x)<<"x^("<<y<<')';
- else
- cout<<"x^("<<y<<')';
- }
- else
- {
- if(fabs(x)!=1)
- cout<<fabs(x)<<"x^"<<y;
- else cout<<"x^"<<y;
- }
- }
- if(BJ==0)cout<<0;
- cout<<endl;
- }
- int main()
- {
- char A1[100],A2[100];
- while(cin>>A1>>A2,A1!="X")
- {
- string AB[100];
- int B,i,s,S1=0,S2=0,S=0;
- int NM=0,MN=1;
- Node AB1[100],AB2[100],AB3[100];
- B=zhuanhuan(A1,AB);// B 多少项
- for(i=0;i<B;i++)
- {
- s=Tiqu(AB[i],AB1,S1);
- S1++;
- }
- S1=huajian(AB1,B);
- cout<<"/************字符串 A 化简后多项式*************/"<<endl;
- for(int j=0;j<S1;j++)//S1 字符串 A多项式的个数
- cout<<AB1[j].x<<" "<<AB1[j].y<<endl;
- // cin>>A2;
- B=zhuanhuan(A2,AB);// B 多少项
- for(i=0;i<B;i++)
- {
- s=Tiqu(AB[i],AB2,S2);
- S2++;
- }
- S2=huajian(AB2,B);
- cout<<"/*********字符串 B 化简后多项式**********/"<<endl;
- for(int j=0;j<S2;j++)//S1 字符串 A多项式的个数
- cout<<AB2[j].x<<" "<<AB2[j].y<<endl;
- cout<<"/***********多项式的乘积*************/"<<endl;
- int m=Multi(AB1,S1,AB2,S2,AB3);
- m=huajian(AB3,m);
- output(AB3,m);
- cout<<"/***********多项式的和**********/"<<endl;
- int n=add_sub(AB1,S1,AB2,S2,AB3,MN); // 0 - 1 + NM=0,MN=1;
- n=huajian(AB3,n);
- output(AB3,n);
- cout<<"/***********多项式的差**********/"<<endl;
- int K=add_sub(AB1,S1,AB2,S2,AB3,NM);
- K=huajian(AB3,K);
- output(AB3,K);
- }
- }
复制代码 这个代码使用C/C++写的,里面写了好多个函数。 |