C++ 用平均值替换数组中的元素
我对课程中的练习有一个问题: 编写一个以实数数组为参数的程序,用该平均值替换小于第一个和最后一个元素平均值的每个元素。这是我的代码:C++ 用平均值替换数组中的元素,c++,arrays,replace,average,C++,Arrays,Replace,Average,我对课程中的练习有一个问题: 编写一个以实数数组为参数的程序,用该平均值替换小于第一个和最后一个元素平均值的每个元素。这是我的代码: #include <iostream> #include <string> using namespace std; void replaverage(int arr[], int n) { for (int i; i < 6; i++) { cout << "Enter the numbers"
#include <iostream>
#include <string>
using namespace std;
void replaverage(int arr[], int n)
{
for (int i; i < 6; i++) {
cout << "Enter the numbers" << endl;
cin >> arr[i];
}
int f = arr[0];
int l = arr[n - 1];
double av = f + l / 2;
for (int i; i < n; i++) {
if (arr[i] < av) {
arr[i] = av;
}
}
}
int main()
{
int n;
int arr[n];
replaverage(arr, n);
cout << arr << " " << endl;
return 0;
}
#包括
#包括
使用名称空间std;
无效平均值(整数arr[],整数n)
{
for(int i;i<6;i++){
无法到达[i];
}
int f=arr[0];
int l=arr[n-1];
双av=f+l/2;
for(int i;iarr[i];
你打印地址的原因是因为你的计算出的平均值是错误的。它应该是(f+l)/2。否则它会做l/2+f…你的循环没有初始化i,所以它应该是(int i=0;…哦i undrestand。谢谢:)“代码正在工作”不,不是这样。这个代码调用未定义的行为。首先,C++标准不支持可变长度本机数组(即<代码> ARR < /COD>在<代码>主< /代码>)。即使您的工具链确实扩展了支持,它仍然是错误的,因为n
的值必须在可变长度数组声明之前确定,事实并非如此。据我所见,此代码中首先不需要VLA。6
的硬编码(函数中的值计数)表明一个简单的nativeint-arr[6]
就足够了。如果您需要动态,请使用std::vector
@Bartek,如果回答了您的问题,请随意接受答案。这将帮助其他人看到相应的答案。只是提醒一下:不明白为什么#include
是必要的。此外,使用命名空间std;
也不正确不推荐使用VLA而不是std::vector
,这是一种很好的方法(见上面的@WhozCraig注释).无论如何,这是有目的的,但仍然不是最好的方法。@woz同意。但是,假设这就是他们在这一级别的课堂上所教授的内容。通常他们在以后才会解释这些内容。@OmidCompSCI明白了你的意思,但这并不意味着我们不应该把它作为一个机会来解释新内容的一些额外功能我并不是想成为这里的“聪明的a**”,只是指出总有学习和提高的空间:)@woz,完全同意!
#include <iostream>
#include <string>
using namespace std;
void replaverage(int arr[], int n)
{
for (int i = 0; i < n; i++) {
cout << "Enter the number: ";
cin >> arr[i];
cout << endl;
}
int f = arr[0];
int l = arr[n - 1];
double av = (f + l) / 2;
for (int i = 0; i < n; i++) {
if (arr[i] < av) {
arr[i] = av;
}
}
}
int main()
{
int n = 6; // Making 6 since you had it hardcoded
int arr[n];
replaverage(arr, n);
for (int i = 0; i < n; i++) {
cout << arr[i] << endl;
}
return 0;
}