结构体设计(计算、查找)

要求:
输入学生各科成绩,分别设计函数来计算学生各科的平均成绩、各科全部学生的平均成绩、查找学生成绩,然后对成绩进行输出。
希望有小伙伴可以帮忙看一下代码有没有什么错误,以及求问“各科全部学生的平均成绩”这一块的函数怎么写啊?
#include<stdio.h>
#include<string.h>
struct students_list{
char name[20];
int Math[50];
Int English[50];
Int Science[50];
};
void student_average(struct students_list students[ ],intneme);
void subject_average(struct students_list students[ ],int
subject);
void search_student(struct students_list students[ ],char*name);
int Count=0;

int main(void)
{
int choice,i;
char name[20];
char subject[10];
struct students_list students[50];
for(i=1;;i++){
printf("请依次输入学生姓名、数学成绩、英语成绩、科学成绩:");
scanf("%s %d3(不知道为什么不能连着输入三个d)",&students[i].name,&students[i].Math, &students[i].English, &students[i].Science);
Count++;
}
do{
printf("学生成绩功能选项:1:计算学生平均分 2:计算课程平均分 3:查询学生成绩 0:退出并输出成绩\n");
printf("请选择功能:"); scanf("%d", &choice);
switch(choice){
case 1:
printf("请输入要查找的学生姓名:");
scanf("%s", name);
student_average(students,name);
break;
case 2:
printf("请输入要查找的课程:");
scanf("%s", subject);
subject_average(students,subject);
break;
case 3:
printf("请输入要查找的学生姓名:");
scanf("%s", name);
search_student(students, name);
break;
case 0: break;
}
}while(choice != 0);
for(i=1;i<Count;i++){
printf("%s: %d
3(不知道为什么不能连着输入三个d)",students[i].name,students[i].Math, students[i].English, students[i].Science);
}
return 0;
}
/学生平均分/
void student_average(struct students_list students[ ],intneme)
{
int i,flag = 0;
double average;
if(Count == 0){
printf("成绩单是空的!\n");
return;
}
for(i = 0; i <=Count; i++)
if(strcmp(name, friends[i].name) == 0){ /
找到学生*/
flag=1; break;
}
if(flag){
average=(students[i].Math+students[i].English+students[i].Science)/3.0
printf(“student_average:%lf\n”,average);
}
else
printf("无此学生!");
}
/查询学生成绩/
void search_student(struct students_list students[ ],char*name)
{ int i, flag = 0;
if(Count == 0){
printf("成绩单是空的!\n");
return;
}
for(i = 0; i < =Count; i++)
if(strcmp(name, friends[i].name) == 0){
flag=1; break;
}
if(flag){
printf("Math: %d\n", students[i].Math);
printf("English: %d\n", students[i].English);
printf("Science: %d\n", students[i].Science);
}
else
printf("无此学生!");
}

你题目的解答代码如下:

#include <stdio.h>
#include <string.h>
struct students_list
{
    char name[20];
    int Math; //不要用数组
    int English;  //int是全小写
    int Science;
};
void student_average(struct students_list students[], char *neme);
void subject_average(struct students_list students[], char *subject);
void search_student(struct students_list students[], char *name);
int Count = 0;

int main(void)
{
    int choice, i;
    char name[20];
    char subject[10];
    struct students_list students[50];
    printf("输入学生人数:");
    scanf("%d", &Count);
    for (i = 0;i < Count; i++)
    {
        printf("请依次输入学生姓名、数学成绩、英语成绩、科学成绩:");
        scanf("%s %d %d %d", students[i].name, &students[i].Math, &students[i].English, &students[i].Science);
    }
    do
    {
        printf("学生成绩功能选项:1:计算学生平均分 2:计算课程平均分 3:查询学生成绩 0:退出并输出成绩\n");
        printf("请选择功能:");
        scanf("%d", &choice);
        switch (choice)
        {
        case 1:
            printf("请输入要查找的学生姓名:");
            scanf("%s", name);
            student_average(students, name);
            break;
        case 2:
            printf("请输入要查找的课程:");
            scanf("%s", subject);
            subject_average(students, subject);
            break;
        case 3:
            printf("请输入要查找的学生姓名:");
            scanf("%s", name);
            search_student(students, name);
            break;
        case 0:
            break;
        }
    } while (choice != 0);
    for (i = 0; i < Count; i++)
    {
        printf("%s: %d %d %d\n", students[i].name, students[i].Math, students[i].English, students[i].Science);
    }
    return 0;
}
/* 学生平均分 */
void student_average(struct students_list students[], char *name)
{
    int i, flag = 0;
    double average;
    if (Count == 0)
    {
        printf("成绩单是空的!\n");
        return;
    }
    for (i = 0; i < Count; i++)
        if (strcmp(name, students[i].name) == 0)
        {
            /* 找到学生 */
                flag = 1;
            break;
        }
    if (flag)
    {
        average = (students[i].Math + students[i].English + students[i].Science) / 3.0;
        printf("student_average: %lf\n", average);
    }
    else
        printf("无此学生!");
}
/* 查询学生成绩 */
    void search_student(struct students_list students[], char *name)
{
    int i, flag = 0;
    if (Count == 0)
    {
        printf("成绩单是空的!\n");
        return;
    }
    for (i = 0; i < Count; i++)
        if (strcmp(name, students[i].name) == 0)
        {
            flag = 1;
            break;
        }
    if (flag)
    {
        printf("Math: %d\n", students[i].Math);
        printf("English: %d\n", students[i].English);
        printf("Science: %d\n", students[i].Science);
    }
    else
        printf("无此学生!");
}
void subject_average(struct students_list students[], char *subject)
{
    int i;
    double average, sum=0;
    if (Count == 0)
    {
        printf("成绩单是空的!\n");
        return;
    }
    for (i = 0; i < Count; i++)
    {
        if (strcmp(subject, "Math") == 0)
        {
            sum += students[i].Math;
        }
        else if (strcmp(subject, "English") == 0)
        {
            sum += students[i].English;
        }
        else if (strcmp(subject, "Science") == 0)
        {
            sum += students[i].Science;
        }
    }
    average = sum/Count;
    printf("%s average: %lf\n", subject, average);
}

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img

参考一下这个,前两天发的

https://blog.csdn.net/weixin_44882124/article/details/125285056

img

供参考:

#include <stdio.h>
#include <string.h>
#define SUB 3   //科目数
struct students_list{
    char name[20];
    int  subject[SUB];
    //int  Math[50];
    //int  English[50];
    //int  Science[50];
};
void student_average(struct students_list students[],int neme);
void subject_average(struct students_list students[],int subject);
void search_student(struct students_list students[],char* name);
int Count=0;

int main(void)
{
    int  choice,i,j;
    char name[20];
    //char subject[10];
    struct students_list students[50];
    printf("请依次输入学生姓名、科目1成绩、科目2成绩、科目3成绩( # 结束输入):\n");
    for(i=0;i < 50;i++){
        scanf("%s", name);
        if (strcmp(name,"#") == 0) break;
        strcpy(students[i].name,name);
        for(j=0;j<SUB;j++)
            scanf("%d",&students[i].subject[j]);
        Count++;
    }
    do{
        printf("学生成绩功能选项:1:计算学生平均分 2:计算课程平均分"
                                  "3:查询学生成绩 0:退出并输出成绩\n");
        printf("请选择功能:"); scanf("%d", &choice);
        switch(choice){
               case 1:
                       student_average(students,Count);
                       break;
               case 2:
                       subject_average(students,SUB);
                       break;
               case 3:
                       printf("请输入要查找的学生姓名:");
                       scanf("%s", name);
                       search_student(students, name);
                       break;
               case 0: break;
        }
    }while(choice != 0);
    for(i=0;i<Count;i++){
         printf("%s:",students[i].name);
         for(j=0;j<SUB;j++)
             printf(" %d",students[i].subject[j]);
         printf("\n");
    }
    return 0;
}
//学生各科的平均成绩
void student_average(struct students_list students[],int neme)
{
    int i,j;
    double average = 0;
    if(Count == 0){
       printf("成绩单是空的!\n");
       return;
    }
    for(i = 0; i < Count; i++){
       for(j = 0,average = 0;j < SUB; j++)
           average += students[i].subject[j];
       printf("%s: average:%.2lf\n",students[i].name, average/SUB);
    }
}
//各科全部学生的平均成绩
void subject_average(struct students_list students[],int subject)
{
    int i,j,flag = 0;
    double average = 0;
    if(Count == 0){
       printf("成绩单是空的!\n");
       return;
    }
    for(j = 0;j < subject; j++){
        for(i = 0,average = 0;i < Count; i++){
            average+=students[i].subject[j];
        }
        printf("科目%d: average=%.2f\n",j+1,average/Count);
    }
}
//查询学生成绩
void search_student(struct students_list students[],char* name)
{
    int i, j , flag = 0;
    if(Count == 0){
       printf("成绩单是空的!\n");
       return;
    }
    for(i=0; i < Count; i++){
       if(strcmp(students[i].name,name) == 0){
          flag = 1; break;
       }
    }
    if(flag){
       printf("%s:",students[i].name);
       for(j = 0; j < SUB; j++)
           printf(" %d",students[i].subject[j]);
       printf("\n");
    }
    else
       printf("无此学生!\n");
}