c语言冒泡排序修改输出最大最小值

这个代码怎么改(数据结构的),书本上没讲怎么输出最大最小值啊
有没有人指导指导帮忙改一改,明天就要交ww

代码在下面:
void sum_grade(information im[])
{
int i, j;
information temp;

for (i = 0; i < size; i++)//遍历准考证号 
{
    for (j = 0; j < size - 1 - i; j++)//冒泡排序
    {
        if (im[j].sum_grade< im[j + 1].sum_grade)
        {
            temp = im[j];
            im[j] = im[j + 1];
            im[j + 1] = temp;
        }
    }
}
printf("总分从高到低排序后的结果为:\n");
for (i = 0; i < size; i++)
{
    printf("名字 = %s\t准考证号 = %d\t班级 = %s\t\n计算机专业基础综合成绩 = %0.2f\t高数成绩 = %0.2f\t英语成绩 = %0.2f\t思想政治理论成绩 = %0.2f \t总成绩 = %0.2f\n\n",
        im[i].student_name, im[i].student_number, im[i].student_class, im[i].student_jsj, im[i].student_math, im[i].student_ey, im[i].student_sxzz, im[i].sum_grade);
}

}

修改后的代码如下,望采纳

void sum_grade(information im[]) {
    int i, j;
    information temp;
    int max_index = 0, min_index = 0;
    // 记录最大和最小值的下标
    for (i = 0; i < size; i++) // 遍历准考证号 {
        for (j = 0; j < size - 1 - i; j++) // 冒泡排序 {
            if (im[j].sum_grade < im[j + 1].sum_grade) {
                temp = im[j];
                im[j] = im[j + 1];
                im[j + 1] = temp;
            }
            // 更新最大和最小值的下标
            if (im[j].sum_grade > im[max_index].sum_grade) {
                max_index = j;
            }
            if (im[j].sum_grade < im[min_index].sum_grade) {
                min_index = j;
            }
        }
    }
    printf("总分从高到低排序后的结果为:\n");
    for (i = 0; i < size; i++) {
        printf("名字 = %s\t准考证号 = %d\t班级 = %s\t\n计算机专业基础综合成绩 = %0.2f\t高数成绩 = %0.2f\t英语成绩 = %0.2f\t思想政治理论成绩 = %0.2f \t总成绩 = %0.2f\n\n",
        im[i].student_name, im[i].student_number, im[i].student_class, im[i].student_jsj, im[i].student_math, im[i].student_ey, im[i].student_sxzz, im[i].sum_grade);
    }
    // 输出最大和最小值
    printf("最大值:%0.2f\n", im[max_index].sum_grade);
    printf("最小值:%0.2f\n", im[min_index].sum_grade);
}

ChatGPT尝试为您解答,仅供参考
首先,冒泡排序是一种简单的排序算法,它通过重复地遍历要排序的数列来比较相邻的元素,并且交换位置来达到排序的目的。在这个代码中,通过两重循环,先把每一对相邻的元素进行比较,如果前一个比后一个大,就交换位置。这样,每一轮遍历完成之后,最大的元素就会被移到最后面。


如果您想在这个代码中输出最大最小值,您可以在排序之后,再遍历一遍数列,输出最大值和最小值即可。


例如,在 sum_grade 函数的最后加入如下代码:

float max = im[0].sum_grade;
float min = im[0].sum_grade;
for (i = 1; i < size; i++) {
  if (im[i].sum_grade > max) {
    max = im[i].sum_grade;
  }
  if (im[i].sum_grade < min) {
    min = im[i].sum_grade;
  }
}
printf("最大值为 %.2f,最小值为 %.2f\n", max, min);

这样就可以在输出排序之后的成绩之后,再输出最大值和最小值。

改动处见注释,供参考:

void sum_grade(information im[])
{
    int i, j;
    information temp;
    for (i = 0; i < size - 1; i++)//修改
    //for (i = 0; i < size; i++)
    {
        for (j = 0; j < size - 1 - i; j++)//冒泡排序
        {
            if (im[j].sum_grade< im[j + 1].sum_grade)
            {
                temp = im[j];
                im[j] = im[j + 1];
                im[j + 1] = temp;
            }
        }
    }
    printf("总分从高到低排序后的结果为:\n");
    for (i = 0; i < size; i++)
    {
         printf("名字 = %s\t准考证号 = %d\t班级 = %s\t\n"
                "计算机专业基础综合成绩 = %0.2f\t高数成绩 = %0.2f\t"
                "英语成绩 = %0.2f\t思想政治理论成绩 = %0.2f \t总成绩 = %0.2f\n\n",
              im[i].student_name, im[i].student_number, im[i].student_class,
              im[i].student_jsj, im[i].student_math, im[i].student_ey,
              im[i].student_sxzz, im[i].sum_grade);
    }
    printf("最大值为:%.2f,最小值为:%.2f\n",im[0].sum_grade,im[size-1].sum_grade);//修改
}