Anteprima
Vedrai una selezione di 10 pagine su 41
Laboratorio di Algoritmi e strutture dati Pag. 1 Laboratorio di Algoritmi e strutture dati Pag. 2
Anteprima di 10 pagg. su 41.
Scarica il documento per vederlo tutto.
Laboratorio di Algoritmi e strutture dati Pag. 6
Anteprima di 10 pagg. su 41.
Scarica il documento per vederlo tutto.
Laboratorio di Algoritmi e strutture dati Pag. 11
Anteprima di 10 pagg. su 41.
Scarica il documento per vederlo tutto.
Laboratorio di Algoritmi e strutture dati Pag. 16
Anteprima di 10 pagg. su 41.
Scarica il documento per vederlo tutto.
Laboratorio di Algoritmi e strutture dati Pag. 21
Anteprima di 10 pagg. su 41.
Scarica il documento per vederlo tutto.
Laboratorio di Algoritmi e strutture dati Pag. 26
Anteprima di 10 pagg. su 41.
Scarica il documento per vederlo tutto.
Laboratorio di Algoritmi e strutture dati Pag. 31
Anteprima di 10 pagg. su 41.
Scarica il documento per vederlo tutto.
Laboratorio di Algoritmi e strutture dati Pag. 36
Anteprima di 10 pagg. su 41.
Scarica il documento per vederlo tutto.
Laboratorio di Algoritmi e strutture dati Pag. 41
1 su 41
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

Funzioni standard di output

#include <stdio.h>

int printf(const char *format, ...);

int fprintf(FILE *stream, const char *format, ...);

#include <stdio.h> Perché array y è dichiarato di lunghezza

int main(void) { 5 ma contiene solo 4 caratteri?

char x = ‘a’;

char y[5] = "abcd";

printf("%c\n", x); /* stampa il carattere contenuto nella variabile x */

printf("%s\n", y); /* stampa la stringa contenuta nell’array y */

}

Funzioni standard di output

#include <stdio.h>

int printf(const char *format, ...);

int fprintf(FILE *stream, const char *format, ...);

L’ultimo elemento dell’array deve contenere

#include <stdio.h> ‘

il carattere di terminazione stringa \0’.

int main(void) { Le funzioni standard del C assumono che le

char x = ‘a’; stringhe siano sempre terminate.

char y[5] = "abcd\0";

printf("%c\n", x); /* stampa il carattere contenuto nella variabile x */

printf("%s\n", y); /* stampa la stringa contenuta nell’array y */

}

Il tipo di dati stringa di caratteri

char,

Le stringhe sono array di elementi di tipo il cui ultimo elemento è

0 o, equivalentemente, il carattere di terminazione di stringa ‘\0’.

char s[] = "pippo";

è equivalente a char s[6] = "pippo";

è equivalente a

char s[] = {'p','i','p','p','o','\0'};

è equivalente a (NB: non del tutto equivalente, vedremo in che senso più

avanti): char *s = "pippo";

Funzioni standard di output

#include <stdio.h>

int printf(const char *format, ...);

int fprintf(FILE *stream, const char *format, ...);

#include <stdio.h>

int main(void) {

char x = ‘a’;

char y[5] = abcd ;

" "

printf("Carattere %c e stringa %s \n", x, y);

/* stampa il carattere contenuto nella variabile x e, di seguito, la stringa

contenuta in y */

}

La stringa di formato

Alcuni dei più comuni codici per la stringa di formato:

%d Stampa l’argomento corrispondente come un numero decimale con segno,

e.g., 3490. L’argomento deve essere un int.

%f Stampa l’argomento corrispondente come un numero floating-point, e.g.,

3.14159. L’argomento deve essere un float.

%c Stampa l’argomento corrispondente come un carattere, e.g., 'B'. L’argomento

deve essere un char.

%s Stampa l’argomento corrispondente come una stringa, e.g., "Salve mondo?".

L’argomento deve essere un char* o un char[].

%% Nessun argomento viene convertito, viene stampato un semplice segno di

percento. È il modo di stampare '%' con printf().

%p Stampa un tipo puntatore in formato esadecimale, i.e., l’indirizzo di memoria a cui

il puntatore punta. (Non il valore memorizzato nell’indirizzo, ma il numero

corrispondente alla cella di memoria.)

Funzioni standard di output

#include <stdio.h>

int printf(const char *format, ...);

int fprintf(FILE *stream, const char *format, ...);

#include <stdio.h>

int main(void) {

FILE *fd = fopen("myfile.txt", "w");

char y[5] = "abcd";

if (fd) {

fprintf(fd,"%s\n", y); /* inserisce nel file la stringa contenuta in y */

fclose(fd);

}

}

Funzioni standard di output

#include <stdio.h>

int printf(const char *format, ...);

int fprintf(FILE *stream, const char *format, ...);

Variabile di tipo puntatore

a (descrittore di) file.

#include <stdio.h>

int main(void) {

FILE *fd = fopen("myfile.txt", "w");

char y[5] = "abcd";

if (fd) {

fprintf(fd,"%s\n", y); /* inserisce nel file la stringa contenuta in y */

fclose(fd);

}

}

Funzioni standard di output

#include <stdio.h>

int printf(const char *format, ...);

int fprintf(FILE *stream, const char *format, ...);

#include <stdio.h>

int main(void) {

FILE *fd = fopen("myfile.txt", "w"); Funzioni di apertura e

char y[5] = "abcd"; chiusura di file.

if (fd) {

fprintf(fd,"%s\n", y); /* inserisce nel file la stringa contenuta in y */

fclose(fd);

}

}

Funzioni standard di output

#include <stdio.h>

FILE *fopen(const char *name, char *mode);

int fclose(FILE *stream);

#include <stdio.h>

int main(void) {

FILE *fd = fopen("myfile.txt","w");

char y[5] = "abcd";

if (fd) {

fprintf(fd,"%s\n", y); /* inserisce nel file la stringa contenuta in y */

fclose(fd);

}

}

Modalità di apertura file

I possibili valori per il mode in fopen("myfile.txt", mode) sono:

r Apre il file per la lettura (read-only).

w Apre il file per la scrittura (write-only). Il file viene creato se non esiste.

r+ Apre il file per lettura e scrittura. Il file deve già esistere.

w+ Apre il file per scrittura e lettura. Il file viene creato se non esiste.

a Apre il file per aggiornamento (append). È come aprire il file per la scrittura, ma ci si

posiziona alla fine del file per aggiungere dati alla fine. Il file viene creato se non esiste.

a+ O Apre il file per lettura e aggiornamento. Il file viene creato se non esiste.

Funzioni standard di input

#include <stdio.h>

int scanf(const char *format, ...);

int fscanf(FILE *stream, const char *format, ...);

Indirizzo della variabile intera x.

#include <stdio.h>

int main(void) {

char x;

printf("Inserire un carattere:");

scanf("%c", &x);

/* riceve un carattere da tastiera e lo inserisce nella variabile x */

}

Funzioni standard di input

#include <stdio.h>

int scanf(const char *format, ...);

int fscanf(FILE *stream, const char *format, ...);

ATTENZIONE!!!

#include <stdio.h>

int main(void) {

char x;

scanf("Inserire un carattere: %c", &x);

/* Legge da tastiera la stringa "Inserire un carattere:" seguita da un ultimo

carattere che viene inserito nella variabile x */

}

Funzioni standard di input

#include <stdio.h>

int scanf(const char *format, ...);

int fscanf(FILE *stream, const char *format, ...);

#include <stdio.h>

int main(void) {

char x[10];

printf("Inserire una stringa di 9 caratteri:");

scanf("%s", &x); /* Legge da tastiera la stringa che viene inserita nell’array x */

}

Funzioni standard di input

#include <stdio.h>

int scanf(const char *format, ...);

int fscanf(FILE *stream, const char *format, ...);

#include <stdio.h> Cosa succede se si inseriscono

più di 10 caratteri?

int main(void) {

char x[10];

printf("Inserire una stringa di 9 caratteri:");

scanf("%s", &x); /* Legge da tastiera la stringa che viene inserita nell’array x */

}

Funzioni standard di input

#include <stdio.h>

int scanf(const char *format, ...);

int fscanf(FILE *stream, const char *format, ...);

Errore di indirizzamento

#include <stdio.h> (segmentation fault)!

Non vi è alcun controllo sui

int main(void) {

char x[10]; limiti degli array!

printf("Inserire una stringa di 9 caratteri:");

scanf("%s", &x); /* Legge da tastiera la stringa che viene inserita nell’array x */

}

Funzioni standard di input

#include <stdio.h>

int scanf(const char *format, ...);

int fscanf(FILE *stream, const char *format, ...);

#include <stdio.h> Una possibile soluzione

int main(void) {

char x[10];

printf("Inserire una stringa di 9 caratteri:");

scanf("%9c", &x);

/* Legge una stringa i cui primi 9 caratteri vengono inseriti nell’array x */

}

Funzioni standard di input

#include <stdio.h>

int getc(FILE *stream);

int fgetc(FILE *stream);

int getchar(void);

#include <stdio.h> Una soluzione più robusta.

int main(void) {

char x[10];

printf("Inserire una stringa di 9 caratteri:");

for(i=0; (i<9 && (c = getchar()) !='\n‘ && c != EOF; i++) /* legge e inserisce max 9

x[i]=c; caratteri in x */

x[i] = ‘\0’; /* inserimento carattere di terminazione stringa */

}

Funzioni standard di input

#include <stdio.h>

int getc(FILE *stream);

int fgetc(FILE *stream);

#include <stdio.h>

int main(void) {

char x[10],c;

FILE *fd = fopen("myfile.txt", "r");

if (fd) {

for(i=0; (i<9 && (c = fgetc(fd))!='\n' && c != EOF); i++)

x[i]=c;

x[i]=‘\0’;

fclose(fd);

}

}

Strutture

Per aggregare variabili di tipo diverso sotto un unico nome il C fornisce le

strutture.

struct punto { struct rettangolocoloratoepesato {

int x; int colore;

int y; double peso;

}; struct punto bottomleft, topright;

};

struct punto sommapunti(struct punto a, struct punto b)

{ a.x += b.x;

a.y += b.y;

return a;

}

Strutture

Per aggregare variabili di tipo diverso sotto un unico nome il C fornisce le strutture.

struct punto { struct rettangolocoloratoepesato {

int x; int colore;

int y; double peso;

}; struct punto bottomleft, topright;

" "

};

Operatore . (punto) per

accesso a campo di struct.

struct punto sommapunti(struct punto a, struct punto b)

{ a.x += b.x;

a.y += b.y;

return a;

}

Allocazione dinamica della memoria

#include <stdlib.h>

void *malloc(int dim);

void *calloc(int nelem, int dimelem);

void free(void *ptr);

int *interi;

char *string;

interi = (int *) malloc(n * sizeof(int)); /* allocazione di spazio per n interi */

stringa = (char *) calloc(n, sizeof(char)); /* allocazione di n caratteri */

free(interi);

free(stringa);

Allocazione dinamica della memoria

#include <stdlib.h>

void *malloc(int dim); Tipo puntatore a (indirizzo di) dato intero.

void *calloc(int nelem, int dimelem);

void free(void *ptr);

… Tipo puntatore a (indirizzo di) dato carattere.

int *interi;

char *string;

interi = (int *) malloc(n * sizeof(int)); /* allocazione di spazio per n interi */

stringa = (char *) malloc(n * sizeof(char)); /* allocazione di n caratteri */

free(interi);

free(stringa);

Allocazione dinamica della memoria

#include <stdlib.h>

void *malloc(int dim);

void *calloc(int nelem, int dimelem);

void free(void *ptr); Operazione di casting per

… modificare il tipo di un dato.

int *interi;

char *string;

interi = (int *) ma

Dettagli
A.A. 2017-2018
41 pagine
SSD Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher giovannidimatteo93 di informazioni apprese con la frequenza delle lezioni di Algoritmi e strutture dati e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli studi di Napoli Federico II o del prof Benerecetti Massimo.