在C中取得平均成绩

在C中取得平均成绩,c,arrays,enums,int,structure,C,Arrays,Enums,Int,Structure,注意:我是初学者,正在学习。 我有5个名字的学生结构,他们的等级,他们的年龄,以及他们的等级。我想知道如何编写和调用一个函数来计算他们的平均成绩,然后打印出来 #include <stdio.h> #include <string.h> typedef struct{ char name[100]; int age; int scores[5]; } student; student grade(student st, int grade, i

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

我有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;

}
#包括
#包括
类型定义结构{
字符名[100];
智力年龄;
智力得分[5];
}学生;
学生等级(学生等级,整数等级,整数编号){
标准分数[num]=等级;
返回st;
}
int main(){
学生s1;
strcpy(s1.name,“学生1”);
s1.年龄=20岁;
//printf(“大小:%d\n”,大小为(s1));
printf(“名称:%s\tAge:%d\n”,s1.Name,s1.age);
s1=等级(s1,100,0);
s1=等级(s1,96,1);
s1=等级(s1,99,2);
s1=等级(s1,100,3);
printf(“分数:%d\n”,s1.分数[0]);
printf(“分数:%d\n”,s1.分数[1]);
printf(“分数:%d\n”,s1.分数[2]);
printf(“分数:%d\n”,s1.分数[3]);
printf(“\n”);
返回0;
}

您可以将平均分作为核心,例如s3。分数[3]

学生结构添加一个新成员,如下所示:

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;
}
student1.average = calc_average(student1);
定义一个新函数来计算学生的平均值并返回,如下所示:

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;
}
student1.average = calc_average(student1);

您可以通过以下方式创建一个函数来了解已发送结构的平均等级:

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;
}
输出:

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

建议:

Name: Student1  Age: 20
Grade: 100
Grade: 96
Grade: 99
Grade: 100
average of Student1 : 98.750000
  • 不要使用
    int main()
    ,而是使用
    int main(void)
    ,因为没有参数被发送到
    main()
    函数中。但是,在第一种情况下,即
    intmain()
    ,可以将任意数量的参数发送到
    main()
    函数中

打字错误:
s2=等级(s1、94、0)接下来的3行应为
s2=等级(s2…
和类似的4
s3=
行。添加等级并划分…有什么问题?@WeatherVane我刚刚更改了它,thanks@SouravGhosh我如何让计算机做到这一点?@user1049876您的问题不清楚?您的意思是要计算每个学生的平均分数吗?在这种情况下,您可以在student
struct调用了
average
,比如
double average;
。然后您可以定义一个函数
double calc_average(student st)
,该函数将计算平均值并返回。您可以这样调用该函数,
stdent1.average=calc_average(student1);
。您还需要一名成员说出分数。OP的代码只输入了5个可能分数中的4个。是的,我在OP的代码中也看到了:)这就是为什么我写了
一旦你为一个学生加上所有的分数,我的意思是OP会加上所有的5分。如果你要添加新的结构成员,你可以添加
int numcores
并删除function
grade()
@WeatherVane which function
grade()
,你的意思是
计算平均值()
?这里我只传递了一个参数。但为了防止您想改进答案,您可以对其进行永久编辑:)。传递这个130多字节的
学生的值并不是很好,最好传递一个指向它的指针。