C 一次以特定字符数并排打印两个数组
我刚刚开始学习C语言。今天我问了一个问题,我必须输入两个矩阵(行数和列数由用户指定)并添加它们。我做加法和其他部分很容易。但我正在考虑让它看起来更好。 所以我的想法是: 假设用户输入一个3x3大小的矩阵。假设他选择了以下元素->C 一次以特定字符数并排打印两个数组,c,arrays,nested-loops,C,Arrays,Nested Loops,我刚刚开始学习C语言。今天我问了一个问题,我必须输入两个矩阵(行数和列数由用户指定)并添加它们。我做加法和其他部分很容易。但我正在考虑让它看起来更好。 所以我的想法是: 假设用户输入一个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
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//在某处定义的全局int循环变量
宽度2=宽度//另一个宽度变量,以防我在第二个数组中需要它,宽度是数组行中元素数量的变量。在上面的示例中,宽度=3
对于(ii=0;ii
我已经试了两天了,这真的让我头疼。我不介意是否有更好的更小的代码,并且需要替换整个代码(因为我对C非常陌生)。保持简单,行有一个外循环,列有两个内循环。矩阵的大小是否不同并不重要,只需在每个内部循环之前添加一个简单的检查即可 类似于以下伪代码:
size\u t max\u line\u count=max(矩阵1\u line\u count,矩阵2\u line\u count);
用于(尺寸线=0;线<最大线数;++线)
{
柱体尺寸;
printf(“|”);
//第一矩阵
for(列=0;列
内部循环可以分解成单独的函数,以避免代码重复
如果矩阵不是数组的数组,而是一个大的单个数组,则使用例如
matrix1[line*matrix1\u column\u count+column]
创建一个单独的函数来打印行,以提高可读性
参见我的示例:
#include <stdio.h>
void printRow(int len, int row[]) {
int i =0;
for (i = 0; i < len; i++) {
printf("%d\t", row[i]);
}
}
int main(void) {
int m1[3][3] = {{1,2,3}, {4,5,6}, {7, 8, 9}};
int m2[3][3] = {{7, 8, 9}, {4,5,6}, {1,2,3}};
int i = 0;
int width = 3; //3x3
for (i = 0; i < width; i++) {
printf("|\t");
printRow(width, m1[i]);
printf("\t+\t");
printRow(width, m2[i]);
printf("\t|\n");
}
return 0;
}
工作示例:
gcc
警告在以下行中出现“无效声明”
for (i; i < width2; i++)
这是因为下一行的ii
以width
的步长递增,并且您希望行计数乘以右侧设置的宽度
将整个例程分成三个循环可能更容易:外部循环只需在高度上运行,内部循环先打印一行set1编号,然后打印一行set2编号。不过,我将把它作为一个练习。在第二个循环中,您没有重新初始化
I
,因此条件I运行起来,相当于技巧xD,但在第二行(右一行),它只是在所有3行中打印相同的前3个数字。我猜我的代码中还有一些错误(我在上面的答案lol中得到了更正)。谢谢你让我进步:)谢谢,但它给我的那些printf命令错误“subcripted值既不是数组,也不是指针,也不是向量”。我已经声明了MAX宏,并在C99模式下运行它。仍然给出了这个错误。如果你能帮我做这件事(因为我在C方面还没有那么丰富的经验)?因为我想尝试一个新的代码。它工作完美!非常感谢:D我看到很多关于将循环拆分为函数的建议,所以我也一定会尝试:)
#include <stdio.h>
void printRow(int len, int row[]) {
int i =0;
for (i = 0; i < len; i++) {
printf("%d\t", row[i]);
}
}
int main(void) {
int m1[3][3] = {{1,2,3}, {4,5,6}, {7, 8, 9}};
int m2[3][3] = {{7, 8, 9}, {4,5,6}, {1,2,3}};
int i = 0;
int width = 3; //3x3
for (i = 0; i < width; i++) {
printf("|\t");
printRow(width, m1[i]);
printf("\t+\t");
printRow(width, m2[i]);
printf("\t|\n");
}
return 0;
}
| 1 2 3 + 7 8 9 |
| 4 5 6 + 4 5 6 |
| 7 8 9 + 1 2 3 |
for (i; i < width2; i++)
printf("%d ", row2[width2*(ii/width) + i]);
if (((ii + 1)*(width - 1)) % (width * 2) == 0) {
printf(" + ");
for (i=0; i < width2; i++) {//set i=0 here
if (i != 0) {
if (i % width2 == 0) {
printf(" |\n| ");
}
}
printf("%d ", row2[i]);
}
}