如何使用cout

时间:2018-11-27 14:40:16

标签: c++ arrays

在这段代码中,我使用n(矩阵的大小)以索引1; 1(可以使用吗?)开头并在代码计算出sin(使用代码),它计算数组中正元素的数量。

我的问题是,我该如何使用cout <<来显示最终数字,而不是在每个sin值之后进行计数?

#include < iostream >
#include < conio.h >
#include < math.h >
using namespace std;
int main ()
{
    int n ;
    float f ;
    cout << "Kvadrat matriciin irembiig oruulnuu:" << endl ;  //Энэ матриц квадрат байна. Яагаад гэвэл i,j = 1,....n.
    cin >> n;
    float A [n] [n] ;
    for ( int i = 1 ; i < n + 1 ; i++)
    {
        for ( int j = 1 ; j < n + 1 ; j++)
        {
            f = j ;
            f  / = 2 ;
            A [i] [j] = float ( sin ( i + f ) ) ;
            cout << "[ " << i << "]" << "[" << j << "]" << A [i] [j] <<endl ;

        if ( A [i] [j] > 0 )
        {
            int count = 0 ;
            count + = count + i ;
        }
        }
    }



    return 0;
}

编辑:因为当我在循环中编写cout <<时,它会在计算每个正弦值后对其进行计数,但是在循环外会显示错误

EDIT2:

#include < iostream >
#include < conio.h >
#include < math.h >
using namespace std;
int main ()
{
    int n ;
    float f ;
    cout << "Kvadrat matriciin irembiig oruulnuu:" << endl ;  //Энэ матриц квадрат байна. Яагаад гэвэл i,j = 1,....n.
    cin >> n;
    float A [n] [n] ;
    for ( int i = 1 ; i < n + 1 ; i++)
    {
        for ( int j = 1 ; j < n + 1 ; j++)
        {
            f = j ;
            f  / = 2 ;
            A [i] [j] = float ( sin ( i + f ) ) ;
            cout << "[ " << i << "]" << "[" << j << "]" << A [i] [j] <<endl ;

        if ( A [i] [j] > 0 )
        {
            int count = 0 ;
            count + = count + i ;
            cout << count << endl ;  //this counts it after each value of sin, meaning it doesn't show one answer but multiple of them 

        }
         cout<<count<<endl;  //when i do this, it says that count wasn't declared
        }
    }



    return 0;
}

2 个答案:

答案 0 :(得分:1)

正如其中一条评论中已经提到的那样,如果您现在开始编码,请先阅读一本好的初学者书籍,而不是随机进行编码。

我会指出您代码中的一些错误;一开始可能很难消化,但稍后再回来,您可能会找到有价值的信息。

第一个错误是您的A数组的声明。 在C ++中,数组的大小必须是我们称为常量表达式的语言(对于语言类型,则为constexpr)。编译器可以评估常量表达式,并且其值在运行时不会改变。因此,由于变量n不是常量表达式-它可能在运行时(即代码执行期间)改变,因此此声明是错误的。正如另一位用户所说,这只有在允许使用可变大小数组的语言中才有可能。 C ++不是这种语言。似乎您的编译器正在绕过它。

第二,在C ++数组中,索引总是从0开始,而不是从1开始,例如Fortran。因此,数组的范围是[0,n-1],而不是[1,n]。这意味着您的循环是错误的,因为您从1开始到n结束。当您从1开始时没有问题(除了代码可能无法达到您的预期),但是当您尝试将数组下标到索引n时就存在问题,因为它没有不存在。即使工作正常,这也是未定义的行为,您不应依赖它。输入更改,编译器更改或在另一台计算机上运行时,都可能会显示错误或完全不同的输出。

第三,如果希望只在计算结束时显示计数器,那么毫无疑问,您应该将cout表达式放在for循环之外。由于它在内部,因此它确实会打印循环的每个计数,因为它将在for的每次迭代中执行。 另外,count变量是在if块语句内定义的,因此仅在该块内可见。这意味着,如果您尝试访问count之外的变量if,将无法执行并且将收到编译器错误-我们说count超出范围。因此,请在for循环之外声明计数器,最后一个cout将能够“看到”它,因为它们都在main()范围内。

祝你学习顺利。

答案 1 :(得分:0)

您不能在c ++中使用此行:

cin >> n;
float A[n][n];

如果要这样做,可以通过以下方式分配内存:

cin >> n;
float** A = new float*[n];
for(int i = 0; i < n; ++i)
a[i] = new float[n];

或以这种方式使用常数值:

A[5][5]; // or any other number that youre interested of

并在代码的开头添加以下行:

int count = 0; // or any other value youre interested of

最终代码如下:

int main()
{
int n;
int f;
int count = 0;
cout << "Kvadrat matriciin irembiig oruulnuu:" << endl;  //Энэ матриц квадрат байна. Яагаад гэвэл i,j = 1,....n.
cin >> n;

float** A = new float*[n];
for (int i = 0; i < n; ++i)
    A[i] = new float[n];

    for (int i = 0; i < n; i++)
{
    for (int j = 0; j < n; j++)
    {
        f = j;
        f /= 2;
        A[i][j] = float(sin(i + f));
        cout << "[ " << i << "]" << "[" << j << "]" << A[i][j] << endl;

        if (A[i][j] > 0)
        {
            int count = 0;
            count += count + i;
            cout << count << endl;  //this counts it after each value of sin, meaning it doesn't show one answer but multiple of them

        }
        cout << count << endl;  //when i do this, it says that count wasn't declared
    }
}
for (int i = 0; i < n; ++i)
    delete A[i];
delete A;
return 0;
}

编辑:由于写入访问冲突,我修复了您的for循环。 祝你好运!