主函数:int main(void){
int m, n, **A, **B, **C, p;
Input(&A, &B, &m, &n);
C = Combine(A, B, m, n, &p);
Print(C, p);
Area(C,p);
return 0;}
``
要求:函数Input。调用一次该函数,从键盘依次输入两个二维正整数数组的各元素值,并将两个数组返回主函数。假设在输入过程中,保证每个数组内的第0行的元素互不重复、递增有序、并且均为正整数,每个数组内的第1行的各元素也均为正整数,程序无需判断检查。输入格式要求首先输入一个正整数(至少为2),代表该数组的列数,然后每次输入数组的一对元素(即一列元素,见后附样例)。对第二个数组重复此过程。
函数Combine。调用一次该函数,输入两个数组,完成两个数组的合并运算,并返回新的数组。对输入的两个二维正整数数组A、B,若分别为2行M列、2行N列,且它们的第0行的元素a_(0,i ),i=0,1,2,3…M,b_(0,j ),j=0,1,2,3…N分别是严格递增有序的,则可以定义两个数组的一种合并运算C=A⊹B 如下:
C中的第0行元素 c_(0,i ),i=0,1,2,3… 也是严格递增有序的,并且由A、B中所有的第0行元素构成;若A、B的第0行元素相等时,则只保留其中一个。
C中的第1行元素 c_(1,i ),i=0,1,2,3… 由生成相应c_(0,i )元素时对应的A、B的第1行元素组成;若生成c_(0,i )时,由A、B中两个相同的元素a_(0,k )、b_(0,l )保留其中一个生成,则对应的该c_(1,i )=(a_(1,k )+b_(1,l ))/2 后向下取整。
如:A=(■(1@3) ■(4@5) ■(7@4) ■(9@2))、B=(■(2@3) ■(3@5) ■(4@4) ■(5@2) ■(8@1)) ,则C=(■(1@3) ■(2@3) ■(3@5) ■(4@4) ■(5@2) ■(7@4) ■(8@1) ■(9@2))。
函数Area。调用一次该函数,输入一个二维正整数数组,完成数组的面积计算,并直接在函数内输出计算结果,结果四舍五入保留两位小数。对输入的二维正整数数组A,若该数组为2行M列,且第0行的元素a_(0,i ),i=0,1,2,3…M是严格递增有序的。则可以定义该数组的面积为:
area=∑_(i=1)^M▒((a_(1,i)+a_(1,i-1) )*(a_(0,i)-a_(0,i-1) ))/2
即,数组中对应各点连线构成的多个梯形的面积,如下图所示。
如:A=(■(1@3) ■(4@5) ■(7@4) ■(9@2)),则根据上述定义,其面积为:
area=((3+5)*(4-1))/2+((5+4)*(7-4))/2+((4+2)*(9-7))/2=31.5
函数Print。调用一次该函数,输入一个二维正整数数组,在屏幕上按顺序输出数组内各元素,每行输出为一行,行内数用空格分开。
测试数据如下:
[输入]
4
1 3
4 5
7 4
9 2
5
2 3
3 5
4 4
5 2
8 1
[合并后的数组输出]
1 2 3 4 5 7 8 9
3 3 5 4 2 4 1 2
[合并后的数组面积]
24.50
整道题如何实现
输入怎么用**A **B实现
int **combine(int **A,int **B,int m,int n,int *p){
return ;}这里return 什么啊