Сумма двух массивов - PullRequest
       2

Сумма двух массивов

1 голос
/ 12 апреля 2011

В упражнении говорится: «Создайте функцию с параметрами два массива int и k, который является их размером. Функция должна возвращать другой массив (размер k), где каждый его элемент является суммой двух массивов одной и той же позиции. что я написал, но вылетает. Нужно ли делать это с помощью указателей?

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

void sumarray(int k,int A[k],int B[k]){
   int sum[k],i;
   for(i=0;i<k;i++){                
   sum[i]=A[i]+B[i];
   printf("sum[%d]=%d\n",i,sum[i]);}

 }



main(){
   int i,g,a[g],b[g];
   printf("Give size of both arrays: ");
   scanf("%d",&g);
   for(i=0;i<g;i++){
      a[i]=rand();
      b[i]=rand();
   }
   sumarray(g,a,b);
   system("pause");
}

Пример: Если у меня есть A = {1,2,3,4} и B = {4,3,2,1}, программа вернет C = {5,5,5,5).

Ответы [ 5 ]

5 голосов
/ 12 апреля 2011

Это:

int i,g,a[g],b[g];

вызывает поведение undefined .Значение g при инициализации не определено, поэтому длина a и b будет неопределенной.

Возможно, вы захотите что-то вроде:

int i, g;
int *a;
int *b;  // Note: recommend declaring on separate lines, to avoid issues
scanf("%d", &g);
a = malloc(sizeof(*a) * g);
b = malloc(sizeof(*b) * g);
...
free(a);
free(b);
1 голос
/ 12 апреля 2011

Невозможно сначала сделать a[g] при динамическом получении g.

Ваши первые строки в main должны быть:

int i,g;
int *a,*b;
printf("Give size of both arrays: ");
scanf("%d",&g);
a = (int *)malloc(g*sizeof(int));
b = (int *)malloc(g*sizeof(int));
0 голосов
/ 12 апреля 2011

измените сигнатуру сводки функции (часть определения объявления) на это и попробуйте:

void sumarray(int k,int* A,int* B){

0 голосов
/ 12 апреля 2011

Одной из проблем является то, что вы пытались объявить динамически измеренные массивы в стеке (например, a[g]). Вам необходимо объявить указатели для каждого массива, а затем динамически распределить массив переменного размера, как только вы прочитаете значение g.

0 голосов
/ 12 апреля 2011
int sum[k] ;

k - переменная, но размер массива должен быть постоянным.

Функция должна возвращать другой массив (размер k) ...

Но написанная вами функция возвращает void, что явно неверно.

Нужно ли делать это с указателями?

Да.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...