Questo manuale nasce con l'intento di fornire una guida esauriente ma compatta alla programmazione in linguaggio C. Il testo si rivolge in primo luogo agli studenti di Ingegneria e di Informatica, ma può essere un prezioso strumento di consultazione anche per il professionista. Gli autori, infatti, hanno adottato un approccio innovativo nella scelta degli argomenti, nella loro organizzazione e nella presentazione, puntando a evidenziare le funzionalità del linguaggio ritenute più utili nel suo uso corrente, in relazione alle applicazioni per le quali ancora oggi il C rappresenta, anche in ambito industriale, il linguaggio di programmazione di riferimento. In questo modo il volume, oltre a presentare in modo chiaro e ordinato tutti i concetti di base della programmazione, riesce ad affrontare anche argomenti più avanzati: problemi comuni, ma che richiedono soluzioni non banali. Questa seconda edizione aggiorna vari aspetti del testo originale, riorganizza alcuni contenuti e utilizza diversi nuovi esempi.
Maggiori Informazioni
Autore
Facchinetti Tullio;Larizza Cristiana
Editore
Maggioli Editore
Anno
2025
Tipologia
Libro
Collana
Apogeo education
Lingua
Italiano
Indice
Prefazione 1 Caratteristiche generali 1.1 Breve storia del linguaggio 2 Introduzione al linguaggio C 2.1 Il primo programma 2.2 Compilazione del programma 2.3 Errori e avvertimenti 2.4 Interpretazione dei messaggi del compilatore 2.5 Commenti 2.6 Formattazione del codice sorgente 2.7 Parole chiave 2.8 Identificatori 2.9 Variabili 2.10 Espressioni 2.11 Visualizzazione a video 2.12 Lettura di dati 2.12.1 Uso di fgets per la lettura di dati da tastiera 2.12.2 Conversioni numeriche tramite atoi e atof 3 Preprocessore 3.1 Direttiva #define 3.2 Direttiva #define con parametri 3.3 Direttiva #include 3.4 Direttive #if e #ifdef 3.5 Eliminazione temporanea di codice usando #if 3.6 Macro predefinite utili per la diagnostica 3.7 Esecuzione del solo preprocessore 4 Strutture di controllo 4.1 Istruzioni composte 4.2 Costrutto condizionale if 4.3 Uso di else 4.4 Condizioni complesse con l’uso di operatori logici 4.5 Costrutto iterativo for 4.6 Costrutto iterativo while 4.7 Costrutto iterativo do-while 4.8 Costrutto di selezione switch 4.9 Controllo del flusso di esecuzione con break e continue 5 Tipi di dati 5.1 Tipizzazione e dichiarazione 5.2 Tipi di dato e memoria 5.2.1 Dichiarazione di variabili a sola lettura 5.3 Tipi numerici 5.3.1 Tipi interi 5.3.2 Costanti di tipo intero 5.3.3 Tipi in virgola mobile 5.3.4 Costanti in virgola mobile 5.4 Puntatori 5.4.1 Operazioni sui puntatori 5.4.2 Puntatore nullo 5.5 Array 5.5.1 Vettori 5.5.2 Allocazione in memoria dei vettori e indicizzazione 5.5.3 Inizializzazione dei vettori 5.5.4 Uso delle macro in combinazione con vettori e cicli 5.6 Operatore sizeof 5.7 Stringhe 5.7.1 Stringhe costanti 5.7.2 Variabili stringa 5.7.3 Stampa di stringhe 5.7.4 Funzioni di manipolazione delle stringhe 5.8 Interi di dimensione prefissata 5.9 Conversione di tipo 5.9.1 Conversione automatica 5.9.2 Conversione per assegnamento 5.9.3 Conversione esplicita: il cast 6 Funzioni 6.1 Dichiarazione di funzioni 6.2 Uso di void 6.3 Definizione di funzioni 6.4 Chiamata di una funzione 6.5 Passaggio dei parametri 6.6 Passaggio per valore 6.7 Passaggio per riferimento 6.8 Passaggio di puntatori const 6.9 Calcolo di un istogramma 6.10 Passaggio di parametri al programma principale 6.10.1 Stampa dei parametri della linea di comando 6.10.2 Controllo del numero di parametri 6.10.3 Generazione di numeri pseudo-casuali 6.10.4 Analisi avanzata della riga di comando 6.11 Ricorsione 6.11.1 Successione di Fibonacci 6.11.2 Equivalenza con la versione iterativa 7 Tipi di dati derivati 7.1 Array multi-dimensionali 7.1.1 Matrici 7.1.2 Inizializzazione delle matrici 7.1.3 Array con più di 2 dimensioni 7.2 Strutture dati 7.2.1 Dichiarazione di strutture 7.2.2 Accesso ai campi di una struttura 7.2.3 Inizializzazione dei campi di strutture 7.2.4 Puntatori a struttura 7.2.5 Strutture come argomenti di funzione 7.2.6 Confronto di strutture 7.2.7 Strutture come campi di strutture 7.3 Assegnamento di nuovi nomi ai tipi di dato: typedef 8 Utilizzo dei file 8.1 Vari tipi di file 8.1.1 File di testo e file binari 8.1.2 Rappresentazione dei dati 8.2 Accesso a file 8.2.1 Apertura e chiusura di file 8.2.2 Posizione corrente all’interno del file 8.3 File di I/O standard 8.4 Lettura/scrittura di singoli caratteri 8.5 Accesso a file binari 8.6 Accesso a file di testo 8.7 Lettura per righe con fgets e sscanf 8.7.1 Formato grafico PGM 8.7.2 Lettura di file PGM 8.8 Lettura e scrittura mediante fscanf e fprintf 8.9 Casistiche per la lettura/scrittura di file 8.9.1 Elaborazione sequenziale 8.9.2 Elaborazione in blocco 8.9.3 Allocazione della memoria a dimensione fissa 8.10 Bufferizzazione degli accessi al disco 8.10.1 Bufferizzazione dell’input con scanf 8.10.2 Bufferizzazione dell’input con fgets 8.10.3 Bufferizzazione dell’output testuale 8.10.4 Bufferizzazione dell’output e chiusura di file 8.10.5 Problema del buffer overflow 9 Puntatori 9.1 Puntatori a void 9.2 Conversione tra puntatori 9.3 Puntatori e vettori 9.3.1 Operazioni su puntatori e vettori 9.3.2 Puntatori e stringhe 9.3.3 Inizializzazione delle stringhe 9.4 Passaggio di matrici come parametri di funzione 9.5 Vettori di stringhe 9.6 Allocazione dinamica della memoria 9.7 Allocazione dinamica e lettura da file 9.7.1 Lettura di file in blocco 9.7.2 Allocazione incrementale della memoria 9.7.3 Allocazione dinamica nell’elaborazione di file PGM 9.7.4 Allocazione dinamica di una matrice 9.8 Puntatori a funzione 10 Modularizzazione dei programmi 10.1 Processo di generazione del programma eseguibile 10.2 Modularizzazione e uso di librerie di codice 10.3 Esempio di programma composto da più file sorgente 10.3.1 File principale 10.3.2 Modulo debug.h e la macro TRACE 10.3.3 Strutture dati e relative funzioni (file pers.*) 10.3.4 Elaborazione di stringhe generiche (file strchg.*) 10.3.5 Esempio di esecuzione del programma 10.4 Linking per la creazione del programma eseguibile 10.5 Comando ar 10.6 Comando make 10.6.1 Variabili di make 10.6.2 Makefile e dipendenze 10.6.3 Esempio completo di Makefile 11 Classi di memorizzazione 11.1 Spazio dei nomi 11.2 Allocazione di memoria 11.2.1 Allocazione statica 11.2.2 Allocazione automatica 11.2.3 Allocazione dinamica 11.2.4 Esempi di allocazione 11.3 Classi di memorizzazione di variabili 11.4 Visibilità di dati e funzioni 11.4.1 Effetto della visibilità: esempio 11.4.2 Visibilità e limitazioni nell’uso delle variabili 11.5 Qualificatori e classi di memorizzazione 11.5.1 Variabili auto 11.5.2 Variabili register 11.5.3 Variabili static 11.5.4 Variabili extern 11.6 Classi di memorizzazione di funzioni 11.7 Classe di memorizzazione e inizializzazione di variabili 12 Gli operatori 12.1 Operatori ed espressioni 12.1.1 Precedenza degli operatori 12.1.2 Associatività 12.1.3 Ordine di valutazione 12.2 Operatori aritmetici 12.2.1 Moltiplicazione e divisione 12.2.2 Resto di divisione intera: operatore modulo 12.2.3 Somma e sottrazione 12.2.4 Negazione unaria 12.3 Operatori di assegnamento 12.3.1 Assegnamento semplice 12.3.2 Forme abbreviate di assegnamento 12.3.3 Incremento e decremento 12.4 Operatori di confronto 12.4.1 Uguaglianza e diversità 12.4.2 Disuguaglianza 12.5 Operatori logici 12.5.1 AND logico 12.5.2 OR logico 12.5.3 Negazione logica 12.6 Operazioni sui bit 12.6.1 AND binario 12.6.2 OR binario 12.6.3 XOR binario 12.6.4 Complemento a 1 12.6.5 Scorrimento dei bit (shift) 12.6.6 Operazione di mascheratura 12.7 Operazioni sui puntatori 12.7.1 Accesso tramite puntatore 12.7.2 Estrazione di un indirizzo 12.8 Operazioni sulle strutture 12.8.1 Elemento di unione o struttura 12.8.2 Elemento di struttura da puntatore 12.9 Funzioni e vettori 12.9.1 Elemento di vettore 12.9.2 Chiamata a funzione 12.10 Operazioni sui tipi 12.10.1 Operatore di cast 12.10.2 Dimensione in byte di un oggetto 12.11 Operatori di controllo 12.11.1 Espressione condizionale 12.11.2 Operatore virgola 12.12 Concetto di effetto collaterale 12.13 Side effect e ordine di valutazione 13 Ricerca e ordinamento 13.1 Ordinamento 13.1.1 Algoritmi di ordinamento 13.1.2 Selection sort 13.2 Algoritmi di ricerca 13.2.1 Ricerca sequenziale 13.2.2 Ricerca sequenziale con valore sentinella 13.2.3 Ricerca binaria 13.2.4 Ricerca binaria in forma iterativa 13.2.5 Ricerca binaria in forma ricorsiva 13.2.6 Confronto tra ricerca sequenziale e ricerca binaria 13.3 Funzioni di libreria per ricerca e ordinamento 13.3.1 Funzione di confronto 13.3.2 Esempio di applicazione A Stile di programmazione A.1 Indentazione A.2 Indentazione, stesura del codice ed errori A.3 Strutturazione di dati e algoritmi A.4 Organizzazione del programma A.5 Gestione degli errori A.6 Uso dei commenti A.7 Interazione con l’utente