先更正你的错误:输出语句在for语句外面,循环结束后再输出max的值怎么可能有多个呢,放在里面的也不对,如果放在里面则会输出所有比a[0]大的值
排序的方法很多,你可以网上查查。冒泡法最基本,但是电脑的计算量也会多一些。
冒泡法:所有的数从大到小按顺序排列(从小到大也行)
#include <stdio.h>
void main()
{
int a,b,t,k;
int score[10];
for(a=0;a<10;a++)
{
printf("%d人目の点数を入力してください",a+1);
scanf_s("%d",&score[a]);
}
for(a=0;a<10-1;a++) //冒泡法的意思就是一个元素和后面所有的元素比较,碰见比它大的两个值就互换,这样大的值就代替了这个元素,这叫做冒泡,小的那个就等于“沉底”,从score[0]开始,最后score[8]和a[9]比较,a[9]没有数可比较了
{ k=a; //先默认最大的值是score[a]
for(b=0;b<9-a;b++) //每一个元素后面有9-a个元素可以比较,比如score[0]后面有9个数可以比较
{
if(score[0]<score[b]) //满足条件,值互换
{
t=score[0];
score[0]=score[b];
score[b]=t;
k=b; //记住score[b]的位置,循环结束后得出的k就是最大值的下标,否则最大值的坐标就是默认的k=a
}
}
printf("%d %dth",score[a],k+1);//输出从大到小的值,并输出这些值原本的位置(即第几个数)如果你只要输出前面3个数,只要在这个语句前面加个if(a>=3) break;就行了。如果还要置0的话,后面再加一句score[a]=0就行了,其实冒泡法都不需要置0,你题目中置0的意思其实是为了找第2大,第3大的时候为了怕再和这个最大的值比较的时候又以为这个值就是你要找到值。
}
}
排序的方法很多,你可以网上查查。冒泡法最基本,但是电脑的计算量也会多一些。
冒泡法:所有的数从大到小按顺序排列(从小到大也行)
#include <stdio.h>
void main()
{
int a,b,t,k;
int score[10];
for(a=0;a<10;a++)
{
printf("%d人目の点数を入力してください",a+1);
scanf_s("%d",&score[a]);
}
for(a=0;a<10-1;a++) //冒泡法的意思就是一个元素和后面所有的元素比较,碰见比它大的两个值就互换,这样大的值就代替了这个元素,这叫做冒泡,小的那个就等于“沉底”,从score[0]开始,最后score[8]和a[9]比较,a[9]没有数可比较了
{ k=a; //先默认最大的值是score[a]
for(b=0;b<9-a;b++) //每一个元素后面有9-a个元素可以比较,比如score[0]后面有9个数可以比较
{
if(score[0]<score[b]) //满足条件,值互换
{
t=score[0];
score[0]=score[b];
score[b]=t;
k=b; //记住score[b]的位置,循环结束后得出的k就是最大值的下标,否则最大值的坐标就是默认的k=a
}
}
printf("%d %dth",score[a],k+1);//输出从大到小的值,并输出这些值原本的位置(即第几个数)如果你只要输出前面3个数,只要在这个语句前面加个if(a>=3) break;就行了。如果还要置0的话,后面再加一句score[a]=0就行了,其实冒泡法都不需要置0,你题目中置0的意思其实是为了找第2大,第3大的时候为了怕再和这个最大的值比较的时候又以为这个值就是你要找到值。
}
}