ESEMPI DI SEMPLICI PROGRAMMI

Scrivere un programma C che stampa le tabelline

Sviluppo top-down del programma; primo passo:
per I che va da 1 a 10 
    ( stampare la tabellina per I
      andare a capo )
secondo passo
per I che va da 1 a 10 
    ( per J ch va da 1 a 10
          ( stampare I * J
            stampare uno spazio )
      andare a capo )
Il programma è
#include <stdio.h>

main()
{
    int I, J;
    
    /* per I che va da 1 a 10*/
    for( I = 1 ; I <= 10 ; I = J + 1 ){
        /* per J che va da 1 a 10*/
        for( J = 1 ; J <= 10 ; J = J + 1 )
            /* stampare I * J
               stampare uno spazio*/
            printf("%3d ", I*J);
        /* andare a capo*/
        printf("\n");
    }
}
riga

Scrivere un programma C che stampa i primi 100 numeri di Fibonacci

Ricordiamo che la successione dei numeri di Fibonacci è definita come segue:
F(0) = 0
F(1) = 1
F(n) = F(n-1) + F(n-2)     per n > 1.

L'algoritmo scritto in pseudo-codice è

PENULTIMO <- 0 ;
stampa PENULTIMO ;
ULTIMO <- 1
stampa ULTIMO ;

per i che va da 2 a 100
    ( F <- ULTIMO + PENULTIMO ;
      stampa F
      PENULTIMO <- ULTIMO ;
      ULTIMO <- F  ; )
Il programma è
#include <stdio.h>

main()
{
    int ultimo, penultimo, i, f;
    
    penultimo = 0 ;
    printf("%d\n",penultimo);
    ultimo = 1 ;
    printf("%d\n",ultimo);
    
    for( i = 2 ; i <= 100 ; i = i + 1 ){
            f = ultimo + penultimo;
            printf("%d\n", f);
            penultimo = ultimo;
            ultimo = f;
    }
}
Notare che non è possibile stampare effettivamente 100 numeri, poichè sicuramente tra i primi cento numeri di Fibonacci vi sono sicuramentenumeri maggiori degli interi del tipo C int.

Versione compatta, utilizzando i costrutti peculiari del C.

#include <stdio.h>

main()
{
    int ultimo = 1, penultimo = 0, i, f;
           
    printf("0\n1\n");
           
    for( i = 2 ; i <= 10 ; i++){
        f = ultimo + penultimo;
        penultimo = ultimo;
        printf("%d\n", ultimo = f);
    }
}
riga

Scrivere un programma per controllare se tra i caratteri ricevuti in input sono di più gli spazi o gli altri.

#include <stdio.h>
/*controllare se tra i caratteri ricevuti in input sono di piu' gli spazi o gli altri*/

main()
{   
    int spazi, altri;
    char c;
    
    spazi = 0;
    altri = 0;
    
    c = getchar();
    while(c != EOF){
       if(c == ' ')
           spazi = spazi + 1;
       else
           altri = altri + 1;
       c = getchar();
   };
    
    if(spazi > altri)
       printf("Piu\' spazi");
    else
       printf("Piu\' altri caratteri");
    
}
Versione compatta, utilizzando i costrutti peculiari del C.
#include <stdio.h>
/*controllare se tra i caratteri ricevuti in input sono di piu' gli spazi o gli altri*/

main()
{   
    int spazi = 0, altri = 0;
    char c;
    
    while((c = getchar()) != EOF)
       if(c == ' ')
           spazi++;
       else
           altri++;    
    if(spazi > altri)
       printf("Piu\' spazi");
    else
       printf("Piu\' altri caratteri");
    
}
riga

Scrivere un programma C per controllare se tra i numeri ricevuti in input sono di più i pari o i dispari

#include <stdio.h>
/*controllare se tra i numeri ricevuti in input sono di piu' i pari o i dispari*/
/*dare i numeri separandoli con esattamente uno spazio o un fine linea*/
/*terminare con EOF*/

main()
{   
    int pari, dispari, num;
    char c;
    
    pari = 0;
    dispari = 0;
    
    scanf("%d%c", &num, &c); 
    while(c != EOF){
       if(num % 2 == 0)
           pari = pari + 1;
       else
           dispari = dispari +1;  
       scanf("%d%c", &num, &c);
    };  
    if(pari > dispari)
       printf("\nPiu\' pari");
    else
       printf("\nPiu\' dispari");
    
}
riga

Scrivere un programma C per controllare se un numero è primo

L'algoritmo scritto in pseudo-codice è
read NUM
E_PRIMO  <- VERO
DIV_COR <- 2

while(DIV_COR < NUM and  E_PRIMO) do
     (  if NUM e' divisibile per DIV_COR then
            E_PRIMO <- FALSE
        else
            DIV_COR <- DIV_COR +1  )
if E_PRIMO then write("il numero e' primo)
else write("il numero non e' primo");
Il programma è
#include <stdio.h>
#include <math.h>
/*Controlla se un numero e' primo*/

main()
{   
    int num, div_cor, e_primo;
    
    printf("Dare il numero da controllare e poi andare a capo\n");
    scanf("%d",&num);
    
    div_cor = 2;
    e_primo = 1; /*vero*/
    
    if(num < 0)
        printf("Il numero doveva essere positivo\n");
    else{if(num >1)
        while(div_cor < num && e_primo)
            if(num % div_cor != 0)
                div_cor = div_cor +1;
            else
                e_primo = 0; /*falso*/
        if(e_primo)
            printf("Il numero %d e\' primo,\n",num);
        else
            printf("Il numero %d non e\' primo,\n",num);
   };
}
Versione compatta, utilizzando i costrutti peculiari del C.
#include <stdio.h>
#include <math.h>
#define FALSE 0
#define TRUE 1

/*Controlla se un numero e' primo*/

main()
{   
int num, div_cor = 2, e_primo = FALSE;
           
     printf("Dare il numero da controllare e poi andare a capo\n");
     scanf("%d",&num);
                      
     if(num < 0)
         printf("Il numero doveva essere positivo\n");
     else{if(num >1)
         while(div_cor < num && e_primo)
                   if(num % div_cor != 0)
                       div_cor++;
                   else
                       e_primo = FALSE;
                   printf("Il numero %d %s e\' primo,\n",num,e_primo ? "": "non");
        };
}
riga

ESERCIZI
Scrivere un programma C che

  1. calcola il cubo di un numero.
  2. controlla se dei numeri forniti dall'utente sono primi.
  3. scomponga in fattori primi un numero naturale.
  4. controlla se in una lista di numeri ricevuti in input sono di pi ù quelli maggiori di MAX (un numero ricevuto in input) o quelli minori.
  5. riceve in input dei numeri naturali, fermandosi quando riceve un negativo, e poi stampa la loro somma.
  6. stampa la media aritmetica di una lista di numeri ricevuta in input; decidere in quale modo il programma si accorge che lista è terminata.
  7. stampa il fattoriale di un numero ricevuto in input.
  8. stampa i valori assoluti di una lista di numeri ricevuti in input.