首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >学生评分计算器

学生评分计算器
EN

Code Review用户
提问于 2016-10-13 22:23:29
回答 1查看 144关注 0票数 4

这是一个学生模块标记计算器,我被要求为第二年的大学复习课程编写。

这是现代C++代码的一个好例子吗?有什么是我可以改进或需要改变成为一个更好的程序员吗?

代码语言:javascript
复制
#include <iostream>
#include <cstdlib>

float student_results[5][2];

unsigned int input_student_result(unsigned int);

float input_student_weighting(unsigned int);

unsigned int input_exam_result();

float calculate_exam_weighting();

float calculate_module_mark();

int main() {

    // Coursework 1

    for (unsigned int i = 0; i < 4; ++i) {

        student_results[i][0] = input_student_result(i);

        student_results[i][1] = input_student_weighting(i);

    }

    student_results[4][0] = input_exam_result();

    student_results[4][1] = calculate_exam_weighting();

    std::cout << "Module mark = " << calculate_module_mark() << '\n';
    std::cout << '\n';

    system("pause");

    return 0;

}

unsigned int input_student_result(unsigned int n) {

    unsigned int input_validation = 0;

    do {

        std::cout << "Enter coursework " << (n + 1) << " result <0 - 100> = ";
        std::cin >> input_validation;

    } while (!(input_validation >= 1 && input_validation <= 100));

    return input_validation;

}

float input_student_weighting(unsigned int n) {

    float input_validation = 0;

    do {

        std::cout << "Enter coursework " << (n + 1) << " weighting 0.1 or 0.2 = ";
        std::cin >> input_validation;

    } while (!(input_validation == 0.1f || input_validation == 0.2f));

    return input_validation;

}

unsigned int input_exam_result() {

    unsigned int input_validation = 0;

    do {

        std::cout << "Enter exam result <0-100> = ";
        std::cin >> input_validation;

    } while (!(input_validation >= 1 && input_validation <= 100));

    return input_validation;

}

float calculate_exam_weighting() {

    float exam_weighting = (1 - (student_results[0][1] + student_results[1][1] + student_results[2][1] + student_results[3][1]));

    std::cout << "Exam weighting = " << exam_weighting << '\n';

    return exam_weighting;

}

float calculate_module_mark() {

    float module_mark{
            (student_results[0][0] * student_results[0][1]) +
            (student_results[1][0] * student_results[1][1]) +
            (student_results[2][0] * student_results[2][1]) +
            (student_results[3][0] * student_results[3][1]) +
            (student_results[4][0] * student_results[4][1])
    };

    return module_mark;

}
EN

回答 1

Code Review用户

回答已采纳

发布于 2016-10-13 23:49:02

下面是如何改进代码:

  • 定义一个类,而不是对无关的数字使用数组(0到100 vs.0.1或0.2)
  • 使用std::vector而不是固定大小的数组
  • 更喜欢double而不是float,因为它具有更高的精度
  • 与浮点算法相比,更喜欢整数算法,因为它不会轻易导致奇怪的结果。
  • 将您的全局函数分组为一个类,以表示它们属于一个类。
  • 添加对std::cin >> var所有调用的错误检查

顺便说一下,你看上去不像个初学者

  • 不要导入完整的std命名空间
  • 使用\n而不是std::endl

这已经相当不错了。

票数 2
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/144180

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档