分配/计算学生成绩(c++)的循环



我的程序有点困难,如果有任何帮助,我将不胜感激。请原谅我的代码太糟糕了,我是新来的。

#include <iostream>
#include <string.h>
using namespace std;
//functions
string getFirstName();
string getLastName();
int getScores();
double calculateSum(double sum, double score);
double calculateAvg(double avg, double sum);
char calculateGrade(double score, char grade);
void displayResults(string firstname, string lastname, double avg, char 
grade);
int main(){
//variables
string firstname;
string lastname;
int score;
double sum;
double avg;
char grade;
//functions and parameters
firstname = getFirstName();
lastname = getLastName();
score = getScores();
sum = calculateSum(sum, score);
avg = calculateAvg(avg, sum);
grade = calculateGrade(score, grade);
displayResults(firstname,lastname,avg,grade);

while (true)
{
firstname = getFirstName();
cin >> firstname; 
if (firstname == "done")break;
lastname = getLastName();
cin >> lastname;
sum=0.0;
for (int i = 0; i<10; i++)
{
double score;
cin >> score;
sum - calculateSum(sum, score);
sum+=score;
//sum = sum+score;
}
avg = calculateAvg(avg, sum);
avg = sum/10.0;
displayResults(firstname,lastname,avg,grade);
}
return 0; 
}
string getFirstName()
{
string firstname;
cout<<"Enter first name: " << endl;
cin >>firstname;
return firstname;
}
string getLastName()
{
string lastname;
cout<<"Enter last name: ";
cin >>lastname;
return lastname;
}
int getScores()
{
int score;
cout <<"Input score: ";
cin >>score;
return score;
}
double calculateSum(double sum, double score)
{
sum+=score;
return sum;
}
double calculateAvg(double avg, double sum)
{
avg = sum/10.0;
return avg;
}
char calculateGrade(double score, char grade)
{
if (score >= 90) 
grade = 'A';
else if (score >=80) 
grade = 'B';
else if (score >=70)
grade = 'C';
else if (score >=60) 
grade = 'D';
else 
grade = 'F';
return grade;
}

void displayResults(string firstname, string lastname, double avg, char 
grade)
{
cout<<firstname<< lastname<<": "<<avg << grade;
}

我真的不了解循环,也不了解它们是如何工作的,所以我为循环写的东西只是我们的教授给我们的,所以如果有人能解释/剖析它,我会非常感激!我想知道如何做到这一点,而不仅仅是有答案交给我。

所以,我不确定为什么我的程序不能正确执行。我已经列出了调用函数,所有函数似乎都是正确的。我的循环也在主循环中,但我不知道为什么它们不起作用。此外,当我运行它时,我没有任何错误。

它似乎卡在输入名字和输入姓氏部分,但我不知道为什么。再次感谢您的帮助,谢谢!

您的代码充满了错误,但我将带领您一步一步地完成它。

首先,我们需要检查每个功能的作用:

1-string getFirstName();提示用户输入他的/她的名字工作

2-string getLastName();提示用户输入他/她的姓氏工作

3-int getScores();提示用户输入他/她的分数工作

4-double calculateSum(double sum, double score);将总和和分数相加。你在实现功能时做了什么:

{
sum+=score;
return sum;
}

只有通过引用传递变量sum时才有效。现在没有必要讨论这个问题。一个更简单的方法是这样做:

{
double add = sum + score;
return add;
}

下一篇:

5-double calculateAvg(double avg, double sum);sum除以10得到平均值,不需要传递avg作为参数,因为这是我们要返回的。

函数应写成double calculateAvg(double sum);

6-char calculateGrade(double score, char grade);也是如此。不需要通过grade。它将被写为char calculateGrade(double score);

7-最后一个:void displayResults(string firstname, string lastname, double avg, char grade);工作


好,现在转到main()函数:你需要像这样声明所有的变量

string firstname;
string lastname;
double score;
double sum ;
double avg ;
char grade;

这里不需要使用我们的函数,我们将在while循环中使用它们。

进入while循环:

  • 没有必要将cin>>与任何变量一起使用,因为这就是我们的函数为我们所做的。

  • 当用户输入done作为他的/她的名字时,退出循环。

  • 否则,创建一个for循环,该循环迭代10次,要求用户输入他/她的分数,将该分数添加到总和中,然后在for循环结束后计算averagegrade并打印出来。


您的代码的最终工作版本应该是这样的,如果您还有任何进一步的问题,请不要犹豫。

#include <iostream>
#include <string.h>
using namespace std;
//functions
string getFirstName();
string getLastName();
int getScores();
double calculateSum(double sum, double score);
double calculateAvg(double sum);
char calculateGrade(double score);
void displayResults(string firstname, string lastname, double avg, char grade);
int main(){
//variables
string firstname;
string lastname;
double score;
double sum ;
double avg ;
char grade;
while (true)
{
firstname = getFirstName();
if (firstname == "done")
break;
lastname = getLastName();
sum=0.0;
for (int i = 0; i<10; i++)
{
score = getScores();
sum = calculateSum(sum, score); //sum = sum+score;
}
avg = calculateAvg(sum);
grade = calculateGrade(avg);
displayResults(firstname,lastname,avg,grade);
}
return 0; 
}
string getFirstName()
{
string firstname;
cout<<"Enter first name: ";
cin >>firstname;
return firstname;
}
string getLastName()
{
string lastname;
cout<<"Enter last name: ";
cin >>lastname;
return lastname;
}
int getScores()
{
int score;
cout <<"Input score: ";
cin >>score;
return score;
}
double calculateSum(double sum, double score)
{
int add = sum + score;
return add;
}
double calculateAvg(double sum)
{
double avg = sum/10.0;
return avg;
}
char calculateGrade(double score)
{
char grade;
if (score >= 90) 
grade = 'A';
else if (score >=80) 
grade = 'B';
else if (score >=70)
grade = 'C';
else if (score >=60) 
grade = 'D';
else 
grade = 'F';
return grade;
}

void displayResults(string firstname, string lastname, double avg, char grade)
{
cout<<firstname<< lastname<<" - Average : "<<avg << " - Grade : "<< grade<<endl;
}

循环只是一种反复执行同一段代码的方式。通过将代码放入循环中,您不必复制和粘贴它。在一次循环运行期间发生的任何变量更改在下一次循环中仍然存在。

在您的代码中:

for (int i = 0; i<10; i++)
{ 
...
}

是你的循环。"…"是将被反复执行的代码。

循环需要问的一个大问题是:循环如何知道在退出之前要运行代码多少次?

这就是:

int i = 0; i<10; i++

是关于。虽然看起来很奇怪,但实际上是3个独立的命令。命令由分号";"分隔

  1. int i=0
  2. i<10
  3. 我++

命令(1)初始化循环。您只需将变量i(一个整数)设置为0。

命令(2)条件以继续循环。如果命令(2)为true,则循环将执行(并再次执行)。你的代码是说在我小于10的时候执行循环。

每个循环执行一次命令(3)计算。我们知道在命令(1)中,您将i设置为0。我们在命令(2)中知道,当i小于10时,循环将运行。0小于10,因此循环将执行。。。永远我们不希望这样,所以在命令(3)中,我们增加i。我们计算运行循环的次数。

因此,您的循环将连续运行10次,其中包含代码,然后退出。

最新更新