在这段代码中,我使用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;
}
答案 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循环。 祝你好运!