用于对多个 True 或 False 测试进行评分的 C++ 程序

标签 c++ arrays algorithm

问题:

我的主要问题是我很难将包含数组的函数连接到主函数。

您学校的历史老师需要帮助来给对/错 测验打分。学生的 ID 和测试答案存储在一个文件中。文件中的第一个条目包含以下形式的测试答案:

TFFTFFTTTTFFTFTFTFTT

文件中的每个其他条目都是学生 ID,后跟一个空白,然后是学生的回答。例如,条目:

ABC54301 TFTFTFTT TFTFTFFTTFT

表示学号是ABC54301,问题的答案1True,问题2的答案是 False,依此类推。该学生未回答问题 9 .考试有20问题,类(class)有超过150学生。每个正确答案得两分,每个错误答案扣一分,没有答案得零分。编写一个程序来处理测试数据。输出应该是学生的 ID,然后是答案,然后是考试成绩,然后是考试成绩。假设以下等级:

90%–100%, A; 80%–89.99%, B; 70%–79.99%, C; 60%–69.99%, D; and 0%–59.99%, F.

代码

// Chap9BBProg.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iomanip>
#include <cmath>
#include <fstream>
#include <string>
#include <iostream>
using namespace std;
int stux;
char stuGrade;
int correctAnswers(char[], char[]);
char studentGrade(int score);
char ansKey[10];
char stuA[10];
int main()
{
    ifstream inFile;
    ofstream outFile;
    inFile.open("TFInput.txt");
    outFile.open("TFOutput.txt");
    double score;
    char grade;
    string key;
    string studentID;
    string stuAnswers;
    getline(inFile, key);
    outFile << "The correct answers are " << key << endl << endl;
    while (getline(inFile, studentID, ' '))
    {
        outFile << studentID << " ";
        getline(inFile, stuAnswers);
        stux = studentGrade(stux);
        outFile << " " << stuAnswers << endl;
    }
    return 0;
}
int correctAnswers(char answerKey[], char studentAnswers[])
{
    int i;
    int tempscore;
    for (i = 0; i < 22; i++)
    {
        if (answerKey[i] == studentAnswers[i])
        {
            tempscore += 2;
        }
        else if (studentAnswers[i] == ' ')
        {
            tempscore += 0;
        }
        else
        {
            tempscore -= 1;
        }
    }
    cout << tempscore << endl;
    return tempscore;
}
char studentGrade(int x)
{
    int i;
    double score = 0;
    char grade = ' ';
    score = x / 40.0 * 100;
    for (i = 0; i < 30; i++)
    {
        if (score >= 90)
            grade = 'A';
        else if (score < 90 && score > 79)
            grade = 'B';
        else if (score <= 79 && score > 69)
            grade = 'C';
        else if (score <= 69 && score > 60)
            grade = 'D';
        else if (score <= 59)
            grade = 'F';
    }
    return grade;
}

最佳答案

注意到一些小问题,例如在函数 correctAnswers() 中,变量 tempscore 未初始化,并且注意到 char[] 和字符串之间的函数参数冲突。

int stux;
char stuGrade;
int correctAnswers(string, string);
char studentGrade(int score);
char ansKey[10];
char stuA[10];
int main()
{
    ifstream inFile;
    ofstream outFile;
    inFile.open("TFInput.txt");
    outFile.open("TFOutput.txt");
    double score;
    string key;
    string studentID;
    string stuAnswers;
    getline(inFile, key);
    outFile << "The correct answers are " << key << endl << endl;
    while (getline(inFile, studentID, ' '))
    {
        outFile << studentID << " ";
        getline(inFile, stuAnswers);
        score = correctAnswers(key, stuAnswers);  //Changed here
        stuGrade = studentGrade(score);  //Changed here
        outFile << " Score: " << score <<" Grade: " << stuGrade << endl;  //Changed here
    }
    return 0;
}

int correctAnswers(string answerKey, string studentAnswers) //Changed here Array to string
{
    int i;
    int tempscore = 0; //Changed here Initialized to 0
    for (i = 0; i < 21; i++)  //Changed 22 to 21 here
    {
        if (answerKey[i] == studentAnswers[i])
        {
            tempscore += 2;
        }
        else if (studentAnswers[i] == ' ')
        {
            tempscore += 0;
        }
        else
        {
            tempscore -= 1;
        }
    }
    cout << tempscore << endl;
    return tempscore;
}

char studentGrade(int x)
{
    int i;
    double score = 0;
    char grade = ' ';
    score = x / 40.0 * 100;

    if (score >= 90)
        grade = 'A';
    else if (score < 90 && score > 79)
        grade = 'B';
    else if (score <= 79 && score > 69)
        grade = 'C';
    else if (score <= 69 && score > 60)
        grade = 'D';
    else if (score <= 59)
        grade = 'F';

    return grade;
}

关于用于对多个 True 或 False 测试进行评分的 C++ 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55272759/

相关文章:

c++ - 如何在 Xcode 中引用图像和其他对象以及将它们放置在何处?

javascript - 从每个 javascript 数组 concat 中获取 1 个元素,然后循环到一个数组中

c++ - 减去映射迭代器

algorithm - 我们应该在霍夫曼编码方法中包含空格吗

jquery - 具有固定宽度和高度的砌体?

c++ - 是否可以使用右值引用作为 pimpl 句柄?

c++ - 找到打印一切的功能?

c++ - 设计其中包含 char 数组字段数的结构

java - 考虑到问题标准,是否有比冒泡排序更有效的形式对该数组进行排序?

javascript - 从 span 元素数组获取同级复选框输入