#include<iostream.h>
int i,j,m,n;
void main()
{
 cout<<"input m,n:";
 cin>>m>>n;
 int A[m][n],B[m];//位身末无法初始化?
 cout<<"input 数组";
  for (i=0,i<m,i++)
 { for (j=0,j<n,j++) cin>>A[i][j];};
for (i=0,i<m-1,i++)
{ B[i]=A[i][0];
 for (j=0,j<n-1,j++)
 {if (B[i]>A[i][j])
  B[i]=A[i][j];}
   if (B[i]<A[i][j])
 B[i]=A[i][j];
 }
 cout<<B[i];
}
请指点。//
数组为什么无法初始化。//

解决方案 »

  1.   

    如果想使用动态的使用数组可以用new来分配空间,用完再用delete删除.
    还有一个方法是用类库来实现,如MFC中的CArray或STL中的类.你可以看一下这方面的东西.
      

  2.   

    下面这题我编的为什么不对?/请指点。//
    1.若矩阵A[m*n]中的某个元素A[i,j]是第i行中的最小值,同时又是第j列中的最大值,则称此元素为该矩阵中的一个马鞍点。假设以二维数组存储矩阵Am*n,试编写求出矩阵中所有马鞍点的算法。
    #include<iostream.h>
    int i,j,m,n;
    void main()
    {
    cout<<"input m,n:";
        cin>>m>>n;
        int *a,*b;
        a=new int[m*n];
        b=new int[m];
        cout<<"input 数组:";
        for(i=0;i<m*n;i++)
        cin>>a[i];
        for (i=0;i<m ;i++){
    b[i]=a[i*n-1];
    for (j=0;j<m ;j++){
    if(b[i]>a[i*j-1]) b[i]=a[i*j-1];
    }
    if(b[i]<a[i+n*i]){
    b[i]=a[i+n*i];
    return;
    }
    }
    for (i=0;i<m ;i++)
     cout<<b[i];
    }帮我改改谢谢。//
    我很菜别笑我。//
      

  3.   

    二维数组可以这样子,先定义你自己的struct:
    struct myStruct
    {
    int i;//别的类型的都可以的
    float j;//
    }
    然后
    CArray<myStruct,myStruct> m_myDataArray;
    然后利用CArray的函数对m_myDataArray进行操作不就可以实现你的动态数组的功能了么?
      

  4.   

    也许该数组不是恒量数组,因此就无法初始化它。
    或者你可这样进行初始化A[m][n]={0};
      

  5.   

    动态内存分配的使用是正确的,错误在于 for 循环。
    当循环开始, i = 0 时 ,循环内第一条语句就错了:
     b[i]=a[i*n-1];  ---->  b[0]=a[-1];
    注意 C 或 C++ 中数组的下标从 0 开始。
      

  6.   

    for (i=0;i<m ;i++){
    b[i]=a[i*n-1];        //第1次循环i*n-1=-1下越界
    for (j=0;j<m ;j++){
    if(b[i]>a[i*j-1]) b[i]=a[i*j-1];
    }
    if(b[i]<a[i+n*i]){
    b[i]=a[i+n*i];
    return;  //return只用于子函数的返回。
    }
    }
    上面程序有问题,对于数组A、B无须初始化,对其进行直接赋值即可。改正如下:
    #include<iostream.h>
    int i,j,m,n,temp,k;
    void main()
    {
        cout<<"input m,n:";
        cin>>m>>n;
        int *a,*b;
        a=new int[m*n];
        b=new int[m];
        cout<<"input 数组:";
        for(i=0;i<m*n;i++)
        cin>>a[i];
        for(i=0;i<m;i++){
           temp=a[i*n];
    for(j=1;j<m ;j++)           //这两行程序找出了该列的最大值
       if(temp>a[j*n]) temp=a[j*n];   //
    for(k=0;k<n;k++)
       if(temp>a[i*n+k]) break;
    if(k==n) b[count++]=temp;         //该列的最大值在该行是最小值
        }
    }
    for(i=0;i<count;i++)  //每一行每一列不一定有一个马鞍书。
     cout<<b[i];
    delete []b;           //动态申请后记得释放掉
    delete []a;           //同上
    }
      

  7.   


     babynuaa() 的程序有毛病,如何改谢谢大侠//
    有毛病。for(i=0;i<count;i++) 加了int count=0,还不行for(i=0;i<count;i++) //error C2065: 'count' : undeclared identifier//
     cout<<b[i];
    delete []b;           //动态申请后记得释放掉
    delete []a;           //同上
    }
      

  8.   

    #include<iostream.h>
    void main()
    {
        int i,j,m,n,temp,k;
        int count=0;
        cout<<"input m and n:"<<endl;
        cin>>m;
        cin>>n;
        int *a,*row,*col;
        a=new int[m*n];   //m行n列

        row=new int[m*n];
        col=new int[m*n];
        cout<<"input 数组:"<<endl;
        for(i=0;i<m*n;i++)
           cin>>a[i];    for(i=0;i<m;i++)   
        {
    int rowMinIndexOfCol=0;
           temp=a[i*n];
    //找出了该i行中最小值
    for(j=1;j<n ;j++)   
    {
    if(temp>a[i*n+j]) 
    {
    temp=a[i*n+j];   
    rowMinIndexOfCol=j;
    }
    }
    //当一行中有多个一样的最小值时
    for(j=0;j<n;j++)
    { //找出了该i行中每个最小值的列下标rowMinIndexOfCol
    (temp==a[i*n+j])
    {
    rowMinIndexOfCol=j; int ColMaxIndexOfRow=i;//以(i,rowMinIndexOfCol)为基准,比较(k,rowMinIndexOfCol)中temp是否最大
    for(k=0;k<m;k++)
    {
        if(temp<a[k*n+rowMinIndexOfCol])
        {
    ColMaxIndexOfRow=k;
    break;
        }
    }
    //循环一遍,还是初始值,(i,rowMinIndexOfCol)为鞍点
    if(ColMaxIndexOfRow==i)
    { //在该行的最小值是该列最大值
    row[count]=i;
    col[count]=rowMinIndexOfCol;
    count++;
    }
    }
    }
        }    int r,c;
        for(i=0;i<count;i++)  //每一行每一列不一定有一个马鞍点。
        {
    r=row[i];
    c=col[i];
    cout<<"AnDian "<<i<<" :("<<r<<","<<c<<")=";
             cout<<a[r*n+c]<<endl;
        }
        delete []row;           //动态申请后记得释放掉
        delete []col;           //动态申请后记得释放掉
        delete []a;           //同上
        cout<<count<<endl;
        cin>>i;
    }
      

  9.   

    你试试,看行不行,最后一句"cin>>i"VC中调试用,可以不要
      

  10.   

    如果你非要那样做的话,我今天给改了一下,可以的:
    int i,j,m,n,count=0;
    void main()
    {
    cout<<"Please input m(行数)";
        cin>>m;
    cout<<"Please input n(列数)";
    cin>>n;
        int *a,*b,temp;
        a=new int[m*n];
        b=new int[m];//存放每一行的最小值;
        cout<<"依次输入数组,共;"<<m*n<<"个数";
        for(i=0;i<m*n;i++)
    cin>>a[i];
        for (i=0;i<m;i++)
    {
    b[i]=a[i*n];//相当于对b初始化一下;
    for (j=0;j<n;j++)//求每一行的最小值;共有m个放到b中;
    {
    if(b[i]>a[i*n+j]) 
    b[i]=a[i*n+j];
    }
    for (j=0;j<n;j++)//对每一个最小值求所在列,
    //并判断在该列是不是最大;
    {
    if(b[i]==a[i*n+j])//记下该列号j;
    {
    for(temp=0;temp<m;temp++)
    {
    if(b[i]<a[temp*n+j])//一旦该列有一个大于该值,
    break;//则跳出循环
    }
    if(temp==m)//如果该i行最小值确实是j列最大值则:
    {count++;
    cout<<i<<"行"<<j<<"列是一个马鞍点。";}
    }
    }
    }
    cout<<"共有"<<count<<"个马鞍点;";
    delete []a;//释放内存;
    delete []b;
      

  11.   

    :)一时疏忽,改正如下:
    #include<iostream.h>
    int i,j,m,n,maxrow,temp,k;
    void main()
    {
        cout<<"input m,n:";
        cin>>m>>n;
        int *a,*b;
        a=new int[m*n];
        b=new int[m];
        cout<<"input 数组:";
        for(i=0;i<m*n;i++)
        cin>>a[i];
        for(i=0;i<m;i++){
             maxrow=i;
           temp=a[i*n];
    for(j=0;j<m ;j++)           //这两行程序找出了该列的最大值
       if(temp<a[j*n]) {temp=a[j*n];maxrow=j;}   //
    for(k=0;k<n;k++)
       if(temp>a[j*n+k]) break;
    if(k==n) b[count++]=temp;     //该列的最大值在该行是最小值
        }
    }
    for(i=0;i<count;i++)  //每一行每一列不一定有一个马鞍书。
     cout<<b[i];
    delete []b;           //动态申请后记得释放掉
    delete []a;           //同上
    }
      

  12.   

    噢,还有一个错误
    把if(temp>a[j*n+k]) break;改成
    if(temp>a[maxrow*n+k]) break;
    Sorry……
      

  13.   

    #include<iostream.h>
    int i,j,m,n,maxrow,max,l,temp,k;
    void main()
    {
        cout<<"input m,n:";
        cin>>m>>n;
        int *a,*b;
        a=new int[m*n];
        b=new int[m*n];
        cout<<"input 数组:";
        for(i=0;i<m*n;i++)
        cin>>a[i];
        for(i=0;i<m;i++){
           for(l=0;l<n;l++){
           temp=a[i*n+l];
    for(j=0;j<m;j++)         
       if(temp<a[j*n+l]) temp=a[j*n+l];
             for(int p=0;p<m;p++)
                if(temp==a[p*n+l]){
                for(k=0;k<n;k++)
                if(temp>a[p*n+k]) break;
             if(k==n) b[count++]=temp; 
                }
        }
    }
    for(i=0;i<count;i++)  
     cout<<b[i];
    delete []b; 
    delete []a;           
    }
    现在也差不多了……(改了好多次)
      

  14.   

    数组不能动态定义,应用new和delete。