鱼C论坛

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

c语言

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

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

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

x
怎么用函数来写这个程序?
HO0@XNRS4P8(8G[92M7FS6L.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

使用道具 举报

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

数据个数怎么求啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

这个可以自己想想啊
先把数据输入进一个一维数组里,在输入的同时求数据个数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-12 11:16:21 | 显示全部楼层
并没有完全按照题目要求写,算法的关键就是把 w 和 h 调换
dest->data[h * dest->width + w] = matrix->data[w * matrix->width + h];
#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[h * matrix->width + w]);
        }
    }
    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[h * matrix->width + w]);
        }
        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[h * dest->width + w] = matrix->data[w * matrix->width + h];
        }
    }
    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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

int main(void) {
    int a[3][3];
    int b[3][3];
    for(size_t h = 0; h < 3; ++h) {
        for(size_t w = 0; w < 3; ++w) {
            scanf("%d", &a[h][w]);
        }
    }
    for(size_t h = 0; h < 3; ++h) {
        for(size_t w = 0; w < 3; ++w) {
            b[h][w] = a[w][h];
        }
    }
    for(size_t h = 0; h < 3; ++h) {
        for(size_t w = 0; w < 3; ++w) {
            printf("%d ", b[h][w]);
        }
    }
    printf("\n");
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-12 11:36:05 | 显示全部楼层
啊啊啊啊转置转置
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

int a[3][3];
int b[3][3];

void x(void) {
    for(size_t h = 0; h < 3; ++h) {
        for(size_t w = 0; w < 3; ++w) {
            scanf("%d", &a[h][w]);
        }
    }
}

void y(void) {
    for(size_t h = 0; h < 3; ++h) {
        for(size_t w = 0; w < 3; ++w) {
            b[h][w] = a[w][h];
        }
    }
}

void z(void) {
    for(size_t h = 0; h < 3; ++h) {
        for(size_t w = 0; w < 3; ++w) {
            printf("%d ", b[h][w]);
        }
    }
}

int main(void) {
    x(); y(); z();
    printf("\n");
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-21 18:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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