有一个简单的作业程序,可是我不会,请大家帮忙一下,感激不尽:
要求:
输入两个数 a,b,那么系统就能得到一个所有元素的初始值为0的a*b的矩阵,
然后要求输入这a*b个数,再在屏幕上显示出来。

解决方案 »

  1.   

    template<class c1,class c2>
    class CLineVector:public CArray<c1,c2>
    {
    };动态二维数组:CArray<CLineVector,CLineVector&> xxx
      

  2.   

    写错了动态二维数组:CArray<CLineVector<int,int&>,CLineVector<int,int&> &> xxx
      

  3.   

    标准C? C++?int *c;c=new int[a*b];好了。
      

  4.   

    VC下用CArray模板方便一些,但是标准C++就不行了。
      

  5.   

    上边的东东叫模板,是 C++ 语法的一个部分。 CArray 是 MFC 提供的模板类。
    区区作业嘛,可能用不着这些吧
      

  6.   

    标准C语言:包含头文件malloc.h
    int *c;
    c=(int *)malloc(a*b*sizeof(int));同样的效果,做作业刚好,呵呵。
      

  7.   

    不知道,反正老师就这么要求,我就是不知道,只知道以前的C语言好象不允许定义没有指定个数的数组,不知道在VC里是怎么处理的。
      

  8.   

    标准c++可以这样:class CLineVector:public vector<int>
    {
    public:
       CLineVector & operator=(const CLineVector & object);
    public:
       CLineVector();
       CLineVector(const CLineVector&);
    };二维数组:
    vector<CLineVector> xxx;
      

  9.   

    #include "iostream.h"void main()
    {
      int a,b;
      cout<<"input two numbers:";
      cin>>a>>b;
      int *c=new int[a*b];
      for(int i=0;i<a;i++)
        for(int j=0;j<b;j++)
          cin>>c[i][j];//输入  for(i=0;i<a;i++)
       {
        for(int j=0;j<b;j++)
          cout<<c[i][j]<<" ";//打印在屏幕上
        cout<<endl;//每输出一行则换行。
        }
    }以上是用C++标准写的。本人是在网吧里写的,未调试,有错误在所难免,但思路基本上就是这样了。(注:在输入数组值时可以更友好些,这些代码就楼主自己完成吧。)
      

  10.   

    发现三个错误,我不知道怎么处理
    : error C2109: subscript requires array or pointer type
    : error C2679: binary '>>' : no operator defined which takes a right-hand operand of type 'int' (or there is no acceptable 
    : error C2109: subscript requires array or pointer type
    Error executing cl.exe.678.exe - 3 error(s), 0 warning(s)
      

  11.   

    int *c=new int[a*b];改为int *c=new int[a][b];试试
      

  12.   

    firefox_st(火狐狸)的挺不错,但为了好用,我改进了一下,以后就可以直接访问v[i][j]的二维数组了:
    int **v;
    v = new int *[a];
    *v = new int[b];
    for(int k=0; k<a; k++)
      *(v+k) = new int[b];
    for(int i=0; i<a; i++)
      for(int j=0; j<b; j++)
        v[i][j] = 0;
    stonespace(stonespace)的向量类也很好,可是不适合初学者。
      

  13.   

    对不住了,上面有一句是多余的,重写:
    int **v;
    v = new int *[a];
    for(int k=0; k<a; k++)
      *(v+k) = new int[b];
    for(int i=0; i<a; i++)
      for(int j=0; j<b; j++)
        v[i][j] = 0;
      

  14.   

    回 lw_yx(刚学会走,还不想跑.这就是我^-^) 
    “int *c=new int[a*b];改为int *c=new int[a][b];试试”
    好象不对,问题更多
    error C2540: non-constant expression as array bound
    D:\vc\678.cpp(8) : error C2440: 'initializing' : cannot convert from 'int (*)[1]' to 'int *'
            Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
      

  15.   

    谢谢wacky(笨笨狗) ,虽然我还不十分理解你所写的,但是我试了一下,基本能达到我的目的。非常感谢
      

  16.   

    刚学看看Malloc函数吧,对你理解原理有好处。
      

  17.   

    谢谢,firefox,
     wacky(笨笨狗) 的方法中应该怎么解决释放空间呢?
      

  18.   

    释放内存如下:
    for(int i=0; i<a; i++)
      delete v[i];
    delete v;
      

  19.   

    根本就可以用一维数组来仿真,正如 C 编译器所做的。m * n 维  matrix[m][n]:int* matrix = (int*)malloc( m * n * sizeof(int)); 要访问 matrix[a][b], 使用
     
    * (matrix + n * a + b) = 100;int k = * (matrix + n * a + b);
    ...
     
    释放:
    free(matrix)
      

  20.   

    楼上的说的都是用一维数组来仿真,我可以定义用多级向量指针来创建多维数组:(为a*b*c...*x n维动态数组)
    int ****...v = new int ***...[a];//定义n级指针;for(int i=0; i<a; i++)
      for(int j=0; j<b; j++)
       for(int k=0; k<c; k++)
    ......
          v[i][j][k]...[x-1] = new int[x];
    //赋初始值:
    for(i=0; i<a; i++)
      for(j=0; j<b; j++)
        for(k=0; k<c; k++)
    ......
         v[i][j][k]...[x] = 0;
    //释放空间:
    for(i=0; i<a; i++)
      for(j=0; j<b; j++)
        for(k=0; k<c; k++)
    ......
         delete v[i][j][k]...[x-1];
    ......
      delete v[i];
      delete v;
      

  21.   

    lw_yx(刚学会走,还不想跑.这就是我^-^) 是不是C语言讲师类型的人啊 
    wacky(笨笨狗) 和 chzy00(逸少) 的主意到是很不错啊学习ing
      

  22.   

    一维数组,大家多会创建,二维需要经过处理:
    如下(以int为例):
      void createtwodimention(int _width,int _height)
    {
             int **array;
    int *p;
    if((p=new int[_width*_height])==NULL)
    {
    cout<<"Memory allocate error."<<endl;
    exit(1);
    } if((array=new int* [_height])==NULL)
    {
    cout<<"Memory allocate error."<<endl;
    exit(1);
    } for(int i=0;i<_height;i++)
    array[i]=p+i*_width;
    }当然,你可以在里面初始花数组!!
      

  23.   

    u can search this kind of articles in this bbs ...so many ....
      

  24.   

    我还是习惯于用mallo和realloc,方便当然,复杂的运用非vector莫属
      

  25.   

    llwwwww([email protected]) 看来你是教授级的人物了!!!
    有什么意见可以指出,我虚心接受.请不要随意中伤别人.我看你就是那种眼高手低的那种人,没资格对别人指指点点.(你算什么东西啊)
      

  26.   

    llwwwww([email protected]) 信誉分:50,专家分也才两三角.你有什么资格指责别人.我看你是倒处灌水才会落得如此下场的吧!(我看你像个小混混).
      

  27.   

    wacky(笨笨狗) 不会是说我吧?
      

  28.   

    我们都是有缘聚在csdn讨论问题,我们都需要努力,何必为眼前的而多费脑筋。
    我的mail:[email protected],有问题大家一起讨论吧。
      

  29.   

    lw_yx(刚学会走,还不想跑.这就是我^-^):我一般不用qq,曾经被qq炸弹黑过,就给个email吧,呵呵。