菜菜 捞捞 2022-05-12 10:29 采纳率: 100%
浏览 263
已结题

一个二维数组中的若干行数据按要求插入到另一个二维数组中

5.(江苏省二级C等级考试题目
【程序功能】
将一个二维数组中的若干行数据按要求插入到另一个二维数组中。
【编程要求】
1 .定义符号常量N代表4
2 .编写函数int insert_row(int a[][N], int n, int b[][N], int m)。已知形参a指向的二维数组(简称a数组)前n行数据已按每行数据前两列之和升序排列,形参b指向的二维数组中有m行数据。insert_row函数实现将b数组中m行数据插入到a数组中,完成插入操作后a数组中所有行的数据仍按每行前两列数据之和升序排列。函数返回a数组中有效数据的行数。
3 .编写main函数。读入两个二维数组a,b的行数,再读入a和b,用a和b数组作为实参调用insert_row函数将b数组中的数据插入到a数组中。输出a数组中全部数据到屏幕
【测试数据与运行结果】
输入数据:
2 2
2 2 3 4
9 10 11 12
1 4 5 7
5 10 15 20
输出数据:
2 2 3 4
1 4 5 7
5 10 15 20
9 10 11 12
【注意】:以下程序代码只允许添加不允许修改。
#include <malloc.h>
#include <stdio.h>
#define N 4
typedef int (*MATRIX)[N];
void read(int (*a)[N],int n){
int i, j;
for (i = 0; i < n; i++)
for (j = 0; j < N; j++)
scanf("%d", &a[i][j]);
}
int insert_row(int a[][N], int n, int b[][N], int m){
}
void print(int(*a)[N], int m){
int i, j;
for (i = 0; i < m; i++)
{
for (j = 0; j < N; j++)
printf("%d ", a[i][j]);
putchar('\n');
}
}
int main(){
int m, n;
int(*a)[N],(*b)[N];
scanf("%d%d", &n, &m);
a = (MATRIX)malloc(N * sizeof(int) * (n+m));
b = (MATRIX)malloc(N * sizeof(int) * m);
read(a,n); //读入n行
read(b,m); //读入m行
n=insert_row(a, n, b, m);
print(a, n);
free(a);
free(b);
}

  • 写回答

2条回答 默认 最新

  • 关注

    不是已经提问了一个了吗?只是排序一个if语句不同。

    img

    代码如下:

    
    #include <malloc.h>
    #include <stdio.h>
    #define N 4
    typedef int(*MATRIX)[N];
    void read(int(*a)[N], int n) {
        int i, j;
        for (i = 0; i < n; i++)
            for (j = 0; j < N; j++)
                scanf("%d", &a[i][j]);
    }
    int insert_row(int a[][N], int n, int b[][N], int m) {
        int sum1, sum2;
        int i, j, k, tmp;
        //1.先将b插入a中
        for (i = 0; i < m; i++)
        {
            for (j = 0; j < N; j++)
                a[n + i][j] = b[i][j];
        }
        //2.排序
        for (i = 0; i < n + m - 1; i++)
        {
            for (j = 0; j < n + m - 1 - i; j++)
            {
                //计算第j行的前两列的和
                sum1 = a[j][0] + a[j][1];
                sum2 = a[j + 1][0] + a[j + 1][1];
                //比较
                if (sum1 > sum2)
                {
                    //第j行和第j+1行交换
                    for (k = 0; k < N; k++)
                    {
                        tmp = a[j][k];
                        a[j][k] = a[j + 1][k];
                        a[j + 1][k] = tmp;
                    }
                }
            }
        }
    
        return (m+n);
    
    }
    void print(int(*a)[N], int m) {
        int i, j;
        for (i = 0; i < m; i++)
        {
            for (j = 0; j < N; j++)
                printf("%d ", a[i][j]);
            putchar('\n');
        }
    }
    int main() {
        int m, n;
        int(*a)[N], (*b)[N];
        scanf("%d%d", &n, &m);
        a = (MATRIX)malloc(N * sizeof(int) * (n + m));
        b = (MATRIX)malloc(N * sizeof(int) * m);
        read(a, n); //读入n行
        read(b, m); //读入m行
        n = insert_row(a, n, b, m);
        print(a, n);
        free(a);
        free(b);
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 5月20日
  • 已采纳回答 5月12日
  • 创建了问题 5月12日

悬赏问题

  • ¥20 关于php录入完成后,批量更新数据库
  • ¥15 请教往复密封润滑问题
  • ¥15 cocos creator发布ios包
  • ¥15 comsol压电材料数据
  • ¥35 用python实现除法算法中goldschmidt算法
  • ¥15 汇编代码转换成C代码
  • ¥15 除法算法中的归一化具体是怎么变的?
  • ¥20 集成电路的逻辑电路和晶体管简化图
  • ¥15 下载windows builder后的问题
  • ¥15 端口连接数为什么会有限制