矩阵1和2的逻辑乘以C中的“与”和“或”运算

问题描述 投票:1回答:1

这是问题:

逻辑矩阵是一个矩阵,其中所有元素均为0或1.

我们通过运算定义矩阵A和B的逻辑乘法定义如下,其中“·”是逻辑AND运算,“ +”是逻辑或运算。

在此作业中,您将创建两个5x5逻辑矩阵并找到相应的矩阵将通过“乘”这2个来创建矩阵

  1. 定义全局大小等于5(已在模板中定义)

  2. 编写一个获取矩阵引用并读取输入的函数用户的矩阵。如果输入非零,则将其替换为1。如果用户在行尾之前没有输入足够的值,矩阵中的其余单元格将填充零。也确保如果用户输入的字符过多,您只能输入需要并丢弃剩余的输入。 (例如:1509是2x2矩阵,值1101,而“ 1 5”也是值为1111的2x2矩阵,如上所述,突出显示的空格被视为1。)

    功能签名:void read_mat(int mat[][SIZE])

  3. 编写一个将两个矩阵相乘的函数并将结果输入具有适当尺寸的第三个矩阵中。

    功能签名:void mult_mat(int mat1[][SIZE],int mat2[][SIZE], int result_mat[][SIZE])

  4. 编写一个将矩阵打印到屏幕中的函数。请用“%3d”表示打印格式,如下所示。

    功能签名:void print_mat(int mat[][SIZE])

  5. 编写使用上述功能的主程序。该程序从用户读取矩阵值,将其相乘并打印屏幕上的结果矩阵。

给出的函数定义是有意返回的声明为无效。不要更改它们。数组在用作引用,而不是像变量一样的基元。所以函数定义是完全有效的。另外,对用户的输入。您只能读取所需的数字,并且然后停止阅读,并丢弃其余的输入。

这是我的代码:

#include <stdio.h>
#define SIZE 5

void read_mat(int mat[][SIZE],int size)
{
    int  i = 0, j = 0, k = 0; 
    char c; 
    c=getchar();
    while(c!='\n' && k<size*size){
        if(c!='0'){
            mat[i][j]=1;
            j++;
        }
        else{
            mat[i][j]=0;
            j++;
        }
        if (j >= size){
            j = 0;
            i++;
        }
        if (i >= size){
            return;
        }
        c=getchar();
        k++;
    }
}


void mult_mat(int mat1[][SIZE], int mat2[][SIZE], int result_mat[][SIZE])
{
    int i,j,k;
    for (i = 0; i <SIZE; ++i){
        for (j = 0; j <SIZE; ++j)
        {
            result_mat[i][j] = 0;
            for (k = 0; k < SIZE; ++k)
                result_mat[i][j] += mat1[i][k] * mat2[k][j];
                if(result_mat[i][j]!=0){
                    result_mat[i][j]=1;
                }
        }
    }



}

void print_mat(int mat[][SIZE],int size)
{
    int i, j;
    for (i = 0; i < SIZE; i++) {
        for (j = 0; j < SIZE; j++)
            printf("%3d", mat[i][j]);
        printf("\n");
    }

    //Please use the "%3d" format to print for uniformity.
}

int main()
{
    int mat1[SIZE][SIZE]={ 0 }, mat2[SIZE][SIZE]={ 0 }, res_mat[SIZE][SIZE]={0};
    printf("Please Enter Values For Matrix 1\n");
    read_mat(mat1,SIZE);

    printf("Please Enter Values For Matrix 2\n");
    read_mat(mat2,SIZE);

    mult_mat(mat1,mat2,res_mat);

    printf("The First Matrix Is :- \n");
    print_mat(mat1,SIZE);


    printf("The Second Matrix Is :- \n");
    print_mat(mat2,SIZE);

    printf("The Resultant Matrix Is :- \n");
    print_mat(res_mat,SIZE);

    return 0;
}

输入和输出应该像这样:

Please Enter Values For Matrix 1
111000654987010
Please Enter Values For Matrix 2
11 53
The First Matrix Is :-
  1  1  1  0  0
  0  1  1  1  1
  1  1  0  1  0 
  0  0  0  0  0
  0  0  0  0  0

The Second Matrix Is :-
  1  1  1  1  1
  1  0  0  0  0
  0  0  0  0  0
  0  0  0  0  0
  0  0  0  0  0
The Resultant Matrix Is :-
  1  1  1  1  1
  1  0  0  0  0
  1  1  1  1  1
  0  0  0  0  0
  0  0  0  0  0


问题:

当我在mat1中输入一个大字符串时,它是直接计算的,而没有让我在mat2中输入字符串。如何解决此问题?

Please Enter Values For Matrix 1
6475465176547650654605836574657625846071654047
Please Enter Values For Matrix 2
The First Matrix Is :-
  1  1  1  1  1
  1  1  1  1  1
  1  1  1  1  1
  0  1  1  1  1
  0  1  1  1  1
The Second Matrix Is :-
  1  1  1  1  1
  1  1  1  1  1
  1  0  1  1  1
  1  1  0  1  1
  0  0  0  0  0
The Resultant Matrix Is :-
  1  1  1  1  1
  1  1  1  1  1
  1  1  1  1  1
  1  1  1  1  1
  1  1  1  1  1
c multidimensional-array getchar
1个回答
1
投票
if (i >= size){
    return;
}
c=getchar();

一旦您阅读了足够的字符,您就可以从函数中返回而不消耗额外的字符。您需要更改逻辑以继续调用getchar()直到击中'\n',但如果i >= size,则只丢弃那些字符。

while(c!='\n'){
    if(i < size){
        if(c!='0'){
            mat[i][j]=1;
            j++;
        }
        else{
            mat[i][j]=0;
            j++;
        }
        if (j >= size){
            j = 0;
            i++;
        }
    }
    c=getchar();
}
© www.soinside.com 2019 - 2024. All rights reserved.