Yolo.. 发表于 2021-7-12 09:52:15

c语言

怎么用函数来写这个程序?

qiuyouzhi 发表于 2021-7-12 09:58:59

你可以先求出矩阵的边长(输入数据个数的算术平方根),然后依次将它们放到二位数组里。
再观察一下转置后的矩阵,其实就是从横向输出变成了纵向输出。输出下就好。

Yolo.. 发表于 2021-7-12 10:01:44

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

数据个数怎么求啊

qiuyouzhi 发表于 2021-7-12 10:04:01

Yolo.. 发表于 2021-7-12 10:01
数据个数怎么求啊

这个可以自己想想啊
先把数据输入进一个一维数组里,在输入的同时求数据个数

人造人 发表于 2021-7-12 11:16:21

并没有完全按照题目要求写,算法的关键就是把 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;
}

人造人 发表于 2021-7-12 11:25:04

#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;
}

Kayko 发表于 2021-7-12 11:36:05

啊啊啊啊转置转置{:10_266:}

人造人 发表于 2021-7-12 11:39:54

这次应该符合题目要求了
#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]
查看完整版本: c语言