【问题标题】:Finding minimum and maximum找到最小值和最大值
【发布时间】:2013-08-16 11:00:59
【问题描述】:

我需要编写一个获取 5 个数字并显示最大和最小数字的重复程序。 我暂时得到了这个,但没有用。

#include <stdio.h>
#include <conio.h>
int main()
{
    int i,maximum, minimum, number;
    int count=0;
    const int n = 5;
    for(i = 0 ; i < n; i++)
    {
        printf("enter number %d :",i+1) ;
        scanf("%d",&number) ;
        maximum=(number>maximum);
        minimum=(number<minimum);
    }
    printf("\n maximum is :%d ,& minimum is :%d ",maximum, minimum) ;
    getch();
    return 0;
}

这只是将10 显示为最大值和最小值。我的逻辑背后有什么问题?

【问题讨论】:

  • JAce,你应该向大家传达什么答案对你有帮助,这样有同样问题的其他人就不会重复发帖了。

标签: c loops for-loop logic


【解决方案1】:

包含以下头文件:

#include <limits.h>

...然后更改以下内容:

int i, maximum, minimum, number;

...到:

int i, maximum, minimum, number;

maximum = INT_MIN;
minimum = INT_MAX;

...并更改以下内容:

maximum = ( number > maximum );
minimum = ( number < minimum );

...到:

maximum = (number > maximum) ? number : maximum;
minimum = (number < minimum) ? number : maximum;

...整个程序可以写成如下:

#include <limits.h>
#include <stdio.h>

int main( void ) {
  int maximum = INT_MIN, 
      minimum = INT_MAX,
      number;

  int const inputs_upperbound = 5;

  for ( int i = 0; i < inputs_upperbound; i++ ) {
    printf( "Enter number %d: ", i );
    scanf( "%d", &number );

    if ( number > maximum ) maximum = number;
    if ( number < minimum ) minimum = number;
  }

  printf( "The minimum number was %d, and the maximum number was %d.\n", minimum, maximum );

  return 0;
}

备注:

逻辑运算符&gt;&lt; 返回truefalse(因此任何非零整数,1 表示true 或0 表示false)。您打算做的是根据该结果改变 maximumminimum 值,因此需要 ?: 运算符。或者,您可以使用控制流语句if,如下所示:

if ( number > maximum ) maximum = number;
if ( minimum < minimum ) minimum = number;

您还应该使用特殊的void 参数指定您的main 函数不应向其传递任何参数,如下所示:

int main( void ) {
  // ... code.
}

...from C11 specification 6:11:6(第 179 页)

使用带空括号的函数声明符(不是 原型格式参数类型声明符)已过时 功能

【讨论】:

  • 感谢它适用于最大值但不适用于最小值 =0
  • @zubergu,我在哪里犯了错误?指出来,以便我做出适当的更正。
  • 在这种情况下我会使用 if 语句而不是 ?: 运算符。在我看来, ?: 在这种情况下只会增加额外的混乱。
  • @zubergu 对于这样的算法,将 max 初始化为 INT_MIN 并将 min 初始化为 INT_MAX 是很常见的做法。
  • @Lundin,我觉得提到这两个来给出这个问题的两个标准解决方案的完整答案是合适的。他也在执行三元运算,所以我什至认为条件运算符在这种情况下更合适(特别是因为它只是一个表达式)。
【解决方案2】:

(number>maximum) 等于 1(布尔真),当它为真时,当它不是时为 0。与最小值相同。在进行比较 () 时,您不会在任何地方将数字分配给最大值或最小值,只分配给最大值,然后是布尔值 0 和 1 的最小值。如果要获得最大数量,则必须分配最大值=数量,如果数量>最大值。希望能帮助到你。

哦,另一件事是您没有为最大和最小变量初始化(给出起始值)。因此,当您比较数字>最大值时,此时您的最大值是多少?想一想。

【讨论】:

  • @zubergu 确实他给了我答案,但现在我明白了图书馆 的含义并帮助了我很多
【解决方案3】:

你不需要limits.h。

使用以下代码。

#include <stdio.h>
#include <conio.h>
int main()
{
    int i,maximum, minimum, number;
    int count=0;
    const int n = 5;
    for(i = 0 ; i < n; i++)
    {
        printf("enter number %d :",i+1) ;
        scanf("%d",&number) ;
        maximum=(number>maximum)? number : maximum;
        minimum=(number<minimum)? number : minimum;
    }
    printf("\n maximum is :%d ,& minimum is :%d ",maximum, minimum) ;
    getch();   
    return 0;
}

这行得通。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-16
    • 2012-06-21
    • 2012-05-05
    • 1970-01-01
    • 2023-03-09
    相关资源
    最近更新 更多