第四章函数和递归入门

来源:互联网 发布:安卓录屏内录声音软件 编辑:程序博客网 时间:2024/06/06 08:40

第四章   函数和递归入门

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;elsereturn 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.0k=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;elsereturn Gongyueshu(y,x%y);}void main(){int x,y;cout<<"输入x,y,x>=y"<<endl;cin>>x>>y;cout<<"最大公约数"<<Gongyueshu(x,y);}</span>


0 0
原创粉丝点击