C++ 对数组使用算术

C++ 对数组使用算术,c++,arrays,pointers,assignment-operator,C++,Arrays,Pointers,Assignment Operator,两个量u和v称为直角,如果 nuv=u1v1+u2v2+u3v3+u4v4+unvn=0 编写一个函数,计算u和v是否成直角。如果愿意,可以使用数组。该函数可以假设向量具有相同的维数(例如,n),但该数字应作为参数传递给该函数 我的程序有一些错误。我是初学者,非常感谢你的帮助。错误告诉我: 在函数“void function(int*,int*)”中, cpp 26:应为错误“;”在“}”标记之前 cpp 29:错误;作为赋值的左操作数所需的值 (array[i]*array2[i]) + (a

两个量u和v称为直角,如果

nuv=u1v1+u2v2+u3v3+u4v4+unvn=0

编写一个函数,计算u和v是否成直角。如果愿意,可以使用数组。该函数可以假设向量具有相同的维数(例如,n),但该数字应作为参数传递给该函数

我的程序有一些错误。我是初学者,非常感谢你的帮助。错误告诉我:

在函数“void function(int*,int*)”中,
cpp 26:应为错误“;”在“}”标记之前
cpp 29:错误;作为赋值的左操作数所需的值

(array[i]*array2[i]) + (array[i+1]*array2[i+1]) = multiple;
#包括
使用名称空间std;
常数int n=5;
空洞函数(int-array[n],int-array2[n]);
int main(){
int数组[n]={5,3,-4,2,8};
int-array2[n]={-7,-9,5,2,9};
函数(数组,array2);
返回0;
}
void函数(int数组[n],int数组2[n]){
整数倍;

for(int i=0;i语法错误是您以这种方式使用
for
循环的地方:

for(int i=0;i<=5,i++)

for(int i=0;i语法错误是您以这种方式使用
for
循环的地方:

for(int i=0;i<=5,i++)

for(int i=0;i您的
for
循环格式不正确。您需要使用
您的
for
循环格式不正确。您需要使用

该函数可以假设向量具有相同的维数(n,
例如),但该数字应作为参数传递给
功能

此函数声明

void function(int array[n],int array2[n]);
不包括指定数组维度的参数

上述声明等同于

void function(int *array,int *array2);
因为通过值传递的数组隐式转换为指向其第一个元素的指针

这个for语句中有一个输入错误和一个bug

for(int i=0; i <=5, i++)
             ^^^^^^
未初始化,此分配无效

(array[i]*array2[i]) + (array[i+1]*array2[i+1]) = multiple;
没有道理,与病情没有任何共同之处

nuv = u1v1 + u2v2 + u3v3 + u4v4 +………… + unvn = 0
看来你的意思是

#include <iostream>

bool function( const int array[], const int array2[], size_t n ) 
{

    long long int product = 0;

    for ( size_t i = 0; i < n; i++)
    {
        product += array[i] * array2[i];
    }

    return product == 0;
}

int main()
{
    const size_t N = 5;
    int array[N]  = { 5, 3 , -4, 2, 8 };
    int array2[N] = { -7, -9, 5, 2, 9 };

    std::cout << "array and array2 are "
        << (function(array, array2, N) ? "" : "not ")
        << "at right angles"
        << std::endl;

    return 0;
}
不是直角

但是这些阵列

    int array[N]  = { 5, 3 , -4, 2, 8 };
    int array2[N] = { -7, -9, 5, 2, 9 };
    int array[N]  = { 5, 3 , -4, 1, 9 };
    int array2[N] = { -7, -9, 5, 1, 9 };
它们成直角,试试看

该函数可以假设向量具有相同的维数(n, 例如),但该数字应作为参数传递给 功能

此函数声明

void function(int array[n],int array2[n]);
不包括指定数组维度的参数

上述声明等同于

void function(int *array,int *array2);
因为通过值传递的数组隐式转换为指向其第一个元素的指针

这个for语句中有一个输入错误和一个bug

for(int i=0; i <=5, i++)
             ^^^^^^
未初始化,此分配无效

(array[i]*array2[i]) + (array[i+1]*array2[i+1]) = multiple;
没有道理,与病情没有任何共同之处

nuv = u1v1 + u2v2 + u3v3 + u4v4 +………… + unvn = 0
看来你的意思是

#include <iostream>

bool function( const int array[], const int array2[], size_t n ) 
{

    long long int product = 0;

    for ( size_t i = 0; i < n; i++)
    {
        product += array[i] * array2[i];
    }

    return product == 0;
}

int main()
{
    const size_t N = 5;
    int array[N]  = { 5, 3 , -4, 2, 8 };
    int array2[N] = { -7, -9, 5, 2, 9 };

    std::cout << "array and array2 are "
        << (function(array, array2, N) ? "" : "not ")
        << "at right angles"
        << std::endl;

    return 0;
}
不是直角

但是这些阵列

    int array[N]  = { 5, 3 , -4, 2, 8 };
    int array2[N] = { -7, -9, 5, 2, 9 };
    int array[N]  = { 5, 3 , -4, 1, 9 };
    int array2[N] = { -7, -9, 5, 1, 9 };

是直角。试试.< /P> < P>备选:试试C++方式。使用STD::知道长度的数组。使用标准库提供的算法,如STD::

#include <iostream>
#include <algorithm>
#include <array>
#include <numeric>

int main()
{
  using arr_t = std::array<int,5>;

  arr_t arr1 = {5, 3 , -4, 2, 8};
  arr_t arr2 = {-7, -9, 5, 2, 9};

  int mult = std::inner_product( begin(arr1), end(arr1), begin(arr2), 0,
                 std::plus<>(), std::multiplies<>() );

  std::cerr << mult << "\n";
}
#包括
#包括
#包括
#包括
int main()
{
使用arr_t=std::array;
arr_t arr1={5,3,-4,2,8};
arr_t arr2={-7,-9,5,2,9};
int mult=std::内部产品(开始(arr1)、结束(arr1)、开始(arr2)、0、,
std::plus(),std::multiplies());

STR::CURR

备选方案:尝试C++方式。使用STD::知道长度的数组。使用标准库提供的算法,如STD::

#include <iostream>
#include <algorithm>
#include <array>
#include <numeric>

int main()
{
  using arr_t = std::array<int,5>;

  arr_t arr1 = {5, 3 , -4, 2, 8};
  arr_t arr2 = {-7, -9, 5, 2, 9};

  int mult = std::inner_product( begin(arr1), end(arr1), begin(arr2), 0,
                 std::plus<>(), std::multiplies<>() );

  std::cerr << mult << "\n";
}
#包括
#包括
#包括
#包括
int main()
{
使用arr_UT=std::array;
arr_t arr1={5,3,-4,2,8};
arr_t arr2={-7,-9,5,2,9};
int mult=std::内部产品(开始(arr1)、结束(arr1)、开始(arr2)、0、,
std::plus(),std::multiplies());

cerr将倍数初始化为零;然后将倍数+=(..)不要调用你的函数
函数
。把它叫做一个有意义的名字,比如
DotProduct
我将倍数初始化为零;然后将倍数+=(..)不要调用函数
function
。请将其称为有意义的名称,如
DotProduct
谢谢,我刚刚纠正了这个问题,我仍然对void函数(int*int*)有问题的左操作数需要29个左值assignment@ProgrammingNoob:这是因为您对多个
的赋值是反向的,这也是问题所在。谢谢我刚刚纠正了这一点,我仍然对void函数(int*int*)有问题的左操作数需要29个左值assignment@ProgrammingNoob:这是因为您对多个
的赋值是反向的,这也是问题所在。