打印结果与系统调用类似矩阵样式

时间:2016-10-30 16:53:46

标签: c system-calls matrix-multiplication

我需要仅使用系统调用打印出矩阵乘法的结果。我得到了正确的结果,但没有采用适当的格式。我得到1000x1000行,但我需要1000列x 1000行。知道怎么做吗?

这是我写的代码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>

#define N 1000

// Matrix 
long long int A[N][N],B[N][N],R[N][N];

int main(int argc, char *argv[])
{
    int x,y,z;
    char str[100];

    /* Matrix inicialization */
    for(y=0;y<N;y++) 
        for(x=0;x<N;x++)
        {
            A[y][x]=x;
            B[y][x]=y;
            R[y][x]=0;  
        }

    /* Matrix multiplication */
    for(y=0;y<N;y++)
        for(z=0;z<N;z++) 
            for(x=0;x<N;x++) 
            {
                R[y][x]+= A[y][z] * B[z][x];    
            }

   /* Printing result */
    for(y=0;y<N;y++)
        for(x=0;x<N;x++)
        {
            sprintf(str, "%lli\n", R[y][x]);
            write(1, str, strlen(str));
        }

    exit(0);
}

提前致谢!

1 个答案:

答案 0 :(得分:1)

sprintf()更改为用空格分隔数字,并在矩阵的每一行末尾输出换行符:

#include <stdio.h>
#include <string.h>
#include <unistd.h>

#define N 1000

// Matrix
long long int A[N][N], B[N][N], R[N][N];

int main(void)
{
    int x, y, z;
    char str[100];

    /* Matrix inicialization */
    for (y = 0; y < N; y++)
    {
        for (x = 0; x < N; x++)
        {
            A[y][x] = x;
            B[y][x] = y;
            R[y][x] = 0;
        }
    }

    /* Matrix multiplication */
    for (y = 0; y < N; y++)
    {
        for (z = 0; z < N; z++)
        {
            for (x = 0; x < N; x++)
            {
                R[y][x] += A[y][z] * B[z][x];
            }
        }
    }

    /* Printing result */
    for (y = 0; y < N; y++)
    {
        const char *pad = "";
        for (x = 0; x < N; x++)
        {
            sprintf(str, "%s%lli", pad, R[y][x]);
            write(1, str, strlen(str));
            pad = " ";
        }
        write(1, "\n", 1);
    }

    return(0);
}

我对矩阵乘法算法是否正确有所保留;我为每个单元格打印了相同的值(332833500)。