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

来源:互联网 发布:淘宝子账号有什么权限 编辑:程序博客网 时间:2024/06/05 22:49

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);}
原创粉丝点击