2015-12-02 4 views
1
#include<iostream> 
#include<fstream> 

using namespace std; 

int main() 
{ 
    ifstream inFile; 
    ofstream outFile; 
    int sum; 
    double average; 
    int apple[50]; 
    int b1; 
    int i; 

    outFile.open("apple_trip.txt"); 

    for (i = 0; i < 50; i++) 
    { 
     b1 = rand() % 100; 
     outFile << b1 << endl; 
    } 

    outFile.close(); 

    inFile.open("apple_trip.txt"); 
    for (i = 0; i < 50; i++) // This loop ensures you don't keep overwriting 
     // the same value, which would be off by 1 
    { 
     inFile >> apple[i]; 
    } 

    for (i = 0; i < 50; i++) // The loop variable is i, not apple[i], and we stop at 50 
    { 
     if (apple[i] < 25) 
     { 
      cout << apple[i] << " people picked less than 25 apples" << endl; 
     } 
    } 

    for (i = 0; i < 50; i++) 
    { 
     if (apple[i] > 80 && apple[i] < 100) // change <to> 
     { 
      cout << "The number of apples that is between 80 and 100 is : " << apple[i] << endl; 
     } 

    } 

    for (i = 0; i < 50; i++) 
    { 
     sum = 0; 
     sum += apple[i]; 
     average = sum/50.0; 
     cout << average; 
    } 
    return 0; 
} 

в основном последний для цикла не распечатывает сумму правильно. Это дает некоторые странные десятичные знаки. Был попыткой увидеть wheres ошибки, но im только новичок в C++, и я не очень умный в информатике. Любая помощь будет оценена!Сумма не будет корректно напечатана в этом типе массива

ответ

3
for (i = 0; i < 50; i++) 
{ 
    sum = 0; 
    sum += apple[i]; 
    average = sum/50.0; 
    cout << average; 
} 

Да, это не рассчитает среднее значение. Вам нужно будет инициализировать sum и распечатать average вне цикла.

Попробуйте это:

sum = 0; 
for (i = 0; i < 50; i++) 
{ 
    sum += apple[i]; 
} 
average = sum/50.0; 
cout << average; 

average = sum/50.0; может быть внутри или вне цикла, но снаружи лучше.

1

Если я правильно понимаю, что вы хотите сделать с этим последним циклом, напечатайте среднее количество яблок за поездку, для всех 50 поездок.

Если это так, причина, по которой это не работает прямо сейчас, состоит в том, что вы устанавливаете сумму в 0 в начале цикла и распечатываете среднее значение в конце. То, что вы хотели бы сделать, это взять инициализацию суммы из цикла и сделать то же самое для среднего вычисления, а также инструкции печати. Это будет выглядеть следующим образом:

sum = 0; 
for (i = 0; i < 50; i++) 
{ 
    sum += apple[i]; 
} 
average = sum/50.0; 
cout << average; 

И в этот момент, вы можете упростить это большой, чтобы выглядеть следующим образом:

sum = 0; 
for (i = 0; i < 50; i++) 
    sum += apple[i]; 

average = sum/50.0; 
cout << average; 

Надежда, что помогает! (если это то, чего вы пытались достичь; D)

+0

Бог благословит вашу душу Эмиля !!!!! – Chang

0

Как сказал Майк, суммируйте сумму над циклом и вычислите среднее значение за пределами цикла. Единственное в цикле должно быть добавление.

Одна вещь, которую я хотел бы добавить, заключается в том, что вам лучше использовать векторный, а не необработанный массив int. Таким образом, вместо:

int apple[50]; 
// ... 
for (int i = 0; i < 50; i++) 
{ 
    inFile >> apple[i]; 
} 

Я думаю, что вы можете сделать:

vector<int> apple; 
int temp; 
// ... 
for (int i = 0; i < 50; i++) 
{ 
    inFile >> temp; 
    apple.push_back(temp); 
} 
+0

Как бы вы изменили все номера ячеек в файле на 0, если их меньше 10, и распечатайте их. Я знаю инструкцию if, но я немного не знаю, как печатать содержимое массива с 10 номерами на каждой строке – Chang

Смежные вопросы