提问人:ProgrammingNoob 提问时间:12/13/2017 最后编辑:Vlad from MoscowProgrammingNoob 更新时间:12/13/2017 访问量:3668
对数组使用算术
Using arithmetic with arrays
问:
如果
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;
}
答:
语法错误是你以这种方式使用循环的地方:for
for(int i=0;i<=5,i++)
请改用以下方法:
for(int i=0; i <= 5; i++)
评论
multiple
您的循环格式不正确。您需要使用 代替 ,使用 代替 ,并使用 代替 。for
<
<=
n
5
;
,
你的分配是向后的。运算符右侧的值分配给 左侧的变量。您正在尝试将 的值(未初始化)分配给没有自己的显式变量的动态计算值。您应该改为分配计算值。multiple
=
=
multiple
multiple
此外,您没有遵循指令的“此数字 [数组维度] 应作为函数的参数传递”要求。
试试这个:
#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;
}
该函数可以假设向量具有相同的维度 (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 };
呈直角。试试吧。
替代方案:尝试 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";
}
评论
function
DotProduct
i <=5
您正在越界访问数组。