2017-03-31 2 views
1

質問:xとyの整数値を指定すると、[x、y]の範囲内に20個のランダムな値が生成され、配列に格納されます。配列を印刷します。その中の最大の偶数番号(0から19の範囲)のインデックスを決定します。配列にそのような番号がない可能性を考慮する。すべての正の奇数の合計を計算します。 の配列値は一度しか使用できません。乱数を生成し、偶数と奇数をチェックするために、別々の関数を定義する必要があります。私が書いた何乱数配列を操作する

は:

#include <stdio.h> 

int random(int min, int max, int arr[]){ 
    int i, j = 1; 
    for(i = 0; i<20; i++){ 
     arr[i] = min + rand() % (max+1 - min);} 
    for(i = 0; i<20; i++){ 
     printf("%d. %d\n", j, arr[i]); 
     j++;} 
    return arr[20];} 

int evenodd(int arr[], int size){ 
    int i, holder, sum, index = 1; 
    holder = arr[i]; 
    for(i = 0; i<20; i++){ 
     if (holder>0){ 
      if (holder%2 == 0){ 
       sum = sum;} 
      else{ 
       sum += i;}} 
     else{ 
      sum = sum;}} 
    printf("\nThe sum of all odd positive numbers is %d.", sum); 
    for(i = 1; i<20; i++){ 
     int top = arr[0]; 
     if (arr[i]<0){ 
      if(arr[i]<top){ 
       top = arr[i]; 
       index = i;} 
      else{ 
       top = top;}} 
     else{ 
      top = top;}} 
    printf("\nThe index of the largest negative number is %d", index);} 

int main() 
{ 
    int min, max; 
    printf("Please input the minimum desired random number: "); 
    scanf("%d", &min); 
    printf("\nPlease input the maximum desired random number: "); 
    scanf("%d", &max); 
    int a[20]; 
    random(min, max, a); 
    evenodd(a, 20); 
} 

それは細かいプリントアウトしたが、正の奇数の合計が間違っているだけでなく、最大の負の数の指標です。

答えて

0

4つのもの 1)奇数の正の数の場合は、合計をゼロに初期化していません。だからあなたはそれをすべきです。 2)合計を計算するには、sum + = sum [i]でなくsum + = iで行う必要があります。

3)インデックスを1に初期化し、負の最大インデックスのインデックスを0にしませんでした。最初の要素が最小の負であれば、答えはゼロになります。今のところ、第1要素と第2要素の両方で答えが1になります。範囲を1から20にしたい場合は、プリントでi + 1を出力できます。私はあなたが-10を-20より大きいと仮定して最大の負の整数を見つけるためにも(arr [i]> top)する必要があると思います。

4)あなたの実装は3そのような数が存在しないという事実。私がやってお勧めするのは、最大の負の整数を初期化することです。 Range of values in C Int and Long 32 - 64 bits。また、インデックスを-1に設定することもできます。これを配列全体と比較し、最後にインデックスが-1の場合そのような要素が存在しないことを印刷します。また、比較している整数が偶数であるかどうかをチェックする必要があります。 2つのものが互いに独立しているので、1つのループで合計と偶数の負の整数を行うことができます

1

ループでは、負の数を見つけるときに、先頭の値をarr[0]にリセットしてループを開始するので、配列の最初の値との比較が常に行われます。おそらく、その初期化をループの外に移動したいと思うかもしれません。

+0

私はOPの(繰り返し) 'else {top = top; } 'と' sum = sum; 'コードには多くの冗長性があり、読みにくくなっています。 –

1

あなたのコードにはいくつかの問題がありますが(特に問題文に関して)変数 "holder"をforループの前に1回だけ初期化するからです。また、配列arrのインデックスとして、初期化されていない変数「i」を使用しています。多くはここで間違って行くことができます!

ところで、適切なインデントを使用してコードを読みやすくしてください。