首页 > 解决方案 > 用于对多个 True 或 False 测试进行评分的 C++ 程序

问题描述

问题:

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

您学校的历史老师在对真/假测试评分时需要帮助。学生的 ID 和测试答案存储在一个文件中。文件中的第一个条目包含测试的答案,格式如下:

TFFTFFTTTTFFTFTFTFTT

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

ABC54301 TFTTFTTFTTFTTFTTFTTFT

表示学生 ID 为ABC54301,问题的答案1True,问题的答案2False,以此类推。这个学生没有回答问题9。考试有20题,班里有150学生多。每答对一题得两分,答错一题扣一分,不答题得零分。编写一个处理测试数据的程序。输出应该是学生的 ID,然后是答案,然后是考试成绩,然后是考试成绩。假设以下年级规模:

90%–100%,一个;80%–89.99%,乙;70%–79.99%,C;60%–69.99%,D;和 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;
}

标签: c++arraysalgorithm

解决方案


注意到一些小问题,例如在函数 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;
}

推荐阅读