C编程(GPA计算器)

时间:2009-11-12 00:53:06

标签: c

非常坚持这个问题。我最终得到了平均值,但它给出了负3200万或者其他东西。这是我的代码:

 #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 个答案:

答案 0 :(得分:6)

这显然是一个家庭作业问题,你显然是一个初学者。你的老师可能会给你提供比我们更好的帮助。

一些提示:

  • 您有复制粘贴的代码。你应该摆脱程序的前半部分;你应该只保留变量声明和循环。
  • 为了清晰起见,C程序员通常在字符串的末尾有\ n,而不是下一个字符串的开头。
  • 您不应该使用“for”循环迭代'x'的值来驱动用户界面。如果用户按“1”28次计算GPA平均值,则按“2”输入等级,然后按“1”再次计算GPA平均值,即使他们只输入了等级,你也要将等级除以30一年级。你不应该迭代'x'。相反,您应该使用“while(True)”循环来驱动用户界面。只有在用户选择输入GPA时才应增加“x”。
  • 计算'total'的代码仅在第一次运行时('x'为0时)。 “总计”没有其他任务。现在你看到了复制粘贴代码的危险吗?

答案 1 :(得分:1)

从哪里开始...使用do {...} while()。你没有初始化浮点数组。你没有记录输入的等级数。您也永远不会更新for循环中的总变量,因此无论输入什么,显示的总数都不会改变。你甚至从不使用声明的avg变量。

这是一个提示:首先考虑算法;即你要如何进行这些操作?您可以将其他操作(例如计算平均值)与其他操作分开(例如获取用户输入)吗?一旦你想出了你想要使用的过程,考虑哪种类型的数据结构和程序流(循环)结构是合适的,然后开始编码;它会产生很大的不同,而且实施起来会更容易。

答案 2 :(得分:0)

忘记在循环中添加到总数

答案 3 :(得分:0)

尝试输入一些调试语句,如

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

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

在“if”语句中(或者您想要检查总数值的任何地方)。你会很快意识到你出错的地方。