作业帮 > 综合 > 作业

编写程序实现:用rand()函数生成两个矩阵的各个元素,

来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/04/28 14:22:30
编写程序实现:用rand()函数生成两个矩阵的各个元素,
(1)两个矩阵相加后,生成一个新的矩阵.
(2)两个矩阵的乘积.
void display(int T[][MAXSIZE],int row,int col)这个是什么意思呢?我是初学者,这个都写超出能力外.
#include
using namespace std;
int main()
{ int a[2][3];
int i,j;
srand(100);
for(i=0;i
(1)两个矩阵相加后,生成一个新的矩阵.#include <stdio.h>
#include <stdlib.h>       //为rand()及srand()提供函数声明
#include <time.h>
#define MAXSIZE 20
void display(int T[][MAXSIZE], int row, int col)
{
    //函数功能:输出矩阵信息
    int i, j;
                                                                       
    for(i = 0; i < row; i++)
    {
        for(j = 0; j < col; j++)
            printf("%5d", T[i][j]);
        printf("\n");
    }
}
int main()
{
    int A[MAXSIZE][MAXSIZE], B[MAXSIZE][MAXSIZE],C[MAXSIZE][MAXSIZE],
        row, col;
    int i, j;
                                                                       
    /*
    **提示,并接受用户输入的信息
    */
    printf("现在有2个大小相同(同行同列)的矩阵\n");
    printf("矩阵有多少行: ");
    scanf("%d", &row);
    printf("矩阵有多少列: ");
    scanf("%d", &col);
                                                                       
    /*
    **为i行j列的矩阵分配i*j个0到9的随机数 , 并实现两个矩阵的加法
    */
    srand(time(NULL));
    printf("现在分别为2个矩阵随机分配%d个(0~9)随机数", row * col);
    for(i = 0; i < row; i++)
        for(j = 0; j < col; j++)
        {
            //生成随机数
            A[i][j] = rand()/(RAND_MAX/10);
            B[i][j] = rand()/(RAND_MAX/10);
                                                                               
            //实现A+B        
            C[i][j] = A[i][j] + B[i][j];
        }
                                                                           
    /*
    **输出矩阵的信息
    */
    printf("\n矩阵A的信息: \n");
    display(A, row, col);
    printf("\n矩阵B的信息: \n");
    display(B, row, col);
    printf("\n矩阵A+B的信息: \n");
    display(C, row, col);
                                                                           
    return 0;
}

(2)两个矩阵的乘积.#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAXROW 10 + 5
#define MAXCOL 10 + 5
int main()
{
    int A[MAXROW][MAXCOL], B[MAXROW][MAXCOL], C[MAXROW][MAXCOL];
    int i, j, k, A_row, A_col, B_row, B_col;
                                                   
    srand(time(NULL));
                                                   
    printf("请输入第一个矩阵的行和列, 例如9行3列, 可以输入9 3: ");
    scanf("%d%d", &A_row, &A_col);
                                                   
    printf("请输入第二个矩阵的行和列, 例如9行3列, 可以输入9 3: ");
    scanf("%d%d", &B_row, &B_col);
                                                   
    //输入不合法, 结束程序
    if(A_col != B_row)
    {
        printf("因为第一个矩阵的列数和第二个矩阵的行数不相等, 所以它们的乘法是未定义的.\n结束\n");
        return 0;
    }
                                                   
    //插入随机数
    for(i = 0; i < A_row; i++)
        for(j = 0; j < A_col; j++)
            A[i][j] = rand()/(RAND_MAX/10);
                                                   
    for(i = 0; i < B_row; i++)
        for(j = 0; j < B_col; j++)
            B[i][j] = rand()/(RAND_MAX/10);
                                                   
                                                   
    for(i = 0; i < A_row; i++)
    {
        for(j = 0; j < B_col; j++)
        {
            C[i][j] = 0;
            for(k = 0; k < A_col; k++)
                C[i][j] += A[i][k] * B[k][j];
        }
    }
                                                   
    printf("第一个矩阵的数据是: \n");
    for(i = 0; i < A_row; i++)
    {
        for(j = 0; j < A_col; j++)
            printf("%5d", A[i][j]);
        printf("\n");
    }
                                                   
    printf("第二个矩阵的数据是: \n");
    for(i = 0; i < B_row; i++)
    {
        for(j = 0; j < B_col; j++)
            printf("%5d", B[i][j]);
        printf("\n");
    }
                                                   
    printf("两个矩阵相乘后的数据是: \n");
    for(i = 0; i < A_row; i++)
    {
        for(j = 0; j < B_col; j++)
            printf("%5d", C[i][j]);
        printf("\n");
    }
                                                           
    return 0;
}

PS:若有不明白的地方,可以追问
再问: void display(int T[][MAXSIZE], int row, int col)这个是什么意思呢?
再答: void display(int T[][MAXSIZE], int row, int col) 这个函数是自定义函数, 函数实现的功能是将T这个二维数组中的数据输出, 其中row是行, col是列
再问: 我们是要先输出两个矩阵,然后矩阵相加相乘,这些要在一个程序中完成才行呢。
再答: 那楼主你一开始写题目要求的时候就应该写明白。。。。。。 我改一下程序, 等等私信给你, 怎么样
再问: 一开始把题复制上系统说太长,才把要求和题分开的。谢谢。
再答: 这个两个程序组合在一起的话, 对矩阵是有要求的 因为对于矩阵加法来说, 它的矩阵的格式要求是两个矩阵的行和列都要相等 对于矩阵乘法来说, 他的矩阵的格式要求是第一个矩阵的列一定要和第二个矩阵的行相等, 不然矩阵的结果是未定义的 如果要按照楼主你的要求写的话,那么矩阵只能是N行*N列的矩阵了, 即行和列是一样的 如果是这样的话,那么我就写一个给你