#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;
}
它的输出是 这是我真正想做的,但现在我需要让它看起来像
现在我对如何做到这一点没有任何想法,现在这让我感到很伤心
答案 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)
这很简单,你有三个不同的案例:
c
和x
相等,则您的网格显示为零x
大于c
,则网格显示为1 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
矩阵的first
和last
列second
和second last
。多数民众赞成
答案 4 :(得分:0)
#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*)