|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大佬们,可以帮我看看我这个代码中冒泡排序为啥没有生效吗,我感觉是作用域的问题,可是我不知道怎么处理
3,5
5.6 7.8 9.4 5.8 8.8
7.8 6.7 8.3 6.9 5.5
6.7 9.2 8.8 8.3 9.0
这个是样例输入
- #include<stdio.h>
- #include<stdlib.h>
- int main(void)
- {
- int n, m;
- float sum = 0;
- float average;
- float grade_list[45]; //成绩暂存
- int list[45]; // 成员名单
- float final_grade[60];
- memset(grade_list,0,sizeof(grade_list));
- scanf("%d,%d", &n, &m);
- //初始化成员名单下标
- for (int a = 0; a < 45;a++)
- {
- list[a] = a;
- }
- //循环输入
- for (int i = 0; i < n; i++) // 循环选手
- {
- for (int j = 0; j < m; j++) // 循环评委
- {
- scanf("%f", &grade_list[j]);
- }
- //去除极值
- for (int i = 0; i < n - 1; i++)
- {
- for (int j = 0; j < n - 1 - i; j++)
- {
- if (grade_list[j] > grade_list[j + 1])
- {
- float g = grade_list[j];
- grade_list[j] = grade_list[j + 1];
- grade_list[j + 1] = g;
- }
- }
- }
- for (int i = 1; i < m; i++)
- {
- //printf("%.2f\n", sum);
- sum += grade_list[i];
- }
- final_grade[i] = sum / (m-2);
- }
- // 冒泡排序
- for (int i = 0; i < n - 1; i++)
- {
- for (int j = 0; j < n - 1 - i; j++)
- {
- if (final_grade[j] > final_grade[j + 1])
- {
- float t = final_grade[j] , k = list[j];
- final_grade[j] = final_grade[j + 1];
- list[j] = list[j + 1];
- final_grade[j + 1] = t;
- list[j + 1] = k;
- }
- }
- }
- //输出结果
- for (int i = 0; i < n; i++)
- {
- if (i != n - 1)
- {
- printf("第%d名:%d号选手,得分%.2f\n", i + 1, list[i]+1, final_grade[i]);
- }
- else
- {
- printf("第%d名:%d号选手,得分%.2f", i + 1, list[i]+1, final_grade[i]);
- }
- }
- return 0;
- }
复制代码
- #include <stdio.h>
- #include <stdlib.h>
- #include <memory.h> // 添加此文件,否则,memset() 会用不了
- int main(void)
- {
- int i , j , n , m ;
- float min , max, sum ;
- float average ;
- float grade_list[45]; //成绩暂存
- int list[45]; // 成员名单
- float final_grade[60];
- memset(grade_list,0,sizeof(grade_list));
- scanf("%d,%d", &n, &m);
- //初始化成员名单下标
- for (int a = 0 ; a < 45 ; a ++)
- {
- list[a] = a;
- }
- //循环输入
- for (i = 0; i < n; i ++) // 循环选手
- {
- for (j = 0; j < m; j++) // 循环评委
- {
- scanf("%f", &grade_list[j]);
- }
- //【修改】:去除极值的代码完全重写
- for(sum = 0 , min = max = grade_list[0] , j = 0 ; j < m ; j ++) {
- sum += grade_list[j] ;
- if(grade_list[j] < min) min = grade_list[j] ;
- if(grade_list[j] > max) max = grade_list[j] ;
- }
- final_grade[i] = (sum - max - min) / (m - 2) ;
- }
- // 冒泡排序
- for (i = 0; i < n - 1; i++)
- {
- for (j = 0; j < n - 1 - i; j++)
- {
- if (final_grade[j] < final_grade[j + 1]) // 【修改】:排序结果是反序的,把 > 改为 < 即可
- {
- float t = final_grade[j] , k = list[j];
- final_grade[j] = final_grade[j + 1];
- list[j] = list[j + 1];
- final_grade[j + 1] = t;
- list[j + 1] = k;
- }
- }
- }
- //输出结果
- for (int i = 0; i < n; i++)
- {
- if (i != n - 1)
- {
- printf("第%d名:%d号选手,得分%.2f\n", i + 1, list[i]+1, final_grade[i]);
- }
- else
- {
- printf("第%d名:%d号选手,得分%.2f", i + 1, list[i]+1, final_grade[i]);
- }
- }
- return 0;
- }
复制代码
编译、运行实况:
- D:\[00.Exerciese.2022]\C>g++ -o t t.c
- D:\[00.Exerciese.2022]\C>t
- 3,5
- 5.6 7.8 9.4 5.8 8.8
- 7.8 6.7 8.3 6.9 5.5
- 6.7 9.2 8.8 8.3 9.0
- 第1名:3号选手,得分8.70
- 第2名:1号选手,得分7.47
- 第3名:2号选手,得分7.13
- D:\[00.Exerciese.2022]\C>g++ -o t t.c
- D:\[00.Exerciese.2022]\C>
复制代码
|
|