美文网首页
萧井陌“雷课堂” 第一次作业

萧井陌“雷课堂” 第一次作业

作者: 禁卫君 | 来源:发表于2020-04-24 16:40 被阅读0次

题目:

第一次作业题

答案:

#include <iostream>
#include <vector>

using namespace std;

// 定义自己的log
template<class T>
void _print(T arg) {
    cout << arg << " ";
}

template<class... Args>
void log(Args... args) {
    int arr[] = { (_print(args), 0)... };
    cout << endl;
}

// 求和例子
float sum(vector<float> &array) {
    // 先设置一个变量 s 用来存数组的和
    float s = 0;
    // .size() 函数的返回值是 size_t
    // 所以这里的变量 i 也是 size_t(你可以当作 int)
    size_t i = 0;
    // array.size() 求得 vector 的大小
    while (i < array.size()) {
        float n = array[i];
        s = s + n;
        i = i + 1;
    }
    return s;
}

// 测试用
void ensure(bool condition, const string &message) {
    if (condition) {
        log("测试成功");
    } else {
        log(message);
    }
}

bool floatEqual(float a, float b) {
    // 这里的 delta 变量的类型我们用了 auto
    // 这是一个 C++ 11 的新特性
    // 它的作用是根据变量的值自动推导变量的类型
    // delta 的值是 0.00001 所以它会是 float 类型
    // 仅作介绍
    auto delta = 0.00001;
    // 如《〖快编程〗的免费编程入门课》 所述
    // 计算机对浮点数的比较要用这样的方式
    return a - b < delta && b - a < delta;
}

/*
* 答案从此处开始,每一个函数都有测试
*/
// 作业1
float product(vector<float> &array) {
    // 先设置一个变量 s 用来存数组的和
    float s = 1;
    // .size() 函数的返回值是 size_t
    // 所以这里的变量 i 也是 size_t(你可以当作 int)
    size_t i = 0;
    // array.size() 求得 vector 的大小
    while (i < array.size()) {
        float n = array[i];
        s = s * n;
        i = i + 1;
    }
    return s;
}

void testProduct(void) {
    vector<float> v1 = {1, 2, 3, 4};
    float s1 = product(v1);
    // 判断浮点数相等,建议使用 floatEqual 函数
    ensure(floatEqual(s1, 24), "product test error 1");
    //
    vector<float> v2 = {-1, 2, 3, 4, 5, 6};
    float s2 = product(v2);
    ensure(floatEqual(s2, -720), "product test error 2");
}


// 作业2
float abs1(float n) {
    if (n < 0) {
        return -n;
    }
    else{
        return n;
    }
}

void testAbs1(void) {
    float a = 3;
    ensure(floatEqual(abs1(a), 3), "abs1 test error 1");
    float b = -3;
    ensure(floatEqual(abs1(b), 3), "abs1 test error 2");
    float c = 0;
    ensure(floatEqual(abs(c), 0), "abs1 test error 3");
}


//  作业3
float average(vector<float> &array) {
    float sumOfArray = sum(array);
    size_t sizeOfArray = array.size();
    return sumOfArray / sizeOfArray;
}

void testAverage(void) {
    vector<float> a = {1, 2, 3, 4};
    ensure(floatEqual(average(a), 2.5), "average test error 1");
    vector<float> b = {-1, -2, -3, -4, 1, 2, 3, 4};
    ensure(floatEqual(average(b), 0), "average test error 2");
}


//  作业4
float min1(vector<float> &array) {
    float s = array[0];
    size_t i = 1;
    while (i < array.size()) {
        if (array[i] < s) {
            s = array[i];
        }
        i++;
    }
    return s;
}

void testMin1(void) {
    vector<float> a = {1};
    ensure(floatEqual(min1(a), 1), "min1 test error 1");
    vector<float> b = {-1, -2, -3, -4, 1, 2, 3, 4};
    ensure(floatEqual(min1(b), -4), "min1 test error 2");
}


// 作业5
int sum1(int n) {
    int s = 0;
    int i = 1;
    while(i <= n) {
        if (i % 2 == 1) {
            s += i;
        }
        else{
            s -= i;
        }
        i++;
    }
    return s;
}

void testSum1(void) {
    ensure(sum1(1) == 1, "sum1 test error 1");
    ensure(sum1(4) == -2, "sum1 test error 2");
    ensure(sum1(6) == -3, "sum1 test error 3");
}


// 作业6
int sum2(int n) {
    int s = -1 * sum1(n) + 2;
    return s;
}

void testSum2(void) {
    ensure(sum2(1) == 1, "sum2 test error 1");
    ensure(sum2(2) == 3, "sum2 test error 2");
    ensure(sum2(6) == 5, "sum2 test error 3");
}


// 作业7
int fac1(int n) {
    if( n == 0 || n == 1) {
        return 1;
    }
    return fac1(n-1) * n;
}

void testFac1(void) {
    ensure(fac1(0) == 1, "fac1 test error 1");
    ensure(fac1(1) == 1, "fac1 test error 2");
    ensure(fac1(6) == 720, "fac1 test error 3");
}

// 测试汇总
void test(void) {
    testProduct();
    testAbs1();
    testAverage();
    testMin1();
    testSum1();
    testSum2();
    testFac1();   
}


int main(int argc, const char *argv[])
{
    test();
    return 0;
}

运行结果

运行结果.jpg

相关文章

网友评论

      本文标题:萧井陌“雷课堂” 第一次作业

      本文链接:https://www.haomeiwen.com/subject/eiwfwhtx.html