【问题标题】:Logic error somewhere in code, cannot figure out where代码中某处的逻辑错误,无法弄清楚在哪里
【发布时间】:2015-11-02 08:22:53
【问题描述】:

您好,我正在编写一个小程序,允许用户输入多个学生的三个考试成绩,而不是计算学生平均成绩,一旦用户给出 no (n ) 作为答案。出于某种原因,我在总测试 3 (tottest3) 中得到了一个非常大的数字,我已经查看了将近一个半小时的代码,但找不到错误。

总考一到三的公式都是一样的,请问问题出在哪里?

这是我迄今为止尝试过的:

-改变平均变量

-将班级平均数更改为仅总平均数

-将测试 1 或测试 2 的数字添加到测试 3 的总数中,而不是测试 3。

这是命令提示符的输出。

作业 #13

你好学生#1

请输入 test 1 Grade 1

请输入 test 2 Grade 1

请输入 test 3 Grade 1

你的平均值是:1

你的成绩是 F

您想给其他学生评分吗? (是/否)n

这是测试 1-3 的平均值

测试 1 的平均值为:1

测试 2 的平均值为:1

测试 3 的平均值为: 335796348684545909624128047159363492209569460693822234007169656776676343892387006827439949582508669307827616982407178504474449980239883634115896048874405460441709614779949982258368367180374307657350038129751972987645105499446376379659139781953069252608


进程退出,返回值为 0

按任意键继续。 . .

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

int main ()
{

cout<<"Jon Grezda CS 12 Wednesday 6-8pm"<<endl;
cout<<"Assignment #13"<<endl;

double test1, test2, test3, average; //test1/2/3, test scores, Average: average of test scores
double tottest1, tottest2, tottest3, avg1, avg2, avg3; //tottest1/2/3, avg# average for first second or third test
int student=0, avgvar; //average variable, Student number
char grade, ans; // Holds a letter grade, holds a response to a question

do{
student=student+1;
    cout<<"Hello Student #"<<student<<endl;

    cout<<"Please input test 1 Grade ";
        cin>> test1;
    cout<<"Please input test 2 Grade ";
        cin>> test2;
    cout<<"Please input test 3 Grade ";
        cin>> test3;
average=(test1+test2+test3)/3.0;

    cout<<setprecision(0)<<fixed;
    cout<<"Your Average is: "<<average<<endl;

tottest1=tottest1+test1;
tottest2=tottest2+test2;
tottest3=tottest3+test3;

 // Determine the letter grade. What grade will be assigned?
if (average > 0 && average < 60)

    grade = 'F';

else if (average >= 61 && average < 70)

    grade = 'D';

else if (average >= 70 && average < 80)

    grade = 'C';

else if (average >= 80 && average < 90)

    grade = 'B';

else if(average >= 90 && average <101)

    grade = 'A';

else 
{

    cout << "We do not give scores higher than 100 or lower than 0.\n"; // Is the score valid?

        grade = '-';
}
    cout << "Your grade is " << grade << endl;

        cout<<"Do you want to grade another student? (y/n)";
        cin>>ans;
    cout<<"\n";
} while(ans=='y');

if (ans=='n')
{
avgvar=student;
avg1=tottest1/avgvar;
avg2=tottest2/avgvar;
avg3=tottest3/avgvar;
    cout<<setprecision(0)<<fixed;
    cout<<"here are the averages for tests 1-3\n";
    cout<<"average for test 1 is: "<<avg1<<endl;
    cout<<"average for test 2 is: "<<avg2<<endl;
    cout<<"average for test 3 is: "<<avg3<<endl;
}
}
/*

*/

【问题讨论】:

  • 看起来您应该将这些变量(test1、tottest1 等)初始化为 0。最终结果可能取决于这些变量的自动初始化。

标签: c++


【解决方案1】:

你的麻烦就发生在这几行;

tottest1=tottest1+test1;
tottest2=tottest2+test2;
tottest3=tottest3+test3;

您声明了变量 tottest1、tottest2 和 tottest3,但您没有给它们赋值。你的程序已经为这些变量留出了一些内存,但它没有在这些内存点中放置一个值,所以它们只是充满了垃圾。当您尝试通过向变量添加 test1/2/3 来为变量分配值时,您为存储在那些未初始化的内存槽中的任何垃圾添加了一些有意义的东西。结果是毫无意义的。

解决方案:当您声明一个变量时,请确保使用某个值对其进行初始化,例如 0。

【讨论】:

    【解决方案2】:

    您似乎没有在初始化变量。这样做,您将获得更可预测的结果。最初可能将它们设置为 0。

    【讨论】:

      猜你喜欢
      • 2019-09-10
      • 1970-01-01
      • 2016-07-05
      • 1970-01-01
      • 2021-06-27
      • 2022-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多