【问题标题】:How do you use a loop to enter values into an array of a specific size in C?如何使用循环将值输入到 C 中特定大小的数组中?
【发布时间】:2021-12-04 14:04:37
【问题描述】:

我正在制作一个简单的程序,要求用户在 3x3 和 4x4 数组之间进行选择。当他们选择他们想要的数组时,它将初始化一个该大小的数组,程序将要求用户一个一个地输入值(先按列上升,然后按行上升)。在他们输入数组的所有值后,它将以“类似表格”的结构显示数组中的值,并显示该数组中所有值的总和。代码非常重复,可能很难调试。我还没有为此使用循环的逻辑,但我想要一个循环反复要求用户将值输入到 4x4 数组中,从第 1 行第 1 行到第 4 行第 4 列(当它到达第 4第 1 行的列,然后要求用户输入第 2 行的第 1 列,依此类推,直到数组结束。

#include <stdio.h>

int main(){
    
    int choice;
    while(choice != 1 && choice !=2){
        printf("Choose Matrix Size:\n");
        printf("1. 3x3\n");
        printf("2. 4x4\n");
        printf("Choice: ");
        scanf("%d", &choice);
    }
    
    int sumRow1, sumRow2, sumRow3, sumRow4, sumMatrix3, sumMatrix4;
    switch(choice){
        case 1:
            int square3[3][3];
            printf("Enter value for row 1 column 1: ");
            scanf("%d", &square3[1][1]);
            printf("Enter value for row 1 column 2: ");
            scanf("%d", &square3[1][2]);
            printf("Enter value for row 1 column 3: ");
            scanf("%d", &square3[1][3]);
            printf("Enter value for row 2 column 1: ");
            scanf("%d", &square3[2][1]);
            printf("Enter value for row 2 column 2: ");
            scanf("%d", &square3[2][2]);
            printf("Enter value for row 2 column 3: ");
            scanf("%d", &square3[2][3]);
            printf("Enter value for row 3 column 1: ");
            scanf("%d", &square3[3][1]);
            printf("Enter value for row 3 column 2: ");
            scanf("%d", &square3[3][2]);
            printf("Enter value for row 3 column 3: ");
            scanf("%d", &square3[3][3]);
            printf("\n");
            
            printf("Matrix Results:\n");
            printf("| %d %d %d |\n", square3[1][1], square3[1][2], square3[1][3]);
            printf("| %d %d %d |\n", square3[2][1], square3[2][2], square3[2][3]);
            printf("| %d %d %d |\n", square3[3][1], square3[3][2], square3[3][3]);
            
            sumRow1 = square3[1][1] + square3[1][2] + square3[1][3];
            sumRow2 = square3[2][1] + square3[2][2] + square3[2][3];
            sumRow3 = square3[3][1] + square3[3][2] + square3[3][3];
            sumMatrix3 = sumRow1 + sumRow2 + sumRow3;
            
            printf("Matrix Sum: %d", sumMatrix3);
            break;
            
        case 2:
            int square4[4][4];
            printf("Enter value for row 1 column 1: ");
            scanf("%d", &square4[1][1]);
            printf("Enter value for row 1 column 1: ");
            scanf("%d", &square4[1][2]);
            printf("Enter value for row 1 column 1: ");
            scanf("%d", &square4[1][3]);
            printf("Enter value for row 1 column 1: ");
            scanf("%d", &square4[1][4]);
            printf("Enter value for row 1 column 1: ");
            scanf("%d", &square4[2][1]);
            printf("Enter value for row 1 column 1: ");
            scanf("%d", &square4[2][2]);
            printf("Enter value for row 1 column 1: ");
            scanf("%d", &square4[2][3]);
            printf("Enter value for row 1 column 1: ");
            scanf("%d", &square4[2][4]);
            printf("Enter value for row 1 column 1: ");
            scanf("%d", &square4[3][1]);
            printf("Enter value for row 1 column 1: ");
            scanf("%d", &square4[3][2]);
            printf("Enter value for row 1 column 1: ");
            scanf("%d", &square4[3][3]);
            printf("Enter value for row 1 column 1: ");
            scanf("%d", &square4[3][4]);
            printf("Enter value for row 1 column 1: ");
            scanf("%d", &square4[4][1]);
            printf("Enter value for row 1 column 1: ");
            scanf("%d", &square4[4][2]);
            printf("Enter value for row 1 column 1: ");
            scanf("%d", &square4[4][3]);
            printf("Enter value for row 1 column 1: ");
            scanf("%d", &square4[4][4]);
            printf("\n");
            
            printf("Matrix Result:\n");
            printf("| %d %d %d %d |\n", square4[1][1], square4[1][2], square4[1][3], square4[1][4]);
            printf("| %d %d %d %d |\n", square4[2][1], square4[2][2], square4[2][3], square4[2][4]);
            printf("| %d %d %d %d |\n", square4[3][1], square4[3][2], square4[3][3], square4[3][4]);
            printf("| %d %d %d %d |\n", square4[4][1], square4[4][2], square4[4][3], square4[4][4]);
            
            sumRow1 = square4[1][1] + square4[1][2] + square4[1][3] + square4[1][4];
            sumRow2 = square4[2][1] + square4[2][2] + square4[2][3] + square4[2][4];
            sumRow3 = square4[3][1] + square4[3][2] + square4[3][3] + square4[3][4];
            sumRow4 = square4[4][1] + square4[4][2] + square4[4][3] + square4[4][4];
            sumMatrix4 = sumRow1 + sumRow2 + sumRow3 + sumRow4;
            
            printf("Matrix Sum: %d", sumMatrix4);
            break;
    }
    
    return 0;
}

【问题讨论】:

  • 在 C 中,提醒数组从 0 而不是 1 开始,因此请确保您使用 0 而不是 1 访问第一个索引

标签: arrays c loops


【解决方案1】:

由于您可以在 4x4 矩阵中存储 3x3 矩阵,因此您无需声明 2 个矩阵。

int square[4][4];

声明一个变量调用大小​​来存储正方形的大小。

int size;

if (choice == 1) 
{
   size = 3;
}
else 
{
   size = 4;
}

现在你可以遍历数组了:

for (int row = 0; row < size; row++)
{
   for (int column = 0; column < size; column++) 
   {
      printf(“Square[%d][%d]=“);
      scanf(“%d”, &square[row][column]);
    }
 }

使用类似的循环进行打印

【讨论】:

  • OP 使用的是 C 而不是 C++,请调整 IO 代码以使用 printfscanf 而不是 coutcin,因为他们无法访问这些代码
  • @joshmeranda 是的。当我点击答案时,我忘记了它是 c++ 还是 c :((。谢谢
  • 不用担心这是一个更容易犯的错误,也是一个容易错过的错误:)
【解决方案2】:

如果您了解指针,它将使生活变得轻松。但如果你不这样做,一个简单的方法就是将 n 作为输入,然后遍历它:

int main(){
        int n, i, j;
        scanf(“%d”, &n);
        int arr[n][n];
        for(i = 0; i < n; i++){
                for(j = 0; j < n; j++){
                        printf(“Enter the value at [%d][%d]”, i, j);
                        scanf(“%d”, &arr[i][j]);
                }
        }
}

P.S:请忽略缩进,因为我是用手机输入的。

此外,您不需要切换大小写,因为您可以直接从用户输入分配大小,除非您特别希望 1 对应于大小 3,而 2 对应于大小 4。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-09
    • 1970-01-01
    • 2021-11-04
    • 2023-03-30
    相关资源
    最近更新 更多