对数组使用算术

Using arithmetic with arrays

提问人:ProgrammingNoob 提问时间:12/13/2017 最后编辑:Vlad from MoscowProgrammingNoob 更新时间:12/13/2017 访问量:3668

问:

  1. 如果

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

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

我的程序中有一些错误。我将不胜感激,因为我是初学者。错误告诉我:

在函数 'void function(int*,int*)' cpp 26 中:预期错误 ';' 在 '}'
令牌
cpp 29 之前:错误 ;赋值左操作数所需的值

#include <iostream> 

using namespace std; 

const int n = 5;

void function(int array[n],int array2[n]);

int main(){

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

    function(array, array2);

    return 0;
}

void function(int array[n], int array2[n]){

    int multiple;

    for(int i=0; i <=5, i++)
    {
        (array[i]*array2[i]) + (array[i+1]*array2[i+1]) = multiple;
    }

    cout << multiple << endl;
}
C++ 数组指 针赋 值运算符

评论

1赞 user6386155 12/13/2017
初始化倍数为零;然后是多个 += (..)
0赞 stark 12/13/2017
不要调用你的函数 。称其为有意义的名称,例如 .functionDotProduct
0赞 12/13/2017
i <=5您正在越界访问数组。

答:

1赞 user4880283 12/13/2017 #1

语法错误是你以这种方式使用循环的地方:for

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

请改用以下方法:

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

评论

0赞 ProgrammingNoob 12/13/2017
谢谢,我刚刚纠正了这个问题,我仍然对 void 函数 (int* int*) 和 29 左值作为赋值的左操作数有问题
0赞 Remy Lebeau 12/13/2017
@ProgrammingNoob:那是因为你的分配是向后的multiple
0赞 12/13/2017
是的,这也是问题所在。
1赞 Remy Lebeau 12/13/2017 #2

您的循环格式不正确。您需要使用 代替 ,使用 代替 ,并使用 代替 。for<<=n5;,

你的分配是向后的。运算符右侧的值分配给 左侧的变量。您正在尝试将 的值(未初始化)分配给没有自己的显式变量的动态计算值。您应该改为分配计算值。multiple==multiplemultiple

此外,您没有遵循指令的“此数字 [数组维度] 应作为函数的参数传递”要求。

试试这个:

#include <iostream>   
using namespace std; 

const int n = 5;

void function(const int *array1, const int *array2, const int size);

int main()
{
    int array1[n] = { 5,  3, -4, 2, 8};
    int array2[n] = {-7, -9,  5, 2, 9};

    function(array1, array2, n);

    return 0;
}

void function(const int *array1, const int *array2, const int size)
{
    int multiple = 0;

    for(int i = 0; i < size; i++)
    {
        multiple += (array1[i] * array2[i]);
    }

    cout << multiple << endl;
}
1赞 Vlad from Moscow 12/13/2017 #3

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

此函数声明

void function(int array[n],int array2[n]);

不包括指定数组维度的参数。

上述声明等同于

void function(int *array,int *array2);

因为按 value 传递的数组被隐式转换为指向其第一个元素的指针。

此 for 语句中存在拼写错误和错误

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

应有

for ( int i=0; i < n; i++)

变量multiple

int multiple;

未初始化,并且此赋值

(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 };

呈直角。试试吧。

1赞 user2672107 12/13/2017 #4

替代方案:尝试 C++ 方式。使用知道其长度的 std::array。使用标准库提供的算法,如 std::inner_product。

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