2016-11-29 2 views
2

長さが異なる2つの配列(arr1[6]arr2[9])を追加しようとしています。私は次のように>>これまでにされたライトすることができたコードCで長さの異なる2つの配列の合計を求めるプログラミング

#include <stdio.h> 
#include <stdlib.h> 
#define maxElements 100 

int main() 
{ 
    int n1,n2,arr1[maxElements],arr2[maxElements],i,temp,c[maxElements]; 

    // number of elements of the array 1 

    printf("How many elements will the array 1 have \n"); 
    scanf(" %d",&n1); 

    // number of elements of the array 2 

     printf("How many elements will the array 2 have \n"); 
      scanf(" %d",&n2); 

    // taking the elements of array 1 

    printf("Enter the elements of array 1\n"); 

    for(i=0;i<n1;i++) 
    { 
     scanf(" %d",&arr1[i]); 
    } 

    // taking the elements of array 2 

    printf("Enter the elements of array 2\n"); 

    for(i=0;i<n2;i++) 
    { 
     scanf(" %d",&arr2[i]); 
    } 

    // adding the elements of array 1 and array 2 

    if(n1>=n2) 
    { 
     for(i=0;i<n1;i++) 
     { 

      c[i]=arr1[i]+arr2[i]; 
     } 
    } 
    else 
    { 
     for(i=0;i<n2;i++) 
     { 
      c[i]=arr1[i]+arr2[i]; 

     } 
    } 

    //print the output 

    printf("The output of addition of 2 arrays is\n"); 

if(n1>=n2) 
    { 
     for(i=0;i<n1;i++) 
     { 
      printf("%d\n",c[i]); 
     } 
    } 
    else 
    { 
     for(i=0;i<n2;i++) 
     { 
      printf("%d\n",c[i]); 
     } 
    } 

} 

例えばIは入力要素の数と2つの配列の要素:

How many elements will the array 1 have: 
6 

How many elements will the array 2 have: 
9 

Enter the elements of array 1: 
3 5 2 7 1 8 

Enter the elements of array 2: 
7 9 2 4 1 6 8 5 3 

Iを得ます次の結果:

10 
14 
4 
11 
2 
14 
7864429 
50397191 
3 

結果が期待される結果

若干異なっています

誰かが私に間違っていることを教えてもらえますか?

P.S.スペルミスや文法エラーがある場合はお詫び申し上げます。あなたが言うあなたの例では

+0

c配列の値に定数を指定して試してみてください。 –

+0

Cで変数を宣言すると、ほとんどの場合、変数を初期化するまでは迷惑データが含まれています。配列のすべての要素を0にするには、次のように宣言します。 'int arr [5] = {};' –

+0

@RayHamel - それを実行したことは、皆さんの助けに感謝します。再度、感謝します。 – m3itself

答えて

0

i一度

if(n1>=n2) 
    { 
    for(i=0;i<n1;i++) 
    { 

     c[i]=arr1[i]+arr2[i]; 
    } 
    } 

は、存在しないarr2内の要素にアクセスしようとしている6(n2の値)の上に起こっています。したがって、あなたが期待している0とは異なり、代わりに乱数を返すだけです。

すべての要素を手前で0に初期化するか、ベクトルを見てください。

+0

または、「n1」、「n2」のうち小さい方に達したら、長い配列の値のみを使用してください。 –

+0

あなたの例では、arr1には9つの要素があります。 – jamnin

+0

あなたの例では、arr1には6つの要素があり、arr2には9つの要素があります。 arr1の7番目の要素をarr2に追加しようとすると、問題が発生します。これは、7番目の要素に値がないためです。 – jamnin

1

制限を超えて配列を塗りつぶすのは間違いです。あなたのarr1は6要素を格納する能力を持っていますが、arr1 [6]の値をarr1 [8]に書き込もうとしています。破損エラーが発生する可能性があります。あなたのロジックでは、n1がn2より小さければ、n1までループを実行します。したがって、arr2とarr1は、ループ到達n1とarr2の残りの部分が元の状態になるまでそれ自体が増加します。だからあなたは奇妙な出力を得ることはありません。

0

存在しない要素にアクセスしています。

for(i = 0 ; i < min(n1, n2); i++){ 
     c[i] = arr1[i] + arr2[i]; 
} 
関連する問題