大家看看我的写法哪里错了,求不出正常值,关于冒泡排序
题目是这样的。输入5个学生的数学成绩和英语成绩。
并有合格A,B,2种成绩
合格A=数学成绩*1.2+英语成绩*0.8。取最大的前2个人,打印出这2个人的原来位置。
合格B=数学成绩*0.8+英语成绩*1.2。除去合格A的2个人,打印出合格B的成绩的分数最大的2个人。
剩下一个人就是不合格,也就是说5个人里面有4个是合格的。
下面是我写的,合格A的值能出来。B的值出来是错的。然后不合格的出来也是错的。
#include<stdio.h>
void main()
{
int math[5]; //输入的数学成绩
int english[5];//英语成绩
int score[5]; //合格者A的成绩
int scoreb[5]; //合格者B的成绩
int s[5];//把合格者A的成绩带入这个,为了求原来的位置
int m[5];//同上,为了求合格者B原来的位置
int i,j,x,max,n;
for(i=0;i<5;i++)
{
printf("%d人目の数学の点数:",i+1); //输入数学成绩
scanf_s("%d",&math[i]);
}
printf("\n");
for(i=0;i<5;i++)
{
printf("%d人目の英語の点数:",i+1); //输入英语成绩
scanf_s("%d",&english[i]);
}
for(i=0;i<5;i++)
{
score[i]=math[i]*1.2+english[i]*0.8;//求合格A的所有人的成绩
}
for(i=0;i<5;i++)
{s[i]=score[i];}
for(i=0;i<4;i++)
for(j=0;j<4-i;j++) //A排序开始
{
if(score[j]<=score[j+1])
{
x=score[j];
score[j]=score[j+1];
score[j+1]=x;
}
}
for(i=0;i<2;i++)
{
for(j=0;j<5;j++)
{
if(score[i]==s[j]) //输出合格A的分数最大的2个人的原来位置
printf("%d人目 ",j+1);
math[j]=0; /* 打印出最大的2个人后,把这2个人的数学和英语成绩置0,等下求合格者B的时候就可以算出除去这2个人以外的最大分数的2个人 /*
english[j]=0;
}
}
printf("\n合格者B:");
for(i=0;i<5;i++)
{
scoreb[i]=math[i]*0.8+english[i]*1.2;//合格者B所有成绩计算
}
for(i=0;i<5;i++)
{m[i]=scoreb[i];}
for(i=0;i<4;i++)
for(j=0;j<4-i;j++)
{
if(scoreb[j]<=scoreb[j+1])
{
x=scoreb[j]; //B排序开始
scoreb[j]=scoreb[j+1];
scoreb[j+1]=x;
}
}
for(i=0;i<2;i++)
for(j=0;i<5;j++)
{
if(scoreb[i]==m[j]) // 输出合格B的分数最大的2个人。并且将这2个人的数学分数置0
{
printf("%d人目 ",j+1);
math[j]=0;
}
}
max=math[0];
for(i=1;i<5;i++) //比较所有人的数学分数,因为前面4个人的数学分数都置0了,所以最大的就是不合格者。
{
if(max<math[i])
{
max=math[i];
n=i+1;
}
}
printf("%d人目 ",n); //输出不合格者
}