请求实现C语言首尾交换式数组翻转函数
实现C语言数组首尾交换式翻转的
turn函数 现有一段包含数组操作的C语言代码,其中声明了turn函数但未实现,需求是让该函数完成数组首尾交换式翻转——即第一个元素与最后一个交换,第二个与倒数第二个交换,以此类推。此前尝试在函数内创建新数组,但不清楚具体实现逻辑,现需要完成该函数。
实现思路
不需要额外创建新数组,直接在原数组上进行元素交换即可(函数接收的是数组指针,对指针指向的内存修改会直接作用于原数组)。核心逻辑是遍历数组的前半部分,将第i个元素和对应的倒数第i+1个元素交换,循环只需执行到数组中间位置即可,避免重复交换。
turn函数实现代码
void turn(int* a, size_t n) { // 遍历数组前半部分,避免重复交换 for (size_t i = 0; i < n / 2; i++) { int temp = a[i]; // 临时变量保存当前元素 a[i] = a[n - 1 - i]; // 将末尾对应位置的值赋给当前位置 a[n - 1 - i] = temp; // 将临时变量的值赋给末尾对应位置 } }
完整代码示例(添加turn函数及调用)
#include <stdio.h> #include <stdlib.h> #include <limits.h> #include <locale.h> void scan(int* , size_t ); void print(int* , size_t ); int get_max(int* , size_t ); int get_min(int* , size_t ); void invert(int*, size_t); float get_average(int* , size_t); void turn(int* , size_t ); int main() { setlocale(LC_ALL, "Russian"); size_t n; printf("Введите размер массива: "); scanf("%llu", &n); int* bebra = (int*)calloc(n, sizeof(int)); scan(bebra, n); print(bebra, n); int max = get_max(bebra, n); printf("Значение максимального элемента: %d\n", max); int min = get_min(bebra, n); printf("Значение минимального элемента: %d\n", min); float avg = get_average(bebra, n); printf("Средне арифметическое значение: %f\n", avg); invert(bebra, n); printf("Инвертированный массив:\n"); print(bebra, n); // 调用turn函数并打印翻转后的数组 turn(bebra, n); printf("Перевернутый массив:\n"); print(bebra, n); free(bebra); // 释放动态分配的内存,避免泄漏 } void scan(int* a, size_t n) { printf("Ввод массива: \n"); for (size_t i = 0; i < n; i++) { printf("arr[%llu] = ", i); scanf("%d", &a[i]); } } void print(int* a, size_t n) { printf("Печать массива: \n"); for (size_t i = 0; i < n; i++) { printf("arr[%llu] = %d\n", i, a[i]); } } int get_max(int* a, size_t n) { int max = INT_MIN; for (size_t i = 0; i < n; i++) { if (max < a[i]) { max = a[i]; } } return max; } int get_min(int* a, size_t n) { int min = INT_MAX; for (size_t i = 0; i < n; i++) { if (min > a[i]) { min = a[i]; } } return min; } void invert(int* a, size_t n) { for (size_t i = 0; i < n; i++) { a[i] = a[i] * -1; } } float get_average(int* a, size_t n) { float sum = 0; for (size_t i = 0;i < n;i++) { sum = sum + a[i]; } return sum / n; } void turn(int* a, size_t n) { for (size_t i = 0; i < n / 2; i++) { int temp = a[i]; a[i] = a[n - 1 - i]; a[n - 1 - i] = temp; } }
补充说明
- 代码中添加了
free(bebra);来释放动态分配的内存,避免内存泄漏。 - 在
main函数中添加了turn函数的调用及结果打印,方便验证翻转效果。
内容的提问来源于stack exchange,提问作者Павел
相关产品推荐
相关产品推荐

