O objetivo desse problema é separar a string passada em duas metades e performar a inversão nas duas metades, juntando-as novamente. A primeira metade de uma string de tamanho N cobre as letras no intervalo [0, N/2[ e a segunda as letras no intervalo [N/2, N[. Em linguagens de baixo nível, você precisa de fato ir e inverter uma letra de cada vez, o que se torna um processo bem confuso, mas em linguagens de alto nível, tudo se torna muito mais fácil.
#include<string.h>#include<stdio.h>intmain(){int N, n;char aux, frase[101];scanf("%d\n",&N);for(int i =0; i < N; ++i){scanf("%[^\n]\n",&frase); n =strlen(frase);for(int j =0; j < n/4; ++j){ aux = frase[j]; frase[j] = frase[n/2- j -1]; frase[n/2- j -1] = aux; aux = frase[j + n/2]; frase[j + n/2] = frase[n - j -1]; frase[n - j -1] = aux; }printf("%s\n", frase); }return0;}