2016-08-26 7 views
0

私はCでアルゴリズムのいくつかの例を含んでいる "Cracking the Coding Interview"という本を読んでいます。これらのアルゴリズムを実装するプログラムを作って行きたいと思います。Cで配列を定義する方法

このようなアルゴリズムの1つは、 "MinとMax 1"( "ビッグ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];になります。この例の入力配列に対して、このアルゴリズムを正しく実装するにはどうすればよいですか?

+1

int配列[] = {1,3,2,5,4}; '(サイズはデータから自動的に計算されます)。そして、私が間違っていなければ、このfor(int x:array){'はC++ 11です。 –

+4

基本的なC構文を書く方法に関する質問は、SOのための良い修正ではありません - 私は良い本をつかむことをお勧めします:http://stackoverflow.com/questions/562303/the-definitive-c-book-guide-and-list –

答えて

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++では、ループは表示したのと同じように見えます。

グローバルのように配列を宣言する意味がないことを考慮してください。

次いで、それを定義することができる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. 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. minおよびmaxを変数名として使用することは、頻繁にマクロ定義として表示されるのでお勧めできません。

1

C.

  • 使用{}、ない[]、アレイの初期値を定義するためにそれを実装するためのC構文を使用。
  • INT_MINおよびINT_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); 
} 
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) 
} 

私はそれを修正することができますこれはあなたにエラーを与えるでしょう。私はそれを残して、あなた自身でこれを学ぶことができます。

関連する問題