2016-07-24 2 views
0

배열에 채워야하는 함수에서 배열을 반환하여 배열에 입력 된 성적의 수를 반환하려고합니다. 그런 다음 해당 데이터를 사용하여 배열을 다른 함수로 전달하고 배열에 기록 된 최저, 최고 및 평균 점수를 읽고 싶습니다. 필자가 작성한 프로그램은 아래와 같습니다. 내가 어디로 잘못 가고 있는지 확실하지 않습니다. 프로그램과C++의 함수에서 반환 된 배열에 입력 된 정수의 총 수와 최저 점수와 평균 점수는 어떻게 얻을 수 있습니까?

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

int getGrades(int[], int); 
void calcStats(int[], int, int&, int&, double&); 

int main() 
{ 
double av; 
int count; 
const int numGrades = 20; 
int grade[numGrades]; 
int low = grade[0]; 
int high = grade[0]; 

count = getGrades(grade, numGrades); 

calcStats(grade, count, low, high, av); 

cout << "You have entered " << count << " grades." << endl; 
cout << "The lowest score was " << low << "." << endl; 
cout << "The highest score was " << high << "." << endl; 
cout << "The average of all the scores was " << av << "." << endl; 

system("pause"); 
return 0; 
} 

int getGrades(int grade[], int size) 
{ 
int gr, count = 0; 
cout << "Please enter up to 20 grades and -1 when finished." << endl; 
while (cin >> gr && gr != -1) 
{ 
    grade[count] = gr; 
    count++; 
} 
return count; 
} 
void calcStats(int grade[], int S2, int &low, int &high, double &av) 
{ 
for (int count = 1; count < S2; count++) 
    if (grade[count] < low) 
    { 
     low = grade[count]; 
    } 
for (int count = 1; count < S2; count++) 
    if (grade[count] > high) 
    { 
     high = grade[count]; 
    } 
int total = 0; 
for (int count = 0; count < S2; count++) 
    total += grade[count]; 
av = total/S2; 
} 

샘플 출력은 지금 읽

Please enter up to 20 grades and -1 when finished. 
45 
45 
45 
45 
45 
-1 
You have entered 5 grades. 
The highest score was 45. 
The lowest score was -85679. 
The average of all the scores was 45. 

등급의 수는이 시나리오 5에해야 가장 높은, 가장 낮은 평균은 모든해야 45

+0

질문을 편집하여 샘플 실행 결과 (예 : 5 개 항목)를 포함 시키십시오. – clusterdude

+0

감사합니다. 나는 간단한 시험을했다. –

답변

1
int count = 0, low = 0, high = 0; 

// ... 

cout << "You have entered " << count << " grades." << endl; 

count에 아무 것도 지정하지 않는 코드에는 아무 것도 없으므로 여기에 0 값이 표시됩니다.

입력 한 성적의 수는 getGrades()에서 반환됩니다. 그러나 올바른, main()getGrades() 반환 값을 완전히 무시하고 count 할당하지 못합니다. getGrades()이 성적의 수를 반환하기 때문에 그것이 count이 자동으로 업데이트된다는 것을 의미하지는 않습니다. 등급의 수를 계산하도록

const int numGrades = 20; 

calcStats(grade, numGrades, low, high, av); 

main()calcStats()-numGrades 통과한다. 분명히 항상 20이 될 것이고, calcStats()은 입력 된 실제 성적 수 대신 계산할 20 개의 성적이 항상 있다고 생각할 것입니다. 따라서 계산 된 결과는 완전한 쓰레기가됩니다.

low = count + 1; 

high = count + 1; 

lowhigh 가장 낮은 또는 최고 등급의 숫자로 설정하세요. 따라서 5 학년에서 13 학년이 가장 낮은 학년 인 경우 low5으로 설정됩니다.

하지만, 메인의 출력은 또한, 대신에 다수의 실제 수준 자체 (13)의 값을 표시하는 제

기대 최저 또는 최고 등급이 가장 먼저 하나가 입력 된 경우, calcGrades()low 또는 high으로 설정되지 않습니다.

+0

좋아, 그래서 몇 가지 변경 사항을 만들었지 만, 여전히 낮은 정수로 오류가 발생하는 것 같아요 ... 왜 밖으로 읽기 이후 정확한 낮은 정수 이외의 높은 정수와 같은지 확실하지 않습니다. 거기에 어떤 제안? –

+1

'low'와'high'는 등급 자체가 입력되기 전에도'grades [0]'의 값으로 초기화됩니다. 다른 말로하면 : "말 앞에 카트를 넣는 것". 조니 카슨의 "Carnac, the Magnificent"개그도 마음에 온다. –

+0

고마워. 나는 아직도 코딩의 뉘앙스를 배우고있다. 도움에 감사드립니다. :) –