m0_62860639 2022-06-01 02:20 采纳率: 100%
浏览 89
已结题

c语言输入两行数据就自动结束了

作业题,不知道问题在哪,大家帮我看看

img

代码就这样,输入两行学生数据后就自动结束了


#include <stdio.h>
#include <stdlib.h>
struct S
{
    float s1;
    float s2;
    float s3;
};

struct m
{
    int num;
    char n[20];
    struct S s;
    float a;
};

int main()
{
    struct m a[5],*p=a;
    void inpute(struct m p[]);
    float average(float p1,float p2,float p3,float p4,float p5);
    int max(struct m p[]);
    int k;
    float j;
    printf("请输入学生信息:学号,姓名,成绩1,成绩2,成绩3\n");
    inpute(p);
    printf("总平均分:\n");
    j=average((*p).a,(*(p+1)).a,(*(p+2)).a,(*(p+3)).a,(*(p+4)).a);
    printf("%f",j);
    printf("最高分者:\n");
    k=max(p);
    printf("学号:%d 姓名:%s 科目1:%f 科目2:%f 科目3:%f 平均分:%f\n",(*(p+k)).num,(*(p+k)).n,(*(p+k)).s.s1,(*(p+k)).s.s2,(*(p+k)).s.s3,(*(p+k)).a);
    return 0;
}

void inpute(struct m p[])
{
    int i;
    for(i=0;i<5;i++)
    {
        scanf("%d,%s,%f,%f,%f",p[i].num,p[i].n,p[i].s.s1,p[i].s.s2,p[i].s.s3);
        p[i].a=(p[i].s.s1+p[i].s.s2+p[i].s.s3)/3.0;
    }
}

float average(float p1,float p2,float p3,float p4,float p5)
{
    float p;
    p=p1+p2+p3+p4+p5;
    return p;
}

int max(struct m p[])
{
    int i,k=0;
    for(i=0;i<5;i++)
    {
        if(p[i].a>p[k].a)
            k=i;
    }
    return k;
}
  • 写回答

2条回答 默认 最新

  • qzjhjxj 2022-06-01 09:33
    关注

    修改处见注释,供参考:

    #include <stdio.h>
    #include <stdlib.h>
    struct S
    {
        float s1;
        float s2;
        float s3;
    };
    
    struct m
    {
        int num;
        char n[20];
        struct S s;
        float a;
    };
    
    int main()
    {
        struct m a[5], * p = a;
        void  inpute(struct m p[]);
        float average(float p1, float p2, float p3, float p4, float p5);
        int max(struct m p[]);
        int k;
        float j;
        printf("请输入学生信息:学号,姓名,成绩1,成绩2,成绩3\n");
        inpute(p);
    
        printf("总平均分:\n");
        j = average((*p).a, (*(p + 1)).a, (*(p + 2)).a, (*(p + 3)).a, (*(p + 4)).a)/5.0;//修改
        printf("%f\n", j);
    
        printf("最高分者:\n");
        k = max(p);
        printf("学号:%d 姓名:%s 科目1:%f 科目2:%f 科目3:%f 平均分:%f\n", 
            (*(p + k)).num, (*(p + k)).n, (*(p + k)).s.s1, (*(p + k)).s.s2, (*(p + k)).s.s3, (*(p + k)).a);
        return 0;
    }
    
    void inpute(struct m p[])
    {
        int i;
        for (i = 0; i < 5; i++)
        {
            scanf("%d%s%f%f%f", &p[i].num, p[i].n, &p[i].s.s1, &p[i].s.s2, &p[i].s.s3);//修改
            //scanf("%d,%s,%f,%f,%f", p[i].num, p[i].n, p[i].s.s1, p[i].s.s2, p[i].s.s3);
            p[i].a = (p[i].s.s1 + p[i].s.s2 + p[i].s.s3) / 3.0;
        }
    }
    
    float average(float p1, float p2, float p3, float p4, float p5)
    {
        float p;
        p = p1 + p2 + p3 + p4 + p5;
        return p;
    }
    
    int max(struct m p[])
    {
        int i, k = 0;
        for (i = 0; i < 5; i++)
        {
            if (p[i].a > p[k].a)
                k = i;
        }
        return k;
    }
    
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 6月9日
  • 已采纳回答 6月1日
  • 创建了问题 6月1日

悬赏问题

  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分
  • ¥15 Macbookpro 连接热点正常上网,连接不了Wi-Fi。
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 linux驱动,linux应用,多线程
  • ¥20 我要一个分身加定位两个功能的安卓app
  • ¥15 基于FOC驱动器,如何实现卡丁车下坡无阻力的遛坡的效果
  • ¥15 IAR程序莫名变量多重定义