首页 > 解决方案 > C中2个向量的点积程序

问题描述

下面的代码没有错误,但没有运行。帮我找出错误。可以做些什么来运行代码?

#include<stdio.h>


int main(){
    int i, n;
    int vect_A[n], vect_B[n];
    int result = 0;
    
    printf("Put down the size of vectors below\n");
    scanf("%d", &n);

    printf("Write vector A:\t");
    scanf("%d", &vect_A[i-1]);

    printf("Write vector B:\t");
    scanf("%d", &vect_B[i-1]);

    for ( i = 0; i < n; i++)
    {
        result += vect_A[i]*vect_B[i];
    }
    printf("The inner product of these two vectors is %d\n", result);
}

标签: arrayscfor-loop

解决方案


int i, n声明后,两个变量都没有初始化。C/C++ 不会自动将大多数变量初始化为一个值。因此,当编译器为变量分配内存位置时,该变量的“初始化”值就是之前发生在该内存位置的任何值。这是一个垃圾值。更新向量的大小后,它不会延续到您声明的数组大小。您可以使用 sizeof() 来检查这一点(即sizeof(vect_A) / sizeof(vect_A[0])获取数组中的元素数量)。

另一件事是您只需将一个元素填充到向量中。在用户输入 n 的值后,您可以使用 for 循环在数组中添加项。

这对我有用:

#include<stdio.h>


int main(){
    int i, n;
    int result = 0;

    printf("Put down the size of vectors below\n");
    scanf("%d", &n);

    int vect_A[n], vect_B[n];

    printf("Write vector A:\t");
    for(i = 0; i < n; ++i)
    {
      printf("Term %d = ", i);
      scanf("%d", &vect_A[i]);
    }

    printf("Write vector B:\t");
    for(i = 0; i < n; ++i)
    {
      printf("Term %d = ", i);
      scanf("%d", &vect_B[i]);
    }

    for ( i = 0; i < n; i++)
    {
        result += vect_A[i]*vect_B[i];
    }
        printf("The inner product of these two vectors is %d\n", result);
}

推荐阅读