1

我很茫然。我已经尝试了几件事,并且 90% 的程序都在工作。事实上,它编译并运行良好。我的输出是字母等级应该是非常奇怪的字符。

我们的教科书没有提供这样的例子,而且很难搜索。我需要在一个函数中返回一个字母等级,然后在另一个函数中的表格中使用它。你怎么做到这一点?

#include <iostream>
#include <iomanip>
#include <string>
using namespace std;

// function prototypes
void getData(string [], string [], int []);
char calculateGrade(char []);
void printResult(string [], string [], int [], char [], int);

int main()
{
    // define 4 parallel arrays
    const int NO_OF_STUDENTS = 5;
    string studentFNames[NO_OF_STUDENTS];
    string studentLNames[NO_OF_STUDENTS];
    int testScores[NO_OF_STUDENTS];
    char letterGrades[NO_OF_STUDENTS];

    // call getData() to populate three of the four parallel arrays
    getData(studentFNames, studentLNames, testScores);

    // call calculateGrade() to provide values for the fourth parallel array
    calculateGrade(letterGrades);

    // call printResult() to display report form the parralel arrays
    printResult(studentFNames, studentLNames, testScores, letterGrades, NO_OF_STUDENTS);

    return 0;
}

// function definition getData()
void getData(string fName[], string lName[], int scores[])
{
    // the follow arrays are used for test data (do not modify)
    string fNameTest[5] = {"Humpty", "Jack", "Mary", "Jack", "King"};
    string lNameTest[5] = {"Dumpty", "Horner", "Lamb", "Sprat", "Cole"};
    int scoresTest[5] = {59, 88, 100, 75, 60};


    // use a suitable loop to populate the appropriate "empty" arrays
    // with values from the three initialized test arrays
    for(int index = 0; index < 5; index++)
    {
        fName[index] = fNameTest[index];
        lName[index] = lNameTest[index];
        scores[index] = scoresTest[index];
    }
}

// function definition for calculateGrade()
char calculateGrade(char letter[])
{
    int score;
    char gradeLetter[5] = {'A', 'B', 'C', 'D', 'F'};

    //for(int i = 0; i < 5; i++)
    //{

        if(score > 89)
        {
            return gradeLetter[0];
        }
        if(score > 79)
        {
            return gradeLetter[1];
        }
        if(score > 69)
        {
            return gradeLetter[2];
        }
        if(score > 59)
        {
            return gradeLetter[3];
        }


        return gradeLetter[4];

    //}

}

// function definition for printResults()
void printResult(string lName[], string fName[], int score[], char letter[], int size)
{
    cout << setw(15) << left << "Student Name" << setw(9) << right << "Test Score" << " " << setw(5) << "Grade" << endl << endl;
    for(int index = 0; index < size; index++)
    {
        cout << setw(15) << left << (lName[index] + ", " + fName[index]);
        cout << setw(9) << right << score[index] << " " << setw(5) << letter[index] << endl;
    }
}

这是程序。请记住,我只能使用这三个函数,并且不能更改任何常量或局部变量。我怀疑稍后我们将修改此程序以从文件中读取,但这不是现在的问题。

我尝试了一个带有 if/else if/else 语句的 for 循环,它给出了黑桃、菱形和 w。我曾尝试将数组用于gradeLetter 和 testScores,但作为回报,我仍然会胡言乱语。

任何帮助将不胜感激。对不起,如果已经做过类似的事情。寻找这样的东西是一场噩梦。

4

3 回答 3

1

尝试以下方法而不是您的方法:

// function definition for calculateGrade()
  void calculateGrade(const int NO_OF_STUDENTS, int *testScores, char *letter)
  {
     for(int i = 0; i < NO_OF_STUDENTS; i++)
     {

       if(testScores[i] > 89)
       {
           letter[i] = 'A';
       }
       else if(score > 79)
       {
           letter[i] = 'B';
       }
       else if(score > 69)
       {
           letter[i] = 'C';
       }
       else if(score > 59)
       {
           letter[i] = 'D';
       }
       else // As you are a beginner, try to always cover all the possibilities in an if chain, you'll thank me later
           printf("Please give a score greater than 59 for student number %d", i);


  }

并像这样调用:

calculateGrade(NO_OF_STUDENTS, testScores, letterGrades);

因为这是家庭作业,我会让你发现星号的含义以及为什么我不返回值。

最后的建议,也许稍后当你更好地掌握语言时,尝试将字段分组到一个类或结构中(在 C++ 中几乎相同,检查这个 C++中的结构和类之间有什么区别?对于差异),而不是名字,姓氏和分数的数组,你最终会得到类似的东西:

struct Student  
{
   string fName;
   string lName;
   int testScore;
}

Student students[NO_OF_STUDENTS];
于 2015-10-01T14:39:17.260 回答
0

这段代码写得不是很好,但是,作为一个快速修复,您可能只是初始化您的char LetterGrades[],就像您初始化其他 3 个数组一样。所以,你可以这样做>

    char calculateGrade(char letter[])
{
    int score;
    char gradeLetter[5] = {'A', 'B', 'C', 'D', 'F'};

    for(int i=0; i<5; i++) {
        letter[i] = gradeLetter[i];
    }

        if(score > 89)
        {
            return gradeLetter[0];
        }
        if(score > 79)
        {
            return gradeLetter[1];
        }
        if(score > 69)
        {
            return gradeLetter[2];
        }
        if(score > 59)
        {
            return gradeLetter[3];
        }

        return gradeLetter[4];

    //}

}

输出就OK了,它打印出'A','B','C'等。还有一件事,你的printResult函数写得不好。它什么也不做,只是列出所有数组(测试,你会看到分数 59 得到“A”,分数 100 得到“C”)。您必须编写代码,以便分数和等级与获得它们的人相对应。

于 2015-10-01T14:37:47.300 回答
0

calculateGrade有两个问题:

  1. 您可以从编译器警告中看到。score未初始化
  2. 它没有分配任何东西letter[]

您的程序的概念是每个索引代表一个学生。因此,您想要的是获取索引 (student) 的分数并将其分配给该索引的 (student's) letter

为此,我们需要记下乐谱和字母。所以你的定义应该是这样的:void calculateGrade(int[], char[]);. 在内部而不是返回您分配给char[].

于 2015-10-01T14:38:01.523 回答