In questa guida cercherò di condividere con voi le nozioni fondamentali della programmazione in C.

Ci sono centinaia di guide in rete, ma spesso alcune sono esageratamente lunghe. Quindi sarò breve, giusto per darvi un’infarinatura generale; non tratterò i puntatori e le liste, argomenti un po’ più complessi.

A fine pagina trovate anche gli esercizi in C svolti, testati e funzionanti.

* Questa guida dà per scontato che nel vostro computer sia già installato un ambiente di sviluppo (o IDE).
Se non lo avete ancora fatto, date un'occhiata a questo articolo. *

Quindi, cominciamo!


Il C è un linguaggio di programmazione di tipo strutturato, sviluppato nel 1972 da- – Scherzo! La storia non ci interessa.

0. Prerequisiti

Un paio di cose da tenere a mente:

– La funzione principale in un qualsiasi programma è il main(). Esso è indispensabile ed unico, cioè deve essere presente una sola volta.

– Alla chiusura del main(), quindi prima della chiusura dell’ultima parentesi graffa, va sempre scritto return 0. Se invece si chiude un void() (ne parlo qualche riga sotto), non è necessario porre il return.

– Il punto e virgola serve per chiudere un’istruzione, quindi dopo quel simbolo inizierà – se presente – l’istruzione successiva.

– Le parentesi graffe servono per delimitare blocchi di istruzioni (o statement).

– Per andare a capo quando si stampa a video (con la printf) si usa il carattere \n .

– Se si vuole stampare a video un carattere con l’accento, è bene scriverlo con l’apostrofo (ad esempio, è va scritto e’).

Ah, un altro semplice concetto che troverete utile più avanti è la differenza tra funzione e procedura. Una funzione è un insieme di istruzioni (cioè routine) che ritorna un valore. Una procedura, invece, è invece una routine che non restituisce alcun valore.

1. Librerie

Per prima cosa bisogna includere le librerie. Serviranno al nostro IDE per interpretare e compilare il programma che andremo a scrivere, quindi senza di esse non funzionerà nulla. Quelle standard sono <stdio.h> e <stdlib.h>, perciò all’inzio della pagina scriviamo:

#include <stdio.h>
#include <stdlib.h>

Se dovremo lavorare con le stringhe, char o array di caratteri, utilizzeremo anche la libreria <string.h>.

Un’altra libreria che troverete negli esercizi svolti è la <time.h>, che serve per generare numeri a caso (random).

2. Variabili

Le variabili sono dei contenitori, identificati da un nome univoco, a cui viene assegnato un valore.

Esse vengono sempre definite da un tipo e da un nome. Esistono diversi tipi di variabili in C:

TipoRappresentazioneDimensione
CharCarattere1 (8 bit)
IntNumero intero2 (16 bit)
ShortNumero intero corto2 (16 bit)
LongNumero intero lungo4 (32 bit)
FloatNumero reale4 (32 bit)
DoubleNumero reale lungo8 (64 bit)

Perciò, per dichiarare una variabile, dovremo scegliere uno dei tipi indicati sopra ed assegnargli un nome. Ad esempio, con:

int a;
int b;

abbiamo appena dichiarato due variabili di tipo intero, chiamate a e b. Ora è necessario inizializzarle, cioè assegnargli un valore:

a = 5;
b = 10;

Quindi in questo caso abbiamo la variabile di tipo intero chiamata a che ha valore 5, e la variabile intera b con valore 10.

La dichiarazione e l’inizializzazione possono avvenire anche contemporaneamente. Infatti, gli esempi precedenti possono essere riassunti in:

int a = 5;
int b = 10;

In base al caso, potremo decidere dove e quando dichiarare le variabili: fuori o dentro al main, ad esempio. Una variabile dichiarata fuori dal main si dice globale, proprio perché può essere usata da più funzioni all’interno dello stesso programma.

Ma non ci soffermiamo su questo punto, dato che non ha fini pratici ed immediati.

3. Operatori

Gli operatori consentono ai vari elementi all’interno di un programma di interagire. Si possono classificare in tre tipi diversi:

Aritmetici  
OperazioneSimboloEsempio
Addizione+2 + 3 = 5
Sottrazione6 – 1 = 5
Moltiplicazione*2 * 3 = 6
Divisione (Intera)/15 / 3 = 5
Divisione (Con resto)%11 / 6 = 5
Confronto  
SimboloSignificatoUtilizzo
==uguale aa == b
!=diverso daa != b
<minorea < b
>maggiorea > b
<=minore o ugualea <= b
>=maggiore o ugualea >= b
Logici  
SimboloSignificatoUtilizzo
&&e (AND logico)a && b
||o (OR logico)a || b

Un concetto fondamentale su cui bisogna prestare attenzione, per quanto riguarda gli operatori, è che con un uguale = si indica un assegnamento, mentre con due uguali == si effettua un confronto.

Quindi, a = 5 vuol dire che alla variabile a abbiamo assegnato il valore 5.

Invece se scriviamo a == 5, stiamo controllando se la variabile a ha valore 5.

4. Input / Output

printf

L’istruzione tipicamente usata per stampare a video è la printf(), che permette di stabilire cosa stampare ed in quale forma.

La struttura delle printf è la seguente:

printf("testo", argomento/i);

È possibile utilizzare anche delle stringhe di controllo, cioè una sorta di segnaposto. Cambiano in base al tipo di variabile a cui fanno riferimento:

StringaRappresentazione
%d oppure %iIntero decimale
%fVirgola mobile
%cCarattere
%sStringa
%oOttale
%x oppure %XEsadecimale

Ma vediamo un esempio pratico.

int a = 5;

printf("Il valore di a e': %d", a);

Come vedete, dopo la virgola si scrive la variabile a cui si riferisce la stringa di controllo. Eseguito il programma, al posto del %d, apparirà 5 (cioè il valore di a).

scanf

L’istruzione per acquisire un valore inserito in input dall’utente e memorizzarlo in una variabile è la scanf(). La sintassi è la stessa della printf(), anche per quanto riguarda le stringhe di controllo. L’unica differenza è sugli argomenti: sarà necessario che la variabile dove vogliamo che il valore venga memorizzato sia preceduta dal simbolo &. Un esempio pratico di printf e scanf all’opera è il seguente:

int i;
scanf("%d \n", &i);
printf("%d \n", i);

La scanf memorizzerà il valore intero inserito dall’utente all’interno della variabile i, e successivamente la printf lo stamperà a video.

5. Array (o vettori)

Di solito questo nome spaventa tutti. Niente panico! Un array non è altro che una collezione organizzata di oggetti dello stesso tipo.
Se immaginiamo un array come una scatola, consideriamo che all’interno di esso potremo inserire solo oggetti simili (o tutti int, o tutti char, ecc.).

Ma cosa si intende per organizzata? Vuol dire che è possibile identificare univocamente tutti gli oggeti dell’array in modo sistematico, cioè con l’uso di indici numerici che, in un array di grandezza N, vanno da 0 ad N-1. Prima che cadiate in depressione, facciamo un esempio pratico:

int vett[10];

Indica che abbiamo dichiarato un array di interi chiamato vett, che ha grandezza 10. Quindi, esso contiene dieci caselle numerate (da 0 a 9), ognuna delle quali include un numero intero.

La prima volta che ho visto un vettore e il relativo funzionamento mi sono chiesto: Ma a che diavolo servono?

Se vi state facendo la stessa domanda, sappiate che troverete la risposta dopo aver fatto qualche esercizio su questo argomento.

Se non ve la siete posta, caspita! Siete Bill Gates o un suo lontano parente.

6. Controlli Condizionali

Nella programmazione, le istruzioni vengono eseguite dalla prima all’ultima. Ma come facciamo se bisogna farne eseguire una piuttosto che un’altra in base al contesto? Basta porre delle condizioni che, se verificate, eseguono un pezzo di codice piuttosto che un altro.

if-else

L’istruzione if permette di verificare le condizioni con la seguente sintassi:

if (condizione) {
     istruzione;
}

Se la condizione si verificherà, si passa all’istruzione immediatamente successiva. Al contrario, se la condizione risulta falsa, si salta l’istruzione (o l’insieme di istruzioni) che fanno parte dell’if e si procede nell’esecuzione delle istruzioni successive, che possono essere la prosecuzione del programma, oppure un else, cioè un’istruzione alternativa. Ad esempio:

if (condizione) {
     istruzione 1;
} else {
     istruzione 2;
}

Si può usare anche l’else if, un costrutto che permette di verificare più di due condizioni diverse:

if (condizione) {
     istruzione 1;
} else if {
     istruzione 2;
} else {
     istruzione 3;
}

Negli esercizi svolti in fondo all’articolo vedremo anche l’if-else in azione.

7. Controlli Iterativi

Ora vediamo i costrutti che permettono di eseguire istruzioni o blocchi di istruzioni in modo ciclico, fino al verificarsi di alcune condizioni.
Le istruzioni di ciclo, come le istruzioni condizionali if-else, hanno bisogno che alcune condizioni si verifichino affinché il ciclo continui o si interrompa. Le istruzioni fondamentali di ciclo sono while, do-while e for.

while

La struttura del while è la seguente:

while (condizione) {
    istruzione/i;
}

L’istruzione o le istruzioni all’interno del while agiscono sulla condizione che il while aspetta essere falsa per poter uscire dal ciclo, altrimenti il ciclo non terminerebbe. Ad esempio, per stampare a video una successione di cifre da 0 a 49, si scrive:

int a = 0;

while (a != 50) {
    printf("%d ", a);
    a++;
}

dove a++ indica l’incremento di 1 che la variabile a subisce finché non si arriva a 50.

do – while

Molto simile al while è il do-while, che ha la seguente sintassi:

do {
     istruzione/i;
} while (condizione);

Tenendo conto delle considerazioni fatte per il while, va notato che in questo modo l’istruzione all’interno del do-while viene eseguita almeno una volta, indipendentemente dal fatto che la condizione specificata nel while risulti vera o falsa.
Ad esempio, per porre una domanda all’utente finché egli non risponde correttamente, scriveremo:

do {
    printf("Premere 1 per continuare: ");
    scanf("%d", &num);
} while (num !=1);
for

La sintassi del for è la seguente:

for (inizializzazione; condizione; incremento) {
    istruzione/i;
}

Il for è esattamente uguale al while, se non fosse che è più conciso ed è solitamente impiegato quando sappiamo a priori il numero di iterazioni che bisogna eseguire. I parametri all’interno del for vanno specificati ogni volta e sono separati da un punto e virgola. Nello specifico:

– Il primo viene eseguito prima di entrare nel ciclo, ed inizializza una variabile. Generalmente la variabile è usata come controllo del ciclo e servirà per tenere traccia del numero di iterazioni. Ricordiamo che questa variabile va dichiarata prima del for ed inizializzata dentro al for.
– Il secondo è la condizione, che se risulta falsa interrompe l’esecuzione del ciclo.
– Il terzo parametro è l’incremento, che viene eseguito dopo ogni ciclo del for; questa istruzione agisce sulla variabile di controllo incrementandone (o decrementandone) il valore.

Facciamo un esempio con un esercizio che conta da zero a cento.

int i;

for (i=0; i<=100; i++) {
    printf("%d", i);
}

Bisogna sapere che gli array e i cicli for vanno a braccetto, per il fatto che un ciclo for permette di contare per un certo numero di volte.
In questo modo, utilizzando una variabile che incrementi (o decrementi) il suo valore ad ogni ciclo, è possibile scorrere le posizioni degli array.
Per fare un esempio, consideriamo un vettore di interi lungo 100 e di voler stampare a video il suo contenuto; non inizieremo a contare da 1, ma da 0, fino ad arrivare a novantanove (quindi cento elementi). Utilizzeremo il comando di stampa sull’array con l’indice, incrementato ogni volta, preso dal ciclo for. Cioè:

int vett[100];

int i;
for (i=0; i<100; i++) {
    printf (“%d”, int_array[i]);
}

Invece, un esempio di codice per riempire un array lungo 10 con numeri interi chiesti in input all’utente, è il seguente:

for (i=0; i<10; i++) {
    printf("Inserisci un numero: ");
    scanf("%d", &vett[i]);
}

In questo modo verranno chiesti dieci numeri in input e memorizzati nell’array, a partire dalla posizione 0 fino alla 9.

8. Ultime considerazioni

Se ci dovessimo trovare nella situazione di lavorare con gli array di caratteri (char), teniamo a mente che:

1. Ogni cella del vettore corrisponde ad una lettera della parola inserita.

2. Per evitare problemi, è bene assegnare agli array di tipo char una grandezza predefinita. Ad esempio, scrivere

char vett[];

è sbagliato. È preferibile scrivere così:

char vett[10];

3. Se dobbiamo vedere quanto è lunga la parola inserita nell’array, vi consiglio di agire in questo modo:

char vettore[20];
int i, lung;

printf("Inserisci una parola: \n");
scanf("%s", vettore);

lung = strlen(vettore);

for (i=0; i<lung; i++) {
    if (condizione) {
        istruzione;
}

Il comando strlen, incluso nella libreria <string.h>, misurerà la lunghezza della parola inserita dall’utente. In questo modo si eviterà che il for conteggi anche le caselle vuote.

In questo caso, se l’utente inserisce una parola di 12 caratteri, l’array avrà 12 celle occupate e 8 libere in quanto è di lunghezza 20. Quindi se noi non utilizzassimo lo strlen per misurare il numero di lettere della parola inserita, e ponessimo il for con un generico i < n, verrebbero conteggiate anche le 8 celle vuote e il programma non funzionerebbe a dovere.

9. Esercizi svolti

Finalmente, ci siamo. Qui di seguito trovate esercizi svolti e funzionanti (compilati e testati con l’IDE Eclipse) di vario genere.

Siete liberi di ricopiarli, modificarli, stamparli e buttarli nel cestino, se è quello che vorrete fare.


• Array al Contrario •

Dato un vettore di lunghezza 10, si chiedano i numeri in input all’utente e si ristampino a video prima nell’ordine di inserimento e poi al contrario

/*
 * ArrayContrario1.c
 *
 *  Created on: 29/gen/2015
 *  Author: Fabio Biocchetti
 */

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

int main() {
    int vett[10];
    int i;

    for (i = 0; i < 10; i++) {
        printf("Inserisci un numero: ");
        scanf("%d", &vett[i]);
    }

    printf("\nIl vettore e' il seguente: ");
    for (i = 0; i < 10; i++) {
        printf("%d ", vett[i]);
    }

    printf("\nIl vettore al contrario e' il seguente: ");
    for (i = 9; i >= 0; i--) {
        printf("%d ", vett[i]);
    }
    return 0;
}
• Massimo e minimo di un array •

Si inseriscano in input 10 numeri in un vettore di lunghezza 10. Si stampi il numero più grande e il numero più piccolo di tale vettore.

/*
 * ArrayMaxMin1.c
 *
 *  Created on: 29/gen/2015
 *  Author: Fabio Biocchetti
 */

#include<stdio.h>
#include<stdlib.h>

int main() {
    int vett[10];
    int i, min;
    int max = 0;

    for (i = 0; i < 10; i++) {
        printf("Inserisci un numero: ");
        scanf("%d", &vett[i]);
    }

    for (i = 0; i < 10; i++) {
        if (max < vett[i])
            max = vett[i];
    }
    printf("Il numero piu' grande dell'array e': %d \n", max);

    min = max;
    for (i = 0; i < 10; i++) {
        if (min > vett[i])
            min = vett[i];
    }
    printf("Il numero piu' piccolo dell'array e': %d \n", min);

    return 0;
}
• Array pari o dispari •

Si chiedano 10 numeri in input. Verificare se i numeri inseriti sono pari o dispari. Stampa a video prima tutti i dispari, poi tutti i pari.

/*
 * ArrayPariDispari.c
 *
 *  Created on: 28/gen/2015
 *  Author: Fabio Biocchetti
 */

#include<stdio.h>

int main() {
    int vett[10];
    int i;

    for (i = 0; i < 10; i++) {
        printf("Inserisci un numero: \n");
        scanf("%d", &vett[i]);
    }

    for (i = 0; i < 10; i++) {
        if (vett[i] % 2 != 0) {
            printf("Numero dispari: %d \n", vett[i]);
        }
    }

    for (i = 0; i < 10; i++) {
        if (vett[i] % 2 == 0) {
            printf("Numero pari: %d \n", vett[i]);
        }
    }

    return 0;
}
• Array posizione pari o dispari •

Chiedere in input 10 numeri. Verificare se alla posizione pari c’è un numero pari. Se sì, stampa a video “Pari”. Fare lo stesso con i dispari. Negli altri casi si stampi a video “Non va bene”.

/*
 * ArrayPariDispari2.c
 *
 *  Created on: 28/gen/2015
 *  Author: Fabio Biocchetti
 */

#include<stdio.h>

int main() {
    int vett[10];
    int i;

    for (i = 0; i < 10; i++) {
        printf("Inserisci un numero: \n");
        scanf("%d", &vett[i]);
    }

    for (i = 0; i < 10; i++) {
        if (i % 2 == 0 && vett[i] % 2 == 0) {
            printf("Pari \n");
        } else if (i % 2 != 0 && vett[i] % 2 != 0) {
            printf("Dispari \n");
        } else if (i % 2 == 0 && vett[i] % 2 != 0) {
            printf("Non va bene \n");
        } else if (i % 2 != 0 && vett[i] % 2 == 0) {
            printf("Non va bene \n");
        }
    }
    return 0;
}
• Sommare gli elementi di un array •

Sommare tutti gli elementi di due vettori di grandezza 5.

/*
 * ArraySomma.c
 *
 *  Created on: 02/feb/2015
 *  Author: Fabio Biocchetti
 */

#include<stdio.h>
#include<stdlib.h>

int main() {
    int vett1[5];
    int vett2[5];
    int vettsomma[5];
    int i;

    for (i = 0; i < 5; i++) {
        printf("\nInserisci un numero: ");
        scanf("%d", &vett1[i]);
    }

    for (i = 0; i < 5; i++) {
        printf("\nInserisci un numero: ");
        scanf("%d", &vett2[i]);
    }

    for (i = 0; i < 5; i++) {
        vettsomma[i] = vett1[i] + vett2[i];
    }
    printf("\nLa somma dei due vettori e':");

    for (i = 0; i < 5; i++) {
        printf("%d ", vettsomma[i]);
    }

    return 0;
}
• Verificare se gli elementi di un array di interi e di caratteri sono uguali •

Chiedere in input cinque numeri e salvarli in un vettore di grandezza 5. Chiedere in input una parola e salvarla in un array di char grande 10. Verificare se il primo ha elementi uguali. Fare lo stesso per il secondo.

/*
 * ArrayUguali.c
 *
 *  Created on: 30/gen/2015
 *  Author: Fabio Biocchetti
 */

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main() {
    int vett[5];
    char vett1[10];
    int i, lung;
    int uguale = 1;
    int uguale1 = 1;

    for (i = 0; i < 5; i++) {
        printf("Inserisci un numero: ");
        scanf("%d", &vett[i]);
    }

    for (i = 0; i < 4 && uguale == 1; i++) {
        if (vett[i] == vett[i + 1])
            uguale = 1;
        else {
            uguale = 0;
        }
    }

    if (uguale == 1) {
        printf("Il vettore ha tutti gli elementi uguali");
    } else {
        printf("Il vettore non ha tutti gli elementi uguali");
    }

    printf("\nInserisci una parola: ");
    scanf("%s", vett1);

    lung = strlen(vett1);

    for (i = 0; i < lung - 1; i++) {
        if (vett1[i] == vett1[i + 1])
            uguale1 = 1;
        else {
            uguale1 = 0;
        }
    }

    if (uguale1 == 1) {
        printf("Il vettore char ha tutti gli elementi uguali");
    } else {
        printf("Il vettore char non ha tutti gli elementi uguali");
    }

    return 0;
}
• Verificare se un array di interi ha due elementi consecutivi uguali •

Chiedere in input dieci numeri. Ordinare il vettore in ordine crescente e verificare se sono presenti due numeri consecutivi uguali.

/*
 * EsercizioEsame3Febb.c
 *
 *  Created on: 04/feb/2015
 *  Author: Fabio Biocchetti
 */

#include<stdio.h>
#include<stdlib.h>

int main() {
    int vett[10];
    int i, k, temp;

    for (i = 0; i < 10; i++) {
        printf("Inserisci un numero: ");
        scanf("%d", &vett[i]);
    }

    for (i = 0; i < 10 - 1; i++) {
        for (k = 0; k < 10 - 1; k++) {
            if (vett[k] > vett[k + 1]) {
                temp = vett[k];
                vett[k] = vett[k + 1];
                vett[k + 1] = temp;
            }
        }
    }

    for (i = 0; i < 10 - 1; i++) {
        if (vett[i] == vett[i + 1]) {
            printf("\nHo trovato due %d consecutivi.", vett[i]);
        }
    }
    return 0;
}
• Calcolo della media •

Si chieda all’utente quanti numeri si vogliono inserire, quindi calcolare la media dei numeri inseriti.

/*
 * Media.c
 *
 *  Created on: 02/feb/2015
 *  Author: Fabio Biocchetti
 */

#include<stdio.h>
#include<stdlib.h>

int main() {
    int i, n;
    float somma = 0;
    float media;

    printf("Quanti numeri vuoi inserire? ");
    scanf("%d", &n);

    float vett[n];

    for (i = 0; i < n; i++) {
        printf("\nInserisci un numero: ");
        scanf("%f", &vett[i]);
    }

    for (i = 0; i < n; i++) {
        somma = somma + vett[i];
    }

    media = somma / n;

    printf("\nLa media dei numeri inseriti e': %f", media);

    return 0;
}
• Calcolo del fattoriale •

Si chieda all’utente un numero in input, quindi si calcoli il suo fattoriale.

/*
 * Fattoriale.c
 *
 *  Created on: 19/set/2014
 *  Author: Fabio Biocchetti
 */

#include<stdio.h>
#include<stdlib.h>

int main() {

    int n, m;
    int fattoriale = 1;

    printf("Inserisci un numero: ");
    scanf("%d", &n);

    for (m = n; m > 1; m--) {
        fattoriale = fattoriale * m;
    }

    printf("Il fattoriale di %d e' %d\n", n, fattoriale);

    return 0;
}
• Parola palindroma •

Si chieda all’utente una parola e si verifichi se essa è palindroma (cioè se è uguale letta da destra o da sinistra).

/*
 * Palindroma.c
 *
 *  Created on: 28/gen/2015
 *  Author: Fabio Biocchetti
 */

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main() {
    char vett[15];
    int i, k, lung;
    int pal = 0;

    printf("Inserisci una parola: \n");
    scanf("%s", vett);

    lung = strlen(vett);

    for (i = 0, k = lung - 1; i < lung / 2 && pal == 0; i++, k--) {
        if (vett[i] == vett[k])
            pal = 1;
    }

    if (pal == 1) {
        printf("\nLa parola %s e' palindroma.", vett);
    } else
        printf("\nLa parola %s non e' palindroma", vett);
    return 0;
}
• Conteggio vocali e consonanti •

Creare un array di caratteri. Chiedere in input all’utente una parola e contarne il numero di vocali e consonanti. Quindi, se presenti, si trasformino le vocali da minuscole a maiuscole.

/*
 * Vocali1.c
 *
 *  Created on: 27/gen/2015
 *  Author: Fabio Biocchetti
 */

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main() {
    char vettore[20];
    int vocali = 0;
    int consonanti = 0;
    int i, lung;

    printf("Inserisci una parola: \n");
    scanf("%s", vettore);

    lung = strlen(vettore);

    for (i = 0; i < lung; i++) {
        if (vettore[i] == 'a' || vettore[i] == 'e' || vettore[i] == 'i'
                || vettore[i] == 'o' || vettore[i] == 'u')
            vocali++;
        else
            consonanti++;
    }

    for (i = 0; i < lung; i++) {
        if (vettore[i] == 'a')
            vettore[i] = 'A';
        else if (vettore[i] == 'e')
            vettore[i] = 'E';
        else if (vettore[i] == 'i')
            vettore[i] = 'I';
        else if (vettore[i] == 'o')
            vettore[i] = 'O';
        else if (vettore[i] == 'u')
            vettore[i] = 'U';
    }

    printf("Il numero delle vocali e': %d \n", vocali);
    printf("Il numero delle consonanti e': %d \n", consonanti);
    printf("La parola con le vocali maiuscole e' %s", vettore);

    return 0;
}
• Lettera presente nella frase •

Si scriva una parola o frase e si conti quante volte la prima lettera è presente all’interno di essa.

/*
 * StringaInput1.c
 *
 *  Created on: 29/gen/2015
 *  Author: Fabio Biocchetti
 */

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main() {
    char parola[20];
    int i, lung;
    int count;

    printf("\nInserisci una parola o frase: ");
    scanf("%s", parola);

    lung = strlen(parola);

    for (i = 0; i < lung; i++) {
        if (parola[0] == parola[i]) {
            count++;
        }
    }
    printf("\nLa prima lettera e' presente %d volte.", count);

    return 0;
}

6 commenti

  1. Egregio Signor Fabio, complimenti per l’ottima guida al LINGUAGGIO di programmazione in C. Ho provato a ripetere gli ESERCIZI SVOLTI presenti nella GUIDA, in modo particolare gli esempi proposti con gli ARRAY. Purtroppo in tuti gli esercizi (ne cito solo alcuni: massimo minimo di un array, array pari o dispari, array posizione pari o dispari, sommare gli elementi di un array …) I PROGRAMMI che io uso(CODEBLOCKS ed DEV++) mi danno errore, negli eseercizi citati, nel seguente passaggio: scanf(“%d”, & vett[i]);
    La ringrazio per la Sua cortese attenzione.

    • Buonasera Alcide, grazie per la segnalazione.
      Ho corretto gli esercizi in questione e ora il problema dovrebbe essere risolto.

      Buono studio!

  2. Potresti spiegare anche i puntatori?
    Ti ringrazio

  3. voglio esercizi sui vettori zio

  4. Ottima capacita’ di sintesi, Fabio.
    Se vorro’ imparare il C (propedeutico al C++ ed al C#), approfondiro’.
    Per ora mi dedico all’ HTML.
    Salutissimi.

  5. Nel do-while dopo la condizione dentro parentesi del while ci vuole il punto e virgola altrimenti da errore


Aggiungi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *