Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将一段伪代码翻译成C_C_Pseudocode - Fatal编程技术网

将一段伪代码翻译成C

将一段伪代码翻译成C,c,pseudocode,C,Pseudocode,我有一段代码,我想用C重写。目的是将矩阵A和B相乘 for i := 1 to n do for j := 1 to n do begin C[i,j] := 0; for k := 1 to n do C[i,j] := C[i,j] + A[i,k]*B[k,j] end; 我翻译成C: int main(int argc, const char * argv[]) { int n = 2; //for

我有一段代码,我想用C重写。目的是将矩阵A和B相乘

for i := 1 to n do
    for j := 1 to n do
    begin
        C[i,j] := 0;
        for k := 1 to n do
            C[i,j] := C[i,j] + A[i,k]*B[k,j]
    end;
我翻译成C:

int main(int argc, const char * argv[])
{
    int n = 2; //for testing
    int i = n;
    int j = n;
    int k = n;

    int A[i][k];
    int B[k][j];
    int C[i][j];

    for (int i=0; i<n; i++)
    {
        for (int j=0; j<n; j++)
        {
            C[i][j]=0;
            for (int k=0; k<n; k++)
            {
                C[i][j] = C[i][j]+A[i][k]*B[k][j];
                printf("A[%d][%d]*B[%d][%d]\n", i, k, k, j);
            }
            printf("\n");
        }
    }
}
int main(int argc,const char*argv[]
{
int n=2;//用于测试
int i=n;
int j=n;
int k=n;
int A[i][k];
int B[k][j];
INTC[i][j];
对于(inti=0;i您的伪代码也是O(n^3),因此在翻译中没有任何错误

开头和结尾最有可能显示第二个for语句的范围(我认为缩进已经足够了,但对于有其他语言背景的人来说可能并不自然。)

您的伪代码也是O(n^3),因此翻译中没有任何错误


开头和结尾最有可能显示第二个for语句的范围(我认为缩进已经足够了,但对于有其他语言背景的人来说可能不太自然)。

看起来很像
Pascal
vs
C

for i := 1 to n do
  for j := 1 to n do
  begin  
    C[i,j] := 0;
    for k := 1 to n do
      C[i,j] := C[i,j] + A[i,k]*B[k,j]
  end;
“begin和end”是与“{”和“}”等价的Pascal


for(i=1;i看起来很像
Pascal
vs
C

for i := 1 to n do
  for j := 1 to n do
  begin  
    C[i,j] := 0;
    for k := 1 to n do
      C[i,j] := C[i,j] + A[i,k]*B[k,j]
  end;
“begin和end”是与“{”和“}”等价的Pascal


for(i=1;i为什么不应该得到n^3个输出?毕竟,您正在运行
printf
n^3次。此外,您正在打印
A
。我想您想要打印
C
。对吗?因此,即使您的处理需要
n^3
,当您完成后,您也可以遍历
C
中的所有值(
N^2
)并将其打印出来。我的问题是,两个矩阵相乘是否必须是O(N^3)?它看起来像C[I][j]被赋予一个新元素n^3次,而C中有n^2个元素。我理解为什么/如何输出n^3,但对将矩阵a和B与上述代码相乘的逻辑感到困惑。@stevendao请看。它是O(n^3)我现在明白了,谢谢你。为什么你不应该得到n^3个输出?毕竟你正在运行
printf
n^3次。此外,你正在打印
A
。我想你想打印
C
。对吗?所以,即使你的处理需要
n^3
,当你完成后,你也可以检查
C
中的所有值(
N^2
)并将其打印出来。我的问题是,两个矩阵相乘是否必须是O(N^3)?它看起来像C[I][j]被赋予一个新元素n^3次,而C中有n^2个元素。我理解为什么/如何输出n^3,但对将矩阵a和B与上述代码相乘的逻辑感到困惑。@stevendao看。我现在理解的是O(n^3),谢谢。谢谢,我解决了我的问题。谢谢,我解决了我的问题。