我不知所措。我已经尝试了几件事,并且有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,但我仍然会得到胡言乱语。
非常感谢任何帮助。对不起,如果做了类似的事情。寻找这样的事情是一场噩梦。
答案 0 :(得分: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 ++中几乎相同,请检查此What are the differences between struct and class in C++?以获取差异)而不是一系列的姓,名和分数,你最终会得到:
struct Student
{
string fName;
string lName;
int testScore;
}
Student students[NO_OF_STUDENTS];
答案 1 :(得分:0)
此代码编写得不是很好,但作为快速修复,您可能只是初始化char LetterGrades[]
,就像初始化其他3个数组一样。所以,你可以做&gt;
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];
//}
}
然后输出正常,它会打印出A&#39; B&#39; B&#39; C&#39; C&#39;等等
还有一件事,你的printResult
函数编写得很糟糕。它没有做任何事情,只是列出所有阵列(测试,你会看到得分59获得A&#39;得分100获得&#39; C&#39; )。你必须制作代码,以便分数和成绩与获得它们的人相对应。
答案 2 :(得分:0)
calculateGrade
有两个问题:
score
未初始化letter[]
您的计划的概念是每个索引代表一个学生。所以你想要的是接受索引(学生)的分数并将其分配给该索引(学生)letter
。
要做到这一点,我们需要拿一个分数和一封信。因此,您的定义应如下所示:void calculateGrade(int[], char[]);
。在内部而不是返回成绩信,您可以将其分配给char[]
。