2014-11-07 2 views
0

함수를 사용하여 퀴즈 평균을 찾으려고합니다. 나는 그것을 계속 조정하지만 계속 10을 반환합니다. 프로그램의 전제는 사용자에게 퀴즈 (10 점 만점)를 제출하도록 요청하는 것입니다. 이러한 입력은 배열 quizarray[]에 배치됩니다. 그런 다음 quizarray에서 tempArray으로 모든 정보를 복사합니다. 그런 다음 tempArray가 정렬되어 calcQuizAverage 함수에 사용됩니다. 이 함수는 두 개의 평균 중 하나를 반환합니다. 합 lowSum는 그들이 numberOfQuizzes 2 이상이며 잘 보였다 때 될 운명이 무엇을하면이는 내가 확인 한 numberOfQuizzes배열의 평균 찾기 C++

double calcQuizAverage(int quizArray[], int numberOfQuizzes) 
{ 
    int a; 
    double avrg, sum, lowSum; 
    a = 0; 
    sum = 0; 

    lowSum = quizArray[0] + quizArray[1]; 

    for (a=0; a< numberOfQuizzes; a++) 
    { 
     sum += double(quizArray[a]); 
    } 

    if (numberOfQuizzes <= 2) 
    { 
     avrg= double(((sum)/(10* numberOfQuizzes)) * 100); 

     return avrg; 
    } 
    else if (numberOfQuizzes > 2) 
    { 
     avrg= double(((sum-lowSum)/(10* (numberOfQuizzes - 2)))*100); 

     return avrg; 
    } 
} 

에 의해 결정된다. 2에 numberOfQuizzes 이하로, 그냥 여기에 10

를 반환 코드의 나머지 부분입니다 :

#include <iostream> 
#include <iomanip> 
#include <cmath> 

using namespace std; 

//Symbolic Constants 

const int MAX=12; 

//Function Prototypes 

int buildQuizArray(int[]); 
void printArray(string,int[],int); 
double calcQuizAverage(int[],int); 
void sortArray(int[],int); 

int main() 
{ 
    int quizScores[MAX]; 
    int compQuiz; 
    int tempArray[MAX]; 
    double average; 
    int temp; 
    int i; 

    average = 0; 

    compQuiz = buildQuizArray(quizScores); 

    for(int i=0; i<MAX; i++) 
    { 
     tempArray[i] = quizScores[i]; 
    } 

    sortArray(tempArray, compQuiz); 

    average = calcQuizAverage(tempArray, compQuiz); 

    cout<<endl<<"Your quiz average is "<<average<<endl; 

    printArray ("Quiz Scores", tempArray, compQuiz); 



} 



int buildQuizArray(int quizArray[]) 
{ 
    int numQuiz, input, a; 
    a=0; 
    numQuiz=1; 

    cout << "Enter your score for quiz "<<numQuiz<<" (-1 to quit): "; 
    cin >> input; 

    while (input != -1) 
    { 
     quizArray[a] = input; 
     a++; 
     numQuiz++; 

     cout<< "Enter your score for quiz "<<numQuiz<<" (-1 to quit): "; 
     cin >> input; 

    } 
    return a+1; 
} 



void printArray(string reportTitle, int quizArray[], int numberOfQuizzes) 
{ 
    int a; 

    cout<< endl <<reportTitle <<endl<<"-----------"<<endl; 

    for (a=1; a<numberOfQuizzes; a++) 
    { 
     cout<< "Quiz " << a <<": " << setw(2) <<quizArray[a-1] <<"/10"<<endl; 
    } 
} 



double calcQuizAverage(int quizArray[], int numberOfQuizzes) 
{ 
    int a; 
    double avrg, sum, lowSum; 
    a = 0; 
    sum = 0; 

    lowSum = quizArray[0] + quizArray[1]; 

    for (a=0; a< numberOfQuizzes; a++) 
    { 
     sum += double(quizArray[a]); 
    } 

    if (numberOfQuizzes <= 2) 
    { 
     avrg= double(((sum)/(10* numberOfQuizzes)) * 100); 

     return avrg; 
    } 
    else if (numberOfQuizzes > 2) 
    { 
     avrg= double(((sum-lowSum)/(10* (numberOfQuizzes - 2)))*100); 

     return avrg; 
    } 
} 



void sortArray(int num[], int numberOfQuizzes) 
{ 
     int i, j, flag = 1; 
     int temp; 

     for(i = 1; (i <= numberOfQuizzes) && flag; i++) 
    { 
      flag = 0; 
      for (j=0; j < (numberOfQuizzes -2); j++) 
     { 
       if (num[j+1] < num[j]) 
       { 
        temp = num[j]; 
        num[j] = num[j+1]; 
        num[j+1] = temp; 
        flag = 1; 
       } 
      } 
    } 
    return; 
} 
+0

1. 나누기 전에 가볍게 던지기 전에 캐스팅해야한다. 2. 매직 넘버 10과 100은 무엇입니까? 100 %로 변환하면 이해할 수 있습니다. 퀴즈 나 무언가 당 최대 점수가 10 점입니까? –

+0

예, 죄송합니다. 그것을 언급하는 것을 잊었다. 나눠주기 전에 캐스팅 한다는게 무슨 뜻이야? <-novice – Ekko

+0

calcQuizAverage()는 무엇을 반환해야합니까?'퀴즈 평균'이 매개 변수 배열의 평균 값과 같은가요? – Constantin

답변

0

sum 변수가 두 배이므로 너무 많은 곳에서 캐스팅하지 않아도됩니다.

int a; 
a=0; 
for (a=0; ...) { 

대신 작성 : 또한, 코드는 양식을 사용하는 대신에 의해 정돈 할 수

for (int a=0; ...) { 

귀하의 buildQuizArray 기능은 퀴즈의 번호를 입력 반환하지 않습니다 - 당신이에 의미 의심 return a+1; 대신 return a;을 작성하십시오 (주요 문제 일 수 있습니다)

벡터와 관련하여 vector은 표준 라이브러리를 통해 사용할 수있는 컨테이너 클래스이며, #include <vector>을 사용하십시오. 벡터는 필요에 따라 키울 수 있으며 다양한 유용한 함수를 포함합니다. 특히 myVector.size()myVector의 길이를 반환합니다. 이렇게하면 배열에 크기를 전달할 필요가 없습니다. 또한 특정 12 개 항목을 할당 할 필요가 없으므로보다 간단한 sort 함수를 사용할 수 있습니다 (후미 0을 피할 필요가 없기 때문에).

나는 lowSum이 사용되는 루프 if 안에서만 계산되고 정의되는 것이 좋습니다. 이는 범위를 줄이며 (실제로 문제가되지는 않음) 또한 (작은 프로그램에서는 중요하지 않지만 일반적으로 고려해 볼만한 가치가있다.)

+0

감사합니다 !!!!! 또한 벡터에 대한 빠른 레슨과 lowSum 제안에 감사드립니다. – Ekko

0

를이 코드가 어떻게해야되는 것을 이해할 아니다 추가 설명없이. 제목에 따르면 배열의 평균값을 계산하고 싶습니까? 다음 코드는이 작업을 수행합니다

double calcQuizAverage(int quizArray[], int numberOfQuizzes){ 
    double avrg = 0.0; 
    int a = 0; 
    for (a = 0; a< numberOfQuizzes; a++){ 
    avrg += quizArray[a]; 
    } 
    return avrg/static_cast<double>(numberOfQuizzes); 
} 

int main(int argc, char* argv[]){ 
    int array[] = { 0, 1, 2}; 
    double x = calcQuizAverage(array, 3); 
    return 0; 
} 

당신 추가하는 경우-조항에 대한 이유가 뭐죠 그것은, 분명하지 않다 : 항상 값을 반환해야 함수가 (당신이 '경우 다른 사람 그냥 함께 마지막을 대체 할 수 있습니다 '그밖에'?).

+1

'if','else if'는 모든 가능성을 포함하는 정의에 의한 것이 아니라 언제 int가'<= 2'가 아니고'> 2'도 아닌가? – chrisb2244

+0

@ chrisb2244 글쎄 - 절대,하지만 지금까지 내가 아는 한 컴파일러는이 경우이를 보장하지 않습니다. 명시 적으로 값을 반환하지 않고 값을 반환하도록 선언 된 함수의 끝에서 벗어나면 정의되지 않은 동작이 발생합니다. gcc 4.9.0도 이러한 경우에 -Wall에 불평 할 것입니다. 다음에서 예를 참조하십시오. http://goo.gl/cISz5x – Constantin

0
avrg= double(((sum)/(10* numberOfQuizzes)) * 100); 

e.g. 
avrg = (sum/(numberofQuizzes*10.0))*100.0;