在C++语言中,在某些应用时,经常会碰到需要用到二维数组的情况。现在有如下应用要求,要求分别创建一个二维数组的构造函数,以及一个二维数组的释放函数,其函数的定义如下,请你实现他们。 int ** create2DArray(int d1, int d2); void destory2DArray(int ** array);
第1题:
请帮忙给出正确答案和分析,谢谢
答案:
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 )四维数组
第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;//返回最小值所在内存地址
}
第4题:
编写一个函数CreateGrid(int m, int n, int t),用来创建一个动态的三维数组,其中m、n、t分别表示该数组每一维的长度。要求整个数组的存储空间都是用用C语言的库函数malloc函数动态申请的。另外编写一个FreeGrid函数,用来释放这个三维数组。
第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");
}
第6题:
若数组a定义为int[][]a=new int[3][4],则a是( )。
A.-维数组
B.二维数组
C.三维数组
D.四维数组
第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是()
第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的函数
第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[][])
第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;
}
第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;
}
第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(_____);
}
第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);
第24题:
对
错