Modifica el siguiente código para que el tamaño del vector x
sea n
(valor introducido por el usuario).
#include <stdio.h>
#include <stdlib.h>
double sumavec(double x[], int n) {
double s=0;
int i;
for (i=0; i<n; i++)
s += x[i];
return s;
}
int main() {
int i,n;
double x[?], r, r2;
printf("Introduce el tamaño del vector: ");
scanf("%d",&n);
...
/* Inicializamos el vector x */
for (i=0; i<n; i++)
x[i]=i;
/* Llamamos a la función para sumar todos los elementos de x */
r = sumavec(x,n);
printf("r=%g\n",r);
/* Llamamos a la función para sumar los elementos de la segunda mitad de x */
r2 = sumavec(&x[n/2],n-n/2);
printf("r2=%g\n",r2);
...
return 0;
}
Solución:
Hay que declarar x
como un puntero, modificando la línea 14 así:
double *x, r, r2;
Sustituimos los puntos suspensivos de la línea 17 para reservar un bloque de memoria para el vector, guardando la dirección del bloque en el puntero x
:
sizeof(double));
x = malloc(n*if (x==NULL) {
"Error: no se pudo reservar la memoria\n");
fprintf(return -1;
}
Finalmente, sustituimos los puntos suspensivos de la línea 27, liberando el bloque de memoria apuntado por x
:
free(x);