具有结构的用户输入数据库需要找到类平均值

时间:2014-11-10 07:58:31

标签: c arrays database structure

好的,所以我在我的c程序的下一步遇到了麻烦。基本上,它是一个接受用户输入的数据库,然后使用switch语句来检索或计算个人或组统计信息。注意: 将EUID(卷号)存储在EUID阵列的位置i中的学生将其作业平均分,考试1分和考试2分存储在相应阵列的位置i中。

到目前为止,代码能够运行,但是当涉及到switch语句时,我感到难过。

我真的只需要关于switch语句的第一个案例的建议,但其余的只是以防万一。

简而言之,对于案例1,我如何让程序打印出学生的成绩并使用特定的EUID进行平均分。输出应该如下所示:

  

1

     

请输入学生EUID:   1893839

     

EUID:1893839作业:84.34考试1:84考试2:76

这是我到目前为止所拥有的:

#include <stdio.h>
#include <math.h>


struct Grade
{
   int euid;
   double hwavg;
   double exam1;
   double exam2;

};


int main()

{
    struct Grade record[200];

    int input, i;

    printf("Input each student's EUID, homework average, exam 1 grade, and exam 2 grade: \n\n");

    printf("To terminate input '-1' as the student EUID, along with throwaway values for the average and grades.");

    for(i=0; i<200; ++i)
    {

        scanf("%d %lf %lf %lf", &record[i].euid, &record[i].hwavg, &record[i].exam1, &record[i].exam2);

        if(record[i].euid == -1)
        {
            break;
        }

    }

    while(1)
    {

        printf("Select one of the following:\n 1. Student grade data \n 2. Student grade average \n 3. Class average for assignment \n 4. Exit\n");

        scanf("%d\n",&input);

        switch(input)
        {
            case 1:

                printf("Enter the student's EUID:\n");
                   /*The output here should be the EUID, homework avgerage, exam 1 grade and exam 2 grade. */ 


                break;

            case 2:

                printf("Enter the student's EUID:\n");   
                   /*Finds and prints the the students average and letter grade. */

                   /* (HW * 0.5) + (EXAM1 * 0.25) + (EXAM2 * 0.25) */  


                break;

            case 3:
                   /* Finds total class average. */ 
                break:

            case 4:

                printf("Terminating program: Bye-bye!\n");
                return 0;
                break;

            default:

                printf("Error! Invalid input.\n\n");
        }

    }

}

1 个答案:

答案 0 :(得分:0)

基本上,看起来你正在寻找的东西就是这样......

printf("EUID:%d  Homework:  %.2f  Exam 1:%.0f  Exam2:  %.0f\n", record[i].euid, record[i].hwavg, record[i].exam1, record[1].exam2);

注意:%。0f输出0位小数。

为了计算平均值,可以在你的第一个for循环中完成,它会读取并填充数组。

你可能想在网上搜索“printf double”; here's an example reference。 - 我几乎从未看到提到的是你可以使用%2 $ f选择参数数字(其中2表示参数编号2)。

要查找EUID的索引,您可以使用以下内容:

i = 0;
while(record[i].euid != -1 && record[i].euid != euid)
{
    i++;
}

- 你当然需要scanf来获得euid。