第一题第二题一般比较简单,需要对编程达到熟悉的要求即可,不要求了解过多的数据结构和算法
使用C提交一直编译错误,相同的代码使用C++提交却能通过,真是醉了
坐标变化(其一)题目描述
- 1.需要创建一个操作符矩阵,行和列分别是n和2
- 2.需要创建一个操作数矩阵,行和列分别是m和2
- 3.求出操作符矩阵所有行的和,得到一个数组,包含两个元素
- 4.输出数组+操作数矩阵的每一行
C语言代码
#include <stdio.h>
#include <stdlib.h>
int** create_matrix(const int row, const int column);
int* ops_sum(int** ops, int row, const int column);
void print_new_coords(int** coords, int* op_sum, int row, const int column);
int main(int argc, char* argv[]) {
int m, n;
const int column = 2;
scanf("%d %d", &n, &m);
int** ops = create_matrix(n, column);
int** coords = create_matrix(m, column);
int* op_sum = ops_sum(ops, n, column);
print_new_coords(coords, op_sum, m, column);
// free memory
for (int i = 0; i < n; i++) {
free(ops[i]);
}
free(ops);
for (int i = 0; i < m; i++) {
free(coords[i]);
}
free(coords);
free(op_sum);
return 0;
}
int** create_matrix(const int row, const int column) {
// 创建一个二维数组,使用二级指针表示
int** p = (int**)malloc(sizeof(int*) * row);
for (int i = 0; i < row; i++) {
p[i] = (int*)malloc(sizeof(int) * column);
for (int j = 0; j < column; j++) {
scanf("%d", &(p[i][j]));
}
}
return p;
}
int* ops_sum(int** ops, int row, const int column) {
// 求出二维数组所有行的和,结果是一个一维数组,使用一级指针表示
int* ret = (int*)malloc(sizeof(int)*column);
for (int i = 0; i < column; i++) {
ret[i] = 0;
}
for (int j = 0; j < column; j++) {
for (int i = 0; i < row; i++) {
ret[j] += ops[i][j];
}
}
return ret;
}
void print_new_coords(int** coords, int* op_sum, int row, const int column) {
// op_sum这个一维数组作用于二维数组的每一行,打印结果
for (int i = 0; i < row; i++) {
for (int j = 0; j < column; j++) {
printf("%d ", coords[i][j] + op_sum[j]);
}
printf("\n");
}
}