gpt4 book ai didi

c - 一次并排打印两个具有特定字符数的数组

转载 作者:太空狗 更新时间:2023-10-29 15:50:20 25 4
gpt4 key购买 nike

我刚开始学习 C。今天我遇到一个问题,我必须输入 2 个矩阵(行数和列数由用户指定)并添加它们。我很容易地完成了添加和其他部分。但我正在考虑让它看起来更好。所以我的想法是:假设用户输入一个 3x3 大小的矩阵。假设他选择了以下元素->

Matrix 1->   
1 2 3
4 5 6
7 8 9

Matrix 2->
9 8 7
6 5 4
3 2 1

我希望它们显示为->

| 1 2 3        +       9 8 7 |
| 4 5 6 + 6 5 4 |
| 7 8 9 + 3 2 1 |

(不,不是实际的加法,只是这种格式,然后在下一行中给出加法的答案)。但问题是,我无法显示右手边的一半。

我的输出如下:

| 1 2 3        +       9 8 7 |
| 4 5 6 + |
| 7 8 9 + |

我已经尝试了很多让剩余的字符以正确的顺序显示,但遇到了一些或其他类似的问题。到目前为止,这是我的代码(它不是最新的,我已经尝试将它弄得更糟,但最新的代码通过引入许多我认为甚至不需要的变量而进一步弄乱了它。所以我会发布我的迄今为止最好的进展)。

printf("| ");
i = 0; //A global int loop variable defined somewhere

width2 = width; //Another width variable in case I need it in second array, width is variable for number of elements in a row of array. In above example, width=3

for (ii = 0; ii < width * height; ii++) { //ii is just like i, another global int loop variable. Height is number of characters in a row (in above example 3)
if (ii != 0) {
if (ii % width == 0) {
printf(" |\n| ");
}
}

printf("%d ", row1[ii]); //For printing out first (left) set of numbers. row1 is where my matrix 1 array values are stored.

if (((ii + 1)*(width - 1)) % (width * 2) == 0) { //I think this condition is where things are going wrong.
printf(" + ");
for (i; i < width2; i++) {
if (i != 0) {
if (i % width2 == 0) {
printf(" |\n| ");
}
}
printf("%d ", row2[i]); //row2 has second matrix (right) array values
}
}
sec++; //Just another integer variable to have some control over loop process, didnt succeed much though
}
printf(" |\n\n");

从 2 天开始就一直在尝试这个,这真的让我很头疼。我不介意是否有更好的更小的代码并且需要替换整个代码(因为我是 C 的新手)。

最佳答案

保持简单,行有一个外循环,列有两个内循环。矩阵的大小是否不同并不重要,只需在每个内部循环之前添加一个简单的检查即可。

类似下面的代码:

size_t max_line_count = MAX(matrix1_line_count, matrix2_line_count);
for (size_t line = 0; line < max_line_count; ++line)
{
size_t column;

printf(" | ");

// First matrix
for (column = 0; column < matrix1_column_count; ++column)
{
if (line < matrix1_line_count)
printf("%2d", matrix1[line][column]);
else
printf(" ");
}

printf(" + ");

// The second matrix
for (column = 0; column < matrix2_column_count; ++column)
{
if (line < matrix2_line_count)
printf("%2d", matrix2[line][column]);
else
printf(" ");
}

printf(" |\n");
}

内部循环可以分解成一个单独的函数,以避免代码重复。

如果矩阵不是数组的数组,而是一个大的单个数组,则使用例如 matrix1[line * matrix1_column_count + column]

关于c - 一次并排打印两个具有特定字符数的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29694411/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com