做C++时有个程序通不过,不知为什么

来源:百度知道 编辑:UC知道 时间:2024/06/16 13:35:50
编写一个程序输入一个n*n的矩阵,求出两对角线元素之和。
解:#include<iostream.h>
void main (){
int n,i,j,p,q,s1=0,s2=0;
cout<<"请输入矩阵边长:"<<endl;
cin>>n;
int(*a)[n]=new int[n][n];
cout<<"请输入矩阵:"<<endl;
for(i=0;i<n;i++){
for(j=0;j<n;j++)
cin>>a[i][j];}
for(i=0;i<n;i++){
for(j=0;j<n;j++)
cout<<a[i][j]<<' ';
cout<<endl;}
for(p=0;p<n;p++)
s1+=a[p][p];
for(q=0;q<n;q++)
s2+=a[q][n-1-q];
cout<<"对角线元素之和分别是:"<<s1<<' '<<s2<<endl;
delete []a;
}
错误:编译通不过,显示
--------------------Configuration: 4章21题 - Win32 Debug--------------------
Compiling...
4.21代码.cpp
E:\4章21题\4.21代码.cpp(6) : error C2057: expected constant expression
E:\4章21题\4.21代码.cpp(6) : error C2466: cannot allocate an array of con

他的定义也不对!要用指针,n要是常量,即const int n= ;所以你不能这么用!
你把n定义成常量5.你再试你的程序就是对的了!
用这个
int main (){
int n,s1 = 0, s2 = 0 ;
cout<<"请输入矩阵边长:";
cin>>n;
int *a = new int [n*n];
cout<<"请输入矩阵";
for (int i = 0;i<n*n ;i++)
cin>>*(a+i);
//输出矩阵
for (i = 0;i<n*n;i++){
cout<<*(a+i)<<" ";
if ( (i+1)%n==0)
cout<<endl;
}
//求两对角线的和
for ( i=0 ;i<n;i++)
s1 +=*(a+i*(n+1));
for ( i=1;i<=n;i++)
s2 +=*(a+(i*(n-1)));
cout<<"两对角线的和是:"<<s1<<" "<<s2<<endl;

return 0;
}

二维数组的定义不对,应该是:
int **a;
a=new int*[n];
for(i=0;i<n;i++)
{
a[i]=new int[];
}
数组的大小只能用常量来定义,如果要用变量,需要用指针来定义数组。

题的答案应该是什麽呀

我改完了之后,连最开始的打印都通不过了......