I SOTTOPROGRAMMI IN C

Il linguaggio C ha la possibilità di dichiarare ed usare sottoprogrammi sia di tipo procedura che di tipo funzione, anche se a livello di terminologia essi sono chiamati sempre funzioni, e le procedure sono semplicemente delle funzioni che ritornano un valore di un tipo speciale, void, che ha un unico valore.

Inoltre il C ha solo parametri valore, e pertanto gli altri generi di parametri devono essere ottenuti in modo indiretto utilizzando i puntatori.

La forma di una dichiarazione di funzione in C è:

TYPE IDENTIFIER ( PARAMETERS )
BLOCK
TYPE
il tipo dei valori ritornati dalla funzione, non può essere un array.
Si usa void per le procedure (che sono infatti delle funzioni che non ritornano niente).
IDENTIFIER
il nome della funzione
PARAMETERS
le dichiarazoni dei parametri formali.
Si usa void quando la funzione non ha alcun parametro.
I parametri, che sono tutti di tipo valore e sono passati per copia, si dichiarano semplicemente premettendo il tipo al nome del parametro e si separano con virgole.
BLOCK
è il corpo della funzione (un blocco), e quindi può contenere dichiarazioni di variabili locali, cioè utilizzate solo all'interno della funzione.
Se il sottoprogramma è una vera funzione, il C fornisce lo statement
return(EXPR);
per terminare il calcolo e ritornare il valore della funzione, che è giusto il valore di EXPR.
La forma di un programma C con dichiarazioni di funzioni è semplicemente una lista di dichiarazioni di funzioni e un main, come prima.
Notare che il main è semplicemente una procedura di nome main senza parametri, scritta usando la sintassi di una versione più vecchia del C.

ESEMPI

funzione che calcola il fattoriale
#include <stdio.h>

int Fatt(int n)
{  
    if(n < 0)
       printf("Il numero non puo\' essere negativo\n");
    else if(n == 0)
       return(1);
    else{
       int f;
       
       f = 1;
       while(n >= 1){
           f = f * n;
           n = n-1;
       };
       return(f);
   };
}

main(){
    int n, f; 

    printf("dare il numero\n");
    scanf("%d",&n);
    f = Fatt(n);
    printf("Il fattoriale di %d e\' %d \n",n, f);
    
}
procedura per stampare una matrice
#include <stdio.h>
#define DIM 100

void Stampa_Mat(int m[DIM][DIM])
/*stampa m sullo standard output riga per riga*/
{  
    int i,j;
    
    for(i=0; i < DIM; i=i+1){
        for(j=0; j  < DIM; j=j+1)
            printf("%7d ",m[i][j]);
        printf("\n");
    }
}

main(){
    int a[DIM][DIM], i, j, s; 

    printf("dare la matrice su una unica riga\n");
    for(i=0; i  < DIM; i=i+1)
        for(j=0; j < DIM; j=j+1){
            scanf("%d",&s); a[i][j]=s;};

    Stampa_Mat(a);    
}}

ESERCIZI