c++ “double array[var];”

gt0wga4j  于 11个月前  发布在  其他
关注(0)|答案(2)|浏览(105)

我给了一个任务,它是这样的:数组S[j](= 0,.,7)至少有一个零元素。写一个程序来计算这个数组中直到第一个零元素的元素的总和。
数组必须为double。
我试过了。但我得到了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;
 }

字符串

vxbzzdmp

vxbzzdmp1#

有几个问题。
错误是:

  • 原生数组很难管理,VLA是被禁止的。更喜欢使用一些标准容器(这里是vector);
  • P未初始化;
  • 循环控制是错误的,你必须测试一个“while”条件,同时索引小于大小(i < j而不是i >= j-1)。

建议如下:

  • 不要用大写字母开始变量标识符,首选小写字母(强烈推荐);
  • 喜欢使用有意义的名字,(sumP更好,arrayS更好);
  • 如果可能的话,组织代码,使得计算由靠近在一起的指令进行(在计算之前初始化/声明sum);
  • 优先选择重要消息("How many doubles you need?"优先于"j:"
  • 不喜欢使用using namespace std;
  • ij.

代码:

#include <iostream>
 #include <vector>

 int main() {
    using size_type = std::vector<double>::size_type;
    size_type n;
    std::cout << "How many doubles? ";
    std::cin >>n;

    // fill an "array" with values from the input
    std::vector<double> array;
    for (size_type i = 0; i < n; 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 (size_type i = 0; i < array.size(); i++) {
        if (array[i] == 0) break;
        else sum += array[i];
    }   
    std::cout << sum;
    return 0;
 }

字符串

qzwqbdag

qzwqbdag2#

像这样的可变长度数组

double S[j] = {};

字符串
其中j不是编译时常量表达式,它们不是标准C++特性。
如果你想处理一个数组,那么你需要动态地分配它,就像

double *S = new int[j];


double *S = new int[j](); // to zero-initialize elements of the array


double *S = new int[j]{}; // to zero-initialize elements of the array


在程序结束时,你需要释放数组,如

delete [] S;


或者使用标准的cintainer 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 += S[i];
}


变量P应具有double类型,并且必须初始化为零

double P = 0.0;

相关问题