【问题标题】:C: Minimum and Maximum OutputC:最小和最大输出
【发布时间】:2014-04-02 06:54:50
【问题描述】:

我是编码新手,从 C 开始。 由于用户输入,我正在处理的程序让我挂断了电话。我应该找到用户输入的最小值和最大值,但到目前为止我没有尝试过任何工作。 任何帮助将不胜感激:

#include <stdio.h>
#include <math.h>

int main() {
    int i;
    int n;
    float data;
    float sumx;
    float sumx2;
    float mean;
    float var;
    float sd;
    int min;
    int max;

    /* Get the number of data lines from the user*/

    printf("How many numbers do you need to enter (n)? ");
    scanf("%d", &n);

    while (n <= 0) {
      printf("Enter positive numbers only, please.\n");
      printf("\n");
      printf("How many numbers do you need to enter (n)? ");
      scanf("%d", &n);

    /* Initialization */

    sumx = sumx2 = 0.0;

    for ( i = 1; i <= n; i++) {
      printf("Enter data item %d: ", i);
      scanf("%f", &data);

      min = 0;
      max = 0;

      if(data > max)
      max = data;
      else if(data < min)
      min = data;

      sumx = sumx + data;
      sumx2 = sumx2 + (data * data);
    }

    mean = sumx / n;
    var = 1.0/(n-1) * (sumx2 - (1.0/n) * sumx * sumx);
    sd = sqrt(var);

    printf("\n");
    printf("The minimum value entered: %d\n", min);
    printf("The maximum value entered: %d\n", max);
    printf("\n")
    printf("mean = %f\n", mean);
    printf("variance = %f\n", var);
    printf("std. dev. = %f\n\n", sd);

    return 0;    

}

无论在程序中输入什么值,最小值读取为 0,最大值为最后输入的值。 最小值/最大值应该不同吗?

【问题讨论】:

  • 这需要将值分配给minmax。你可以从那开始。 first 读取的值应分配给两者,然后根据需要对每个后续值进行相应调整。
  • 你确定你发布了正确的程序吗?均值、方差等与您的问题有什么关系?
  • while 循环对于正值始终为假
  • 这是作业的一部分,只是想教我 C 的基础知识。无论输入什么数字,它都会给出平均值和方差。作为额外的计算,它说明了用户的最小和最大输出。
  • 我没有看到任何东西甚至试图找出minmax...

标签: c


【解决方案1】:
min = 0;
max = 0;  

for ( i = 1; i <= n; i++) {
  printf("Enter data item %d: ", i);
  scanf("%f", &data);

  if(data > max)
      max = data;

  if(data < min)
      min = data;

  if(i == 1){min = data;}

  sumx = sumx + data;
  sumx2 = sumx2 + (data * data);
}

编辑(上面的代码不适用于数据的初始值=0)

min = INT_MAX; //chux suggestion
max = INT_MIN;  

for ( i = 1; i <= n; i++) {
  printf("Enter data item %d: ", i);
  scanf("%f", &data);

  if(data > max)
      max = data;

  if(data < min)
      min = data;

  sumx = sumx + data;
  sumx2 = sumx2 + (data * data);
}

并更正while 循环

变态

【讨论】:

  • 而不是min = 0; max = 0;,建议min = INT_MAX; max = INT_MIN;
  • @chux 非常聪明。没想到
【解决方案2】:

你在正确的轨道上。由于某些严重的语法错误,您的程序将无法编译。

以下是 diff 相对于工作版本的输出:

25,26c25,28
<       scanf(%d", &n);
< 
---
>       scanf("%d", &n);
>   
>   }
>   
29c31
<     sumx = sumx2 = 0.0
---
>     sumx = sumx2 = 0.0;
39c41
<     mean = sums / n;
---
>     mean = sumx / n;
46a49,50
>   
>   return 0;

更正的错误如下:

  1. scanf 函数中的格式字符串缺少左括号。
  2. while 循环缺少右括号。
  3. 变量“sums”未定义。

编译器也会期望返回值,但这很可能只会在丢失时生成警告。还值得注意的是,while循环不能做任何有用的事情,但如果用户输入一个小于或等于零的数字,它会导致无限递归。

您在 for 循环中需要的逻辑如下:

sumx = sumx2 = 0.0;
max = 0;
min = 0;

for ( i = 1; i <= n; i++) {
  printf("Enter data item %d: ", i);
  scanf("%f", &data);

  if(data > max)
  max = data;
  else if(data < min)
  min = data;

if( i ==1 )
  min = data;

  sumx = sumx + data;
  sumx2 = sumx2 + (data * data);
}

可能还有其他逻辑错误。如果您需要更多帮助,请告诉我。

祝你好运!

【讨论】:

  • 感谢您的意见,谢谢!我用我试图退出程序的内容编辑了原始帖子,这是用户输入的最小/最大值。我使用的代码编译得很好并且大部分都可以工作,但是,无论输入什么,我的最小值始终为 0。
  • 您需要在循环外初始化变量 min 和 max。否则它将永远无法工作,因为每次迭代都会重置这些值。您也不能将 min 的值初始化为零。它应该被初始化为数据类型的最大可能值。否则可以初始化为第一个条目。
  • 太好了,这正是它所需要的!非常感谢!
  • 请注意,浮点数的最大可能值远大于最大整数。因此在这种情况下将 min 初始化为第一个条目更实用。
猜你喜欢
  • 2019-06-30
  • 2017-06-26
  • 2015-09-12
  • 2012-10-09
  • 2013-02-26
  • 1970-01-01
  • 1970-01-01
  • 2020-08-27
  • 1970-01-01
相关资源
最近更新 更多