是乞丐吗? 2021-07-10 14:17 采纳率: 75%
浏览 26
已采纳

C语言 结构体 动态数组:程序改错

要求:对动态数组中n个学生的数据,按成绩升序实现选择排序。

#include<stdio.h>
#include<stdlib.h>
struct student
{
    int id;
    char name[20];
    float score;
};
struct student *input(int n);
void sort(struct student *pstu,int n);
void output(struct student stu[],int n);
void swap(struct studdent *p1,struct studdent *p2);

int main()
{
    struct student *pstu;
    int n;
    printf("请输入学生人数:");
    scanf("%d",&n);
    printf("请输入学生学号、姓名、成绩:");
    pstu=input(n);
    sort(pstu,n);
    output(pstu,n);
    free(pstu);
    return 0;
}

//输入
struct student *input(int n)
{
    int i;
    struct student *pstu=(struct student *)calloc(n,sizeof(struct student));
    for(i=0;i<n;i++)
        scanf("%d %s %f",&pstu[i].id,pstu[i].name,&pstu[i].score);
    return pstu;
}
//排序
void sort(struct student *pstu,int n)
{
    struct student *pmin,*p;
    int i;
    for(i=0;i<n-1;i++)
    {
        pmin=pstu+i;
        for(p=pmin+1;p<pstu+n;p++)
            if(p->score < pmin->score)
                  pmin=p;
        if(pmin!=pstu+i)
            swap(pmin,pstu+i);
    }
}
//交换
void swap(struct studdent *p1,struct studdent *p2)
{
    struct student tmp;
    tmp = p1;
    p1 = p2;
    p2 = tmp;
}
//输出
void output(struct student *pstu,int n)
{
    struct student *p;
    p=pstu;
    while(p<pstu+n)
    {
        printf("%d %s %f",p->id,p->name,p->score);
        p++;
    }
}
  • 写回答

1条回答 默认 最新

  • 浪客 2021-07-10 14:58
    关注
    //交换
    void swap(struct studdent *p1,struct studdent *p2)
    {
       struct student tmp;
       tmp = *p1;
       *p1 = *p2;
       *p2 = tmp;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 7月10日
  • 创建了问题 7月10日

悬赏问题

  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?
  • ¥15 matlab(相关搜索:紧聚焦)
  • ¥15 基于51单片机的厨房煤气泄露检测报警系统设计
  • ¥15 Arduino无法同时连接多个hx711模块,如何解决?