如何在C中定义数组

时间:2016-08-26 15:31:33

标签: c arrays algorithm

我正在阅读这本书" Cracking the Coding Interview"其中包含C中几个算法的例子。我希望制作实现这些算法的程序,并在我继续运行时运行它们。

一种这样的算法是" Min和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;
}

我试图围绕这个&#39;编写一个程序。如下:

#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];。如何为此示例输入数组正确实现此算法?

4 个答案:

答案 0 :(得分:4)

您的意思是以下

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

答案 1 :(得分:1)

一些问题:

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

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

  3. 不鼓励使用imin作为变量名称,因为它们经常显示为宏定义。

答案 2 :(得分:1)

使用C语法在C。

中实现它
  • 使用{}而不是[]来定义数组的初始值。
  • 使用INT_MIN中的INT_MAXlimits.h来使用int的最小值和最大值。
  • 请勿在{{1​​}}之后放置冒号。
  • C中不支持
  • int main(void)。使用其中一种受支持的循环形式。
  • 每个陈述后都需要分号。

以下是C99中的实现:

for (int x : array)

答案 3 :(得分:1)

数组在{}而不是[]

内初始化

看起来你是从错误的地方复制它,或者你是一个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)
}

如果你想我可以解决它,这仍然会给你错误。我把它留下来,以便你可以自己学习。