鱼C论坛

 找回密码
 立即注册
查看: 2690|回复: 7

c语言

[复制链接]
发表于 2021-7-12 09:52:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
怎么用函数来写这个程序?
HO0@XNRS4P8(8G[92M7FS6L.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-7-12 09:58:59 | 显示全部楼层
你可以先求出矩阵的边长(输入数据个数的算术平方根),然后依次将它们放到二位数组里。
再观察一下转置后的矩阵,其实就是从横向输出变成了纵向输出。输出下就好。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-7-12 10:01:44 | 显示全部楼层
qiuyouzhi 发表于 2021-7-12 09:58
你可以先求出矩阵的边长(输入数据个数的算术平方根),然后依次将它们放到二位数组里。
再观察一下转置后的 ...

数据个数怎么求啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-12 10:04:01 | 显示全部楼层
Yolo.. 发表于 2021-7-12 10:01
数据个数怎么求啊

这个可以自己想想啊
先把数据输入进一个一维数组里,在输入的同时求数据个数
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-12 11:16:21 | 显示全部楼层
并没有完全按照题目要求写,算法的关键就是把 w 和 h 调换
  1. dest->data[h * dest->width + w] = matrix->data[w * matrix->width + h];
复制代码

  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. typedef struct {
  4.     int *data;
  5.     size_t width;
  6.     size_t height;
  7. } matrix_t;

  8. static matrix_t *new_matrix(size_t width, size_t height) {
  9.     matrix_t *matrix = malloc(sizeof(*matrix));
  10.     if(!matrix) return NULL;
  11.     matrix->width = width;
  12.     matrix->height = height;
  13.     matrix->data = malloc(sizeof(*matrix->data) * matrix->width * matrix->height);
  14.     if(!matrix->data) {free(matrix); return NULL;}
  15.     return matrix;
  16. }

  17. matrix_t *matrix_init(FILE *fp, size_t width, size_t height) {
  18.     matrix_t *matrix = new_matrix(width, height);
  19.     if(!matrix) return NULL;
  20.     for(size_t h = 0; h < matrix->height; ++h) {
  21.         for(size_t w = 0; w < matrix->width; ++w) {
  22.             fscanf(fp, "%d", &matrix->data[h * matrix->width + w]);
  23.         }
  24.     }
  25.     return matrix;
  26. }

  27. void matrix_deinit(matrix_t *matrix) {
  28.     if(matrix) free(matrix->data);
  29. }

  30. void matrix_print(const matrix_t *matrix) {
  31.     if(!matrix) return;
  32.     for(size_t h = 0; h < matrix->height; ++h) {
  33.         for(size_t w = 0; w < matrix->width; ++w) {
  34.             printf("%d ", matrix->data[h * matrix->width + w]);
  35.         }
  36.         printf("\n");
  37.     }
  38. }

  39. matrix_t *matrix_transform(const matrix_t *matrix) {
  40.     if(!matrix) return NULL;
  41.     if(matrix->width != matrix->height) return NULL;
  42.     matrix_t *dest = new_matrix(matrix->width, matrix->height);
  43.     if(!dest) return NULL;
  44.     for(size_t h = 0; h < matrix->height; ++h) {
  45.         for(size_t w = 0; w < matrix->width; ++w) {
  46.             dest->data[h * dest->width + w] = matrix->data[w * matrix->width + h];
  47.         }
  48.     }
  49.     return dest;
  50. }

  51. int main(void) {
  52.     matrix_t *a = matrix_init(stdin, 3, 3);
  53.     matrix_t *b = matrix_transform(a);
  54.     matrix_print(b);
  55.     matrix_deinit(b);
  56.     matrix_deinit(a);
  57.     return 0;
  58. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-12 11:25:04 | 显示全部楼层
  1. #include <stdio.h>

  2. int main(void) {
  3.     int a[3][3];
  4.     int b[3][3];
  5.     for(size_t h = 0; h < 3; ++h) {
  6.         for(size_t w = 0; w < 3; ++w) {
  7.             scanf("%d", &a[h][w]);
  8.         }
  9.     }
  10.     for(size_t h = 0; h < 3; ++h) {
  11.         for(size_t w = 0; w < 3; ++w) {
  12.             b[h][w] = a[w][h];
  13.         }
  14.     }
  15.     for(size_t h = 0; h < 3; ++h) {
  16.         for(size_t w = 0; w < 3; ++w) {
  17.             printf("%d ", b[h][w]);
  18.         }
  19.     }
  20.     printf("\n");
  21.     return 0;
  22. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-12 11:36:05 | 显示全部楼层
啊啊啊啊转置转置
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-12 11:39:54 | 显示全部楼层
这次应该符合题目要求了
  1. #include <stdio.h>

  2. int a[3][3];
  3. int b[3][3];

  4. void x(void) {
  5.     for(size_t h = 0; h < 3; ++h) {
  6.         for(size_t w = 0; w < 3; ++w) {
  7.             scanf("%d", &a[h][w]);
  8.         }
  9.     }
  10. }

  11. void y(void) {
  12.     for(size_t h = 0; h < 3; ++h) {
  13.         for(size_t w = 0; w < 3; ++w) {
  14.             b[h][w] = a[w][h];
  15.         }
  16.     }
  17. }

  18. void z(void) {
  19.     for(size_t h = 0; h < 3; ++h) {
  20.         for(size_t w = 0; w < 3; ++w) {
  21.             printf("%d ", b[h][w]);
  22.         }
  23.     }
  24. }

  25. int main(void) {
  26.     x(); y(); z();
  27.     printf("\n");
  28.     return 0;
  29. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-27 11:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表