weixin_63561831 2021-12-20 13:53 采纳率: 100%
浏览 63
已结题

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

img

img

img


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

  • 写回答

1条回答 默认 最新

  • 关注

    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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 12月28日
  • 已采纳回答 12月20日
  • 创建了问题 12月20日

悬赏问题

  • ¥15 关于#python#的问题:我知道这个问题对你们来说肯定so easy
  • ¥15 wpf datagrid如何实现多层表头
  • ¥15 为啥画版图在Run DRC会出现Connect Error?可我Calibre的hostname和计算机的hostname已经设置成一样的了。
  • ¥20 网站后台使用极速模式非常的卡
  • ¥20 Keil uVision5创建project没反应
  • ¥15 mmseqs内存报错
  • ¥15 vika文档如何与obsidian同步
  • ¥15 华为手机相册里面的照片能够替换成自己想要的照片吗?
  • ¥15 陆空双模式无人机飞控设置
  • ¥15 sentaurus lithography