您好我正在编写一个小程序,允许用户为一些学生输入三个测试分数,而不是计算学生平均分数,一旦用户给出否定分数,给出一个字母等级而不是给出每个测试的等级平均分数(n)作为答案。由于某种原因,我得到了一个非常大的数字用于总测试3(tottest3)我现在已经看了近一个半小时的代码而且我找不到错误。< / p>
总测试1到3的公式都是相同的,问题还在于哪里?
这是我到目前为止所做的尝试:
- 改变平均变量
- 将班级平均值仅改为总平均值
- 添加测试1或测试2个数字到总测试3而不是测试3。
这是命令提示符下的输出。
作业#13
你好学生#1
请输入测试1年级1
请输入测试2年级1
请输入测试3年级1
您的平均值是:1
你的成绩是F
你想给另一名学生打分吗? (y / n)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;
}
}
/*
*/
答案 0 :(得分:1)
你的麻烦发生在这些方面;
tottest1=tottest1+test1;
tottest2=tottest2+test2;
tottest3=tottest3+test3;
您声明了变量tottest1,tottest2和tottest3,但您没有给它们一个值。你的程序已经为这些变量留出了一些内存,但是它没有在这些内存中放置一个值,所以它们只是充满了垃圾。当您尝试通过向它们添加test1 / 2/3为变量赋值时,您可以为那些未初始化的内存插槽中存储的垃圾添加有意义的内容。结果是毫无意义的。
解决方案:声明变量时,请确保使用某个值对其进行初始化,例如0。
答案 1 :(得分:0)
看起来你不是在初始化你的变量。这样做,你会得到更可预测的结果。可能最初将它们设置为0。