Buenas.
Yo lo que haria es, tomar el primer numero como una cadena de caracteres, y los siguientes numeros como enteros. Luego, vas intercambiando los valores con una funcion. Una posible solucion es esta:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXLEN 10
void swap(char **s,int i, int f);
int main(void)
{
char *s;
int ini, fin;
if((s = malloc((sizeof(char) * MAXLEN) + 1)) == NULL)
exit(EXIT_FAILURE);
printf("Ingrese valor: ");
fgets(s,MAXLEN + 1, stdin);
s[strlen(s) - 1] = '\0'; /* Esto lo hago porque fgets le deja al array el \n */
printf("Ingrese posicion inicial: ");
scanf("%d",&ini);
printf("Ingrese ingrese posicion final: ");
scanf("%d",&fin);
printf("Orden inicial: %s\n",s);
swap(&s,ini,fin);
printf("Orden final: %s\n",s);
exit(EXIT_SUCCESS);
}
void swap(char **s, int i, int f)
{
char aux;
if(*s && i < f){
aux = (*s)[i];
(*s)[i] = (*s)[f];
(*s)[f] = aux;
swap(s,++i,--f);
}
return;
}
PD: Falta algunos detalles como ver que f no sea mayor que el largo de la cadena
Espero que te ayude.
Saludos