1.写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用两个函数,并输出结果,两个整数由键盘输入。
#include <iostream>
using namespace std;
int main()
{int hcf(int,int);
int lcd(int,int,int);
int u,v,h,l;
cin>>u>>v;
h=hcf(u,v);
cout<<"H.C.F="<<h<<endl;
l=lcd(u,v,h);
cout<<"L.C.D="<<l<<endl;
return 0;
}
int hcf(int u,int v)
{int t,r;
if (v>u)
{t=u;u=v;v=t;}
while ((r=u%v)!=0)
{u=v;
v=r;}
return(v);
}
int lcd(int u,int v,int h)
{return(u*v/h);
}
2.求方程ax²+bx+c=0的根,用3个函数分别求当b²-4ac大于0、等于0和小于0的根,并输出结果。从主函数输入a,b,c的值。
#include <iostream>
#include <math.h>
using namespace std;
float x1,x2,disc,p,q;
int main()
{void greater_than_zero(float,float);
void equal_to_zero(float,float);
void smaller_than_zero(float,float);
float a,b,c;
cout<<"input a,b,c:";
cin>>a>>b>>c;
disc=b*b-4*a*c;
cout<<"root:"<<endl;
if (disc>0)
{
greater_than_zero(a,b);
cout<<"x1="<<x1<<",x2="<<x2<<endl;
}
else if (disc==0)
{equal_to_zero(a,b);
cout<<"x1="<<x1<<",x2="<<x2<<endl;
}
else
{smaller_than_zero(a,b);
cout<<"x1="<<p<<"+"<<q<<"i"<<endl;
cout<<"x2="<<p<<"-"<<q<<"i"<<endl;
}
return 0;
}
void greater_than_zero(float a,float b) /* 定义一个函数,用来求disc>0时方程的根 */
{x1=(-b+sqrt(disc))/(2*a);
x2=(-b-sqrt(disc))/(2*a);
}
void equal_to_zero(float a,float b) /* 定义一个函数,用来求disc=0时方程的根 */
{
x1=x2=(-b)/(2*a);
}
void smaller_than_zero(float a,float b) /* 定义一个函数,用来求disc<0时方程的根 */
{
p=-b/(2*a);
q=sqrt(-disc)/(2*a);
}
3.写一个判别素数的函数,在主函数中输入一个整数,输出是否为素数的信息。
#include <iostream>
using namespace std;
int main()
{int prime(int); /* 函数原型声明 */
int n;
cout<<"input an integer:";
cin>>n;
if (prime(n))
cout<<n<<" is a prime."<<endl;
else
cout<<n<<" is not a prime."<<endl;
return 0;
}
int prime(int n)
{int flag=1,i;
for (i=2;i<n && flag==1;i++)
if (n%i==0)
flag=0;
return(flag);
}
4.求a!+ b!+ c!的值,用一个函数fac(n)求n!。a,b,c的值由主函数输入,最终得到的值在主函数中输出。
#include <iostream>
using namespace std;
int main()
{int fac(int);
int a,b,c,sum=0;
cout<<"enter a,b,c:";
cin>>a>>b>>c;
sum=sum+fac(a)+fac(b)+fac(c);
cout<<a<<"!+"<<b<<"!+"<<c<<"!="<<sum<<endl;
return 0;
}
int fac(int n)
{int f=1;
for (int i=1;i<=n;i++)
f=f*i;
return f;
}
5.写一函数求sinh(x)的值,求sinh(x)的近似公式为sinh(x)=eˣ-e⁻ˣ/2 其中用一个函数求eˣ。
#include <iostream>
#include <cmath>
using namespace std;
int main()
{double e(double);
double x,sinh;
cout<<"enter x:";
cin>>x;
sinh=(e(x)+e(-x))/2;
cout<<"sinh("<<x<<")="<<sinh<<endl;
return 0;
}
double e(double x)
{return exp(x);}
6.用牛顿迭代法求根。方程为ax³+bx²+cx+d=0。系数a,b,c,d的值依次为1,2,3,4,由主函数输入。求x在1附近的实根。求出根后由主函数输出。
#include <iostream>
#include <cmath>
using namespace std;
int main()
{double solut(double ,double ,double ,double );
double a,b,c,d;
cout<<"input a,b,c,d:";
cin>>a>>b>>c>>d;
cout<<"x="<<solut(a,b,c,d)<<endl;
return 0;
}
double solut(double a,double b,double c,double d)
{double x=1,x0,f,f1;
do
{x0=x;
f=((a*x0+b)*x0+c)*x0+d;
f1=(3*a*x0+2*b)*x0+c;
x=x0-f/f1;
}
while(fabs(x-x0)>=1e-5);
return(x);
}
7.写一个函数验证哥德巴赫猜想:一个不小于6的偶数可以表示两个素数之和,如6=3+3,8=3+5,10=3+7,……,在主函数中输入一个不小于6的偶数n,然后调用函数gotbaha,在gotbaha函数中再调用prime函数,prime函数的作用是判别一个数是否为素数。在gotbaha函数中输出以下形式的结果:
34=3+31
#include <iostream>
#include <cmath>
using namespace std;
int main()
{void godbaha(int);
int n;
cout<<"input n:";
cin>>n;
godbaha(n);
return 0;
}
void godbaha(int n)
{int prime(int);
int a,b;
for(a=3;a<=n/2;a=a+2)
{if(prime(a))
{b=n-a;
if (prime(b))
cout<<n<<"="<<a<<"+"<<b<<endl;}
}
}
int prime(int m)
{int i,k=sqrt(m);
for(i=2;i<=k;i++)
if(m%i==0) break;
if (i>k) return 1;
else return 0;
}
#include <iostream>
using namespace std;
int main()
{int x,n;
float p(int,int);
cout<<"input n & x:";
cin>>n>>x;
cout<<"n="<<n<<",x="<<x<<endl;;
cout<<"P"<<n<<"(x)="<<p(n,x)<<endl;
return 0;
}
float p(int n,int x)
{if (n==0)
return(1);
else if (n==1)
return(x);
else
return(((2*n-1)*x*p((n-1),x)-(n-1)*p((n-2),x))/n);
}
#include <iostream>
using namespace std;
int main()
{void hanoi(int n,char one,char two,char three);
int m;
cout<<"input the number of diskes:";
cin>>m;
cout<<"The steps of moving "<<m<<" disks:"<<endl;
hanoi(m,'A','B','C');
return 0;
}
void hanoi(int n,char one,char two,char three)
//将n个盘从one座借助two座,移到three座
{void move(char x,char y);
if(n==1) move(one,three); //只有一个盘子,从A到C
else
{hanoi(n-1,one,three,two);
move(one,three);
hanoi(n-1,two,one,three);
}
}
void move(char x,char y)
{cout<<x<<"-->"<<y<<endl;}
10.用递归法将一个整数n转换成字符串。例如,输入483,应输出字符串“483”。n的位数不确定,可以是任意位数的整数。
#include <iostream>
using namespace std;
int main()
{void hanoi(int n,char one,char two,char three);
int m;
cout<<"input the number of diskes:";
cin>>m;
cout<<"The steps of moving "<<m<<" disks:"<<endl;
hanoi(m,'A','B','C');
return 0;
}
void hanoi(int n,char one,char two,char three)
//将n个盘从one座借助two座,移到three座
{void move(char x,char y);
if(n==1) move(one,three); //只有一个盘子,从A到C
else
{hanoi(n-1,one,three,two);
move(one,three);
hanoi(n-1,two,one,three);
}
}
void move(char x,char y)
{cout<<x<<"-->"<<y<<endl;}
#include <iostream>
using namespace std;
int main()
{int f(int);
int n,s;
cout<<"input the number n:";
cin>>n;
s=f(n);
cout<<"The result is "<<s<<endl;
return 0;
}
int f(int n)
{;
if (n==1)
return 1;
else
return (n*n+f(n-1));
}
#include <iostream>
#include <cmath>
using namespace std;
#define S(a,b,c) (a+b+c)/2
#define AREA(a,b,c) sqrt(S(a,b,c)*(S(a,b,c)-a)*(S(a,b,c)-b)*(S(a,b,c)-c))
int main()
{float a,b,c;
cout<<"input a,b,c:";
cin>>a>>b>>c;
if (a+b>c && a+c>b && b+c>a)
cout<<"area="<<AREA(a,b,c)<<endl;
else
cout<<"It is not a triangle!"<<endl;
return 0;
}