在C编程

时间:2016-11-29 01:37:22

标签: c arrays

我正在尝试添加两个长度不同的数组(arr1[6]arr2[9])。到目前为止,我能够编写的代码如下>>

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

}

当我输入元素的数量和两个数组的元素时,例如:

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

我得到以下结果:

10
14
4
11
2
14
7864429
50397191
3

结果与预期结果略有不同

10 14 4 11 2 14 8 5 3

有人可以告诉我我做错了什么吗?

  

P.S。如果有任何拼写错误或语法错误,我会道歉。

6 个答案:

答案 0 :(得分:1)

如果填充超出其限制的数组,则会出错。就像你的arr1具有存储6个元素的容量一样,但你要将arr1 [6]中的值填入arr1 [8]。您可能会收到损坏错误。对于你的逻辑,如果n1小于n2,那么只运行循环直到n1。因此,arr2和arr1将自行增加,直到循环达到n1,并且arr2的剩余部分将保持不变。所以你不会得到奇怪的输出。

答案 1 :(得分:0)

在你的例子中你说:

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

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

一旦i超过6(n2的值),它就会尝试访问arr2中不存在的元素;因此它只是返回随机数,而不像你期望的那样。

将所有元素初始化为0之前或者查看向量。

答案 2 :(得分:0)

它正在访问不存在的元素。

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

答案 3 :(得分:0)

这是由于垃圾值。当您尝试访问数组值超出范围时会发生这种情况,否则某些编译器会给出索引超出范围的错误。

解决方案是, 将两个数组中的各个元素相加,直到较小数组的长度为止。保持较大数组的其余元素不变。

答案 4 :(得分:0)

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int n1,n2,arr1[100]={0},arr2[100]={0},i,c[100];

    printf("Size of Array 1 \n");
    scanf(" %d",&n1);


        printf("Size of array 2 \n");
            scanf(" %d",&n2);


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

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


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

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


   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];

   }

   printf("Array after sum\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]);
   }
return 0;
}

答案 5 :(得分:-2)

   #include<stdio.h>
   #include<conio.h>
 int main()
   {
          int a1[8],a2[5],a3[13],i,j,num;

          printf("\nEnter 1st array value:");
          for(i=0;i<8;i++)
          {
             printf("\nEnter 1st Array Element:");
             scanf("%d",&a1[i]);
          }

          printf("\n\nEnter 2nd array value:");
          for(i=0;i<5;i++)
          {
             printf("\nEnter 2nd Array Element:");
             scanf("%d",&a2[i]);
          }

          printf("\n1st Array :");
          for(i=0;i<8;i++)
          printf("  %d",a1[i]);

          printf("\n2nd Array :");
          for(i=0;i<5;i++)
          printf("  %d",a2[i]);

          for(i=0;i<13;i++)
          {
                  if(i<8)
                         a3[i] = a1[i];
                  else
                         a3[i] = a2[i-8];
          }

          printf("\nAfter Marge :");
          for(i=0;i<13;i++)
          printf("  %d",a3[i]);

          getch();
          return 0;
}