itgle.com

在C++语言中,在某些应用时,经常会碰到需要用到二维数组的情况。现在有如下应用要求,要求分别创建一个二维数组的构造函数,以及一个二维数组的释放函数,其函数的定义如下,请你实现他们。 int ** create2DArray(int d1, int d2); void destory2DArray(int ** array);

题目

在C++语言中,在某些应用时,经常会碰到需要用到二维数组的情况。现在有如下应用要求,要求分别创建一个二维数组的构造函数,以及一个二维数组的释放函数,其函数的定义如下,请你实现他们。 int ** create2DArray(int d1, int d2); void destory2DArray(int ** array);


相似考题
更多“在C++语言中,在某些应用时,经常会碰到需要用到二维数组的情况。现在有如下应用要求,要求分别创建一个二维数组的构造函数,以及一个二维数组的释放函数,其函数的定义如下,请你实现他们。 int ** create2DArray(int d1, int d2); void destory2DArray(int ** array);”相关问题
  • 第1题:

    已知函数 void- sort(int Array[-1 int N的功能:采用选择排序法将具有N元素的整型数组Aray按由大到小排序元素,排序好的元素仍然放在数组Aray里面。例如:如果原来数组为”1432567,则排序后为”7654321″。編写该函数的实现代码,并要求编写main()函数,对实现函数的进行测试

    

    请帮忙给出正确答案和分析,谢谢


    答案:

    void select_sort(int Array[], int n)//n为数组a的元素个数
    {    
        for (int i = 0; i<n - 1; i++)//进行N-1轮选择
        {
            int min_index = i;    
            for (int j = i + 1; j<n; j++)//找出第i小的数所在的位置
            {
                if (Array[j] > Array[min_index])
                {
                    min_index = j;
                }
            }
            //将第i小的数,放在第i个位置;如果刚好,就不用交换
            if (i != min_index)
            {
                int temp = Array[i];
                Array[i] = Array[min_index];
                Array[min_index] = temp;
            }
        }
    }

    int main()
    {
        int num[7] = { 1, 2, 3, 4, 5, 6, 7};
        select_sort(num, 7);
        printf("\n结果如下:\n");
        for(int i=0; i<7; i++)
        {
            printf("\n%d\n ", num[i]);
        }        
        printf("\n");
     }

    测试结果:


    解析:

    选择排序(从小到大)的基本思想是,首先,选出最小的数,放在第一个位置;然后,选出第二小的数,放在第二个位置;以此类推,直到所有的数从小到大排序。

  • 第2题:

    ( 31 )若数组 a 定义为 int[][]a=new int[3][4] ,则 a 是

    A )一维数组

    B )二维数组

    C )三维数组

    D )四维数组


    正确答案:B

  • 第3题:

    阅读以下说明和C语言函数,将应填入(n)处的字句写在对应栏内。

    【说明】

    下面一段程序从给定的数组b中找出值最小的元素,并输出该元素的数组下标、内存地址minaddr以及元素值本身。函数findmin负责在给定的数组中查找最小值,并返回最小值所在的内存地址,函数有三个参数:array是所要处理的数组;size是数组的大小;index负责从函数返回具有最大值的元素在数组中的数组下标。请填充空白,使其成为一个合乎要求的完整程序。

    【程序】

    //程序开始

    include<iostream.h>

    int *findmin(int *array, int size, int &index);

    void main()

    {

    /****** 变量定义部分 ***********/

    int b[10] = {34, 34, 23, 89, 1, 2, 13, 42, 5, 54};

    (1);

    int idx;

    /******* 寻找最小值 ************/

    minaddr = findmin(b, sizeof(b)/sizeof(int), idx);

    /******* 输出最小值的有关信息 ************/

    cout << "Min value index: "<<idx<<end1

    <<"Min value address: "<<minaddr<<end1

    <<"Min value: "<<(2)<<end1;

    }

    /******* 函数findmin的定义部分 ************

    int *findmin(int *array, int size, int &index)

    {

    int min = 0;//max 是当前具有最小值的数组元素下标值

    for(int i = 1;(3); i++)

    {

    if(array[i]<(4))

    min = i;

    }

    (5);

    return array + min;//返回最小值所在内存地址

    }


    正确答案:(1)int *minaddr (2) b[idx] (3)isize (4) array[min] (5) index = min
    (1)int *minaddr (2) b[idx] (3)isize (4) array[min] (5) index = min

  • 第4题:

    用C语言,动态三维数组

    编写一个函数CreateGrid(int m, int n, int t),用来创建一个动态的三维数组,其中m、n、t分别表示该数组每一维的长度。要求整个数组的存储空间都是用用C语言的库函数malloc函数动态申请的。另外编写一个FreeGrid函数,用来释放这个三维数组。


    int*** CreateGrid(int m,int n,int t) { int*** tt = NULL; tt = (int***)malloc(sizeof(int)*m); for(int i=0;i<m;i++) { tt[i] = (int**)malloc(sizeof(int)*n);; for (int k=0;k<n;k++) { tt[i][k] = (int*)malloc(sizeof(int)*t); } } return tt; } void FreeGrid(int*** tt,int m,int n,int t) { if(tt != NULL) { for(int i=0;i<m;i++) { for (int j=0;j<n;j++) { free((tt[i][j])); } free(tt[i]); } free(tt); tt = NULL; } }

  • 第5题:

    请编一个函数void fun( int tt[M][N], int pp[N], tt指向一个M行N列的二维数组,求出二维数组每列中最大元素,并依次放入pp所指的一维数组中。二维数组中的数已在主函数中给出。

    注意:部分源程序给出如下。

    请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

    试题程序:

    include <conio.h>

    include <stdio.h>

    define M 3

    define N 4

    void fun(int tt[M][N],int pp[N])

    {

    }

    main()

    {

    int t[M] [N]={{68,32,54,12},{14,24,88,

    58},{42, 22, 44, 56}};

    int p[N],i,j,k;

    clrscr();

    printf("The riginal data is:\n");

    for(i=0;i<M;i++)

    {

    for(j=0;j<N;j++)

    printf("%6d",t[i][j]);

    printf("\n");

    }

    fun(t,p);

    printf("\nThe result is:\n");

    for(k=0;k<N;k++)

    printf("%4d",p[k]);

    printf("\n");

    }


    正确答案:void fun(int tt[M][N]int pp[N]) { int iimax; for(j=0;jN;j++) { max=tt[0][j]; /*假设各列中的第一个元素最大*/ for(i=0;iM;i++) if(tt[i][j]>max) /*如果各列中的其他元素比最大值大则将这个更大的元素看作当前该列中最大元素*/ max=tt[i][j]; pp[j]=max; /*将各列的最大值依次放入pp数组中*/ } }
    void fun(int tt[M][N],int pp[N]) { int i,i,max; for(j=0;jN;j++) { max=tt[0][j]; /*假设各列中的第一个元素最大*/ for(i=0;iM;i++) if(tt[i][j]>max) /*如果各列中的其他元素比最大值大,则将这个更大的元素看作当前该列中最大元素*/ max=tt[i][j]; pp[j]=max; /*将各列的最大值依次放入pp数组中*/ } } 解析:本题中函数的功能是求出二维数组中每列的最大元素。首先,假设各列中的第一个元素最大,然后利用行标值的移动来依次取得各列中其他元素的值,并与假设的最大值进行比较,如果遇到更大的,则把这个更大的元素看做当前该列中最大的元素,继续与该列中其他元素比较。

  • 第6题:

    若数组a定义为int[][]a=new int[3][4],则a是( )。

    A.-维数组

    B.二维数组

    C.三维数组

    D.四维数组


    正确答案:B
    二维数组有两种定义方式:①typear—rayName[][];②type[][]arrayName;从题目中的语句可以看出,本题定义了一个二维数组。

  • 第7题:

    请编写函数proc,该函数的功能是:将M行N列的二维数组中的数据,按行的顺序依次放到一维数组中,一维数组中数据的个数存放在形参n所指的存储单元中。 例如,若二维数组中的数据为 13 23 33 43 14 24 34 44 15 25 35 45 则一维数组中的内容应该是13 23 33 43 14 24 34 44 15 25 35 45。 注意:部分源程序给出如下。 请勿改动main函数和其他函数中的任何内容,仅在函数proc的花括号中填入所编写的若干语句。 试题程序: include<stdio.h> void proc(int(*s)[103,int*b,int*n,int rain.int nn) {

    } void main { int arr[10][10]={{33,33,33,33),{44,44,44,44}, {55,55,55,55}),i,j; int a[l00]={o),n=o; printf("The matrix:\n"); for(i=0;i<3;i++) { for(j=0;j<4;j++) printf("%3d",arr[i][j]): printf("\n"); } proc(arr,a,&n,3,4): printf("The A array:\n"); for(i=0;i<n;i++) printf("%3d",a[i]): printf("\n\n"); }


    正确答案:

    void proc(int(*s)[10],int*b,int*n,int mm,int nn)
    {
    int i,j,k=0;
    for(i=0;i<mm;i++)//i是表示其行的下标
    for(j=0;j<nn;j++)//j是表示其列的下标
    b[k++]=s[i][j]; //把其放到b的一维数组中
    *n=k; //把b数组的长度通过形参n传回到主函数中
    }
    【解析】要将M行N列的二维数组中的数据,按行的顺序依次放到一维数组中,可以通过首先行循环,然后列循环取出二维数组中的每一个元素,并将其放入一维数组中。最后,将一维数组的长度通过形参返回到主函数当中。

  • 第8题:

    程序定义了M×M的二维数组,并在主函数中自动赋值。请编写函数proc(int a[][M],int n),该函数的功能是使数组左下半三角元素中的值加上n。例如,a数组中的值为:

    注意:部分源程序给出如下。

    请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的花括号中填入所编写的若干语句。

    试题程序:


    正确答案:


    【解析】使数组左下半三角元素中的值加上n,首先要找出数组中下半三角元素。数组中下半三角元素的特点是,其列下标小于等于行下标。根据这个特点找出所有的下半三角元素再加上n放在原来的位置上。

  • 第9题:

    根据函数原型“int FF(int a[], int n)”,编写函数定义,计算并返回数组a[n]中所有元素之和。

  • 第10题:

    要求编写一个递归函数“int FF(int a[], int n)”,求出数组a中所有n个元素之积并返回。

  • 第11题:

    若数组a定义为int[][]a=new int[3][4],则a是()

    • A、一维数组
    • B、二维数组
    • C、三维数组
    • D、四维数组

    正确答案:B

  • 第12题:

    在C#中,int[][]是定义一个int型的二维数组。


    正确答案:错误

  • 第13题:

    下列说法不正确的是

    A.int *fun();----fun是一个返回int指针的函数

    B.int (*fun)();---fun是一个返回int指针的函数

    C.int (*array[5])();----array是一个有5个元素的数组,每一个元素都是一个函数指针,指向一个返回int的函数

    D.int (*fun(int))(int);----fun是带有一个int参数的函数,返回值是一个函数指针,这个指针指向带有一个int参数并返回int的函数


    正确答案:B
    解析:该函数中fun是一个函数指针。指向一个返回int的函数。

  • 第14题:

    已有如下数组定义和f函数调用语句,则在f函数的说明中,对形参数组array的正确定义方式为

    int a[3][4];

    f(a);

    A.f(array[3][4])

    B.f(int array[3][])

    C.f(int array[][4])

    D.f(int array[][])


    正确答案:C
    在定义数组时可以省略一维但不能省略二维,此题中选项B和D就违背了此条规则;再题干给出a数组的类型属于整型变量,所以答案为C

  • 第15题:

    请编一个函数void proc(int ttEM][N],int pp[N]),tt 指向一个M行N列的二维数组,求出二维数组每行中最大元素,并依次放入pp所指的一维数组中。二维数组中的数已在主函数中给出。 注意:部分源程序给出如下。 请勿改动main函数和其他函数中的任何内容,仅在函数proc的花括号中填入所编写的若干语句。 试题程序: include<stdio.h> include<conio.h> include<stdlib.h> define M 3 define N 4 void proc(int ttrM3rN]。int pp[N]) {

    } void main { int str[M][N]={ {34,56,84,78}, {23,84,93,12), {28,38,39,93}}; int p[N],i,j,k; system("CLS"); printf("The riginal data is:\n"); for(i=0;i<M;i++) { for(j=0;j<N;j++) printf("%6d",str[i][j]); printf("\n"); } proc(str,p); printf("\nThe result is:\n");for(k=0:k<M;k++) printf("%4d",p[k]); printf("n");}


    正确答案:

    void proc(int tt[M][N],int pp[N])
    int i,j,max;
    for(i=0;i<M;i++)//i控制行的下标
    {
    max=tt[i][c]; //max存放每行中最大的数
    for(j=0;j<N;j++)
    if(tt[i][j]>max)
    max=tt[i][j];
    pp[i]=max;//把大的数放到PP数组中,经过i来控制pp数组的下标
    }
    }
    【解析】按照题目中要求,求出二维数组每行中最大元素,并依次放入PP所指的一维数组中。首先比较二维数组中每一行的元素,找出每一行中的最大元素,放入一维数组pp中,返回到主函数当中。

  • 第16题:

    请编写一个函数sum(int array[],int len),该函数返回数组array的所有整数元素的和,其中len为数组array的长度。

    注意:部分源程序已存在文件test34_2.cpp中。

    请勿修改主函数main和其他函数中的任何内容,仅在函数sum的花括号中填写若干语句。

    程序输出结果如下:

    sum of array 15

    文件test34_2.cpp的内容如下:

    include <iostream.h>

    int sum(int array[],int len)

    {

    }

    void main()

    {

    static int a[5]-{1,2,3,4,5};

    int result=sum(a,5);

    cout<<"sum of array "<<result<<end1;

    }


    正确答案:int sum(int array[]int len) { int sum=0; for (int i=0;ilen;i++) sum=sum+array[i]; return sum; }
    int sum(int array[],int len) { int sum=0; for (int i=0;ilen;i++) sum=sum+array[i]; return sum; } 解析:本题主要考查考生对于数组访问和for循环语句的掌握。应该注意的是,长度为len的数组array的下标范围为0到 len-1,而不是从1到len,所以循环控制变量的初始值为0。

  • 第17题:

    使用VC6打开考生文件夹下的工程test39_3。此工程包含一个test39_3.cpp,其中定义了类ARRAY和其派生类 STUDENT,其中类ARRAY是一个多态数组,该数组可以存放学校中的各类人员,如学生等,但它们的定义并不完整。请按要求完成下列操作,将程序补充完整。

    (1)定义类ARRAY的三个公有成员纯虚函数add(int a)、del(int d)和show(int s),它们的返回值类型都是void型的。请在注释“//**1**”之后添加适当的语句。

    (2)添加派生类STUDENT的保护数据成员float型的二维数组table,使其有row行和s_col列,请在注释“//**2**”。之后添加适当的语句。

    (3)完成派生类STUDENT的成员函数del(int s)的定义,实现把二维数组第s行删除的功能,即把该行清零,请在注释“//**3**”之后添加适当的语句。

    (4)完成派生类STUDENT的成员函数show(int s)的定义,使其以格式“"跳格table[行号][列号]is_换行”依次输出s行的各个元素,请在注释“//**4**”之后添加适当的语句。

    源程序文件test39_3.cpp清单如下:

    include <iostream.h>

    include <stdlib.h>

    const int row = 100;

    const int s_col = 3;

    class ARRAY

    {

    public:

    // ** 1 **

    }

    class STUDENT:public ARRAY

    {

    public:

    virtual void add(int s)

    {

    cout<<"\tInput data of STUDENT."<<endl;

    cout<<"\tFirst:";

    cin>>table[s] [0];

    cout<<"\tSecond:";

    cin>>table[s] [1];

    cout<<"\tThird:";

    cin>>table[s] [2];

    }

    virtual void del(int s);

    virtual void show(int s);

    protected:

    int i;

    // ** 2 **

    };

    void STUDENT::del(int s)

    {

    // ** 3 **

    }

    void STUDENT::show(int s)

    {

    cout<<endl;

    for(i=0;i<=s_col-1;i++)

    {

    // ** 4 **

    }

    }

    int main()

    {

    STUDENT st;

    ARRAY* ap;

    ap=&st;

    ap->add(3);

    ap->show(3);

    ap->del(3);

    ap->show(3);

    return 0;

    }


    正确答案:(1) virtual void add(int a)=0; (2) float table[row] [s_co1]; (3) for(i=0;i=s__co1-1;i++) table[s][i]=0; (4) cout"\ttable["s"]["i"]is"table[s][i]endl;
    (1) virtual void add(int a)=0; (2) float table[row] [s_co1]; (3) for(i=0;i=s__co1-1;i++) table[s][i]=0; (4) cout"\ttable["s"]["i"]is"table[s][i]endl; 解析:主要考查考生对于带纯虚函数类的定义及其派生类使用的掌握,其中(1)中virtual关键字是定义虚函数必不可少的,而定义纯虚函数应该在陔函数的后面加上“=0”,纯虚函数是在该类中只有声明,没有具体定义的特殊函数,是为了方便其派生类进行扩展而定义的“根”,派生类可以根据不同的需要进行定义,达到了数据封装的目的,(3)中二维数组的一行相当于一个一维数组,对其进行操作使用一个for循环即可,(4)中注意连续输出时字符流的使用。

  • 第18题:

    以下fun函数的功能是在N行M列的整型二维数组中,选出一个最大值作为函数值返回,请填空。(设M,N已定义)

    int fun(int a[N][M])

    {int i,j,row=0,col=0;

    for(i=0;i<N;i++)

    for(j=0;j<M;j++)

    if(a[i][j]>a[row][col])(row=i;col=j;)

    return(_____);

    }


    正确答案:a[row][col]
    a[row][col] 解析:嵌套循环,依次遍历二维数组的所有元素,从a[0][0]开始,先按行,后按列,a[row][col]先取a[0][0],若后面的元素比他大,则将此i、j值存入row、col中,即记录元素中当前最大值。循环结束返回a[row][col],即数组最大值。

  • 第19题:

    请编写一个函数void fun(int a [],int n),其中a为数组,n为数组a的长度。函数fun()的功能是冒泡排序法将数组a元素按从小到大的顺序排列,实现数组a的升序排列。

    注意:部分源程序已存在文件PROC12.cpp中。

    请勿修改主函数和其他函数中的任何内容,仅在函数fun()的花括号中填写若干语句。

    文件PROC12.cpp的内容如下:

    //PROC12. cpp

    include <iostream>

    using namespace std;

    define MAX 100

    void fun(int a[],int n);

    int main ()

    {

    int a[MAX],n,i;

    cout<<"Please enter the array size n:\n";

    do {

    cin>>n;

    if (n>100)

    cout<<"array size flowover! ReEnter a number(0-100)\n";

    }while (n>100);

    cout<<"Enter the array data:\n";

    for (i=0; i<n; i++)

    cin>>a [ii;

    fun(a[],n);

    for (i=0; i<n; i++)

    cout<<a [i] <<" ";

    cout<<end1;

    return 0;

    }

    void fun(int a[ ],int n)

    {

    // * * * * * * * *

    }


    正确答案:

  • 第20题:

    请编一个函数void proc(int tt[M][N],int pp[N]),tt指向一个M行N列的二维数组,求出二维数组每行中最大元素,并依次放入pp所指的一维数组中。二维数组中的数已在主函数中给出。

    注意:部分源程序给出如下。

    请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的花括号中填入所编写的若干语句。

    试题程序:


    正确答案:


    【解析】按照题目中要求,求出二维数组每行中最大元素,并依次放入pp所指的一维数组中。首先比较二维数组中每一行的元素,然后找出每一行中的最大元素,放入一维数组pp中,最后返回到主函数当中。

  • 第21题:

    编写一个函数,函数头格式为“double Mean(double a[M][N],int m,int n)”,要求返回二维数组a[m][n]中所有元素的平均值,假定在计算过程中采用变量v存放平均值。


  • 第22题:

    根据函数原型"double Mean(double a[M][N] ,int m ,int n)",编写函数定义,要求返回二维数组a[m][n]中所有元素的平均值。假定在计算过程中采用变量v存放累加值和最后的平均值。

  • 第23题:

    假设调用函数有以下定义和函数f调用,则函数f中对形参数组错误定义的是()。 charc[5]={‘a’,’b’,’0’,’c,’0’}; printf(“%s”,c);

    • A、f(int array[][6])
    • B、f(int array[3][])
    • C、f(int array[][4])
    • D、f(int array[2][5])

    正确答案:B

  • 第24题:

    判断题
    在C#中,int[][]是定义一个int型的二维数组。
    A

    B


    正确答案:
    解析: 暂无解析