CCF第三十一次计算机软件能力认证202309-1坐标变换(其一)

第一题第二题一般比较简单,需要对编程达到熟悉的要求即可,不要求了解过多的数据结构和算法

使用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");
	}
}

提交结果

posted @ 2023-09-25 22:02  Guanjie255  阅读(186)  评论(0编辑  收藏  举报