二维布置练习

时间:2009-11-13 15:03:42

标签: c

首先,抱歉我的语言不好。我自己在使用VC ++ Express。

现在我正在研究安排。这本书给了我一个这样的项目:

  • 制作5x5矩阵。
  • 每列都是针对受试者(其中4个)
  • 每行都是针对学生的(相同的,其中4个)
  • 每个单元格都会保存一个分数。
  • 在每行/每列的末尾,对行/列求和。

alt text http://img2.dcinside.com/viewGimage.php?no=2abcdc2aead569e96abec2b447826b2e8a31ed2bd95886ec8f7114dea41c5e0b50a950ba41f8c050e72c590e2df7750ec3b6ad8afa0bf7f7de8c653d99d03a

这是我的回答计划:

int main(void)
{
int arr[5][5];
int i,j;

while(1)
{
    printf("student: 1.Jim,2.Jombi,3.Joly,4.Moran if you done, type 0\n");
    scanf("%d", &i);

    if(i=0)
        break;

    printf("subject: 1.english,2.spanish,3.poolish,4.flash\n");
    scanf("%d", &j);

    printf("insult score!\n");
    scanf("%d", arr[i-1][j-1]);//insulting score
}

for(i=0;i<4;i++)//initialization of sum parts
{
    arr[i][4]=0;
    arr[4][i]=0;
}

for(i=0;i<4;i++)
    for(j=0;j<4;j++)
        arr[4][i]+=arr[j][i];

for(i=0;i<4;i++)
    for(j=0;j<4;j++)
        arr[i][4]+=arr[i][j];


for(i=0;i<5;i++)
{
    for(j=0;j<5;j++)
        printf("%d ",arr[i][j]);//printing result
    printf("\n");
}
return 0;
}

我完全不知道为什么这段代码不起作用。即使我只尝试“同时”部分,它也不起作用。这是为什么?

4 个答案:

答案 0 :(得分:2)

如前所述,您有if错误

if (i == 0)
/*   ^^^ */

你也有scanf错误

scanf("%d", &arr[i-1][j-1]);
/*         ^^^ */

你真的,真的,真的 shoud用一些东西(可能是零)初始化数组

int arr[5][5] = {0};

答案 1 :(得分:1)

if(i=0)

我不知道这是否是您问题的根源,但这应该是:

if(i==0)

答案 2 :(得分:0)

上次for循环中的索引是一次性的。应为4,您使用5

答案 3 :(得分:0)

有几点:

  • 您在&调用中错过了scanf()(地址)运算符,因此您将在数组中传递整数。
  • 考虑在输入循环之前只做一个简单的memset(arr, 0, sizeof arr);以确保数组是清空的,而不是嵌套的for来仅将总和归零。更安全,更短,更容易理解。
  • 添加检测,例如在输入步骤后打印矩阵,以确保它看起来没问题。