gpt4 book ai didi

计算均值中位数模式c编程数组

转载 作者:太空宇宙 更新时间:2023-11-04 04:03:08 24 4
gpt4 key购买 nike

我有这样的家庭作业,要求用户输入数字,然后计算平均中位数和众数,然后询问他/她是否想再次玩,然后重复该程序或退出。一切都可以编译,但我似乎可以找出一些出错的地方:

均值有效。中位数没有。如果整数数组的长度是偶数,即数组中有 4 个数字,则中位数应该是中间两个数字的平均数。因此,如果数字按顺序为“1、3、5、6”,则中位数应为 4.000000。该模式也不起作用,当被要求“再玩一次?”任何答案都会导致程序突然退出并崩溃。有人可以帮我找出我的平均中值模式计算中的错误,并帮助我制作菜单吗?

#define MAX 25
#include <stdio.h>
#include <stdbool.h>
#include <time.h>
#include <stdlib.h>

int readTotalNums();
void fillArray(int total, int nums[]);
void sortArray(int nums[], int total);
double findMean(int nums[], int total);
double findMedian(int nums[], int total);
int findMode(int nums[], int total);
void printResults(double mean, double median, double mode);
bool goAgain();

int main() {
int nums[MAX];
int total;
double mean, median, mode;
do {
total = readTotalNums(); //guarantee 1-25
fillArray(total, nums); //read in the #s don't need to check range
sortArray(nums, total);
mean = findMean(nums, total);
median = findMedian(nums, total);
mode = findMode(nums, total);
printResults(mean, median, mode);
} while (goAgain());
return 0;
}

int readTotalNums() {
int num;
do {
printf("How many numbers? ");
scanf("%i", &num);
} while (num < 1 || num > 25);
return num;
}

void fillArray(int total, int nums[]) {
int temp;
int i;
printf("Please enter %i numbers\n", total);
for (i = 0; i <= total-1; i++) {
scanf("\n%i",&nums[i]);
}
}

void sortArray(int nums[], int total) {
int x;
int y;
for(x=0; x<total; x++) {
for(y=0; y<total-1; y++) {
if(nums[y]>nums[y+1]) {
int temp = nums[y+1];
nums[y+1] = nums[y];
nums[y] = temp;
}
}
}
}

double findMean(int nums[], int total) {
int i;
double sum = 0.0;
for(i = 0; i < total; i++) {
sum += nums[i];
}
return (sum/total);
}

double findMedian(int nums[], int total) {
int temp;
int i,j;
for(i=0;i<total;i++)
for(j=i+1;j<total;j++) {
if(nums[i]>nums[j]) {
temp=nums[j];
nums[j]=nums[i];
nums[i]=temp;
}
}
if(total%2==0) {
return (nums[total/2]+nums[total/2-1])/2;
}else{
return nums[total/2];
}
}

int findMode(int nums[],int total) {
int i, j, maxCount, modeValue;
int tally[total];
for (i = 0; i < total; i++) {
tally[nums[i]]++;
}
maxCount = 0;
modeValue = 0;
for (j = 0; j < total; j++) {
if (tally[j] > maxCount) {
maxCount = tally[j];
modeValue = j;
}
}
return modeValue;
}

void printResults(double mean, double median, double mode) {
printf("Mean: %d\tMedian: %d\tMode: %i", mean, median, mode);
}


bool goAgain() {
char *temp;
printf("\nWould you like to play again(Y/N)? ");
scanf("%s", &temp);
while (temp != 'n' && temp != 'N' && temp != 'y' && temp != 'Y') {
printf("\nI am sorry that is invalid -- try again");
printf("\nWould you like to play again(Y/N)? ");
scanf("%s", &temp);
}
if (temp == 'y' || temp == 'Y') {
return true;
} else {
return false;
}
}

输出应该是这样的:

How many numbers 4
Please enter 4 numbers
6
2
5
25
Mean: 9.50 Median: 5.50 Mode: 2
Go again (y/n) n

最佳答案

嗯,我发现了3个问题:

  1. 你的 printf 是错误的。要打印 double,您应该使用 %f。不是 %d%i
  2. 使用前应初始化tally
  3. goAgain中,temp应该是char,你应该使用%c而不是 %s.

关于计算均值中位数模式c编程数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9424154/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com