c++第三章函数


/*
* 函数的定义和使用
*       定义:调用其他函数的函数叫做主调函数,被调用的函数称为被调函数,函数既可以被调用也可以调用其他函数
*             语法形式
*             类型说明符  函数名(形参)
*             {
*                 语句序列
                         }
*             形参:实现调用函数与被调函数之间的联系,将函数所处理的数据、影响函数参数的因素或者函数预处理的结果作为形参
*       函数返回值和返回值类型:
*              函数可以有一个返回值,函数的返回值需要返回给主调函数的处理结果,类型说明符规定了返回值的类型
*              return 表达式;(return语句两个作用,返回值和结束函数的执行)
*       函数的调用:
*             函数的调用形式:
*             类型说明符 函数名(形参列表)
*             在所有函数之前声明函数,那么就可以在程序的任何地方调用这个函数
             (声明函数,形参列表只需要包含完整的类型信息,形参名可以省略)
*       回文:各位数字左右对称。
*       镶嵌套用:函数一表用函数2,函数2调用函数3,就形成了镶嵌调用。
*       递归调用,直接或者间接的调用本身
*       函数的参数传递
*             值传递:实参初始化形参,实参的值无法发生改变
*             引用传递:引用是一种特殊的变量,可以被认为是另一个变量的别名

*       内联函数:功能简单、规模较小、使用频繁
*                 不是在调用时发生控制转移,在编译时将函数嵌入在每一个调用处
*                 inline 类型说明符 函数名(含有类型说明的形参)
*                  {   语句序列   }
*       带默认形参值的函数:
*                 函数定义可以预先声明默认的形参值,调用时,如果给出实参,则用给定的形参值,否则用默认的形参值
*                 相同作用域内,不允许对同一个函数的多个声明对同一个参数的默认值重复定义,即使前后的值相同也不行
*                 有默认值的形参必须在形参列表的最后
*       函数重载:两个以上的函数,具有相同的函数名,但是形参的个数或者类型不同,编译器根据实参和形参的类型以及个数的最佳匹配,自动确定调用哪一个函数
*                 int add(int i,int j)
*                 float add(float i,float j)形参类型不同
*                 int add(int i,int j int y)形参个数不同
*                 不要将不同功能的函数定义撑重载函数,以免出现对于调用结果的误解混淆
*                 使用默认参数值重载时要注意,防止不知道调用哪一个函数
*c++系统函数:c++中提供了几百个函数供程序员使用
*             编译环境提供的系统函数分为两类,一类是标准的c++函数一类是不标准的c++函数,是当前操作系统或编译环境中所特有的系统函数
*             优先使用标准的c++函数
* 深度探索
*        运行栈与函数调用的执行:
*               运行栈的工作原理:
*                               c++变量在运行时依靠地址加以区分为全局变量和局部变量
*                               全局变量在程序中用于唯一确定的地址,但是局部没有
*                               原因:1、局部变量只有在调用他所在的函数的时候才会生效,函数返回便失效
*                                     2、递归时,必然有函数值没有返回,对他的再次调用发生,相同名称的局部变量会拥有不同的值,他们同时存在,相互不影响,他们必然有不同的地址
*                               函数形参与局部变量相类似,没有固定地址,需要存储在一个特殊结构中,就是栈
*                      栈:一种数据结构,是一种能容纳很多数据的容器,数据进入和推出需要满足一定条件
*                             后进先出,先进后出
*                      运行栈:函数的形参和局部变量可以用栈存储叫运行栈(一段区域的内存空间,与全局变量的存储一样,只是寻址方式不同)
*                              运行栈中的数据分为一个一个的栈帧,每一个对应一个函数调用,栈帧中包括函数调用的形参值、控制信息、局部变量值、临时数据
*                              每次函数调用就会有一个栈帧被压入栈中,结束调用,栈帧就会弹出来
*                              函数执行过程中可以随机访问他所对用栈帧中的数据(执行中的函数所处栈帧总在最顶端
*               函数调用的执行过程:
*                     esp寄存器就是来记录栈顶地址的,它称为栈指针
*                     ebp寄存器(帧指针):因为函数的栈帧大小不确定,函数返回时,恢复指针就比较的麻烦,就需要另一个寄存器保存被调用时,栈指针的位置
*/


#include<stdio.h>
#include <iostream>
using namespace std;
//编写一个求x的n次方的函数
double cifang(double x, int y)
{
    double j = 1;
    for (int i = 1; i <= y; i++)
    {
        j *= x;
    }
    return j;
}
//输入一个8为二进制,将其转化为10进制输出
int jinzhi(int x)
{
    int tmp=0;
    int tmp1 = 0;
    for (int i = 0;i<8; i++)
    {
       
        int j;
        j = x % 10;
        x /= 10;
        if (j = 1)
        {
            tmp+=cifang(2, i);
        }

        
        
    }
    return tmp;
}
//递归求阶乘
int digui(int x)
{
    int a;
    if (x == 0)
    {
        a = 1;
    }
    else
    {
        a = digui(x - 1) * x;
    }
    return a;
}
//递归计算n个人选择K个组成一个组委会的个数
int geshu(int n, int k)
{
    if (k > n)
    {
        return 0;
    }
    if (n==k||k==0)
    {
        return 1;
    }
    else
        return geshu(n-1, k) + geshu(n - 1, k - 1);
}
//通过引用传递改变值
void gaibian(int& a, int& b)
{
    int t = a;
    a = b;
    b = t;

}
//主函数
int main()
{
    int x=cifang(5, 2);
    std::cout << x <<std:: endl;
    std::cout << jinzhi(01101001) << std::endl;
    std::cout << digui(8)<< std::endl;
    std::cout << geshu(18,5) << std::endl;
    int a = 1;
    int c = 2;
    gaibian(a, c);
    std::cout << a<<c<< std::endl;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值