Программирование на С (GPA Calculator) - PullRequest
0 голосов
/ 12 ноября 2009

Очень застрял на этой проблеме. Я, наконец, получил среднее значение, чтобы выйти, но это дает как отрицательные 32 миллиона или что-то. Вот мой код:

 #include <stdio.h>
#include <stdlib.h>


int main()
{

float fArray[30];
int choice = 0;
int x = 0;
float total = 0;
float avg = 0;

printf("1. Calculate GPA Average");
printf("\n2. Enter GPA");
printf("\n3. Quit");
printf("\n\nEnter your choice (1-3):  ");
scanf("%d", &choice);

if(choice == 2)
{
    printf("\n\nEnter GPA:  ");
    scanf("%.2f\n\n", &fArray[x]);
    total = total + fArray[x];
}
else if(choice == 3)
{
    return 0;
}
else if(choice == 1)
{
printf("The average is:  %f", total / x);
}

for(x = 1; x < 30; x++)
{
    fflush(stdin);
    int temp = 0;
    printf("1. Calculate GPA Average");
    printf("\n2. Enter GPA");
    printf("\n3. Quit");
    printf("\n\nEnter your choice (1-3):  ");
    scanf("%d", &temp);

    if(temp == 2)
    {
        printf("\n\nEnter GPA:  ");
        scanf("%.2f\n\n", &fArray[x]);
    }
    else if(temp == 3)
    {
        break;
    }
    else if(temp == 1)
    {
printf("The average is:  %f", total / x);
    }
} 

system("pause");
}

Ответы [ 4 ]

6 голосов
/ 12 ноября 2009

Это явно домашнее задание, и вы явно начинающий программист. Ваш учитель, вероятно, может оказать вам лучшую помощь, чем мы.

Несколько советов:

  • У вас есть скопированный код. Вы должны избавиться от первой половины программы; Вы должны только хранить объявления переменных и цикл.
  • Для ясности, программисты на C обычно имеют \ n в конце строки, а не в начале следующей строки.
  • Вы не должны использовать цикл for для итерации значений 'x' для управления пользовательским интерфейсом. Если пользователь нажимал «1» 28 раз для расчета среднего балла, затем нажимал «2» для ввода оценки, а затем «1» для вычисления среднего балла еще раз, вы делите оценку на 30, хотя они только вводили одна оценка Вы не должны перебирать «х». Вместо этого вы должны управлять пользовательским интерфейсом с помощью цикла while (True). Вы должны увеличивать 'x' только тогда, когда пользователь выбирает ввести GPA.
  • Ваш код для вычисления «итога» запускается только в самый первый раз (когда «х» равен 0). Других назначений на «Итого» нет. Теперь вы видите опасность копирования и вставки кода?
1 голос
/ 12 ноября 2009

С чего начать ... используйте do {...} while (). Вы не инициализируете свой массив с плавающей точкой. Вы не отслеживаете, сколько оценок было введено. Вы также никогда не обновите итоговую переменную в цикле for, поэтому независимо от того, что они вводят, отображаемая сумма никогда не изменится. Вы никогда даже не используете объявленную переменную avg.

Вот совет: сначала подумайте об алгоритме; т.е. как вы собираетесь выполнять эти операции? Можете ли вы отделить какие-либо операции (например, вычисление среднего значения) от других (например, получить пользовательский ввод)? После того, как вы выяснили свой процесс, который хотите использовать, подумайте, какие типы структур данных и конструкции потока программы (циклы) будут подходящими, ТО затем начните кодирование; это будет иметь большое значение, и это будет легче осуществить.

0 голосов
/ 12 ноября 2009

Попробуйте добавить несколько отладочных операторов, таких как

printf("Total is: %d\n", total);

и

printf("x is: %d\n", x);

в ваших утверждениях «если» (или в любом месте, где вы хотите проверить значение вашей общей суммы). Вы очень быстро поймете, куда идете не так.

0 голосов
/ 12 ноября 2009

Забыл добавить к итогу в цикле

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...