Ho iniziato a suddividere il programma in funzioni, le quali sono contenute in una libreria... le funzioni sono:
/********************************/
/* dichiarazione delle funzioni */
/********************************/
void acquisizione(int **matrice1, int **matrice2);
int traccia();
void trasposta(int **matrice1T, int **matrice2T);
void prodotto(int **matriceP);
int massimo();
int minimo();
int medio(int);
int dev_standard();
nella prima e nella terza non so come comportarmi xche come valore di ritorno ho ben 2 matrici...il mio dubbio e sulla dischiarazione e sopratutto sul RETURN(?????);
void acquisizione()
{
   int riga1,                   /* identificano le righe delle due matrici */
       riga2;
   int colonna1,                /* identificano le colonne delle due matrici */
       colonna2;
   int esito lettura;           /* LAVORO: esito lettura */
   int n_rc;                    /* contiene il numero di righe/colonne delle matrici */
   int **matrice1,              /* matrice A */
       **matrice2;              /* matrice B */
   int i,                       /* contatori utilizzati nel riempimento delle due matrici */
       k;
   FILE *a,                     /* variabile che identifica i file che contengono le due matrici */
        *b;
   char carattere_non_letto;    /* LAVORO: carattere non letto */
/* acquisizione del numero di righe e colonne con VALIDAZIONE */
   do
   {
	printf("Digita il numero ri righe che deve avere la matrice (0 < ) ");
	esito_lettura = scanf("%d",
		              &n_rc);
   
	if (esito_lettura != 1 || n_rc < 0)
	{
		do
		{
			carattere_non_letto = scanf("%c",
			                            &carattere_non_letto);
		}
		while (carattere_non_letto != '\n');
	}
   } while (esito_lettura != 1 || n_rc < 0);
   /* apertura dei file */
   a = fopen("matrice_A.txt", "r");
   b = fopen("matrice_B.txt", "r");
   /* creazione e riempimento delle due matrici */
   /* matrice A */ 
   matrice1 = (int**)calloc(n_rc, sizeof(int*));
   for(i = 0; i < n_rc; i++)
     	matrice1[i] = (int*)calloc(n_rc,sizeof(int));
   for(riga1=0; riga1<n_rc; riga1++)
   {
	for(colonna1=0; colonna1<n_rc; colonna1++)
	{
		fscanf(a, "%d", &matrice1[riga1][colonna1]);
	}
   }  
   /* matrice B */
   matrice2 = (int**)calloc(n_rc, sizeof(int*));
   for(k = 0; k < n_rc; k++)
	matrice2[k] = (int*)calloc(n_rc,sizeof(int));
   for(riga2=0; riga2<n_rc; riga2++)
   {
	for(colonna2=0; colonna2<n_rc; colonna2++)
	{
		fscanf(b, "%d", &matrice2[riga2][colonna2]);
	}
   }  
   /* chiusura dei file */
   fclose(a);
   fclose(b);
   /* stampa a video delle matrici */
   printf("la matrice A è:\n");
   for(riga1=0; riga1<n_rc; riga1++)
   {
	for(colonna1=0; colonna1<n_rc; colonna1++)
		printf("%d\n ", matrice1[riga1][colonna1]);
   }
   printf("\n");
   printf("la matrice B è:\n");
   for(riga2=0; riga2<n_rc; riga2++)
   {
	for(colonna2=0; colonna2<n_rc; colonna2++)
		printf("%d\n ", matrice2[riga2][colonna2]);
   }
   printf("\n");
return(COSA???);
}
per le altre ha come valore di ritorno un semplice intero quindi ci sono... e anche il prodotto xke ha un solo valore di ritorno...ma x la prima e la treza dove sono 2 non so come comportarmi...