我需要仅使用系统调用打印出矩阵乘法的结果。我得到了正确的结果,但没有采用适当的格式。我得到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);
}
提前致谢!
答案 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
)。