【问题标题】:Program for dot product of 2 vectors in C [closed]C中2个向量的点积程序[关闭]
【发布时间】:2021-03-03 15:38:39
【问题描述】:

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

#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);
}

【问题讨论】:

  • "以下代码没有错误" -- 嗯。当你定义int vect_A[n] 时,n 的值是多少?当您说scanf("%d", &amp;vect_A[i-1]) 时,i 的值是多少?每个向量扫描多少个值?
  • 开启所有编译器警告。 godbolt.org/z/zsvzjo
  • scanf("%d", &amp;n) 不能向后工作。 C 不是一种声明性语言。它根据语句流运行。

标签: arrays c for-loop


【解决方案1】:

当您声明了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);
}

【讨论】:

    【解决方案2】:

    n 在声明向量时未定义。当要求用户输入向量时,i 也未定义。我猜你的本意是这样的:

    int main(){
    
      int i, n;
      printf("Put down the size of vectors below\n");
      scanf("%d", &n);
      
      int vect_A[n], vect_B[n];
      int result = 0;
        
        for ( i = 0; i < n; i++)
        {
          printf("Write vector A:\t");
          scanf("%d", &vect_A[i]);
        }
    
        for ( i = 0; i < n; i++)
        {
          printf("Write vector B:\t");
          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);
    }
    

    【讨论】:

    • 不是未定义而是未初始化
    猜你喜欢
    • 1970-01-01
    • 2012-02-27
    • 2021-12-15
    • 1970-01-01
    • 1970-01-01
    • 2017-04-01
    • 2011-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多