【问题标题】:C Programming 2D Array ProblemsC 编程 2D 数组问题
【发布时间】:2014-02-25 03:44:15
【问题描述】:

我在开始学习 C++ 之前正在学习 C,所以我对编程非常陌生。我正在玩二维数组,我有点理解它。但是我似乎无法弄清楚如何做到这一点:

int x, y, z[4][4], i, j;

其中 x = 10,y = 10;

for (i=0; i<4; i++)
{
  for(j=0;j<4;j++)
  {
    z[i][j]=z[x][[y];
  }
}

我希望输出是:

i=0j=0 打印z[x][y];如印刷品 10、10。

任何帮助将不胜感激。

【问题讨论】:

  • x=10, y=10z[4][4] 不正确时执行z[x][[y] 即。只有 4x4 元素。
  • 我想你可能对多维数组有些困惑。 z[i][j] 将只包含一个值,您可以使用 z[i][j] = 10(或 x、或 y 等)来设置它。

标签: c arrays multidimensional-array 2d


【解决方案1】:

您将 z[i][j] 设置为等于 z[x][y]。 X 和 Y 分别是 10 和 10,这超出了数组的范围,所以会失败

【讨论】:

    【解决方案2】:

    这里z[i][j] 只是一个值,所以它只打印 10,你必须像这样分配:

    for (i=0; i<4; i++)
    {
       for(j=0;j<4;j++)
       {
         z[i][j]=x;
       }
    }
    

    【讨论】:

      【解决方案3】:

      通过z[4][4],您将 z 声明为4x4 矩阵。

      当您尝试使用z[x][[y]; eg z[10][10]; 时,您显然是在访问矩阵范围之外的元素。

      【讨论】:

        【解决方案4】:
        #include <stdio.h>
        
        int main(){
            int x, y, z[4][4], i, j;
            int base = 65536;
        
            for (i=0; i<4; i++){
                for(j=0;j<4;j++){
                    int v;
                    x = 10 + i;
                    y = 10 + j;
                    v = x * base + y;
                    z[i][j] = v;
                }
            }
            i = 0;
            j = 0;
            if(i == 0 && j == 0)
                printf("%d, %d\n", z[i][j]/base, z[i][j] % base);
        
            return 0;
        }
        

        【讨论】:

          【解决方案5】:

          我对二维数组的理解肯定是错误的。所以我会用另一种方式来解决这个问题。假设我有以下变量。

          int student_id[10], course_id[5];

          int student_course[10][2];

          只能有 10 名学生。 只能有5门课程。 一个学生只能选修 2 门课程。

          /*prompt user for student id*/
          
          /*
          say that the value for: 
          student_id[0]=123
          */
          
          /*prompt user for course id*/
          
          /*
          say that the value for:
          course_id[0]=101
          course_id[1]=102
          course_id[2]=103
          course_id[3]=104
          course_id[4]=105
          */
          

          我要打印的是 student_course[value of student_id][value of course_id]。

          所以我想这样做:

          int student_id[10], course_id[5], student_course[10][2]
          
          int i, j, k;
          
          for(i=0; i<10;i++){
              for(j=0; j<5; j++){
          
                  /*prompt user for student id*/
                  printf("Enter User ID: ");
                  scanf("%d", &student_id[i]);
          
                  /*prompt user for course id*/
                  printf("Enter Course ID: ");
                  scanf("%d", &course_id[j]);
          
                  for(k=0; k<2; k++){
                      student_course[i][j]=student_course[i][k];
                  }
          
              }
          }
          

          如果这是错误的方法,那么获得我想要的结果的正确方法是什么?也许是一个 3 维数组?我可能还没有准备好。

          【讨论】:

            猜你喜欢
            • 2019-04-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-11-30
            • 2014-08-26
            • 1970-01-01
            相关资源
            最近更新 更多