C++实现线性代数矩阵行简化
本文实例为大家分享了C++实现线性代数矩阵行简化的具体代码,供大家参考,具体内容如下
输入一个矩阵,可分别输出该矩阵的阶梯型和最简型。
输入仅支持整数,支持分数形式输出。
妈妈再也不用担心俺的线性代数作业~
使用实例:
(实现格式化输出部分写的极为丑陋......)
#include#include #include #include #include #include #definef(i,l,r)for(i=(l);i<=(r);i++) #defineff(i,r,l)for(i=(r);i>=(l);i--) #definelllonglong #defineEPS1e-6 usingnamespacestd; constintMAXN=105; intn,m; charoutput[MAXN]; strings; structfrac{ intx,y=1; booloperator<(constfrac&tmp)const{ return1.0*x/y<1.0*tmp.x/tmp.y; } fracoperator-(constfrac&tmp){ fracans; ans.x=x*tmp.y-y*tmp.x; ans.y=y*tmp.y; ans.sim(); returnans; } fracoperator*(constfrac&tmp){ fracans; ans.x=x*tmp.x; ans.y=y*tmp.y; ans.sim(); returnans; } fracoperator/(constfrac&tmp){ fracans; ans.x=x*tmp.y; ans.y=y*tmp.x; ans.sim(); returnans; } intgcd(inta,intb){ returnb==0?a:gcd(b,a%b); } voidsim(){ intd=gcd(x,y); x/=d; y/=d; if(x<0&&y<0){ x=-x; y=-y; } } voidwrite() { inti; chartmp[MAXN]; intnum=0; intnx=x,ny=y; s=""; if(!nx){ s+="0"; } else{ if(nx<0||ny<0){ s+='-'; nx=abs(nx); ny=abs(ny); } if(nx%ny==0){ nx/=ny; while(nx){ tmp[++num]='0'+nx%10; nx/=10; } ff(i,num,1){ s+=tmp[i]; } } else{ while(nx){ tmp[++num]='0'+nx%10; nx/=10; } ff(i,num,1){ s+=tmp[i]; } s+='/'; num=0; while(ny){ tmp[++num]='0'+ny%10; ny/=10; } ff(i,num,1){ s+=tmp[i]; } } } f(i,s.length(),7){ cout<<""; } cout< >n>>m; cout<<"输入矩阵元素:"<>a[i][j].x; } } gause_1(); cout<<"阶梯型为:"< 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。