目录
三、在主程序中提示输入整数n,编写函数用递归的方法求1+2+3+...+n的值。
四、用递归的方法编写函数求Fibonacci级数,公式为Fn=Fn-1 +Fn-2 (n>2),F1=F2=1.
一、编写函数判别一个数是否是质数,在主程序中实现输入输出。
#include<iostream>
#include<cmath>
using namespace std;
int k; //全局变量k用来控制输出结果
void zhishu(int a)
{
int b,c;
b=sqrt(a);
for(c=2;c<=b;c++){
if(a%c==0){
k=0;
break;
}
k=1;
}
}
int main()
{
int a;
cin>>a;
zhishu(a);
if(k==0){
cout<<a<<"不是质数"<<endl;
}
else if(k==1){
cout<<a<<"是质数"<<endl;
}
return 0;
}
个人感觉应该是有不用设置全局变量的方法,但我没想到......
质数指除了1和它本身没有其他因数的数,假设要判断X是不是质数,那就判断2~根号X之间是否有数字能被X整除即可
二、编写函数求两个整数的最大公约数和最小公倍数。
#include<iostream>
#include<cmath>
using namespace std;
int ma,mi;//分别代表最大公约数和最小公倍数
void maxy(int a,int b)//自定义函数求最大公约数
{
int c;
if(a<=b){
for(c=1;c<=a;c++){
if((a%c==0)&&(b%c==0)){
ma = c;
}
}
}
else if(b<a){
for(c=1;c<=b;c++){
if((a%c==0)&&(b%c==0)){
ma = c;
}
}
}
}
void minb(int a,int b)//自定义函数求最小公倍数
{
maxy(a,b);
mi = a*b/ma;
}
int main()
{
int a,b;
cin>>a>>b;
maxy(a,b);
minb(a,b);
cout<<ma<<endl;
cout<<mi<<endl;
return 0;
}
理解这两个函数还是比较简单的。
最大公约数再大也不会大于两个原始数据中较小的那一个(简称较小数),所以只要把1~较小数之间都能被两个原始数据整除的数找出来,留下最大的一个即可。
而最小公倍数的计算方法就更加简单粗暴了,举个例子,5和10以及15和18。
不难看出最小公倍数其实就是两个原始数据分别除以他们的最大公约数后再乘以最大公约数,用a,b代表原始数据,max代表最大公约数,那么这个式子是这样的:
(a/max)*(b/max)*max
所以化简之后就是代码里那个式子啦。
三、在主程序中提示输入整数n,编写函数用递归的方法求1+2+3+...+n的值。
#include<iostream>
#include<cmath>
using namespace std;
int summ(int n){
if(n==1)
return 1;
else
return n+summ(n-1);
}
int main()
{
int n;
cout<<"请输入一个整数:"<<endl;
cin>>n;
cout<<"该数的累加和为:"<<summ(n)<<endl;
return 0;
}
这次自定义的是返回值是整型的函数,相比于前两个返回值为空(也不知道这么说对不对)的函数,这个就需要考虑要return什么啦。
PS:累加和那个名字是我瞎起的,只是感觉这么叫挺合适的。
四、用递归的方法编写函数求Fibonacci级数,公式为Fn=Fn-1 +Fn-2 (n>2),F1=F2=1.
#include<iostream>
#include<cmath>
using namespace std;
int fib(int n){
int f1,f2;
f1=f2=1;
if(n==1)
return f1;
if(n==2)
return f2;
else if(n>2)
return fib(n-1)+fib(n-2);
}
int main()
{
int n;
cout<<"请输入一个整数:"<<endl;
cin>>n;
cout<<"斐波那契数列的该项为:"<<fib(n)<<endl;
return 0;
}
有上一道题做铺垫,这个斐波那契问题就好理解多了。
五、用递归的方法编写函数求n阶勒让德多项式的值
#include<iostream>
#include<cmath>
using namespace std;
double le(int n,double x){
if(n==0)
return 1;
if(n==1)
return x;
else if(n>1)
return (((2*n-1)*x*le(n-1,x)-(n-1)*le(n-2,x))/n);
}
int main()
{
int n;
double x;
cout<<"请输入想计算的项数以及未知数x的值:"<<endl;
cin>>n>>x;
cout<<"勒让德多项式的值为:"<<le(n,x)<<endl;
return 0;
}
这道题其实我心里没太有底,因为虽然程序能正常运行,但我这个懒癌晚期患者从来没动手算过结果对不对,so...
熟悉了下编辑页面,暂时存这些吧,以后再也不用担心电脑里的作业文件没地方放啦!!!
统统删掉!!!