c语言
怎么用函数来写这个程序? 你可以先求出矩阵的边长(输入数据个数的算术平方根),然后依次将它们放到二位数组里。再观察一下转置后的矩阵,其实就是从横向输出变成了纵向输出。输出下就好。 qiuyouzhi 发表于 2021-7-12 09:58
你可以先求出矩阵的边长(输入数据个数的算术平方根),然后依次将它们放到二位数组里。
再观察一下转置后的 ...
数据个数怎么求啊 Yolo.. 发表于 2021-7-12 10:01
数据个数怎么求啊
这个可以自己想想啊
先把数据输入进一个一维数组里,在输入的同时求数据个数 并没有完全按照题目要求写,算法的关键就是把 w 和 h 调换
dest->data = matrix->data;
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int *data;
size_t width;
size_t height;
} matrix_t;
static matrix_t *new_matrix(size_t width, size_t height) {
matrix_t *matrix = malloc(sizeof(*matrix));
if(!matrix) return NULL;
matrix->width = width;
matrix->height = height;
matrix->data = malloc(sizeof(*matrix->data) * matrix->width * matrix->height);
if(!matrix->data) {free(matrix); return NULL;}
return matrix;
}
matrix_t *matrix_init(FILE *fp, size_t width, size_t height) {
matrix_t *matrix = new_matrix(width, height);
if(!matrix) return NULL;
for(size_t h = 0; h < matrix->height; ++h) {
for(size_t w = 0; w < matrix->width; ++w) {
fscanf(fp, "%d", &matrix->data);
}
}
return matrix;
}
void matrix_deinit(matrix_t *matrix) {
if(matrix) free(matrix->data);
}
void matrix_print(const matrix_t *matrix) {
if(!matrix) return;
for(size_t h = 0; h < matrix->height; ++h) {
for(size_t w = 0; w < matrix->width; ++w) {
printf("%d ", matrix->data);
}
printf("\n");
}
}
matrix_t *matrix_transform(const matrix_t *matrix) {
if(!matrix) return NULL;
if(matrix->width != matrix->height) return NULL;
matrix_t *dest = new_matrix(matrix->width, matrix->height);
if(!dest) return NULL;
for(size_t h = 0; h < matrix->height; ++h) {
for(size_t w = 0; w < matrix->width; ++w) {
dest->data = matrix->data;
}
}
return dest;
}
int main(void) {
matrix_t *a = matrix_init(stdin, 3, 3);
matrix_t *b = matrix_transform(a);
matrix_print(b);
matrix_deinit(b);
matrix_deinit(a);
return 0;
}
#include <stdio.h>
int main(void) {
int a;
int b;
for(size_t h = 0; h < 3; ++h) {
for(size_t w = 0; w < 3; ++w) {
scanf("%d", &a);
}
}
for(size_t h = 0; h < 3; ++h) {
for(size_t w = 0; w < 3; ++w) {
b = a;
}
}
for(size_t h = 0; h < 3; ++h) {
for(size_t w = 0; w < 3; ++w) {
printf("%d ", b);
}
}
printf("\n");
return 0;
}
啊啊啊啊转置转置{:10_266:} 这次应该符合题目要求了
#include <stdio.h>
int a;
int b;
void x(void) {
for(size_t h = 0; h < 3; ++h) {
for(size_t w = 0; w < 3; ++w) {
scanf("%d", &a);
}
}
}
void y(void) {
for(size_t h = 0; h < 3; ++h) {
for(size_t w = 0; w < 3; ++w) {
b = a;
}
}
}
void z(void) {
for(size_t h = 0; h < 3; ++h) {
for(size_t w = 0; w < 3; ++w) {
printf("%d ", b);
}
}
}
int main(void) {
x(); y(); z();
printf("\n");
return 0;
}
页:
[1]