北航 2011年考研复试题2

2. 【问题描述】

先输入两个矩阵A和B,然后输入替换位置(左上角),编写程序将矩阵A中从替换位置开始的子矩阵(与B同样大小)替换为B,并输出替换后的矩阵。

【输入形式】

从控制台先输入矩阵A的行数和列数(行数和列数均大于等于1,小于等于20),然后在新的行上输入矩阵A的各行数字(以一个空格分隔的整数)。再以同样的方式输入矩阵B。最后输入替换位置(用一个空格分隔的两个整数表示,行数和列数都从1开始计数,因此两个整数都大于等于1)。若替换位置超出了矩阵A的行数或列数,则原样输出矩阵A。

【输出形式】

在标准输出上分行输出替换后的矩阵,每行中各数字之间以一个空格分隔。

【输入样例1】

5 6

10 2 34 -1 800 90

2 76 56 -200 23 1

35 0 0 98 8 3000

2000 100 -1 1 2 0

8 7 85 963 496 8

2 3

9 9 9

9 9 9

3 3

【输出样例1】

10 2 34 -1 800 90

2 76 56 -200 23 1

35 0 9 9 9 3000

2000 100 9 9 9 0

8 7 85 963 496 8

【样例1说明】

输入的矩阵A为5行6列,矩阵B是2行3列,替换位置为第3行的第3列,即:将A中第3行第3列开始的、行数为2列数为3的子矩阵替换为B。

【输入样例2】

3 4

10 2 34 -1

2 76 56 -200

35 0 0 98

2 3

9 9 9

9 9 9

2 3

【输出样例2】

10 2 34 -1

2 76 9 9

35 0 9 9

【样例2说明】

输入的矩阵A为3行4列,矩阵B是2行3列,替换位置为第2行的第3列,即:将A中第2行第3列开始的、行数为2列数为3的子矩阵替换为B。但该子矩阵超出了A的范围,所以只实现了部分替换。

【评分标准】

该题要求输出替换后的矩阵,共有5个测试点,提交程序文件名为example2.c或example2.cpp。

#include <string.h>
#include <stdio.h>
#include<stdlib.h>
int main()
{
    int a[20][20],b[20][20];
    int i,j,ra,ca,rb,cb;
    int r,c;//替换位置
    scanf("%d%d",&ra,&ca);
    for(i=1;i<=ra;i++)
        for(j=1;j<=ca;j++)
            scanf("%d",&a[i][j]);
    scanf("%d%d",&rb,&cb);
    for(i=1;i<=rb;i++)
        for(j=1;j<=cb;j++)
            scanf("%d",&b[i][j]);
    scanf("%d%d",&r,&c);
    for(i=r;i<=r+rb;i++)
        for(j=c;j<=c+cb;j++)
        {
            if(r>ra || c>ca)
                    break;
            else
                a[i][j]=b[i-r+1][j-c+1];
        }
    for(i=1;i<=ra;i++)
    {
        for(j=1;j<=ca;j++)
            printf("%d ",a[i][j]);
        printf("
");
    }
    
    return 0;
    
}
原文地址:https://www.cnblogs.com/Xilian/p/3827182.html