|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- #include <stdio.h>
- struct Comp //结构体定义
- {
- char name[20];
- double grade;
- }comp[20];
- double calc(int num[]) //最后成绩计算函数
- {
- int i,mins,maxs,max=0,min=100;
- for(i=0;i<10;i++)
- {
- if(num[i]<min) //如果小于最小值,则更新最小值
- {
- mins=i;
- min=num[i];
- }
- if(num[i]>max) //如果大于最大值,则更新最大值
- {
- maxs=i;
- max=num[i];
- }
- }
- num[mins]=0;
- num[maxs]=0; //将一个最大值与最小值的数据置为 0
- double sum_ave=0;
- for(i=0;i<10;i++)
- {
- sum_ave=sum_ave+num[i];
- }
- return sum_ave/8.0;
- }
- void input() //数据输入函数
- {
- int i,j;
- int grade[10];
- for(i=0;i<20;i++)
- {
- printf("请输入%d 号选手姓名:",i+1);
- scanf("%s",comp[i].name);
- printf("请输入%d 号选手的 10 位评委成绩:\n",i+1);
- for(j=0;j<10;j++)
- scanf("%d",&grade[i]);
- comp[i].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[j].grade>comp[j+1].grade)
- {
- temp=comp[j];
- comp[j]=comp[j+1];
- comp[j+1]=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[order-1].name); //结果输出
- return 0;
- }
复制代码
为什么并没有排序成功,还是按照输入形式排序的?是冒泡排序哪里错了吗 |
|