我怎么能再这样做?在C.

时间:2013-12-13 07:57:56

标签: c arrays

#define G 10
int main(){
int grid[G][G],c,x;
for(c=1;c<=5;c++){
    for(x=1;x<=5;x++){
        if(c+x<=5)
            grid[c][x]=+1;
        else if(c+x>=7)
            grid[c][x]=-1;
        else
            grid[c][x]=0;

        printf("%2d\t ",grid[c][x]);
    }
    printf("\n");
}
getch();
return 0;
}

它的输出是 enter image description here 这是我真正想做的,但现在我需要让它看起来像 enter image description here

现在我对如何做到这一点没有任何想法,现在这让我感到很伤心

7 个答案:

答案 0 :(得分:2)

我会这样做

for(c=0; c<5; c++) {     /* arrays start at 0, not 1. */
  for(x=0; x<5; x++) {   /* arrays start at 0, not 1. */
    if (c == x) {        /* looking at your output, the 0's occur when c == x */
      grid[c][x] = 0;
    } else if (c > x) {  /* the -1 when c > x */
      grid[c][x] = -1;
    } else {             /* obviously c > x */
      grid[c][x] = 1;
    }
    /* nothing else changed */
    printf("%2d\t ",grid[c][x]);
  }
  printf("\n");
}

答案 1 :(得分:2)

这很简单,你有三个不同的案例

  • 如果cx相等,则您的网格显示为零
  • 如果x大于c,则网格显示为1
  • else(即x小于c时),您的网格显示为-1

基本上,我们已经在循环中编写了你需要的if-else结构来获得所需的输出:

if (c == x) grid[c][x] = 0;
else if (x > c) grid[c][x] = 1;
else grid[c][x] = -1;

因此,完整代码如下所示:

#include <stdio.h>
#define G 10
int main()
{
    int grid[G][G],c,x;
    for(c=0;c<5;++c)
    {//zero indexed
        for(x=0;x<5;++x)
        {//perhaps change 5 with G, or another macro or some int
            if(c == x) grid[c][x] = 0;
            else if (c < x) grid[c][x] = 1;//1 is fine, the + is not required
            else grid[c][x] = -1;
            printf("%2d\t ",grid[c][x]);
        }
        printf("\n");
    }
    return 0;
}

哪个as you can see on this codepad工作得很好。
注意:
正如我所说,+中的+1是可选的。我甚至建议不要这样做。如果我碰巧遇到像some_int = +1;这样的陈述,我可能会认为这是一个错误,它应该是some_int += 1;,这是一个不同的东西。

答案 2 :(得分:1)

矩阵的主要对角线是符合row==column条件的元素集合。另外,我们知道对角线上方(右侧)的行和列元素符合row<column,低于row>column条件。以下是如何制作该矩阵,同时让我们展示它们:

#define G 5 
int grid[G][G], row, column;
for (row =0; row < G; row++) {
    for (column =0; column <  G; column++) {
        if (row<column)
            grid[row][column] = 1;
        else if (row>column)
            grid[row][column] = -1;
        else
            grid[row][column] = 0;

        printf("%2d\t ", grid[row][column]);
    }
    printf("\n");
}

这是输出:

 0        1       1       1       1      
-1        0       1       1       1      
-1       -1       0       1       1      
-1       -1      -1       0       1      
-1       -1      -1      -1       0 

这就是你的问题。

  • 您选择了次要(次要)对角线而不是主
  • 手动完成索引处理。手动计算条件。这不好

以下是如何在没有手动计算条件的情况下对小对角线进行操作

  #define G 5
int grid[G][G], row, column ;
for(row=0;row<G;row++){
    for(column=0;column< G;column++){
        if(row+column<G-1)
            grid[row][column]=1;
        else if(row+column>G-1)
            grid[row][column]=-1;
        else /*minor diagonal meet  row==(G-1)-column  //G-1 cause index begins from 0*/
            grid[row][column]=0;

        printf("%2d\t ",grid[row][column]);
    }
    printf("\n");
}

答案 3 :(得分:0)

现在Swap矩阵的firstlastsecondsecond last。多数民众赞成

答案 4 :(得分:0)

Example

#include <stdio.h>
#define G 10
int i,j;
int grid[G][G];
int main() {
    for(i=0; i<G; i++) {
        for(j=0; j<G; j++) {
            if(i==j) grid[i][j]=0;
            else if(i<j) grid[i][j]=1;
            else if(i>j) grid[i][j]=-1;
            printf("%2d\t", grid[i][j]);
        }
        printf("\n");
    }
    return 0;
}

答案 5 :(得分:0)

您可以修改您的程序,如下所示:

1,for(c=1;c<=5;c++) - &gt; for(c=5;c>=1;c--)

2,grid[c][x]=+1; - &gt; grid[c][x]=-1;

3,grid[c][x]=1; - &gt; grid[c][x]=+1;

#define G 10
int main(){

int grid[G][G],c,x;

for(c=5;c>=1;c--){

for(x=1;x<=5;x++){    
    if(c+x<=5)
        grid[c][x]=-1;
    else if(c+x>=7)
        grid[c][x]= 1;
    else
        grid[c][x]=0;

    printf("%2d\t ",grid[c][x]);
}
printf("\n");
}
getch();
return 0;
}

答案 6 :(得分:0)

您需要创建一个2D矩阵,其中矩阵对角线为零,上三角形为1,下三角形为-1。 所以,

if **row == column** , then assign 0 to diagonal. (**grid[row][column] = 0**)
else if , **row < column**, then assign 1 to upper triangle. (*grid[row][column*] = 1)
else, **row > column**, then assign -1 to lower triangle. (*grid[row][column] = -1*)