簡體   English   中英

代碼中某處的邏輯錯誤,無法找出位置

[英]Logic error somewhere in code, cannot figure out where

您好,我正在編寫一個小程序,該程序允許用戶輸入多個學生的三個測試分數,而不是計算學生的平均分數,給出的字母等級高於每個測試的班級平均分數,前提是用戶未給出(n)回答。 出於某種原因,我在總測試3(tottest3)中得到了大量的數據,現在我已經看了將近一個半小時的代碼,但找不到錯誤。

總體測試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的平均值是:3357963486845459096241280471593634922095694606938222340071696567766763438923870068274399495825086693078276169824071785044744499802398836341158960488744054604417096147799499822583683671803743073500350028129751972197298764510549944637637965913995395372


進程退出,返回值為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;
}
}
/*

*/

您的麻煩就發生在這些方面。

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

您聲明了變量tottest1,tottest2和tottest3,但沒有給它們賦值。 您的程序為這些變量留出了一些內存,但尚未在這些內存中放置值,因此它們只是被垃圾填滿了。 當您嘗試通過向變量添加test1 / 2/3來為變量賦值時,您將對那些未初始化的內存插槽中存儲的垃圾添加有意義的內容。 結果是毫無意義的。

解決方案:聲明變量時,請確保使用某個值(例如0)對其進行初始化。

似乎您沒有初始化變量。 這樣做,您將獲得更多可預測的結果。 最初可能將它們設置為0。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM