我给出了一个这样的任务:数组 S[j] ( =0,…,7) 至少有一个零元素。编写一个程序来计算该数组的元素之和,直到第一个值为零的元素。
数组必须是双精度的。
我已经尝试过这个。但我得到了 0;
/* S[j] = ( =0,…,7) massivda bittagina bo‘lsa ham nolga teng elementi mavjud.
Ushbu massivning qiymati nolga teng bo‘lgan birinchi elementgacha bo‘lgan
elementlarning yig‘indisini hisoblash dasturini tuzing. Boshlang‘ich
ma’lumotlar: 1, 17, 2, 4, -5, 0, 7, 8. */
#include <iostream>
using namespace std;
int main()
{
int j;
cout << "j:"; cin >>j;
double S[j] = {};
int P;
for (int i = 0; i >= j-1; i++)
{
cout << "S[" << i << "]:"; cin >> S[i];
}
for (int i = 0; i >= j; i++)
{
if (S[i] == 0) break;
else P += S[i];
}
cout << P;
return 0;
}
像这样的变长数组
double S[j] = {};
其中
j
不是编译时常量表达式,不是标准 C++ 功能。
如果你想处理一个数组,那么你需要像这样动态分配它
double *S = new int[j];
在程序结束时,您需要像这样释放数组
delete [] S;
或使用标准容器
std::vector<double>
。
两个 for 循环由于其条件而被跳过
for (int i = 0; i >= j-1; i++)
//..
for (int i = 0; i >= j; i++)
如果
j
至少大于1
,因为0
不能大于任何正数。
循环应该看起来像
for (int i = 0; i < j; i++)
和
for (int i = 0; i < j and S[i] != 0; i++)
变量
P
必须初始化为零
int P = 0;
有几个问题。
错误是:
vector
);P
未初始化。建议是:
不要以大写字母开头变量标识符,更喜欢小写字母(强烈推荐);
更喜欢使用有意义的名称,(
sum
优于P
,array
优于S
);
如果可能的话,组织代码,以便通过靠近在一起的指令进行计算(在计算之前初始化/声明
sum
);
更喜欢重要的消息(
"How many doubles you need?"
优于"j:"
)
不喜欢使用
using namespace std
。
#包括 #包括
int main() { 整数j; std::cout << "How many doubles? "; std::cin >>j;
// fill an "array" with values from the input
std::vector<double> array;
for (int i = 0; i < j; i++) {
double v;
std::cout << "array[" << i << "]? ";
std::cin >> v;
array.push_back(v);
}
// sum elements up to the one that is 0
int sum=0;
for (int i = 0; i < array.size(); i++) {
if (array[i] == 0) break;
else sum += array[i];
}
std::cout << sum;
return 0;
}