мне нужно написать программу, которая переставляет матрицу в С. матрицы, которая должна быть перенесена, является одномерным массив, массив А:транспонирование матрицы в C
void fill_array_A(char *arrayA, int ssize)
{
int i;
for(i=0; i<ssize; i++)
{
printf("Letter %d:\n> ", (i+1));
scanf(" %c", &arrayA[i]);
}
}
void show_array_A(char *arrayA, int ssize)
{
int n = sqrt(ssize);
int i,j=0;
for(i=0; i<ssize; i++)
{
printf("valueA[%d] = %c ", i, arrayA[i]);
j ++;
if(j == n)
{
printf("\n");
j = 0;
}
}
}
valueA[0] = a valueA[1] = a valueA[2] = a
valueA[3] = b valueA[4] = b valueA[5] = b
valueA[6] = c valueA[7] = c valueA[8] = c
мне нужно транспонировать матрица А к матрице В, поэтому В = А (Т). B представляет собой двумерный массив, где B хранит указатели на элементы в массиве A. Однако, мой код показывает неправильные результаты, вместо
valueB[0] = a valueB[3] = b valueB[6] = c
valueB[1] = a valueB[4] = b valueB[7] = c
valueB[2] = a valueB[5] = b valueB[8] = c
мой код дает мне:
valueB[0] = a valueB[1] = b valueB[2] = b
valueB[3] = a valueB[4] = b valueB[5] = b
valueB[6] = a valueB[7] = b valueB[8] = b
В чем проблема? Вот весь код:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
char* create_array_A(int ssize)
{
char *arrayA = malloc(sizeof(char) * ssize);
return arrayA;
}
void fill_array_A(char *arrayA, int ssize)
{
int i;
for(i=0; i<ssize; i++)
{
printf("Letter %d:\n> ", (i+1));
scanf(" %c", &arrayA[i]);
}
}
void show_array_A(char *arrayA, int ssize)
{
int n = sqrt(ssize);
int i,j=0;
for(i=0; i<ssize; i++)
{
printf("valueA[%d] = %c ", i, arrayA[i]);
j ++;
if(j == n)
{
printf("\n");
j = 0;
}
}
}
char** create_array_B(char *arrayA, int ssize)
{
int n = sqrt(ssize);
int i,j;
char **arrayB = malloc(sizeof(char*) * n);
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
arrayB[j] = &arrayA[i];
}
}
return arrayB;
}
void show_array_B(char** arrayB, int n, int m)
{
int i,j,k=0;
for(i=0; i<n; i++)
{
for(j=0; j<m; j++)
{
printf("valueB[%d] = %c ", k, arrayB[i][j]);
k ++;
}
printf("\n");
}
}
int main(int argc, char **argv)
{
int n = 9;
char *arrayA = create_array_A(n);
fill_array_A(arrayA, n);
show_array_A(arrayA, n);
printf("\n");
char **arrayB = create_array_B(arrayA, n);
show_array_B(arrayB, sqrt(n), sqrt(n));
return 0;
}
Матрица, как правило, представляет собой 2D-массив. Транспонирование «вектора» довольно бесполезно, просто интерпретируйте их по-разному, в зависимости от их использования. И 'char **' - это не 2D-массив! Указатель не является массивом. – Olaf