Crie uma função que receba como parâmetros dois vetores de inteiros: x1 e x2 e o valor n que representa o tamanho de ambos os vetores. A função deverá retornar um ponteiro para um terceiro vetor,x3x3, alocado dinamicamente, contendo a soma de x1x1 e x2x2.
int* soma(int * x1, int * x2, int n);
entrada : 8
1 2 3 4 5 6 7 8
1 2 34 5 8 1 4 9
saida:
2 4 37 9 13 7 11 17
//Segue o código
#include “stdio.h”
#include “stdlib.h”
int *soma(int *x1, int *x2, int n){
int i;
int *sum = (int *) malloc(n * sizeof(int));
if(sum == NULL){
printf(“Memoria insuficiente\n”);
exit(1);
}
for(i = 0; i < n; i++){
sum[i] += x1[i] + x2[i];
}
return sum;
}
int main(){
int i, n;
scanf("%d", &n);
int x1[n];
int x2[n];
for(i = 0; i < n; i++){
scanf("%d", &x1[i]);
}
for(i = 0; i < n; i++){
scanf("%d", &x2[i]);
}
int *resp = soma(x1, x2, n);
for(i = 0; i < n; i++){
printf("%d ", resp);
}
free(resp);
return 0;
}
sum[i] = x1[i] + b[i]
e nao +=
ta imprimindo lixo
$ ./main
8
1 2 3 4 5 6 7 8
1 2 34 5 8 1 4 9
25228320 25228320 25228320 25228320 25228320 25228320 25228320 25228320
O erro está nesta linha:
printf("%d ", resp);
O correto, já que vc quer imprimir indice por indice, seria:
printf("%d ", resp[i]);
Observações extras:
Quando for incluir cabeçalhos da biblioteca padrão, ao invés de usar aspas, por uma questão de convenção, procure fazer assim (com os sinais de maior e menor):
#include <stdio.h>
#include <stdlib.h>
Quando usar o for
, procure declarar a variável de controle dentro dele, assim:
for (int i = 0; i < length; i++) { /* ... */ }
Isso pode evitar bugs chatos e é um recurso que está disponivel a partir de C99.
Sim, eu li o codigo linha por linha e vi o erro, mas obrigado!
Eu usava < e >, mas meu professor usa " " e eu passe usar assim tbm, não faz diferença.
Os professores do meu curso utilizam o Codebench para listas de exercício e provas e declarar o i, dentro do for, dá um erro de compilação, por isso declaro fora do for.