永发信息网

C++问题:请帮我找出问题

答案:4  悬赏:0  手机版
解决时间 2021-05-10 01:05
  • 提问者网友:藍了天白赴美
  • 2021-05-09 03:23

有3位歌手参加比赛,有6位评委对他们进行10分制打分,编程序求各位选手的平均分(打分按照先去掉一个最高分和最低分再求平均值的方式进行)。

以下是我编的但是有点问题不知是哪里出了问题?编译可以就是输入选手分时有问题了,请帮我找出问题,谢谢!

#include <stdio.h>
void main()
{
int t,j,man[3][6],i;
float avg[3];
for(i=0;i<3;i++)
{
printf("please input NO. %d man score:\n",i+1);
for(j=0;j<6;j++)
scanf("%d",man[ i ][ j ]);
}
for(i=0;i<3;i++) //先用冒泡从小到大排序
{
for(j=0;j<6-i;j++)
{
if(man[ i ][ j ]>man[ i ][ j+1 ])
{

t=man[ i ][ j ];
man[ i ][ j ]=man[ i ][ j+1 ];
man[ i ][ j+1 ]=t;
}
}
}
for(i=0;i<3;i++) //去除最小值和最大值
{
for(j=1,avg[ i ]=0;j<5;j++)
{
avg[ i ]+=man[ i ][ j ];
}
avg[ i ]=avg[ i ]/4;
printf("NO. %d man avg score is%f ",i+1,avg[ i ]);
}
}

最佳答案
  • 五星知识达人网友:刀戟声无边
  • 2021-05-09 04:53

这个代码有两个错误的地方,一个是输入的时候没加取址运算符,另一个是冒泡法错了。

#include <stdio.h>


void main()
{
int t, i, j, k, man[3][6]; //增加一个循环变量k
float avg[3];
for(i = 0; i < 3; i++)
{
printf("please input NO. %d man score:\n", i + 1);
for(j = 0; j < 6; j++)
scanf("%d", &man[i][j]); //传递给scanf函数的参数应该是变量的地址
}
for(i = 0; i < 3; i++) //先用冒泡从小到大排序
for(j = 0; j < 6; j++)
for(k = 5; k > j; k--) //这是2维数组,对数组的每行分别排序应该用3重循环
if(man[i][k] < man[i][k - 1])
{
t = man[i][k];
man[i][k] = man[i][k - 1];
man[i][k - 1] = t;
}
for(i = 0 ; i < 3; i++) //去除最小值和最大值
{
for(j = 1 , avg[i] = 0; j < 5; j++)
avg[i] += man[i][j];
avg[i] /= 4;
printf("NO. %d man avg score is %f\n", i + 1, avg[i]); //加上换行
}
}

运行截图:

全部回答
  • 1楼网友:洎扰庸人
  • 2021-05-09 07:18

改写后的没有错误了。

#include <stdio.h> void main() { int t,j,man[3][6],i,k; float avg[3]={0}; for(i=0;i<3;i++) { printf("please input NO. %d man score:\n",i+1); for(j=0;j<6;j++) scanf("%d",&man[ i ][ j ]); } for(i=0;i<3;i++) //先用冒泡从小到大排序 { for(k=0;k<6;k++) for(j=k;j<6-k;j++) { if(man[ i ][ j ]>man[ i ][ j+1 ]) {

t=man[ i ][ j ]; man[ i ][ j ]=man[ i ][ j+1 ]; man[ i ][ j+1 ]=t; } } } for(i=0;i<3;i++) //去除最小值和最大值 { for(j=1 ;j<5;j++) avg[ i ]+=man[ i ][ j ]; avg[ i ]=avg[ i ]/4; printf("NO. %d man avg score is%f \n",i+1,avg[ i ]);

} }

  • 2楼网友:逐風
  • 2021-05-09 06:57

scanf("%d",man[ i ][ j ]); man前面要加地址符

scanf里,第二个参数,一定要用地址的或指针的

  • 3楼网友:街头电车
  • 2021-05-09 06:06

for(i=0;i<3;i++) { printf("please input NO. %d man score:\n",i+1); for(j=0;j<6;j++) scanf( "%d", &man[ i ][ j ] ); //获取输入时,忘了加取地址符& }

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯