【问题标题】:Making an Average of Grades in C计算 C 的平均成绩
【发布时间】:2016-07-06 17:49:31
【问题描述】:

注意:我是初学者,只是在学习。

我的学生结构包含 5 个姓名、他们的成绩、他们的年龄和他们的成绩。我想知道如何编写和调用一个函数来计算他们的平均成绩,然后打印出来。

#include <stdio.h>
#include <string.h>

typedef struct{
    char name[100];
    int age;
    int scores[5];
} student;

student grade(student st, int grade, int num) {
    st.scores[num]=grade;
    return st;
}

int main(){
    student s1;
    strcpy(s1.name, "Student1");

    s1.age = 20;

    //printf("Size: %d\n", sizeof(s1));
    printf("Name: %s\tAge: %d\n", s1.name, s1.age);

    s1=grade(s1, 100, 0);
    s1=grade(s1, 96, 1);
    s1=grade(s1, 99, 2);    
    s1=grade(s1, 100, 3);

    printf("Grade: %d\n", s1.scores[0]);
    printf("Grade: %d\n", s1.scores[1]);
    printf("Grade: %d\n", s1.scores[2]);
    printf("Grade: %d\n", s1.scores[3]);

    printf("\n");

    return 0;

}

【问题讨论】:

  • 错别字:s2=grade(s1, 94, 0);,接下来的 3 行应为 s2=grade(s2 ...,类似于 4 s3 = 行。
  • 加分并除....有什么问题?
  • @WeatherVane 我刚刚改了,谢谢
  • @SouravGhosh 我如何让计算机来执行此操作?
  • @user1049876 您的问题不清楚?您的意思是要计算每个学生的平均成绩吗?在这种情况下,您可以在 student 结构中添加一个名为 average 的新成员,例如 double average;。然后你可以定义一个函数double calc_average(student st),它将计算平均值并将其返回。你可以像这样调用那个函数,stdent1.average = calc_average(student1);

标签: c arrays enums int structure


【解决方案1】:

您可以这样创建一个函数来了解已发送结构的平均成绩

float average(student st, int no_of_grades)
{
    float sum=0;
    for(int num=0 ; num < no_of_grades ; num++)
    {
        sum += st.scores[num];
    }

    return sum/no_of_grades;
}

这里的参数是为学生输入的成绩的结构和数量。


打印main()中学生的所有成绩后,添加以下语句:

printf("average of %s : %f",s1.name,average(s1,4)); //average(structure,  no of grades)

输出:

Name: Student1  Age: 20
Grade: 100
Grade: 96
Grade: 99
Grade: 100
average of Student1 : 98.750000

建议:

  • 不要使用int main(),而是使用int main(void),因为没有参数被发送到main()函数。但是,在第一种情况下是 int main(),可以将任意数量的参数发送到 main() 函数中。

【讨论】:

    【解决方案2】:

    像这样向student structure 添加新成员:

    typedef struct{
        char name[100];
        int age;
        int scores[5];
        double average;   /* new member */
    } student;
    

    定义一个新函数来计算学生的平均值并将其返回,如下所示:

    double calc_average(student st)
    {
        int i;
        double sum = 0.0;
    
        /* Calculate sum of 5 scores */
        for (i = 0; i < 5; i++)
            sum = sum + st.scores[i];
    
        /* Return average */
        return sum / 5;
    }
    

    然后在main - (一旦你把一个学生的所有分数相加) - ,你可以调用这个函数来得到平均分,像这样:

    student1.average = calc_average(student1);
    

    【讨论】:

    • 您还需要一个会员说出多少分。 OP 的代码只输入了 5 个可能分数中的 4 个。
    • 是的,我在 OP 的代码中也看到了 :)。这就是我写once you add all the scores for a student 的原因,我的意思是 OP 会将所有 5 个分数相加。
    • 如果你要添加新的结构成员,你可以添加int numscores并删除函数grade()的最后一个参数。
    • @WeatherVane 哪个函数grade(),你的意思是calc_average()?我在这里只传递一个论点。但以防万一你想改进答案,你可以编辑它:)。
    • 按这个130+字节student的值传递不是很好,最好传递一个指向它的指针。
    【解决方案3】:

    你可以硬核平均水平,例如 s3.scores[3]

    【讨论】:

      猜你喜欢
      • 2019-08-25
      • 2015-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-03
      • 1970-01-01
      相关资源
      最近更新 更多