#include #include #define print_vec(vec) for (int i = 0; i < (vec)->size; ++i) { printf("%d, ", (vec)->data[i]); } printf("\n") struct vec { int size; int *data; }; struct vec* new(unsigned int n); struct vec* add(const struct vec *v, const struct vec *w); struct vec* smul(double s, const struct vec *v); int main(void) { struct vec *v = new(4); v->data[0] = 1; v->data[1] = 2; v->data[2] = 3; v->data[3] = 4; print_vec(v); struct vec *w = new(4); w->data[0] = 5; w->data[1] = 6; w->data[2] = 7; w->data[3] = 8; print_vec(w); struct vec *added = add(v, w); print_vec(added); struct vec *multiplied = smul(3, v); print_vec(multiplied); } struct vec* new(unsigned int n){ struct vec* ret = malloc(sizeof(struct vec)); ret->size = n; ret->data = malloc(sizeof(int) * n); return ret; } struct vec* add(const struct vec *v, const struct vec *w){ if(v->size != w->size) return NULL; struct vec *ret = new(v->size); for (int i = 0; i < v->size; ++i) { ret->data[i] = v->data[i] + w->data[i]; } return ret; } struct vec* smul(double s, const struct vec *v){ struct vec *ret = new(v->size); for (int i = 0; i < v->size; ++i) { ret->data[i] = v->data[i] * s; } return ret; }