1

我想创建一个小程序,对向量进行加、减、乘和叉积。

因此,我想让用户输入 - 向量的数量 - 所述向量的维度 - 他到底想对向量做什么(上述功能之一)

由于我对编程很陌生,也许我还没有找到正确的来源,在这种情况下,我将不胜感激在正确方向上的提示(尤其是要准确搜索的内容,因为我不是母语人士)

我的问题:

我不知道如何对 sum 函数进行编程,以便它始终对 n 个向量求和(n 是用户输入的向量数量)

我对其余功能有一个粗略的了解,所以也许我不会再用这个程序打扰你了,但这个总和问题对我来说确实是个问题。

我确定答案就在附近,但我似乎无法找到它。

提前非常感谢:)

4

3 回答 3

0

您使用的是直接 C 还是 C++?

由于您想要动态内存分配,我真的推荐 C++,因为您可以将std::vector其用于您的数组,这非常简单。C 方法远没有那么简单。

http://www.codeguru.com/cpp/cpp/cpp_mfc/stl/article.php/c4027/C-Tutorial-A-Beginners-Guide-to-stdvector-Part-1.htm

于 2013-04-19T20:38:53.123 回答
0

这个问题解释了如何 malloc 二维数组使用 malloc 分配具有不同行长的多维数组基本上你首先分配一个 n int 指针数组然后你循环遍历该数组并执行array[i] = (int*)malloc(sizeof(int) * lenght))

把它变成更多一步一步的方法;

1) 分配一个 int 指针数组 -int** array = malloc(sizeof(int*) * n); 您使用 ** 因为您的第一个指针指向数组的开头并且数组的类型为 int*,这些 int 指针中的每一个都将指向另一个数组。

2) 遍历数组 -for (i = 0; i < n; i++) 在 C 中没有简单的方法来 malloc 二维数组。您必须逐个构建每一行。

3)在循环内分配水平数组 -array[i] = (int*)malloc(sizeof(int) * length)

我链接到的问题包括一些检查以确保分配成功。我不知道这有多么必要,但它不会受到伤害。

于 2013-04-19T20:40:49.410 回答
0

简单向量

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

typedef int Type;

typedef struct vector {
    size_t size;
    size_t capacity;
    Type *array;
} Vector;

Vector *vec_make(){
    Vector *v;
    v = (Vector*)malloc(sizeof(Vector));
    v->size = 0;
    v->capacity=16;
    v->array=(Type*)realloc(NULL, sizeof(Type)*(v->capacity += 16));
    return v;
}

void vec_pushback(Vector *v, Type value){
    v->array[v->size] = value;
    if(++v->size == v->capacity)
        v->array=(Type*)realloc(v->array, sizeof(Type)*(v->capacity += 16));
}

size_t vec_size(Vector *v){
    return v->size;
}

Type *vec_getArray(Vector *v){
    return v->array;
}

void vec_free(Vector *v){
    free(v->array);
    free(v);
}

int main(){
    int n=5;//user input
    Vector *a, *b, *c;
    int i, sum=0, size;
    int *ap, *bp, *cp;
    a = vec_make(); b = vec_make(); c = vec_make();
    for (i=0; i<n; ++i) {
        vec_pushback(a, i+1);//1,2,3,4,5
    }
    vec_pushback(b, 2);
    vec_pushback(b, 4);
    vec_pushback(b, 5);
    vec_pushback(b, 6);
    vec_pushback(b, 10);
    ap=vec_getArray(a);bp=vec_getArray(b);cp=vec_getArray(c);
    for(i=0;i<a->size;++i){
        sum+=ap[i];
    }
    printf("sum(va)=%d\n", sum);
    size=vec_size(b);
    for(i=0;i<size;++i)
        vec_pushback(c, ap[i]+bp[i]);
    printf("va + vb = vc(");
    for(i=0;i<size;++i){
        printf("%d", cp[i]);
        if(i<size-1)
            printf(",");
        else
            printf(")\n");
    }
    vec_free(a);vec_free(b);vec_free(c);
    return 0;
}
于 2013-04-19T21:21:37.910 回答