数据结构复习笔记:C++程序设计(一)

1、如果在windows下使用命令行编译C++?

  为了简化程序编写编译运行流程,决定不使用电脑里的Visual Studio 2010,而是借用里面的cl.exe使用命令行编译。方法如下:
  (1)将cl.exe所在的目录加入环境变量,我这里是:D:\Program Files\Microsoft Visual Studio 10.0\VC\bin;
  (2)在D:\Program Files\Microsoft Visual Studio 10.0\VC\bin目录下创建一个run.bat的文件用于运行cmd并配置准备环境,内容:@cmd /k vcvars32.bat;
  (3)运行里面或者命令行下输入run,启动带有VS tools开发环境的命令行界面,进入代码目录,开始使用cl命令:cl /EHsc test1.cpp;

2、使用模版函数简化仅参数类型不同函数的编写:

// 传值参数
#include <iostream>
using namespace std;

template<class T>
T add(T num1, T num2) {
    return num1 + num2;
}

int main(int argc, char* argv[]) {
    int intNum = add(3, 5);
    cout << intNum << endl; // 8

    float floatNum = add(3.1f, 5.0f); // 8.1
    cout << floatNum << endl;

    return 0;
}
// 引用参数
#include <iostream>
using namespace std;

template<class T>
T add(T &num1, T &num2) {
    num1 += 10, num2 += 10;
    return num1 + num2;
}

int main(int argc, char* argv[]) {
    int num1 = 5, num2 = 8;
    add(num1, num2);

    cout << "num1 = " << num1 << endl; // num1 = 15
    cout << "num2 = " << num2 << endl; // num2 = 18

    return 0;
}
// 常量参数
#include <iostream>
using namespace std;

template<class T>
T add(const T& num1, const T& num2) {
    // num1 += 10, num2 += 10; // 错误,不能给常量赋值
    return num1 + num2;
}

int main(int argc, char* argv[]) {
    int num1 = 5, num2 = 8;
    add(num1, num2);

    cout << "num1 = " << num1 << endl; // num1 = 15
    cout << "num2 = " << num2 << endl; // num2 = 18

    return 0;
}

上面的函数add的两个参数类型必需相同,比如add(3, 5.0)会报错,第一个参数是int型,第二个参数是double型,这两个类型不同,不符合单个T的定义,不过可以采用下面的方法解决:

#include <iostream>
using namespace std;

template<class Ta, class Tb>
Tb add(const Ta& num1, const Tb& num2) {
    return num1 + num2;
}

int main(int argc, char* argv[]) {
    int num1 = 5;
    float num2 = 8.0f;

    float num = add(num1, num2);
    cout << num << endl; // 13

    return 0;
}
// 返回引用/常量应用
#include <iostream>
using namespace std;

template<class T>
const T& add(const T num1,T& num2) {
    num2 += num1;
    return num2;
}

int main(int argc, char* argv[]) {
    int num1 = 5, num2 = 8;
    cout << "add(num1, num2) = " << add(num1, num2) << endl;
    cout << "num2 = " << num2 << endl; // num2 = 13
    // add(num1, num2)++; // 错误,不能给常量赋值

    return 0;
}

3、几种常见的递归函数编写:

(1)斐波那契数列(兔子数列,黄金分割数列);
(2)大衍数列(来源于《乾坤谱》中对易传“大衍之数五十”的推论);
(3)阶乘;

// 递归
#include <iostream>
using namespace std;

int fabonacci(int n);
int dayan(int n);
int factorial(int n);

int main(int argc, char* argv[]) {
    for(int i=1; i<13; i++) {
        cout << fabonacci(i) << endl;
    }
    cout << "=====================" << endl;

    for(int i=1; i<13; i++) {
        cout << dayan(i) << endl;
    }
    cout << "=====================" << endl;

    cout << factorial(12) << endl;
    cout << "=====================" << endl;

    return 0;
}

int fabonacci(int n) {
    if(n == 1) {
        return 0;
    }

    if(n == 2) {
        return 1;
    }

    return fabonacci(n-1) + fabonacci(n-2);
}

int dayan(int n) {
    if(n % 2 == 1) {
        return (n*n-1)/2;
    } 

    return n*n/2;
}

int factorial(int n) {
    if(n <= 1) {
        return 1;
    }

    return n * factorial(n-1);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值