You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求实现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,提问作者Павел

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 04:50:23