当我们学完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;
}
以上就是一些主要由循环结构拓展出的简单数学运算的源代码,如有问题,敬请提出!