vuoi
o PayPal
tutte le volte che vuoi
Istruzione scanf()
Sintassi : scanf(<formato>,<arg1>,……,<argn>);
: come per
<formato> printf()
: le variabili in cui si vogliono assegnare valori(i nomi delle variabili vanno
<arg1>,…,<argn>
precedute dall’ operatore (NON si usa con le stringhe) che indica l’ indirizzo della variabile
&
Esempi
Int x;
float z;
scanf(“%d %f”,&x,&z);
Lo puo essere diviso per mettere una condizione sul primo carattere che si digita cosi o si invia solo
scanf()
il primo o una serie di caratteri il programma non va in errore
Esempio:
scanf(“%s”,Nome);
if(strcmp(Nome,”FINE”) != 0){
scanf(“_%c%d”,&Operazione,&Quantita);
} salta la lettura della stringa stesso vale per fscanf
scanf(“%*s %d”,&Dato) 7
Direttiva #include
Sintassi : #include <file>
puo essere specificato come :
<file> per includere un file di sistema -Esempio:
o “<nomefile>” #include <studio.h>
per includere un file definito da me -Esempio :
o “”nomefile”” #include “studio.h”
Direttiva #define
Sintassi : (non ci va il “;”)
#define <constante> <valore>
: identificatore della constante simbolica convenzionalmente indicato tutto in
<constante>
maiuscolo.
: un valore da assegnare alla constante
<valore>
Esempi
#define PI 3.1415
#define N 10
Operatori aritmetici
Quattro operatori(per numeri Reali e Interi) : + - * /
Per i numeri interi esiste l operatore che torna il resto della divisione intera
%
Esempi
Int x = 5;
int y = 2;
int q , r;
q=x/y; //(q=2,troncato)
r=x%y; //(r=1)
Operatori di confronto in C
Uguale : a == b
Diverso : a != b
Maggiore : a > b
Minore : a < b
Maggiore o uguale : a >= b
Minore o uguale : a <= b
Operatori Logici
Operano su espressioni booleanee restituiscono un risultato booleano:
! NOT
&& AND
|| OR
Equivalgono agli operatori booleani di base
Operatore NOT
̅
A
Falso Falso
Vero Vero
Operatore AND
A B AxB
Falso Falso Falso
Falso Vero Falso
Vero Falso Falso
Vero Vero Vero
Operatore OR
A B A+B
Falso Falso Falso
Falso Vero Vero
Vero Falso Vero
Vero Vero Vero 8
Teorema di DeMorgan
̅∗
+ =
̅+
∗ =
Istruzione if
Sintassi : if(<Condizione>){
<Blocco1>}
Else{
<Blocco2>}
: espressione booleana
<Condizione>
: Sequenza di istruzioni
<Blocco1> : Sequenza di istruzioni
<Blocco2>
Significato : se e vera ,esegue le istruzini di altrimenti esegue quelle di
<Condizione> <Blocco1>,
<Blocco2>
Istruzione switch
Sintassi: switch (<espressione>){
case<constante1>:
<blocco1>
break;
case<constante2>:
<blocco2>
break;
…
default:
<blocco default>
} : Espressione a valore numerico.
<espressione> sequenza di istruzioni.
<blocco1>,<blocco2>, … :
Significato : in base al valore di esegui le istruzioni del corrispondenti nel caso in cui
case
<espressione>,
nessun venga intercettato, esegui le istruzioni corrispondente al
case case default.
Se si dimentica il i case vengono eseguiti in sequenza.
break
Istruzione while
Sintassi : while (<condizione>){
<blocco>
} : una condizione booleana
<condizione>
: sequenza di istruzioni
<blocco>
Significato : ripeti finche e vera.
<blocco> <condizione>
Istruzione do
Sintassi : do{ <blocco>}
While (<condizione>);
: una condizione booleana
<condizione>
: sequenza di istruzioni
<blocco>
Significato : ripeti finche è vera.
<blocco> <condizione> 9
Istruzione for
Sintassi : for(<inizializzazioni>;<condizione>;<incremento>){
<blocco>
} : le condizioni iniziali prima del ciclo
<inizializzazioni>
: una condizione booleana
<condizione> : incremento della variabile di conteggio
<incremento>
: sequenza di istruzioni
<blocco>
Vettore
Sintassi : <tipo> <nome vettore> [<dimensione>];
Accesso ad un elemento : <nome vettore> [<posizione>]
Esempio
Int v[10];
Definisce un insieme di 10 variabili intere: v[0],v[1],v[2],v[3],v[4],v[5],v[6],v[7],v[8],v[9];
Per dare un valore a tutto il vettore si può fare solo all’inizio Esempio
: int lista[4] = {2,0,-1,5}
Scorrere un vettore : for(i=0;i<n;i++){
w[i]=v[i] //Copia W in V
}
Definizione di una funzione
Stabilire un “Nome” per un insieme di operazioni
Sintassi : <tipo risultato> <nome funzione> (<parametri formali>){
<istruzioni>
}
Se la funzione non ha risultato deve essere Per ritornare il controllo alla funzione
<tipo risultato> void
chiamante,nelle deve comparire una istruzione
<instruzioni>
return <valore>; se non void
return ; se void
come per le variabili le funzioni vanno dichiarate all’ inizio prima del loro uso si chiama PROTOTIPO nella
forma : <tipo> <nome> (<tipo parametro> <parametro passato>);
utilizzo funzione come normale istruzione : <variabile> = <nome funzione> (<parametri attuali>);
Esempio
Int mod(int v1,intv2); //prototipo
main(){
Int x,y,d;
scanf(“%d %d”,&x,&y);
d= mod(x,y); //utilizzo
Printf(“%d\n”,d);
}
Int mod(int v1,int v2){ //definizione
Int v;
if (v1 >= v2){
v=v1-v2;}
Else{
v=v2-v1;}
return v;
} 10
Passaggio di parametri per modificarli nella funzione (si usa &)
Esempio
void Swap(int *a,int *b);
…
main(){
…
Swap(&x,&y); //saranno invertiti !
}
void Swap(int *a,int *b){ //definizione funzione
int temp;
temp =*a;
*a=*b;
*b=temo;
return;
}
Passaggio di un vettore
Main{
Funzione (v,6);
}
Int Funzione(int v[],int dim){
Ricorda se il vettore viene modificato qui viene modificato pure nel main
Si pass pure la dimensione col vettore
}
Lettura e scrittura caratteri
Comando legge il carattere che viene digitato su console
getchar();
Esempio -testo = getchar();
Comando stampa carattere su schermo carattere e di tipo char
putchar(<carattere>)
Esempio -putchar(‘ciao’);
Stringhe
Stringa vuota ha sempre almeno il carattere che ne indica la fine
‘\0’
Scrittura stringhe sscanf(char*<stinga>,char*<formato>);
riceve sempre una stringa letta prima con per poter essere diviso nelle varie
sscanf() scanf(“%s”,string)
variabili o che siano
int float
Matrici
<tipo> <nome vettore> [<dim1>][<dim2>] … [<dimN>]
Scorrere una Matrice
for(i=0;i<N;i++){
for(j=0;j<M;j++){
Matrice[i][j]
}
}
Argomenti Sulla linea di comndo
main (int argc,char*argv[])
dove
Numero di argomenti specificati(esiste almeno un agomento il nome del programma)
argc
: vettore di stringhe
argv[] = primo argomento(Sempre Nome Programmma)
o argv[0] = generico argomento
o argv[1] = ultimo argomento
o argv[argc-1] 11
ESEMPIO
C:\>prog.exe 3 file.dat 3.2
perche abbiamo inserito 4 argomenti
argc=4
Argv[0] -> “prog.exe\0”
Argv[1] -> “3\0”
Argv[2] -> “file.dat\0”
Argv[3] -> “3.2\0”
Ricorda se devi ricevere un numero prestabilito di argomenti metti una condizione su ricordandoti che
argc
il primo è il nome e che ogni flag conta 1
Flag su linea di comndo
Si indicano con il trattino per distinguerle dall’ programma vero e proprio
-<carattere>
Esempio programma per identificare i flag
C:\> myprog –x –y file.txt //-x e –y sono due flags
For(i=1;i<argc;i++){
if(argv[i][0] == ‘-’){
Switch(argv[i][1]){
Case ‘x’ :
cosa fare se i flag è x;
break;
case ‘y’ :
cosa fare se il flag è y;
break;
default :
printf(“Flags inserito non esistnte”);
}
}
}
Tipi Aggregati(Strutture dati)
Raccoglie un insieme di variabili sotto in unico nome si definisce con :
Sintassi: typedef struct <nome struttura>{
<tipo campo> <nome campo>;
<tipo 2° campo> <nome 2° campo>;
}<nome breve struct>;
per dichiarare una variabile di tipo in un programma si usa il che e
struct “nome breve della struct”
breve quindi per dichiararla si usa
: <nome breve della struct> <nome variabile di tipo struct>;
aggiungendo un alla fine di si puo creare un vettore di molto
[] “nome variabile di tipo struct” struct
utile se si lavora con diversi campi ad esempio un numero N di studenti di cui dobbiamo salvare nome
cognome e matricola
per accedere ad un determinato campo della struttura si una la sintassi : <variabile>.<campo>;
dove variabile e il nome che abbiamo dato alla nostra struct nel progrmma e campo e quello definito all
interno della struct.
ESEMPIO
Typedef struct strudente{
Char Nome[10];
Char Cognome[10];
}STUDENTE;
main(){
STUDENE Studente; //dichiarata la stuct Studente
Studente.Nome //per accedere al campo studente
} 12
Struct copiatura OK
E possibile copiare una scruct in un'altra quindi tutti i campi ma non confrontarle quindi per fare un
confronto si dovrà fare campo per campo.
Struct confronto NO
La struct puo essere passata come argomento in una funzione ed essere restituita come risultato
ricordando che se modifichi una struct all’ interno di una funzione si modifica pure nel main.
FILES
Noi lavoreremo con soli file di testo o per meglio dire .txt sostanzialmente di due tipi formattati e non
formattati :
Per utilizare i file si devono fare alcune operazioni base cioe :
dichiarare file con
FILE *<nome variabile>;
aprire FILE con
<nome variabile> = fopen(<nome del file.txt>,<modo>);
o modo “r” : lettura
o modo “w” : scrittura
o modo “a” : aggiudi in coda ad un file
Elaborazione con i vari comandi;
Chiudere FILE con
fclose(<nome variabile>);
e buona abitudine verificare l apertura corretta del file con il codice :
fp=fopen(&ld