将二维数组复制到另一个二维数组
Copy 2d array to another 2d array
我正在尝试用 C 语言创建一个程序,用于将数字从一个二维数组复制到另一个二维数组,但具体而言。 (见图)
代码:
int main(){
int numbers[6][8] = {
{1,1,1,1,1,1,1,1},//0
{2,2,2,2,2,2,2,2},//1
{3,3,3,3,3,3,3,3},//2
{4,4,4,4,4,4,4,4},//3
{5,5,5,5,5,5,5,5},//4
{6,6,6,6,6,6,6,6} //5
};
int output[2*8][3];
for(int i = 0; i < 3; i++){
for(int j = 0; j < 2*8; j++){
output[j][i] = numbers[i][j];
}
}
for(int j = 0; j < 2*8; j++){
for(int i = 0; i < 3; i++){
printf("%d ", output[j][i]);
}
printf("\n");
}
}
我的输出:
1 2 3
1 2 3
1 2 3
1 2 3
1 2 3
1 2 3
1 2 3
1 2 3
2 3 4
2 3 4
2 3 4
2 3 4
2 3 4
2 3 4
2 3 4
2 3 4
但是很糟糕。
输出应如下所示:
1 2 3
1 2 3
1 2 3
1 2 3
1 2 3
1 2 3
1 2 3
1 2 3
4 5 6
4 5 6
4 5 6
4 5 6
4 5 6
4 5 6
4 5 6
4 5 6
问题是在我第二部分的输出中,我有第 1、2 和 3 行的数字(来自数字数组)。但它应该是第 3、4 和 5 行。
您必须正确设置索引:-)
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 16; j++) {
output[j][i] = numbers[j / 8 * 3 + i][j % 8];
}
}
根据你的代码,我分为两种情况,第二部分我像这样输入 +2:output[j][i] = numbers[i+2][j];
#include <iostream>
using namespace std;
int main(){
int numbers[6][8] = {
{1,1,1,1,1,1,1,1},//0
{2,2,2,2,2,2,2,2},//1
{3,3,3,3,3,3,3,3},//2
{4,4,4,4,4,4,4,4},//3
{5,5,5,5,5,5,5,5},//4
{6,6,6,6,6,6,6,6} //5
};
int output[2*8][3];
for(int i = 0; i < 3; i++){
for(int j = 0; j < 8; j++){
output[j][i] = numbers[i][j];
}
}
for(int i = 0; i < 3; i++){
for(int j = 8; j < 16; j++){
output[j][i] = numbers[i+2][j];
}
}
for(int j = 0; j < 2*8; j++){
for(int i = 0; i < 3; i++){
printf("%d ", output[j][i]);
}
printf("\n");
}
}
我正在尝试用 C 语言创建一个程序,用于将数字从一个二维数组复制到另一个二维数组,但具体而言。 (见图)
代码:
int main(){
int numbers[6][8] = {
{1,1,1,1,1,1,1,1},//0
{2,2,2,2,2,2,2,2},//1
{3,3,3,3,3,3,3,3},//2
{4,4,4,4,4,4,4,4},//3
{5,5,5,5,5,5,5,5},//4
{6,6,6,6,6,6,6,6} //5
};
int output[2*8][3];
for(int i = 0; i < 3; i++){
for(int j = 0; j < 2*8; j++){
output[j][i] = numbers[i][j];
}
}
for(int j = 0; j < 2*8; j++){
for(int i = 0; i < 3; i++){
printf("%d ", output[j][i]);
}
printf("\n");
}
}
我的输出:
1 2 3
1 2 3
1 2 3
1 2 3
1 2 3
1 2 3
1 2 3
1 2 3
2 3 4
2 3 4
2 3 4
2 3 4
2 3 4
2 3 4
2 3 4
2 3 4
但是很糟糕。
输出应如下所示:
1 2 3
1 2 3
1 2 3
1 2 3
1 2 3
1 2 3
1 2 3
1 2 3
4 5 6
4 5 6
4 5 6
4 5 6
4 5 6
4 5 6
4 5 6
4 5 6
问题是在我第二部分的输出中,我有第 1、2 和 3 行的数字(来自数字数组)。但它应该是第 3、4 和 5 行。
您必须正确设置索引:-)
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 16; j++) {
output[j][i] = numbers[j / 8 * 3 + i][j % 8];
}
}
根据你的代码,我分为两种情况,第二部分我像这样输入 +2:output[j][i] = numbers[i+2][j];
#include <iostream>
using namespace std;
int main(){
int numbers[6][8] = {
{1,1,1,1,1,1,1,1},//0
{2,2,2,2,2,2,2,2},//1
{3,3,3,3,3,3,3,3},//2
{4,4,4,4,4,4,4,4},//3
{5,5,5,5,5,5,5,5},//4
{6,6,6,6,6,6,6,6} //5
};
int output[2*8][3];
for(int i = 0; i < 3; i++){
for(int j = 0; j < 8; j++){
output[j][i] = numbers[i][j];
}
}
for(int i = 0; i < 3; i++){
for(int j = 8; j < 16; j++){
output[j][i] = numbers[i+2][j];
}
}
for(int j = 0; j < 2*8; j++){
for(int i = 0; i < 3; i++){
printf("%d ", output[j][i]);
}
printf("\n");
}
}