我正在尝试添加两个长度不同的数组(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。如果有任何拼写错误或语法错误,我会道歉。
答案 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;
}