大佬们 帮帮我呗
给定一个长度为100的整形数组,根据键盘输入的整数n(n<100),往数组中依次读入n个整数,输出其中位数,平均数,众数,结果以double数据格式输出 本帖最后由 jackz007 于 2020-12-19 02:01 编辑#include <stdio.h>
int main(void)
{
int b , d , c , e , i , j , k , n , m , t ;
double r1 , r2 , r3 ;
scanf("%d" , & n) ;
for(i = 0 ; i < n ; i ++) scanf("%d" , & d) ;
for(i = 0 ; i < n - 1 ; i ++) {
for(j = i ; j < n ; j ++) {
if(d < d) {
t = d ;
d = d ;
d = t ;
}
}
}
for(m = 0 , k = b = e = d , c = i = 1 ; i < n ; i ++) {
k += d ;
if(d == e) {
c ++ ;
} else {
if(c > m) {
b = e ;
m = c ;
}
e = d ;
c = 1 ;
}
}
r1 = k * 1.0 / n ;
r2 = (n % 2) ? d : (d + d) / 2.0 ;
r3 = b ;
printf("%.2f\t%.2f\t%.2f\n" , r1 , r2 , r3) ;
}
编译、运行实况
D:\00.Excise\C>cl x.c
用于 x86 的 Microsoft (R) C/C++ 优化编译器 19.28.29334 版
版权所有(C) Microsoft Corporation。保留所有权利。
x.c
Microsoft (R) Incremental Linker Version 14.28.29334.0
Copyright (C) Microsoft Corporation.All rights reserved.
/out:x.exe
x.obj
D:\00.Excise\C>x
80
18 2013579246
23 25 368765432
89 88 87 32 33 34 56 67 78 99
56 77 99 82 84 86 38 48 58 68
39398526 18 38 98
23 25 368765432
39398526 18 38 98
89 88 87 32 33 34 56 67 78 99
34.84 24.00 2.00
D:\00.Excise\C>
最后的结果分别是:平均数、中位数、众数 本帖最后由 风过无痕1989 于 2020-12-20 15:23 编辑
// 给定一个长度为100的整形数组,根据键盘输入的整数n(n<100),往数组中依次读入n个整数,
// 输出其中位数,平均数,众数,结果以double数据格式输出
#include<stdio.h>
int main()
{
int i, j, n, temp, temp2,str;
double Median, Mean = 0, Mode = 0;
scanf("%d", &n);
for (i = 0;i < n;i++) // 输入 n 个整数
{
scanf("%d", &str);
str = 1;
Mean += str;
}
Mean /= n * 1.0; // 求平均数
for (i = 0;i < n;i++) // 对序列str由大至小进行排序
{
for (j = 0;j < n - 1;j++)
{
if (str < str)
{
temp = str;
str = str;
str = temp;
}
}
}
if (n % 2 == 0) // 求中位数
Median = 1.0 * (str + str) / 2.0;
else
Median = 1.0 * str;
for (i = 0;i < n;i++) // 对序列某数出现次数进行查询
{
for (j = 0;j < n;j++)
{
if (str == str && i != j)
str++;
}
}
for (i = 0;i < n;i++) // 对全序列按str由大至小进行排序
{
for (j = 0;j < n - 1;j++)
{
if (str < str)
{
temp = str;
str = str;
str = temp;
temp2 = str;
str = str;
str = temp2;
}
}
}
if (str != str || str != str) // 求众数
{
Mode = 1.0 * str;
}
printf("Mean = %lf, Median = %lf,", Mean, Median);
if (Mode != 0)
{
printf(" Mode = %lf", Mode);
}
else
{
printf("\n");
printf("序列存在多个众数或没有众数,它们位于序列的前面\n");
for (i = 0;i < n;i++)
{
printf("%d ", str);
}
}
printf("\n");
} 本帖最后由 jackz007 于 2020-12-20 00:30 编辑
楼主,用
80
18 2013579246
23 25 368765432
89 88 87 32 33 34 56 67 78 99
56 77 99 82 84 86 38 48 58 68
39398526 18 38 98
23 25 368765432
39398526 18 38 98
89 88 87 32 33 34 56 67 78 99
做测试,最佳答案代码给出的结果是
Mean = 34.837500, Median = 18.000000, Mode = 18.000000
输入数据经过排序后是这个样子:
1222223333
3444555556
6666777888
8999 18 18 18 20 23 23
25 25 32 32 33 33 34 34 36 36
38 38 38 39 39 48 56 56 56 58
67 67 68 77 78 78 82 84 86 87
87 88 88 89 89 98 98 99 99 99
只需要通过肉眼观察,很容易就可以发现,中位数 18 和众数 18 都是错误的! jackz007 发表于 2020-12-20 00:25
楼主,用
做测试,最佳答案代码给出的结果是
你给出的9组数据,没有一组是有众数的。
你抢最佳答案,这无可厚非,大家来这里,目的不尽相同,反正我是来学习的。你若真心指出我程序的错误,我很欢迎,也很感激。
我回答这道题目,并非是因为你的程序的正确性,对于你的程序的准确性,我从没有怀疑过,就是见你没有按照题目的要求做。
我第一次发上来时,程序是正确的,后来想将程序排列的整齐一些,直接在网上做了一次修改,没曾想在复制、粘贴时就出了问题。下图是按你提供的数据的第9组输出的(当然,输出时增加了没有众数的可能性)
本帖最后由 jackz007 于 2020-12-20 15:35 编辑
风过无痕1989 发表于 2020-12-20 15:20
你给出的9组数据,没有一组是有众数的。
你抢最佳答案,这无可厚非,大家来这里,目的不尽相同,反正 ...
你回答你的,我回答我的,谁在跟你抢最佳答案,再说了,你的答案正确了吗?我只是指出 "最佳答案" 存在错误而已,至于吗,真是的。
页:
[1]