数组中的最大数字

时间:2017-09-08 17:41:10

标签: c arrays

我有这段代码:

    void main()
 {
     int x;
     scanf("%d", &x);
     int array[x];
     int i;
     for(i=0; i<x; i++)
     {
         scanf("%d", &array[i]);
     }
     int j;
     for(i=0; i<x-1; i++)
     {
         if(array[i]>=array[i+1])
            j=array[i];
         else j=array[i+1];
     }
     printf("%d", &j);
 }

我想打印数组中最大的数字。但它总是返回一个巨大的随机数,我在这里努力找到我的错误。任何帮助,将不胜感激。提前谢谢。

4 个答案:

答案 0 :(得分:2)

你可能搞砸了scanfprintfscanf需要一个指针,例如 scanf("%d", &j);(为了更改变量的值)但是在printf中你不应该传递指针,因此printf("%d", &j);应该是printf("%d", j);(因为printf只打印值变量并且不会改变它)

答案 1 :(得分:1)

更改此代码段

 int j;
 for(i=0; i<x-1; i++)
 {
     if(array[i]>=array[i+1])
        j=array[i];
     else j=array[i+1];
 }
 printf("%d", &j);
              ^^^

以下方式

 int j = array[0];
 for ( i = 1; i < x; i++ )
 {
     if ( j < array[i] ) j = array[i]; 
 }
 printf( "%d", j );
              ^^^

原始代码段不搜索最大元素(考虑fpr示例包含以下元素{ 5, 4, 3, 2, 1 }的数组),并且错误地指定了printf调用的第二个参数。

考虑到名称x不适合数组中的元素数量。最好使用名称n

同样根据C标准,没有参数的函数main应声明为

int main( void )

答案 2 :(得分:0)

做这样的事情

 void main()
 {
     int x;
     scanf("%d", &x);
     int array[x];
     int i;
     for(i=0; i<x; i++)
     {
         scanf("%d", &array[i]);
     }
     int j = a[0];
     for(i=1; i<x; i++)
     {
         if(array[i] > j)
            j=array[i];
     }
     printf("%d", j);
 }

您正在比较数组的两个连续元素

array[i] >= array[i+1]

这不是正确的逻辑。您应该将数组的每个元素与已找到的最大数字进行比较(如存储在j中)

array[i] > j

此外,您无法将变量的地址传递给printf()函数。它应该是这样的

printf("%d", j);

答案 3 :(得分:0)

int max(int *a, size_t size)
{
  int max = INT_MIN;
  size_t i = 0;
  while(i < size) 
  {
    if(a[i] > max) max = a[i] ;
    i++;
  }
  return max;
}