【问题标题】:How to define an array in C如何在 C 中定义一个数组
【发布时间】:2016-08-26 15:31:32
【问题描述】:

我正在阅读“Cracking the Coding Interview”一书,其中包含 C 语言中的几个算法示例。我想编写实现这些算法的程序并在我进行的过程中运行它们。

一种这样的算法是“Min and Max 1”(来自“Big O”一章):

int min = Integer.MAX_VALUE;
int max = Integer.MIN_VALUE;
for (int x : array) {
  if (x < min) min = x;
  if (x > max) max = x;
}

我试图“围绕这个编写一个程序”,如下所示:

#include<stdio.h>

int array[5] = [1, 3, 2, 5, 4];

int min = Integer.MAX_VALUE;
int max = Integer.MIN_VALUE;

int main(void):
{
  for (int x : array) {
    if (x < min) min = x;
    if (x > max) max = x;
  }
  printf("The minimum is %i", min)
  printf("The maximum is %i", max)
}

但是,如果我尝试编译并运行它,我会得到error: expected identifier before numeric constant int array[5] = [1, 3, 2, 5, 4];。我将如何为这个示例输入数组正确实现这个算法?

【问题讨论】:

  • 它是int array[] = {1, 3, 2, 5, 4};(大小是根据您的数据自动计算的)。如果我没记错的话,这个for (int x : array) { 是 C++11。
  • 关于如何编写基本 C 语法的问题不是解决 SO 的好方法 - 我建议拿一本好书:stackoverflow.com/questions/562303/…

标签: c arrays algorithm


【解决方案1】:

你的意思是下面这个

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

#define N   5

int main( void ) 
{
    int array[N] = { 1, 3, 2, 5, 4 };

    int min = INT_MAX;
    int max = INT_MIN;

    for ( size_t i = 0; i < N; i++ )
    {
        if ( array[i] < min ) min = array[i];
        if ( max < array[i] ) max = array[i];
    }

    printf( "The minimum is %i\n", min );
    printf( "The maximum is %i\n", max );

    return 0;
}

程序输出是

The minimum is 1
The maximum is 5

至于你的程序,那么它包含根据 C 语法的无效结构。

在 C++ 中,循环看起来与您展示的相同。

#include <iostream>
#include <limits>

int main() 
{
    const size_t N = 5;
    int array[N] = { 1, 3, 2, 5, 4 };

    int min = std::numeric_limits<int>::max();
    int max = std::numeric_limits<int>::min();

    for ( int x : array )
    {
        if ( x < min ) min = x;
        if ( max < x ) max = x;
    }

    std::cout << "The minimum is " << min << std::endl;
    std::cout << "The maximum is " << max << std::endl; 

    return 0;
}

考虑到将数组声明为全局数组是没有意义的。

至于 C 中的数组定义,你可以像这样定义它

int array[5] = { 1, 3, 2, 5, 4 };

(或使用一些命名常量而不是数字 5)

或喜欢

int array[] = { 1, 3, 2, 5, 4 };

在最后一种情况下,元素的数量等于初始化器的数量。甚至你可以使用下面的初始化

int array[] = { [0] = 1, [1] = 3, [2] = 2, [3] = 5, [4] = 4 };

【讨论】:

    【解决方案2】:

    几个问题:

    1. int array[5] = [1, 3, 2, 5, 4]; 必须是int array[] = {1, 3, 2, 5, 4};

    2. 短形式 for 循环在 C 中不存在。(您是否使用 C++11 编译器来编译 C 代码?如果是这样,那么使用 .c 扩展名保存源文件可能是一种将其置于 C 模式的简单方法。)改用for (size_t i = 0; 等,并通过索引i 访问数组元素。

    3. 不鼓励使用 minmax 作为变量名,因为它们经常作为宏定义出现。

    【讨论】:

      【解决方案3】:

      使用 C 语法在 C 中实现它。

      • 使用{},而不是[],定义数组的初始值。
      • 使用INT_MININT_MAX 中的limits.h 来使用int 的最小值和最大值。
      • 不要在int main(void) 之后放置冒号。
      • for (int x : array) 在 C 中不受支持。请使用一种受支持的循环形式。
      • 每个语句后都需要分号。

      这是 C99 中的一个实现:

      #include<stdio.h>
      #include<limits.h>
      
      int array[5] = {1, 3, 2, 5, 4};
      
      int min = INT_MAX;
      int max = INT_MIN;
      
      int main(void)
      {
        for (size_t i = 0; i < sizeof(array) / sizeof(*array); i++) {
          int x = array[i];
          if (x < min) min = x;
          if (x > max) max = x;
        }
        printf("The minimum is %i", min);
        printf("The maximum is %i", max);
      }
      

      【讨论】:

        【解决方案4】:

        数组在 {} 而不是 [] 内初始化

        看起来你是从错误的地方复制的,或者你是一个 java 程序员。

        #include<stdio.h>
        
        int a[5] = {1, 3, 2, 5, 4};
        
        int min = Integer.MAX_VALUE;
        int max = Integer.MIN_VALUE;
        
        
        int main(void):
        {
        
          for (int x : array) {
            if (x < min) min = x;
            if (x > max) max = x;
          }
          printf("The minimum is %i", min)
          printf("The maximum is %i", max)
        }
        

        如果你想我可以修复它,这仍然会给你错误。我留下它是为了让你自己学习。

        【讨论】:

          猜你喜欢
          • 2018-11-01
          • 2011-10-17
          • 2016-02-17
          • 2018-11-14
          • 2012-06-02
          • 1970-01-01
          • 2012-02-05
          • 2011-02-06
          • 1970-01-01
          相关资源
          最近更新 更多