c语言基础题目—中位数(程序改错)-创新互联
文章目录
本文名称:c语言基础题目—中位数(程序改错)-创新互联
分享URL:http://scyanting.com/article/dchgjj.html
- 题意解读
- 题目描述
- 输入输出
- 测试样例
- 参考答案
- 这是一道改错题,给了一串错误的代码,错误的个数未知,包括语法和思路的错误。
- 在写这种改错题的时候,首先要读懂代码的意思,然后根据题目要求进行改正。还有一种方法,就是不看给出的代码,根据题目像常规题一样编写一个符合题目要求的代码。
- 代码整体思路:输入m,再输入m组数,然后每组数第一个表示该组有几个数,计算该组数的中位数,最后输出所有组中中位数大的那组数,同时输出组别。
- 这道题给出的错误代码中,主要的问题是for循环的条件错误,以及双浮点数运算错误。只要读懂代码,然后细节注意到,这几处错误还是比较容易找出来的。
错误代码如下:
#includeint main(void)
{int m,n,i,j,k,t,index;
double x;
scanf("%d",&m);
double b[m];
for(k=1;k<=m;k++)
{scanf("%d",&n);
int a[n];
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
for(i=0;iif(a[i]>a[j])
{t=a[i];a[i]=a[j];a[j]=t;
}
}
if(n%2==0)
b[k]=(a[n/2-1]+a[n/2])/2;
else b[k]=a[n/2];
}
x=b[0];index=0;
for(i=1;ix)
{x=b[i];
index=i;
}
printf("第%d组的疗效最好,中位数是%.2lf。\n",index+1,x);
return 0;
}
输入输出测试样例参考答案#include#define N 1000
int main(void)
{int m, n, i, j, k, t, index;
double x;
scanf("%d", &m); //m组数
double b[N]; //用来存入每组数的中位数
for (k = 0; k< m; k++)
{scanf("%d", &n); //每组的第一个数
int a[N];
for (i = 0; i< n; i++)
scanf("%d", &a[i]); //每组有效的数,存入数组a
for (i = 0; i< n - 1; i++) //对每组数进行升序排列,注意循环条件“ i if (a[i] >a[j])
{t = a[i]; a[i] = a[j]; a[j] = t;
}
}
if (n % 2 == 0) //如果是偶数,中位数为中间两数的平均值
b[k] = (a[n / 2 - 1] + a[n / 2]) / 2.0; //注意数组b为double型,不要直接÷整型数
else b[k] = a[n / 2];
}
x = b[0]; index = 0;
for (i = 1; i< m; i++) //简单的循环比较大中位数,同时获取组别
if (b[i] >x)
{ x = b[i];
index = i;
}
printf("第%d组的疗效最好,中位数是%.2lf。\n", index + 1, x);
return 0;
}
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
本文名称:c语言基础题目—中位数(程序改错)-创新互联
分享URL:http://scyanting.com/article/dchgjj.html