Posto tutto il listato per chiarezza suddivisio in due parti. L'unica cosa che non funziona del tutto è la funzione abbonamento che scade per prima.

codice:
#include<stdio.h>
#include <string.h>
#include <stdlib.h>
#define SIZE 20
#define PERCENTUALE_MAX 100

/* dichiarazione della struttura  - Struct - palestra */

struct palestra 
{
       char cognome[SIZE]; /*                          */      
       char nome[SIZE]; /*                          */
       int giorno; /*                          */
       int mese; /*                          */
       int anno; /*                          */
       char abbonamento[SIZE]; /*                          */
};

typedef struct palestra PALESTRA; /* nuovo nome tipo per struct palestra */

/* Prototipi di funzione */

void iniz(int dim,PALESTRA array [SIZE]); 
void acquis_tast(int dim,PALESTRA array[SIZE]);
void acquis_aut(int dim,PALESTRA array[SIZE]);
void stampa(int dim,PALESTRA array[SIZE]);
void sort(int dim,PALESTRA array[SIZE]);
void ricerca(int dim,PALESTRA array[SIZE]);
void calcolo_perc(int dimensione, PALESTRA array[SIZE]);

main () 
{
     PALESTRA dati[SIZE]; /* dichiara il vettore di elementi - dati - di tipo PALESTRA */
         
     int selezione, dimensione;
                     
     iniz(dimensione,dati); 

     do 
     {
         system("cls");
         printf("\n******** MENU' PRINCIPALE ********\n");
         printf("\n1. Per acquisire i dati");    
         printf("\n2. Stampare a video i dati");
         printf("\n3. Ordinare i dati per Cognome");
         printf("\n4. Stampa a video l'abbonamento dell'utente prossimo alla scadenza");
         printf("\n5. Calcolo della percentuale dei diversi tipi di abbonamento");
         printf("\n6. USCITA\n\n\n Selezione: ");
         scanf("%d",&selezione);    
     
         switch(selezione) 
         {
                case 1:
                     system("cls");
                     do
                     {
                            system("cls");
                            printf("\n******** MENU' di ACQUISIZIONE ********\n");
                            printf("\n1. Per acquisire i dati da tastiera");    
                            printf("\n2. Per acquisire i dati di prova automaticamente");
                            printf("\n3. MENU' PRINCIPALE\n\n\n Selezione: ");
                            scanf("%d",&selezione);    
                                                   
                            switch(selezione)
                            {
                                   case 1:
                                        system("cls");
                                        do
                                        {
                                               printf("\n********** Inizializzazione array *********\n\n\n");     
                                               printf("Determinare la dimesione della array <max 20>: ");
                                               scanf("%d",&dimensione);
                                               if(dimensione == 0 || dimensione > SIZE) 
                                               {
                                                   printf("\n\n++++++++++ errore ++++++++++++++\n\n");
                                                   system("\n\npause");
                                               }
                                               system("cls");
                                        } while(dimensione == 0 || dimensione >SIZE); 
     
                                        acquis_tast(dimensione, dati);
                                        
                                        
                                   break;
                                   
                                   case 2:
                                        system("cls");
                                        dimensione=5;
                                        
                                        iniz(dimensione,dati);
                                        acquis_aut(dimensione, dati);                                        
                                        
                                        system("pause");
                                   break;
                                   case 3:
                                   break;
                                   default:
                                   if(selezione == 0 || selezione >3)
                                   {
                                         system("cls");
                                         printf("\n\n\n+++++++++++++++ Errore nella selezione ++++++++++++++++++\n\n\n");
                                         system("pause");
                                   }
                            }
                     }while (selezione !=3);

                break;
                case 2:
                     system("cls");
                     
                     stampa(dimensione, dati);
                     
                     system("pause");
                break;
         
                case 3:
                     system("cls");
                     
                     sort(dimensione, dati);
                     
                     system("pause");
                break;
         
                case 4:
                     system("cls");
                     
                     ricerca(dimensione, dati);
                     
                     system("pause");
                break;
                
                case 5:
                     system("cls");
                     
                     calcolo_perc(dimensione, dati);
                     
                     system("pause");
                break;
                
                case 6:
                     break;
                     default:
                             if(selezione == 0 || selezione >5)
                             {
                             
                             system("cls");
                             printf("\n\n\n+++++++++++++++ Errore nella selezione ++++++++++++++++++\n\n\n");
                             system("pause");
                                                          
                             }       
     
         }
         
     }
     while(selezione != 6);
          
   
}