【问题标题】:Loops for assigning/calculating student grade (c++)分配/计算学生成绩的循环(c++)
【发布时间】:2017-11-16 23:11:21
【问题描述】:

我的程序有点困难,我非常感谢任何帮助。请原谅我的代码非常糟糕,我是新手。

#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;
}

我不太了解循环,也不了解它们是如何工作的,所以我为循环所写的内容是我们的教授给我们的,所以如果有人能解释/剖析一下,我将不胜感激!我想知道如何做到这一点,而不仅仅是把答案交给我。

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

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

【问题讨论】:

  • 名 = getFirstName(); cin >> 名字; getFirstName 确实已经捕获了名字的输入。您的代码中也有类似的情况。此外, sum - calculateSum(sum, score);什么都不做,它从 sum calculateSum(sum, score) 中减去。你的代码有很多错误。正如@GalloCedrone 建议的那样,您应该学习和使用调试工具。
  • 如果您不希望将解决方案交给您并对其进行处理,您可以考虑尝试调试。有很多工具可用,但由于您是初学者,最简单的方法是在代码的不同部分打印 1、2、3、4、5、6,直到您真正了解哪个函数没有按预期运行。然后你处理那个函数。
  • 除非您的格式不正确,否则在main 的开头,您会使用未初始化的变量调用许多函数(导致未定义的行为)。充其量这是不好的做法,最坏的情况是它可能会破坏您的整个程序。
  • 如果您想学习循环,请在课程资料中查找它们,然后尝试编写您能想到的使用循环的最简单程序。不要编写依赖于你不理解的结构的这么大的程序。
  • 如果您觉得我的解决方案有帮助,请将其标记为已接受的答案。谢谢。

标签: c++ loops average calculator


【解决方案1】:

你的代码充满了错误,但我会一步一步地引导你。

首先,我们需要检查每个函数的作用:

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&gt;&gt; 与任何变量一起使用,因为这就是我们的函数正在为我们做的事情。

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

  • 否则,创建一个循环 10 次的 for 循环,要求用户输入他/她的分数,将此分数加到总和中,然后在 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;
}

【讨论】:

    【解决方案2】:

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

    在您的代码中:

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

    是你的循环。 “...” 是将一遍又一遍地执行的代码。

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

    这就是:

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

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

    1. int i=0
    2. i++

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

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

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

    所以你的循环会连续运行10次,里面的代码然后退出。

    【讨论】:

      猜你喜欢
      • 2021-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-21
      相关资源
      最近更新 更多