h-b-z-d-j-s-m 发表于 2022-10-25 14:22:37

结构体

#include <stdio.h>
struct Comp //结构体定义
{
    char name;
    double grade;
}comp;
double calc(int num[]) //最后成绩计算函数
{
    int i,mins,maxs,max=0,min=100;
    for(i=0;i<10;i++)
    {
      if(num<min) //如果小于最小值,则更新最小值
      {
            mins=i;
            min=num;
      }
      if(num>max) //如果大于最大值,则更新最大值
      {
            maxs=i;
            max=num;
      }
    }
    num=0;
    num=0; //将一个最大值与最小值的数据置为 0
    double sum_ave=0;
    for(i=0;i<10;i++)
    {
      sum_ave=sum_ave+num;
    }
    return sum_ave/8.0;
}
void input() //数据输入函数
{
    int i,j;
    int grade;
    for(i=0;i<20;i++)
    {
      printf("请输入%d 号选手姓名:",i+1);
      scanf("%s",comp.name);
      printf("请输入%d 号选手的 10 位评委成绩:\n",i+1);
      for(j=0;j<10;j++)
            scanf("%d",&grade);
      comp.grade=calc(grade); //处理选手的最后得分
    }
}
void DDubbleSort() //向下冒泡排序函数
{
struct Comp temp;
int i,j;
for(i=0;i<20;i++)
    for(j=0;j<20-i;j++)
      if(comp.grade>comp.grade)
      {
            temp=comp;
            comp=comp;
            comp=temp;
      }
}
int main()
{
    int order;
    input(); //数据输入
    printf("数据输入完毕,正在排序……\n");
    DDubbleSort(); //成绩排序
    printf("排序完毕,请输入名次:");
    scanf("%d",&order);
    if(order<=0||order>20)
      printf("数据输入错误!\n");
    else
      printf("第%d 名选手姓名是:%s\n",order,comp.name); //结果输出
    return 0;
}
为什么并没有排序成功,还是按照输入形式排序的?是冒泡排序哪里错了吗

jackz007 发表于 2022-10-25 14:38:23

void DDubbleSort() //向下冒泡排序函数
{
      struct Comp temp                              ;
      int i , j                                     ;
      for(i = 0 ; i < 20 ; i ++) {
                for(j = i ; j < 20 - 1 ; j ++) {
                        if(comp . grade > comp . grade) {
                              temp = comp      ;
                              comp = comp ;
                              comp = temp    ;
                        }
                }
      }
}

h-b-z-d-j-s-m 发表于 2022-10-25 15:01:22

本帖最后由 h-b-z-d-j-s-m 于 2022-10-25 15:04 编辑

jackz007 发表于 2022-10-25 14:38


请问我那个哪里错了啊,那个也是冒泡排序的一种吧

jackz007 发表于 2022-10-25 15:04:21

h-b-z-d-j-s-m 发表于 2022-10-25 15:01
请问我那个哪里错了啊,那个也是冒泡排序的一种吧

for(i=0;i<20;i++)
    for(j=0;j<20-i;j++)
      if(comp.grade>comp.grade)
      {
            temp=comp;
            comp=comp; // 当 j = 19 的时候,这里会越界
            comp=temp;    // 当 j = 19 的时候,这里会越界

h-b-z-d-j-s-m 发表于 2022-10-25 15:04:27

h-b-z-d-j-s-m 发表于 2022-10-25 15:01
请问我那个哪里错了啊,那个也是冒泡排序的一种吧

这个我试了下排序不对

jackz007 发表于 2022-10-25 15:05:38

h-b-z-d-j-s-m 发表于 2022-10-25 15:04
这个我试了下排序不对

贴出你的样例(输入数据)

jackz007 发表于 2022-10-25 15:20:46

h-b-z-d-j-s-m 发表于 2022-10-25 15:04
这个我试了下排序不对

void DDubbleSort() //向下冒泡排序函数
{
      struct Comp temp                              ;
      int i , j                                     ;
      for(i = 0 ; i < 19 ; i ++) {
                for(j = i + 1 ; j < 20 ; j ++) {
                        if(comp . grade > comp . grade) {
                              temp = comp      ;
                              comp = comp   ;
                              comp = temp      ;
                        }
                }
      }
}

jhq999 发表于 2022-10-25 15:20:52

看看
页: [1]
查看完整版本: 结构体