用c++编写的简单数学运算程序(公因数,平均值,一次函数,二次函数等的简单运算程序源代码)

当我们学完cpp的简单的循环结构之后,我们就可以制作出关于公因数、公倍数、平均值的运算。

#include <bits/stdc++.h>
using namespace std;
int main(){
	cout<<"首先输入1或2来表示数的个数,回车后再输入数字(正整数),将会给出其所有公因数"<<endl;
	int q;
	cin>>q;
	if (q==1){
		int a;
		cin>>a;
		for(int i=a;i>0;i--){
			if(a%i==0){
				cout<<i<<endl;
			}
		}
	}
	else if (q==2){
		int a,b,c;
		cin>>a>>b;
		if(a>=b){
			c=b;
		}
		else{
			c=a;
		}
		for(int i=c;i>0;i--){
			if(a%i==0&&b%i==0){
				cout<<i<<endl;
			}
		}
	}
	int end;
	cin>>end;
	
	
	
	
	
	
	return 0;
}	

如上代码能够求一个数的所有公因数。

最后的end变量是为了防止程序在输出瞬间就结束(下同)。

我们继续对它改进。

#include <bits/stdc++.h>
using namespace std;
int main(){
	cout<<"请输入两个正整数,将输出其最大公因数与最小公倍数"<<endl;
	int a,b,i,i2;
	int i3=0;
	cin>>a>>b;
	bool found=false;
	bool found2=false;
	int sm=(a>=b?b:a);
	i=sm+1;
	int bi=(a>=b?a:b);
	while(!found&&i>0){
		i--;
		if((a%i==0)&&(b%i==0)){
			found=true;
		}
	}
	cout<<"最大公因数为"<<i;
	
	while(!found2&&i>0){
		i3++;
		i2=i3*bi;
	    if(i2%sm==0){
		    found2=true;
    	}
	}
	cout<<"最大公因数为"<<i<<",最小公倍数为"<<i2;
	int end;
	cin>>end;
	return 0;
}
#include <bits/stdc++.h>
using namespace std;
int main(){
	cout<<"请输入数字个数和每一个数字(大于-100000,小于100000,输入每一个数字后都要换行)"<<endl;
	int n;
	cin>>n;
	double e=0;
	int t=-100000;
	int b=100000;
	for (int i=1;i<=n;i++){
		double a;
		cin>>a;
		e+=a;
		if(t<a){
			t=a;
		}
		if(b>a){
			b=a;
		}		
	}
	e=e/n;
	cout<<"平均值为"<<e<<endl<<"最大值为"<<t<<endl<<"最小值为"<<b;
	int end;
	cin>>end;
	return 0;
}

顺着求公因数的思路,我们继而得到求最大公因数,最小公倍数,以及多个数的平均值、最大值、最小值的运算。

在普通计算器中通常只有小数的运算,平时做数学题中却常常使用分数,既然学完了循环结构,我们可以自制分数运算的程序,保留分子与分母,顺着以上代码的思路,利用循环结构将它化到最简。

#include <bits/stdc++.h>
using namespace std;
int main(){
	cout<<"分别输入第一与第二个分数的分子与分母,在每次计算前,若输入y,输出两分数相加的最简分数的分子与分母,若输入n,输出两分数相乘的最简分数的分子与分母,若输入e,则终止程序"<<endl;
	int a,b,c,d,e,f,g;
	char q;
	do{
		cin>>q;
    if(q=='n'){
	cin>>a>>b>>c>>d;
	e=a*c;
	f=b*d;
	if (e>=f){
		g=f;
	}
	else {
		g=e;
	}
	if (g>0){
	   for (int i=g;i>=1;i--){
		  if (e%i==0&&f%i==0){
			 e=e/i;
			 f=f/i;
		  }
	   }
    }
    else if (g<=0){
	   for (int i=g;i<0;i++){
		  if (e%i==0&&f%i==0){
			 e=e/i;
			 f=f/i;
		  }
	   }
    }
	cout<<"分子为"<<e<<",分母为"<<f<<endl;}
	 if(q=='y'){
	 	cin>>a>>b>>c>>d;
	e=a*d+b*c;
	f=b*d;
	if (e>=f){
		g=f;
	}
	else {
		g=e;
	}
	if (g>0){
	   for (int i=g;i>=1;i--){
		  if (e%i==0&&f%i==0){
			 e=e/i;
			 f=f/i;
		  }
	   }
    }
    else if (g<=0){
	   for (int i=g;i<0;i++){
		  if (e%i==0&&f%i==0){
			 e=e/i;
			 f=f/i;
		  }
	   }
    }
	cout<<"分子为"<<e<<",分母为"<<f<<endl; 
	 }
    }while (q!='e');
	
	
	return 0;
}

于是,我们得到了分数的乘除运算。

既然得到了基础的分数运算,我们何不运用到其他的数学运算中呢?

我们之前就可以做函数有关的运算程序,但输出的保留过的小数往往不是我们要的答案,于是,我们可以把分数运算加入到函数运算的程序中。

#include <iostream>
#include<iomanip>
#include<cmath>
using namespace std;
int main(){
	int a,b,c,d,e,f,g,h; 
	cout<<"请输入两个参考坐标(每个数化为分数形式(分子在前),共输入八个数,用空格隔开,将输出k与b的最简分数"<<endl; 
	cin>>a>>b>>c>>d>>e>>f>>g>>h;
	if(a*1.0/b!=e*1.0/f&&c*1.0/d!=g*1.0/h){
	int ms=(c*h-d*g)*b*f;
	int mm=(a*f-b*e)*d*h;
	int msm=(ms>=mm?mm:ms); 
    if (msm>0){
	   for (int i=msm;i>=1;i--){
		  if (ms%i==0&&mm%i==0){
			 ms=ms/i;
			 mm=mm/i;
		  }
	   }
    }
    else if (msm<=0){
	   for (int i=msm;i<0;i++){
		  if (ms%i==0&&mm%i==0){
			 ms=ms/i;
			 mm=mm/i;
		  }
	   }
    }
	int ns=c*b*mm-a*d*ms;
	int nm=d*b*mm;
	
	
	
	int nsm=(ns>=nm?nm:ns);
    if (nsm>0){
	   for (int i=nsm;i>=1;i--){
		  if (ns%i==0&&nm%i==0){
			 ns=ns/i;
			 nm=nm/i;
		  }
	   }
    }
    else if (nsm<=0){
	   for (int i=nsm;i<0;i++){
		  if (ns%i==0&&nm%i==0){
			 ns=ns/i;
			 nm=nm/i;
		  }
	   }
    }
	cout<<"k="<<ms<<"/"<<mm<<",b="<<ns<<"/"<<nm;

}
	else{
		cout<<"错误数据";
	}
	int o;
	cin>>o;
	return 0;
}

该代码可以求兼容分数的一次函数的解析式

#include <iostream>
using namespace std;
int main(){
	cout<<"请输入三个参考坐标(每个数化为分数形式(分子在前),共输入十二个数,用空格隔开,将输出a,b,c的最简分数"<<endl; 
	int aa,ab,ba,bb,ca,cb,da,db,ea,eb,fa,fb;
	cin>>aa>>ab>>ba>>bb>>ca>>cb>>da>>db>>ea>>eb>>fa>>fb;
	if(aa*1.0/ab!=ca*1.0/cb&&aa*1.0/ab!=ea*1.0/eb&&ca*1.0/cb!=ea*1.0/eb){
	    int as=ab*ab*fb*cb*eb*(ba*db-bb*da)*(ca*eb-cb*ea)-ab*cb*eb*eb*bb*(aa*cb-ab*ca)*(da*fb-db*fa);
        int am=db*fb*bb*(aa*cb-ab*ca)*(ca*eb-cb*ea)*(aa*eb-ab*ea);
        int asma=(as>=am?am:as);
        if(asma>0){    	
            for(int i=asma;i>0;i--){
                if(as%i==0&&am%i==0){
                    as=as/i;
                    am=am/i;
                }
            }
        } 
        if(asma<=0){
            for(int i=asma;i<0;i++){
                if(as%i==0&&am%i==0){
                    as=as/i;
                    am=am/i;
                }
            }
        } 
        int bs=am*cb*cb*ab*ab*(ba*db-bb*da)-bb*db*as*(aa*cb-ab*ca)*(aa*cb+ab*ca);
        int bm=am*ab*cb*bb*db*(aa*cb-ab*ca);
        int bsm=(bs>=bm?bm:bs);
        if(bsm>0){
            for(int i=bsm;i>0;i--){
                if(bs%i==0&&bm%i==0){
                    bs=bs/i;
                    bm=bm/i;
                }
            }
        } 
        if(bsm<=0){
            for(int i=bsm;i<0;i++){
                if(bs%i==0&&bm%i==0){
                    bs=bs/i;
                    bm=bm/i;
                }
            }
        } 
        int cs=am*bm*ab*ab*ba-as*aa*aa*bm*bb-am*ab*bs*aa*bb;
        int cm=am*bm*ab*ab*bb;
        int csm=(cs>=cm?cm:cs);
        if(csm>0){
            for(int i=csm;i>0;i--){
                if(cs%i==0&&cm%i==0){
                    cs=cs/i;
                    cm=cm/i;
                }
            }
        } 
        if(csm<=0){
            for(int i=csm;i<0;i++){
                if(cs%i==0&&cm%i==0){
                    cs=cs/i;
                    cm=cm/i;
                }
            }
        } 
        cout<<"a="<<as<<"/"<<am<<",b="<<bs<<"/"<<bm<<",c="<<cs<<"/"<<cm;
    }
	else{
		cout<<"错误数据";
	}
	int o;
	cin>>o;
	return 0;
}

该代码可以求兼容分数的二次函数的解析式

#include <bits/stdc++.h>
using namespace std;
int main(){
	int aa,ab,ba,bb,ca,cb;
	cout<<"请输入二次函数一般形式的三个系数的分子与分母(共六个整数)"<<endl;
	cin>>aa>>ab>>ba>>bb>>ca>>cb;
	int xla,xlb,xra,xrb;
	cout<<"请输入定义域(分别输入左界和右界的分子与分母,共四个整数)"<<endl; 
	cin>>xla>>xlb>>xra>>xrb;
	char answer;
	cout<<"请输入l或s,l代表求最大值,s代表求最小值"<<endl;
	cin>>answer;
	//输入所需定值 
	
	int ta=-ab*ba;
	int tb=2*aa*bb;
	int la,lb,sa,sb,ya,yb;
	//定义接下来所需要的变量 
	
	if(aa*ab<0){
		if(xla*1.0/xlb<=ta*1.0/tb){
			if(xra*1.0/xrb>=ta*1.0/tb){
				la=ta;
				lb=tb;
				sa=((ta*1.0/tb-xla*1.0/xlb)>=(xra*1.0/xrb-ta*1.0/tb)?xla:xra);
				sb=((ta*1.0/tb-xla*1.0/xlb)>=(xra*1.0/xrb-ta*1.0/tb)?xlb:xrb);
			}
			else if(xra*1.0/xrb<ta*1.0/tb){
				la=xra;
				lb=xrb;
				sa=xla;
				sb=xlb;
			}
		}
		
		else if(xla*1.0/xlb>ta*1.0/tb){
		    la=xla;
			lb=xlb;
			sa=xra;
			sb=xrb;	
		}	
	}
	
	
	else if(aa*ab>0){
		if(xla*1.0/xlb<=ta*1.0/tb){
			if(xra*1.0/xrb>=ta*1.0/tb){
				sa=ta;
				sb=tb;
				la=((ta*1.0/tb-xla*1.0/xlb)>=(xra*1.0/xrb-ta*1.0/tb)?xla:xra);
				lb=((ta*1.0/tb-xla*1.0/xlb)>=(xra*1.0/xrb-ta*1.0/tb)?xlb:xrb);
			}
			else if(xra*1.0/xrb<ta*1.0/tb){
				la=xla;
				lb=xlb;
				sa=xra;
				sb=xrb;
			}
		}
		
		else if(xla*1.0/xlb>ta*1.0/tb){
		    la=xra;
			lb=xrb;
			sa=xla;
			sb=xlb;	
		}	
	}
	//判断各种情况,得到x的分子与分母 
	
	
	
	
	if(answer=='l'){
		ya=aa*bb*la*la*lb*cb+ab*lb*lb*ba*la*cb+ab*lb*lb*lb*bb*ca;
		yb=ab*lb*lb*lb*bb*cb;
		
		int ym=(ya>=yb?yb:ya); 
    if (ym>0){
	   for (int i=ym;i>=1;i--){
		  if (ya%i==0&&yb%i==0){
			 ya/=i;
			 yb/=i;
		  }
	   }
    }
    else if (ym<=0){
	   for (int i=ym;i<0;i++){
		  if (ya%i==0&&yb%i==0){
			 ya/=i;
			 yb/=i;
		  }
	   }
    }
	cout<<"最大值的最简分子分母分别为"<<ya<<"和"<<yb;	
	}
	
	else if(answer=='s'){
		ya=aa*bb*sa*sa*sb*cb+ab*sb*sb*ba*sa*cb+ab*sb*sb*sb*bb*ca;
		yb=ab*sb*sb*sb*bb*cb;
		
		int ym=(ya>=yb?yb:ya); 
    if (ym>0){
	   for (int i=ym;i>=1;i--){
		  if (ya%i==0&&yb%i==0){
			 ya/=i;
			 yb/=i;
		  }
	   }
    }
    else if (ym<=0){
	   for (int i=ym;i<0;i++){
		  if (ya%i==0&&yb%i==0){
			 ya/=i;
			 yb/=i;
		  }
	   }
    }
	cout<<"最小值的最简分子分母分别为"<<ya<<"和"<<yb;	
	}
	//将x的分子与分母带入函数,求出y的分子与分母并化简,输出 
	int o;
	cin>>o;
return 0;	
}

该代码可以求二次函数的最值

既然如此,我们还能继续将循环结构拓展到根式化简中,这里就用一元二次方程求解的代码展示

#include <bits/stdc++.h>
using namespace std;
int main(){	
int aa,ab,ba,bb,ca,cb;
cout<<"请输入一元二次方程一般形式的各系数的分子与分母(共六个整数),将输出解"<<endl;
cin>>aa>>ab>>ba>>bb>>ca>>cb;
int deltaa=(ba*ba*ab*cb)-(4*aa*ca*bb*bb);
int deltab=ab*cb*bb*bb;
if(deltaa*deltab>0){
	int dmi=(deltaa>deltab?deltab:deltaa);
	if (dmi>0){
	   for (int i=dmi;i>=1;i--){
		  if (deltaa%i==0&&deltab%i==0){
			 deltaa/=i;
			 deltab/=i;
		  }
	   }
    }
    else if (dmi<=0){
	   for (int i=dmi;i<0;i++){
		  if (deltaa%i==0&&deltab%i==0){
			 deltaa/=i;
			 deltab/=i;
		  }
	   }
    }
	int k=1;
	int de=deltaa*deltab;
	for(int i=ceil(sqrt(deltaa*deltab));i>=2;i--){
		if((deltaa*deltab)%(i*i)==0){
			k*=i;
			de/=(i*i);
			
		}
	}
	int xa=-ab*ba*deltab;
	int xb=k*ab*bb;
	int xc=2*bb*deltab*aa;
	
	
	
	int xmi=(xa>xb?xb:xa);
	xmi=(xmi>xc?xc:xmi);
	if (xmi>0){
	   for (int i=xmi;i>=1;i--){
		  if (xa%i==0&&xb%i==0&&xc%i==0){
			 xa/=i;
			 xb/=i;
			 xc/=i;
		  }
	   }
    }
    else if (xmi<=0){
	   for (int i=xmi;i<0;i++){
		  if (xa%i==0&&xb%i==0&&xc%i==0){
			 xa/=i;
			 xb/=i;
			 xc/=i;
		  }
	   }
    }
    cout<<"分母为 "<<xc<<",分子为 "<<xa<<" 正负 "<<xb<<" 倍根号下 "<<de; 
}



else if(deltaa*deltab==0){
	int xa=ab*ba;
	int xb=2*aa*bb;
	int xmi=(xa>xb?xb:xa);
	if (xmi>0){
	   for (int i=xmi;i>=1;i--){
		  if (xa%i==0&&xb%i==0){
			 xa/=i;
			 xb/=i;
		  }
	   }
    }
    else if (xmi<=0){
	   for (int i=xmi;i<0;i++){
		  if (xa%i==0&&xb%i==0){
			 xa/=i;
			 xb/=i;
		  }
	   }
    }
    cout<<"分母为 "<<xb<<",分子为 -"<<xa; 
}

else if(deltaa*deltab<0){
    cout<<"无解"; 
}
int o;
cin>>o;
return 0;
}

以上就是一些主要由循环结构拓展出的简单数学运算的源代码,如有问题,敬请提出!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值