




已阅读5页,还剩9页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
#include iostream.h #include stdio.h #include conio.h /基本输入输出文件#include string.h #include stdlib.h /定义杂项函数及内存分配函数#include ctype.h /字符处理#include math.h char terms9920;class Equation /定义类Equation public:Equation() void jecfc(int,int,int); /解二次方程void getterm(char *,char *,int &); /存放方程各项void getyz(int *,int &,int); /得到因子void jc(char *,char *,float); /降次void gettermf(char *,char *,int); /得到指定幂的项int getxs(char *); /得到系数(整数)int getqium(char *); /求幂int yang(char *,float); /检验根是否正确int exp(int,int); /求某数的次方(整数)float knyz(int *,int *,int,int,char *); /求所有可能的根float exp(float,int); /求某数的次方(实数)/返回equ的系数乘以val的equ的次数的次方的值float calcequval(char *,float); ;void main()cout使用说明(允许 & 不允许):endl; coutendl; cout1. 在输入的方程后面不能输入 = ;endl; cout2. 所输入的方程必须是从高次到低次依次输入; endl; cout3. 若某项系数为0,可以不输入或输入0作为系数;endl; cout4. 不要用分数作为系数且第一项系数绝对值不小于一;endl; cout5. 要用xn表示指数,x n一可以,但不能用x n表示。endl; coutendl;Equation E;char *equ,*equ2;int loc=0,a=0,b=0,c=0,numterms;int deg,f_a1000,f_k1000,num_a,num_k;int i;float result;equ=new char5000; equ2=new char5000; cout请输入方程: endl;gets(equ);if(strlen(equ)=0)cout没有输入方程!endl;for(i=0;i99&equloc!=&equloc!=0&equloc!=n;i+)E.getterm(equ,termsi,loc); numterms=i;if(deg=E.getqium(terms0)2)cout无效输入,输入的方程最高次应大于等于2次endl;return;cout2)E.getyz(f_a,num_a,E.getqium(terms0);for(i=1;inumterms;i+)if( E.getqium(termsi)=0)c= E.getxs(termsi);E.getyz(f_k,num_k,c);if(result= E.knyz(f_a,f_k,num_a,num_k,equ)=0)if(result-0.05f)cout错误!不能解得根。endl;return;E.jc(equ,equ2,result);strcpy(equ,equ2);loc=0;for(i=0;i99&equloc!=&equloc!=0&equloc!=n;i+)E.getterm(equ,termsi,loc);numterms=i;deg-;for(i=1;inumterms;i+)if( E.getqium(termsi)=1)b= E.getxs(termsi);for(i=1;inumterms;i+)if( E.getqium(termsi)=0)c= E.getxs(termsi);E.jecfc( E.getxs(terms0),b,c);void Equation:jecfc(int a,int b,int c) /解二次方程int r1,r2,r3;float r11,r12;if(b*b-4*a*c0)r1=b*-1;r2=(b*b-4*a*c)*-1;r3=2*a;cout(r1+i*sqrt(r2)/r3;cout , ;cout(r1-i*sqrt(r2)/r3;elseif(sqrt(b*b-4*a*c)-(int)sqrt(b*b-4*a*c)=0)r11=(float)(-b+sqrt(b*b-4*a*c)/(2*a);r12=(float)(-b-sqrt(b*b-4*a*c)/(2*a);coutr11 , r12;elser1=b*-1;r2=b*b-4*a*c;r3=2*a;cout(r1+sqrt(r2)/r3;cout , ;cout(r1-sqrt(r2)/r3;coutendl;void Equation:getterm(char *src,char *dest,int &loc) /存放方程各项 int loc2=0;if(srcloc=-)destloc2=-;loc2+;for(;srcloc+loc2!=+&srcloc+loc2!=-&srcloc+loc2!=n&srcloc+loc2!=0&srcloc+loc2!=;loc2+)destloc2=srcloc+loc2; destloc2=0;loc+=loc2;if(srcloc!=-&srcloc!=0)loc+; void Equation:getyz(int *yz_list,int &num,int val) /得到因子int i,fcount=0;num=0;val=abs(val);for(i=1;i=val;i+)if(float)(float)(float)val/(float)i)-(int)(float)val/(float)i)=0.0f)num+;yz_listfcount=i;fcount+;int Equation:getxs(char *term) /得到系数char *temp;int i=0,mult=1;temp=new charstrlen(term);if(term0=-)mult=-1;i+;for(;!isdigit(termi)&!isalpha(termi);i+);if(termi=x)return mult;for(int j=0;isdigit(termi+j);j+)tempj=termi+j;return atoi(temp)*mult;int Equation:getqium(char *term) /求幂char temp10;if(strchr(term,x)!=NULL)if(strchr(term,)!=NULL)for(int i=0;termi!=;i+);i+;for(int j=0;isdigit(termi);i+,j+)tempj=termi;tempj=0;return atoi(temp);elsereturn 1;elsereturn 0;int Equation:yang(char *equ,float root) /检验根是否正确char terms9940;float val99,totalval=0;int loc=0;for(int i=0;equloc!=&equloc!=0&equloc!=n;i+)getterm(equ,termsi,loc);int numterms=i;for(i=0;i-0.002f&totalval*0.99f0.002f)return 0;elsereturn 1;int Equation: exp(int val,int e) /求某数的次方(整数)int v2=val;if(e=0) return 1;for(int i=1;ie;i+) v2*=val;return v2;float Equation:exp(float val,int e) /求某数的次方(实数)float v2=val;if(e=0) return 1.0f;for(int i=1;ie;i+) v2*=val; return v2;/返回equ的系数乘以val的equ的次数的次方的值float Equation:calcequval(char *equ,float val) int coeff= getxs(equ);int power= getqium(equ);return coeff* exp(val,power);void Equation:jc(char *base,char *newequ,float yz) /降次int synthterms99;int newterms99;int j=0,olddegree;char temp50=,exp10=,exp110=;char newequ120,newequ220; if( yang(base,yz)return;olddegree=getqium(terms0);for(int i=0;i=1;i-) newtermsi-1=(int)(float)(newtermsi*yz+synthtermsi);for(i=olddegree-1;newtermsi=0;i-);strcpy(newequ,);for(;i=0;i-)if(newtermsi!=0)switch(i)case 0:strcpy(exp,);break;case 1:strcpy(exp,x);break;default:itoa(i,exp1,10);strcpy(exp,x);strcat(exp,exp1);break;if(newtermsi!=1)if(newtermsi0)itoa(newtermsi,newequ1,10);strcat(newequ1,exp);elseif(iolddegree-1)strcpy(newequ1,+);itoa(newtermsi,newequ2,10);strcat(newequ1,newequ2);strcat(newequ1,exp);elseitoa(newtermsi,newequ1,10);strcat(newequ1,exp);elseif(newtermsi0)strcpy(newequ1,exp);elseif(i0)strcpy(newequ1,+);itoa(newtermsi,newequ2,10);strcat(newequ1,newequ2);elseitoa(newtermsi,newequ1,10);strcat(newequ,newequ1);/得到指定幂的项void Equation:gettermf(char *equ,char *dest,int power) int t=getqium(terms0);for(int i=0;it+1;i+)if( getqium(termsi)=power)strcpy(dest,termsi);return;strcpy(dest,0);/求所有可能的根float Equation:knyz(int *a,int *k,int n_a,int n_k,char *equ) for(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 整体护理测试题及答案
- picc护理门诊考试题及答案
- 皮肤护理考试题及答案
- 护理急救技能考核试题集
- 小学英语外研版教案编写与课堂实施
- 2024年重点高中排名及招生趋势分析
- 诚信主题班会演讲稿集锦
- 初一数学整数与分数转换练习卷
- 员工病假管理与考勤制度建议
- 小学三年级数学期中考试模拟题
- GB/T 20716.2-2025道路车辆牵引车和挂车之间的电连接器(7芯)第2部分:12 V标称电压车辆的制动系统和行走系的连接
- 阅兵观后感作文500字范文
- 2023年浙江黄龙体育发展有限公司招聘笔试题库及答案解析
- 储罐施工方案(电动葫芦)
- CMA全套文件(质量手册+程序文件+作业指导书+表格)
- 数控机床(超全)课件
- 医院信息安全与保密承诺书2篇
- SJG 01-2010 深圳市地基基础勘察设计规范-高清现行
- 康复护理学-康复评定认知功能评定
- 最全的食物相克表(打印版)
- 施工现场安全标志和安全防护设施设置方案
评论
0/150
提交评论