解题思路:
注意事项:
参考代码:
#include<stdio.h>
void put_number(int n);//输入参数
void sort(int (*sum)[2],int (*grade)[3],int);//排序
void change(int *x1,int *x2,int *,int *); //交换
/******************************************/
int main ()
{
int n;
scanf("%d",&n);
put_number(n);
return 0;
}
/*****************输入参数*************************/
void put_number(int n)
{
int grade[n][3];
int sumgrade[n][2];
for (int i=0;i<n;i++){
scanf("%d %d %d",&grade[i][0],&grade[i][1],&grade[i][2]);
sumgrade[i][0]=grade[i][0]+grade[i][1]+grade[i][2];
sumgrade[i][1]=i+1;
}
sort(sumgrade,grade,n);
}
/******************排序************************/
//会出现两类排序,第一类比成绩,第二类各科成绩
void sort(int (*sum)[2],int (*grade)[3],int n)
{
for(int i=0;i<n;i++) //冒泡排序
{
for (int j=0;j<n;j++)
{
if(sum[i][0]>sum[j][0]) //比较总成绩
{
change(grade[i],grade[j],sum[i],sum[j]);
}
else if(sum[i][0]==sum[j][0])//总成绩同
{
if(grade[i][0]>grade[j][0])//比较语文成绩
{
change(grade[i],grade[j],sum[i],sum[j]);
}
else if(grade[i][0]==grade[j][0])//语文成绩同
{
if(sum[i][1]<sum[j][1]) //比较学号
change(grade[i],grade[j],sum[i],sum[j]);
}
}
}
}
if(n>=5) //多于5人,取前五名
for(int i=0;i<5;i++)
printf("%d %d\n",sum[i][1],sum[i][0]);
else //少于五人,每人都有奖
for(int i=0;i<n;i++)
printf("%d %d\n",sum[i][1],sum[i][0]);
}
/******************交换************************/
void change(int *x1,int *x2,int *sum,int *sum1)
{
int c; //中间量
for (int k=0;k<3;k++)//交换各科成绩
{
c=x1[k];
x1[k]=x2[k];
x2[k]=c;
}
for(int k=0;k<2;k++) //交换总成绩,及学号
{
c=sum[k];
sum[k]=sum1[k];
sum1[k]=c; }
}
0.0分
1 人评分
C语言程序设计教程(第三版)课后习题8.3 (C语言代码)浏览:624 |
C语言程序设计教程(第三版)课后习题8.2 (C语言代码)浏览:5275 |
C语言程序设计教程(第三版)课后习题8.5 (C语言代码)浏览:956 |
回文数字 (C语言代码)浏览:2539 |
拆分位数 (C语言代码)浏览:558 |
C语言程序设计教程(第三版)课后习题4.9 (C语言代码)浏览:584 |
明明的随机数 (C语言代码)浏览:621 |
WU-C语言程序设计教程(第三版)课后习题12.6 (C++代码)浏览:667 |
数字统计 (C语言代码)浏览:1117 |
世界杯来了浏览:1006 |