定义结构体,输入十个学生信息,需要实现统计各等级人数,输出全部学生信息和统计结果、平均成绩

img

img

img


以上是我的代码有些混乱,是错的,我的思路是设置两个数组对应各等级和各等级人数,用指针指向存储各等级人数的数组,但是不清楚怎么在函数里面循环增加各等级人数

count数组元素应该初始赋值为0
count[5] = {0}

struct Student SetGrade(struct Student *p,int *d,double *q) //q是指针前面要加*
SetGrade(s,count,&auer);//调用时auer前面要加&


你题目的解答代码如下:

#include <stdio.h>
#define N 10
struct Student
{
    int num;
    char name[20];
    int score;
    char grade;
};
int main()
{
    int i, count[5] = {0};
    char g[5] = {'A', 'B', 'C', 'D', 'E'};
    double auer;
    struct Student s[N];
    struct Student SetGrade(struct Student * p, int *d, double *q); //q是指针前面要加*
    printf("请输入%d个学生的学号、姓名和成绩:\n", N);
    for (i = 0; i < N; i++)
    {
        printf("No%d:", i + 1);
        scanf("%d%s%d", &s[i].num, s[i].name, &s[i].score);
    }
    SetGrade(s, count, &auer); //调用时auer前面要加&
    for (i = 0; i < N; i++)
        printf("%4d%10s%6d%6c\n", s[i].num, s[i].name, s[i].score, s[i].grade);
    printf("各等级人数为:\n");
    for (i = 0; i < 5; i++)
        printf("%c:%d\n", g[i], count[i]);
    printf("平均成绩为%.2f\n", auer);
    return 0;
}

struct Student SetGrade(struct Student *p, int *d, double *q) //q是指针前面要加*
{
    int i, sum = 0;
    for (i = 0; i < N; i++, p++)
    {
        if (p->score >= 90)
        {
            p->grade = 'A';
            (*d)++;      //*d要加括号先计算 
        }
        else if (p->score >= 80)
        {
            p->grade = 'B';
            (*(d + 1))++;
        }
        else if (p->score >= 70)
        {
            p->grade = 'C';
            (*(d + 2))++;
        }
        else if (p->score >= 60)
        {
            p->grade = 'D';
            (*(d + 3))++;
        }
        else
        {
            p->grade = 'E';
            (*(d + 4))++;
        }
        sum += p->score;//p已经++了,不用p+i
    }
    *q = 1.0 * sum / N;
}

img

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

img