0

我需要编写一个重复程序来获取 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;
}

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

4

3 回答 3

7

包括以下头文件:

#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;
}

评论:

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

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

您还应该让您的main函数通过使用特殊参数指定不应将任何参数传递给它void,如下所示:

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

...来自 C11 规范 6:11:6(第 179 页)

使用带空括号的函数声明符(不是原型格式参数类型声明符)是一个过时的特性

于 2013-08-16T11:02:01.407 回答
1

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

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

于 2013-08-16T11:09:27.370 回答
0

你不需要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;
}

这行得通。

于 2013-12-18T05:07:27.570 回答