向量内积计算,计算部分出了问题不知道如何解决

img

img


只有在两个向量相等的时候才能计算出内积,当两个向量不想等的时候只会算出向量一的平方

(1)你的代码中使用了动态数组,动态数组需要先知道变量的大小,然后再声明数组变量,也就是需要先输入n,然后再声明 int vector1[n],vector2[n];

img

(2)你当前的代码,两个向量的长度都是使用的n,无法达到你最下面的要求。如果要达到你最下面的那个要求,你需要重新输入向量2的长度,然后根据两个向量的长度是否一致来决定如何计算。
代码修改如下:

#include <iostream>
using namespace std;

int main()
{
    int n,m; int sum = 0;
    
    cout << "please enter the vector1's dimensionality" << endl;
    cin >> n;
    int vector1[n];
    cout << "please inter the vector1's every number of dimensionality" << endl;
    for (int i = 0; i < n; i++)
    {
        cin >> vector1[i];
        if (vector1[i] > 1000)
        {
            cout << "error" << endl;
            system("pause");
            exit(1);
        }
    }


    cout << "please enter the vector2's dimensionality" << endl;
    cin >> m;
    int vector2[m];
    cout << "please inter the vector2's every number of dimensionality" << endl;
    for (int i = 0; i < m; i++)
    {
        cin >> vector2[i];
        if (vector2[i] > 1000)
        {
            cout << "error" << endl;
            system("pause");
            exit(1);
        }
    }

    if (n == m) //长度一样,计算内积
    {
        for (int k = 0; k < n; k++)
            sum = sum + vector1[k] * vector2[k];
    }
    else
    {
        //长度不一样,计算向量1的平方
        for (int k = 0; k < n; k++)
            sum = sum + vector1[k] * vector1[k];
    }
    cout << "the inner product of these vectors is " << sum << endl;
    return 0;
}

向量1和向量2是否相等,没有判断。
并且不相等的情况下,计算向量1的平方。

【以下回答由 GPT 生成】

问题分析: 根据问题描述,代码中的错误在于在定义vector1和vector2时使用的是变量n,而此时n还没有被赋值,因此会导致数组的大小不确定,从而导致了计算错误。因此解决问题的关键是在读取n的值之后再定义vector1和vector2。

解决方案如下:

// 变量n的定义应该在读取输入之前
int n;
cout << "请输⼊向量的维度:" << endl;
cin >> n;

// 在读取n之后定义vector1和vector2
int vector1[n];
int vector2[n];

int sum = 0;

cout << "请输⼊向量1每个维度的数值:" << endl;
for (int i = 0; i < n; i++) {
  cin >> vector1[i];
  if (vector1[i] > 1000) {
    cout << "错误:数值超过范围!" << endl;
    system("pause");
    exit(1);
  }
}

cout << "请输⼊向量2每个维度的数值:" << endl;
for (int j = 0; j < n; j++) {
  cin >> vector2[j];
  if (vector2[j] > 1000) {
    cout << "错误:数值超过范围!" << endl;
    system("pause");
    exit(1);
  }
}

注意:在C++中,变长数组是C99的特性,不是标准C++的特性。在一些编译器中可能支持变长数组,但是更推荐使用动态分配内存(例如使用std::vector<int>)来代替变长数组的使用,以避免访问越界的问题。

如果还有问题,请随时向我提问。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632