第四章 函数和递归入门

第四章   函数和递归入门

1.数学库函数

ceil(x)  x取整为不小于x的最小整数 ceil(-9.8)=-9.0,ceil(5.3)=6

floor(x)  x取整为不大于x的最大整数  floor(-9.8)=-10.0,floor(5.3)=5

exp(x)  指数函数e^x

fabs(x)  x的绝对值

fmod(x,y) x/y的浮点数余数

log(x)  x(底数为e)的自然对数

log10(x) x(底数为10)的对数

pow(x,y) x的y次幂(x^y)

 

2.随机数生成

rand()%6,随机生成0-5的数,要是想要1-6的,直接rand()%6+1

 

srand(seed).  Srand函数无返回值,他只会影响rand函数生成,是rand函数的种子

可让计算机通过读取自己的始终来获得种子值

srand(time(0))  time函数返回的是1970年1月1日0时到现在的秒数

 

3.递归

N阶乘

<span style="font-size:14px;">int factorial(int n)
{
	if(n<=1)
		return 1;
	else
		return n*factorial(n-1);

}
void main()
{
	int num;
	cin>>num;

	cout<<factorial(num);


}
</span>

4.枚举类型enum

enum week {mon,tue,wed,thu,fri,sat,sun};//每一个对应一个值为0,1,2……

  week wk=mon;//要初始化!!

 

  int n;

  cin>>n;

 

  switch(n)

  {

  case 1:

            wk=mon;

            break;

  case 2:

            wk=tue;

            break;

 

  default:

            break;

 

  }

 

  cout<<wk;//只能输出0,1,2……

 

 

但直接这样不行:转换为枚举类型要求显式转换(static_cast、C 样式转换或函数样式转换)

case 1:

            wk=1;

            break;

  case 2:

            wk=2;

            break;

这样可以:

  case 1:

            wk=static_cast<week>(1);

            break;

  case 2:

            wk=static_cast<week>(2);

            break;

 

5.其他

c++中程序组件称为函数和类

cout<<fixed<<setprcision(1);  固定后面都是保留一位小数

inline 内联函数减少函数调用的开销-让编译器在适当的地方生成代码的副本以避免函数调用。-常搭配const

inline double cube(const double side)

{

  return side*side;

}

调用即cout<<cube(3);

 

6. /*1.         编写一个函数,求两个整数的最小值。

  (提示:函数原型为  int Min(int first, int second);)

  利用编写好的函数,求给定三个数的最小值,给定四个数的最小值。

  */

<span style="font-size:14px;">int Min(int f,int s)
{
	return f<s?f:s;
}

int Min1(int f,int s,int t)
{
	return f<Min(s,t)?f:Min(s,t);
}
void main()
{
	int a,b,c;
	cin>>a>>b>>c;

	cout<<Min1(a,b,c);


}
</span>


<span style="font-size:14px;">#include <iostream>
using namespace std;
/*4.	利用编号的素数判定函数(bool  Prime(int n)), 验证哥德巴赫猜想。任意给定一个1000以内,大于2的偶数,
它能表示成两个质数之和。
	*/

//判断是否是素数
bool Prime(int n)
{
	
	if(n<=1)
		return false;
	for(int i=2;i<n;i++)
	{
		if(n%i==0)
			{
				return false;
				break;
		}
		else 
			return true;


	}

}


void main()
{
	int n;
	cin>>n;
	if((n<=1000&&n>2)&&n%2==0)
	{
		for(int i=2;i<=n;i++)
		{
			
				if(Prime(i)&&Prime(n-i))//Prime()返回的是bool值,不能相加!
					{
						cout<<"="<<i<<"+"<<n-i<<endl;
						break;
					}
			}
		}
	}
</span>

7.编写函数并测试。给定一个整数,求它的因子(包含1,但不包含自己。)的和(如整数6,因子为1,2,3,和为6)。

  函数里面也能写cout!

<span style="font-size:14px;">void yinzi(int n)
{
	int j=0;
	for(int i=1;i<n;i++)
	{
		if(n%i==0)
		{
			j+=i;
			cout<<i<<endl;
		}
	}

	cout<<"因子和:"<<j;
}

void main()
{
	int n;
	cin>>n;

	yinzi(n);
	
}
</span>


/*采用从简单到复杂方法实现。

a)        编写函数。求给定整数n的位数[intNumber(int n)]

b)        编写函数。求给定整数n的第m位的数字[intBit(int n, int m);]

c)        编写函数。将整数n的第m位的数字换成k,并且返回新的整数[intWriteBit(int n, int m, int k);]

d)        数字反向。参考以下伪码

bits = Number(n);

for(i=1; i<= bits;  i++)

{

k =  Bit(n, i);

m = WriteBit(m, bits+1-i, k)

}

 

  */

<span style="font-size:14px;">#include <iostream>
#include <cmath>

using namespace std;

//给定整数n的位数
int Number(int n)
{
	int k=0;
	for(int i=1;i<=n;i=i*10)//只要不超过他就加位数
	{
		k++;
	}
	return k;
}

//求给定整数n的第m位的数字[int Bit(int n, int m);]
int Bit(int n,int m)
{
	int k;
	//pow函数为float或double,则需转化为int,且10->10.0
	k=n%(int)pow(10.0,m);
	k=k/(int)pow(10.0,m-1);

	return k;
}

//将整数n的第m位的数字换成k,并且返回新的整数[int WriteBit(int n, int m, int k);]
int WriteBit(int n,int m,int k)
{
	n=n-(int)pow(10.0,m-1)*Bit(n,m)+(int)pow(10.0,m-1)*k;
	return  n;
}
	
void main()
{
	int n;
	cin>>n;
	
	cout<<Number(n)<<"位数"<<endl;
	int m;
	cin>>m;
	cout<<"第"<<m<<"位是"<<Bit(n,m)<<endl;

	int k;
	cin>>k;
	cout<<"换成"<<k<<"后"<<WriteBit(n,m,k)<<endl;

	n=WriteBit(n,m,k);
	int bits=Number(n);
	int dw=0,hw=0;
	for(int i=1;i<=bits;i++)
	{
		dw=Bit(n,i);
		hw=WriteBit(hw,bits-i+1,dw);//注意是对hw进行改写!
	}
	cout<<"数字反向"<<hw<<endl;
	
}
</span>

<span style="font-size:14px;">//求整数x,y的最大公约数

#include <iostream>
using namespace std;
int Gongyueshu(int x,int y)
{
	if(y==0)
		return x;
	else
		return Gongyueshu(y,x%y);
}


void main()
{
	int x,y;
	cout<<"输入x,y,x>=y"<<endl;
	cin>>x>>y;

	cout<<"最大公约数"<<Gongyueshu(x,y);
	
}
</span>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值