C++问题求解答:求大神帮我的程序改正错误,并接着完成这个题(我是初学者,求用我能懂的办法)
我根据问题自己编了一下,发现引用a【i】【0】的时候出了问题,要怎么改啊?接下来怎么编啊?
#include<stdio.h>
void main()
{
int i,j,s=0,max,a[5][6]={{1001},{1002},{1003},{1004},{1005}};
for(i=0;i<5;i++)
{
printf("请输入学号为%d同学的4门成绩:",a[i][0]);
for(j=1;j<5;j++)
scanf("%d",&a[i][j]);
}
for(i=0;i<5;i++)
{
s=0;
for(j=1;j<5;j++)
s=s+a[i][j];
a[i][6]=s;
}
max=0;
for(i=1;i<5;i++)
{if(a[i][6]>a[max][6])max=i;}
printf("总分最高的是%d同学,成绩为:%d",a[max][0],a[max][6]);
} 展开
【程序】用索引排序,这样就不用交换学生的6个数据了。
#define N 5
void main()
{ int i,j,s,index[N]; //index存放索引,内容是学生存储序号(a数组第1下标值)顺序表示排序顺序
float a[N][6],max; //学号,成绩1,成绩2,成绩3,成绩4,总分
for ( i=0;i<N;i++ )
{ index[i]=i; a[i][0]=1001+i;
printf("请连续输入学号为%d同学的4门成绩(以空格间隔):",(int)a[i][0]);
scanf("%f %f %f %f",&a[i][1],&a[i][2],&a[i][3],&a[i][4]);
}
for ( i=0;i<N;i++ ) { a[i][5]=0; for ( j=0;j<4;j++ ) a[i][5]+=a[i][j+1]; }
max=0; s=0; for ( i=0;i<N;i++ ) if ( max<a[i][5] ) { max=a[i][5]; s=i; }
printf("总分最高的同学的学号是:%d\n",(int)a[s][0]);
for ( i=0;i<N-1;i++ ) //根据总分,将索引排序,索引顺序(下标0~N)将是总分从大到小顺序
for ( j=i+1;j<N;j++ )
if ( a[index[i]][5]<a[index[j]][5] )
{ s=index[i]; index[i]=index[j]; index[j]=s;
}
printf("按总分从高到低顺序的成绩单:\n");
printf("学号\t语文\t数学\t英语\t科学\t总分\n");
for ( i=0;i<N;i++,printf("\n") )
{ printf("%d\t",(int)a[index[i]][0]);
for ( j=1;j<6;j++ ) printf("%.1f\t",a[index[i]][j]);
}
}
【运行结果】
#include<stdio.h>
void main()
{
int i,j,temp,k,sum,max,a[5][6]={{1001},{1002},{1003},{1004},{1005}};
for(i=0;i<5;i++)
{
sum=0;
printf("请输入学号为%d同学的4门成绩:",a[i][0]);
for(j=1;j<5;j++)
{
scanf("%d",&a[i][j]);
sum+=a[i][j];
}
a[i][j]=sum;
}
for(i=0;i<4;i++)
for(j=0;j<4-i;j++)
if(a[j][5]<=a[j+1][5])
{
for(k=0;k<6;k++)
{
temp=a[j][k];
a[j][k]=a[j+1][k];
a[j+1][k]=temp;
}
}
printf("总分最高的是%d同学,成绩为:%d",a[0][0],a[0][5]);
}
for(i=0;i<4;i++)
for(j=0;j<4-i;j++)
if(a[j][5]<=a[j+1][5])
这是什么意思?行和列交换了?
那个是冒泡排序
for(k=0;k<6;k++)
{
temp=a[j][k];
a[j][k]=a[j+1][k];
a[j+1][k]=temp;
}
这个是交换