Corso di Programmazione 1
a.a.2006/2007
Prof.ssa Chiara Petrioli
Corso di Laurea in Informatica
Università degli Studi “La Sapienza”
(lezioni 2 e 3)
Prof.ssa Chiara Petrioli -- corso di
programmazione 1, a.a. 2006/2007
Un primo semplice programma C
Vogliamo stampare una linea di testo “Il nostro
primo programma C! “
Un unico passo elementare
– Si scriva un programma che stampi una linea
contenente “Il nostro primo programma C! “
Scrivere “il nostro
Primo programma
C”
Prof.ssa Chiara Petrioli -- corso di
programmazione 1, a.a. 2006/2007
Dice all’elaboratore di svolgere una
azione o compito, quello di stampare
una stringa (sequenza di caratteri
tra doppi apici). Quando si esegue
Le parti di un programma
Questa linea viene stampato
in outputtra /* e */
racchiuse
Il nostro primo programma rappresentano
C
un commento
/* Questo programma
stampa
“il
nostro”
\n non viene stampato in output
i commenti servono a migliorare
\ è unC*/
escape character, \n la
indica
primo programma
leggibilità del codice
una andata a capo
i commenti sono ignorati dal
#include <stdio.h>
Altre sequenze di escape riconosciute
compilatore C
da
printf:
/*la funzione main
()
denota
l’inizio
dell’esecuzione
#include
è una direttiva
per il
return
indica
il
valore
restituito
\t
preprocessore C. Il preprocessore
del programma
*/
dallacampanella)
funzione
\a (alert-suono
Ètipo
invocato prima della compilazione
In questo caso main() chiede che
\\ (inserisce backslash)
int main()
Ed
effettua
delle programma
manipolazioni sul
Il
main
fa
parte
di
ciascun
venga
restituito
un valore intero
\” (inserisce “) Programma che debbono
essere
C. Le parentesi
seguono
{
0 è ilgraffe
valoreche
di default
che indica
Effettuate
prima
compilazione
main () indicano
main della
è un
blocco
che il che
programma
è terminato
con
printf(“Il nostro primo
programma
C
\n”);
(es
includere
parti
nel
file
prima
della
di codice denominato
successo funzione. Un
compilazione
–librerieo effettuare
programma
può contenere
più funzioni
return 0;
delle quali
sostituzioni
ciascuna delle
svolge di
untesto).
compito.
#includepresente
<stdio.h>
preprocessore
}
Il main è sempre
eddice
è laalprima
di includere
nelfunzioni
file l’header stdio.h
funzione eseguita.
Altre
della libreria
standard
di input/output
possono essere
invocate
all’interno
del
Prof.ssa Chiara(tale
Petrioliheader
-- corso di contiene ad esempio le
main per svolgere dei sotto-compiti.
programmazione 1, a.a. 2006/2007
funzioni standard per l’I/O)
Un primo semplice programma C
Esecuzione del programma
(Linux/Unix)
Scrivete il programma (con un editor) in un
file primoprogramma.c
Invocate il compilatore C
gcc primoprogramma.c
Questo genera un eseguibile a.out
Digitando a.out viene eseguito il
programma che stampa in output
Il nostro primo programma C
Prof.ssa Chiara Petrioli -- corso di
programmazione 1, a.a. 2006/2007
Fasi della compilazione
primoprogramma.c
Editor
Invocati
automaticamente
da
gcc primoprogramma.c
Disco
Preprocessore
Disco
Compilatore
Disco
a.out
Linker
Disco
Memoria
Disco
Loader
Inserisce .h di librerie,
sostituisce MACRO,
sostituisce costanti
simboliche
Traduce in inguaggio
Macchina. Crea un
codice oggetto e lo
memorizza su disco
Il linker inserisce nel
codice oggetto il codice
relativo a chiamate a
libreria. Produce e
memorizza su disco un
eseguibile.
Carica il programma in
memoria
…
Memoria
CPU
Prof.ssa Chiara Petrioli -- corso di
programmazione 1, a.a. 2006/2007
Il programma viene scritto
con un editor e salvato
sul disco rigido
…
Il programma
viene
eseguito
Esercizio
Si scriva un programma che dati tre interi
presi da input calcoli la loro somma, il loro
prodotto e lo stampi in output.
x1
x2
x1+x2+x3
x1*x2*x3
x3
Step0: prendi da input tre valori e memorizzali in tre variabili intere (x1,x2,x3)
Step1: calcola la somma, il prodotto, e stampali in output
Prof.ssa Chiara Petrioli -- corso di
programmazione 1, a.a. 2006/2007
Un altro semplice programma
Si scriva un programma che, dati tre interi, ne calcoli la somma, prodotto
/* Questo programma calcola la somma, prodotto*/
#include <stdio.h>
int main()
{
di variabili
int integer1,integer2,integer3; /*interi Definizioni
che devono essere
inseriti da input*/
integer1,
integer3 sono i
int sum; /*variabile che conterra’ la somma
dei treinteger2,
interi)
nomi didei
tretre
variabili
int product; /*variabile che conterrà il prodotto
interi*/ di tipo intero (int).
}
Le variabili devono essere definite
printf(“Inserite il valore del primo intero \n”);
prima di essere usate. Un nome di
scanf (“%d”, &integer1);
variabile e’ un identificatore ovvero
printf(“Inserite il valore del secondo intero \n”);
una serie di caratteri che consistono
scanf (“%d”, &integer2);
di lettere, cifre e underscore (_) che
printf(“Inserite il valore del terzo intero \n”);
inizi con una lettera. Solo i primi 31
scanf(“%d”, &integer3)
caratteri
/* calcola somma, prodotto, e stampali in
output*/ di un identificatore vengono
considerati. Il C e’ case sensitive (fa
sum= integer1+integer2+integer3;
product = integer1*integer2*integer3; differenza il fatto che le lettere siano
printf (“Somma: %d \n”, sum);
minuscole o maiuscole).
printf (“Prodotto: %d \n”, product);
E’ bene scegliere nomi significativi
return 0;
di variabili per un discorso di leggibilita’
del
programma.
Prof.ssa Chiara
Petrioli
-- corso di
programmazione 1, a.a. 2006/2007
Cosa succede in memoria…
Definizione di variabili
– Ciascuna variabile ha un nome, un tipo, un
valore
int integer1;
ampersend o operatore
di indirizzo
Memoria
4357
&integer1
Indica l’indirizzo
di memoria associato
alla variabile integer1
…
Prof.ssa Chiara Petrioli -- corso di
programmazione 1, a.a. 2006/2007
Vengono associate alla
variabile integer1 un
numero di celle di memoria
consecutive, sufficienti a
contenere il tipo della
variabile (in questo caso un
intero)
Un altro semplice programma
Si scriva un programma che, dati tre interi, ne calcoli la somma, prodotto
/* Questo programma calcola la somma, prodotto*/
#include <stdio.h>
int main()
{
è unaessere
funzione
della
libreria standard
int integer1,integer2,integer3; /*interi Scanf
che devono
inseriti
da input*/
di I/O.
due argomenti
int sum; /*variabile che conterra’ la somma
dei Ha
tre interi)
“%d” (stringa
di controllo del formato)
int product; /*variabile che conterrà il prodotto
dei tre interi*/
specifica che in questo caso si deve prendere
printf(“Inserite il valore del primo intero \n”);
dallo standard input un valore intero
scanf (“%d”,&integer1);
“%d” intero
printf(“Inserite il valore del secondo intero \n”);
“%f”numero reale
scanf (“%d”,&integer2);
printf(“Inserite il valore del terzo intero \n”);
&integer1 specifica che l’intero preso da
scanf(“%d”,&integer3)
Input
deve essere memorizzato nella
/* calcola somma, prodotto, e stampali in
output*/
locazione di memoria associata alla
sum= integer1+integer2+integer3;
product = integer1*integer2*integer3; variabile integer1
printf (“Somma: %d \n”, sum);
printf (“Prodotto: %d \n”, product);
return 0;
}
Prof.ssa Chiara Petrioli -- corso di
programmazione 1, a.a. 2006/2007
Cosa succede in memoria…
scanf (“%d”,&integer1);
– viene letto da input un valore intero
(supponiamo 20). Viene inserito il valore
letto nella locazione di memoria (4357)
associata alla variabile integer1
ampersend o operatore
di indirizzo
Memoria
4357
&integer1
Indica l’indirizzo
di memoria associato
alla variabile integer1
20
…
Prof.ssa Chiara Petrioli -- corso di
programmazione 1, a.a. 2006/2007
Destructive read in
Un altro semplice programma
Si scriva un programma che, dati tre interi, ne calcoli la somma, prodotto
/* Questo programma calcola la somma, prodotto*/
#include <stdio.h>
int main()
{
int integer1,integer2,integer3; /*interi che devono essere inseriti da input*/
int sum; /*variabile che conterra’ la somma dei tre interi)
int product; /*variabile che conterrà il prodotto dei tre interi*/
printf(“Inserite il valore del primo intero \n”);
scanf (“%d”,&integer1);
printf(“Inserite il valore del secondo intero \n”);
scanf (“%d”,&integer2);
printf(“Inserite il valore del terzo intero \n”);
scanf(“%d”,&integer3)
/* calcola somma, prodotto, e stampali in output*/
sum= integer1+integer2+integer3;
product = integer1*integer2*integer3;
printf (“Somma: %d \n”, sum);
printf (“Prodotto: %d \n”, product);
return 0;
}
espressione di assegnamento
Valuta l’espressione a destra
dell’operatore di assegnamento
e ne assegna il valore alla
variabile sum
Prof.ssa Chiara Petrioli -- corso di
programmazione 1, a.a. 2006/2007
Cosa succede in memoria…
sum=integer1+integer2+integer3;
= è un operatore di assegnamento. Vengono presi i valori di integer1,integer2,
integer3, sommati e il valore risultante è memorizzato nella locazione di
memoria associata alla variabile sum
Memoria
integer1+integer2+integer3
Non-destructive
read-out
…
10
2040
35
integer3
…
3800
sum
…
4357
20
integer1
…
5040
Prof.ssa Chiara Petrioli -- corso di
programmazione 1, a.a. 2006/2007
5
integer2
Un altro semplice programma
… una variante
Si scriva un programma che, dati tre interi, ne calcoli la somma, prodotto
/* Questo programma calcola la somma, prodotto*/
#include <stdio.h>
int main()
{
int integer1,integer2,integer3; /*interi che devono essere inseriti da input*/
int sum; /*variabile che conterra’ la somma dei tre interi)
int product; /*variabile che conterrà il prodotto dei tre interi*/
printf(“Inserite il valore del primo intero \n”); printf può anche stampare il
valore di una espressione
scanf (“%d”,&integer1);
printf(“Inserite il valore del secondo intero \n”);direttamente
scanf (“%d”,&integer2);
printf(“Inserite il valore del terzo intero \n”);
scanf(“%d”,&integer3)
/* calcola somma, prodotto, e stampali in output*/
printf (“Somma: %d \n”, integer1+integer2+integer3);
printf (“Prodotto: %d \n”, integer1*integer2*integer3);
return 0;
}
Prof.ssa Chiara Petrioli -- corso di
programmazione 1, a.a. 2006/2007
Un altro semplice programma
Si scriva un programma che, dati tre interi, ne calcoli la somma, prodotto
/* Questo programma calcola la somma, prodotto*/
#include <stdio.h>
int main()
{
int integer1,integer2,integer3; /*interi che devono essere inseriti da input*/
int sum; /*variabile che conterra’ la somma dei tre interi)
int product; /*variabile che conterrà il prodotto dei tre interi*/
printf(“Inserite il valore del primo intero \n”);
scanf (“%d”,&integer1);
printf(“Inserite il valore del secondo intero \n”);
scanf (“%d”,&integer2);
printf(“Inserite il valore del terzo intero \n”);
scanf(“%d”,&integer3)
/* calcola somma, prodotto, e stampali in output*/
sum= integer1+integer2+integer3;
product = integer1*integer2*integer3;
printf (“Somma: %d \n”, sum);
printf (“Prodotto: %d \n”, product);
return 0;
}
COSA COMPARE SULLO SCHERMO
Inserite il valore del primo intero
20
Inserite il valore del secondo intero
5
Inserite il valore del terzo intero
10
Somma: 35
Prodotto: 1000
Prof.ssa Chiara Petrioli -- corso di
programmazione 1, a.a. 2006/2007
Operazioni aritmetiche in C
Operazione C
Operatore
Aritmetico
Espressione
Algebrica
Espressione C
Addizione
+
f+7
f+7
Sottrazione
-
F-7
Moltiplicazione
*
AB
Divisione
/
A/B
Q:Cosa indica R mod s?
F-7
A: Il resto della divisione
di R per s
Q:Come
si può verificare
A*B
Se un numero x è pari?
A: x % 2 == 0
A/B
Uguale in C
Modulo
%
R mod s
Prof.ssa Chiara Petrioli -- corso di
programmazione 1, a.a. 2006/2007
R%s
Operazioni aritmetiche in C
ATTENZIONE:
La divizione tra interi da
un valore intero (tronca
Operazione
C
Operatore
all’intero
immediatamente
piu’ piccolo il valore Aritmetico
dell’operazione)
Addizione
+
Es. 7/4 da 1
Es. 18/5 da 3
MA
7/4.0 da 1.75
Sottrazione
Espressione
Algebrica
f+7
Espressione C
f+7zero e’ un
La divisione per
Tipico motivo di fatal error
(segmentation fault)
-
F-7
Moltiplicazione
*
AB
A*B
Divisione
/
A/B
A/B
Modulo
%
R mod
s
R
%
s
Si applica solo ad operandi interi
Prof.ssa Chiara Petrioli -- corso di
programmazione 1, a.a. 2006/2007
F-7
Precedenza degli operatori aritmetici
Moltiplicazioni, divisioni e modulo in una
espressione sono valutati per prime da sinistra a
destra (associano da sinistra a destra ed hanno
precedenza rispetto ad addizione/sottrazione).
Addizioni e sottrazioni vengono quindi valutate,
da sinistra a destra.
Es. estressione algebrica m=a+b+c+d+e
5
In C:
m = (a+b+c+d+e)/5;
Se non si mettessero esplicitamente le parentesi
tonde m=a+b+c+d+e/5; corrisponderebbe alla
espressione algebrica
m=a+b+c+d+e/5
Prof.ssa Chiara Petrioli -- corso di
programmazione 1, a.a. 2006/2007
Precedenza degli operatori aritmetici
Moltiplicazioni, divisioni e modulo in una
espressione sono valutati per prime da
sinistra a destra (associano da sinistra a
destra ed hanno precedenza rispetto ad
addizione/sottrazione).
Addizioni e sottrazioni vengono quindi
valutate, da sinistra a destra.
Es. espressione algebrica z=pr %q + w/x -y
In C: z = p * r % q + w / x – y;
6
1
2
4
3
5
Prof.ssa Chiara Petrioli -- corso di
programmazione 1, a.a. 2006/2007
((p*r)%q)+(w/x)-y
Precedenza degli operatori aritmetici
Moltiplicazioni, divisioni e modulo in una
espressione sono valutati per prime da
sinistra a destra (associano da sinistra a
destra ed hanno precedenza rispetto ad
addizione/sottrazione).
Addizioni e sottrazioni vengono quindi
valutate, da sinistra a destra.
Es.
In C: y = a * x * x + b * c + c;
6
1
2
4
3
5
Prof.ssa Chiara Petrioli -- corso di
programmazione 1, a.a. 2006/2007
((a*x)*x)+(b*c)+c
Precedenza degli operatori aritmetici
Es. 6 1 2 4 3 5
In C: y = a * x * x + b * x + c;
Prof.ssa Chiara Petrioli -- corso di
programmazione 1, a.a. 2006/2007
CASO a= 2, b=3, c=7, x=5
Un altro semplice programma
Si scriva un programma che, dato il valore del raggio r, calcoli la lunghezza
della circonferenza e l’area del cerchio di raggio r
Direttiva per eil area
preprocessore.
/* Questo programma calcola circonferenza
di un cerchio*/
Definisce una costante simbolica.
#include <stdio.h>
Il preprocessore sostituira’
#define PI 3.14159
automaticamente ogni
int main()
occorrenza nel testo di PI
{
con 3.14159
float r;
float circonferenza;
float area;
/*inserisce in una variabile r il valore del raggio del cerchio */
printf(“Inserire il valore del raggio \n”);
scanf (“%f”,&r); Indica un tipo numero
/* calcola circonferenza
e area e le stampa in output*/
reale
circonferenza= 2* PI * r;
area = PI*r*r;
printf (“Il valore della circonferenza e’ %f \n”, circonferenza);
printf (“Il valore dell’area del cerchio e’ %f \n”, area);
return 0;
}
Prof.ssa Chiara Petrioli -- corso di
programmazione 1, a.a. 2006/2007
Esercizio
Si scriva un programma che dati tre interi
presi da input calcoli la loro somma, il loro
prodotto, il massimo ed il minimo dei tre
valori e lo stampi in output.
x1
x1+x2+x3
x1*x2*x3
x2
x3
min(x1,x2,x3)
Occorre poter confrontare
Valori e prendere decisioni
max(x1,x2,x3)
 operatori relazionali
 costrutto if
Step0: prendi da input tre valori e memorizzali in tre variabili intere (x1,x2,x3)
Step1: calcola la somma, il prodotto, il minimo, il massimo di tre valori e
stampali in output
Prof.ssa Chiara Petrioli -- corso di
programmazione 1, a.a. 2006/2007
Una digressione –programmazione
strutturata
Un algoritmo è una sequenza di passi elementari che
devono essere eseguiti, in un determinato ordine, per
risolvere un problema. Specificare l’ordine in cui le
istruzioni sono eseguite in un programma è chiamato
controllo del programma.
Un buon algoritmo per preparsi ad andare al lavoro…
–
–
–
–
–
–
Alzarsi dal letto
Svestirsi, togliendosi il pigiama
Farsi una doccia
Vestirsi
Fare colazione
Guidare fino al posto di lavoro
Prof.ssa Chiara Petrioli -- corso di
programmazione 1, a.a. 2006/2007
PASSI Elementari
E SE CAMBIAMISSIMO
L’ORDINE IN CUI
QUESTI PASSI SONO
ESEGUITI?
Una digressione –programmazione
strutturata
Un algoritmo è una sequenza di passi elementari che
devono essere eseguiti, in un determinato ordine, per
risolvere un problema. Specificare l’ordine in cui le
istruzioni sono eseguite in un programma è chiamato
controllo del programma.
Un buon algoritmo per preparsi ad andare al lavoro…
–
–
–
–
–
–
Alzarsi dal letto
Alzarsi dal letto
Svestirsi,togliendosi
togliendosi
il pigiama
Svestirsi,
il pigiama
Farsi una Vestirsi
doccia
Farsi una doccia
Vestirsi
Fare colazione
Fare colazione
Guidare fino al posto di lavoro
Guidare fino al posto di lavoro

Prof.ssa Chiara Petrioli -- corso di
programmazione 1, a.a. 2006/2007
PASSI Elementari
E SE CAMBIAMISSIMO
L’ORDINE IN CUI
QUESTI PASSI SONO
ESEGUITI?
Programmazione strutturata
Normalmente le istruzioni di un programma
sono eseguite una di seguito all’altra nell’ordine
in cui sono scritte (esecuzione sequenziale)
Si scriva un programma che, dati tre interi, ne calcoli la somma, prodotto
/* Questo programma calcola la somma, prodotto*/
#include <stdio.h>
int main()
{
int integer1,integer2,integer3; /*interi che devono essere inseriti da input*/
int sum; /*variabile che conterra’ la somma dei tre interi)
int product; /*variabile che conterrà il prodotto dei tre interi*/
printf(“Inserite il valore del primo intero \n”);
scanf (“%d”,&integer1);
printf(“Inserite il valore del secondo intero \n”);
scanf (“%d”,&integer2);
printf(“Inserite il valore del terzo intero \n”);
scanf(“%d”,&integer3)
/* calcola somma, prodotto, e stampali in output*/
sum= integer1+integer2+integer3;
product = integer1*integer2*integer3;
printf (“Somma: %d \n”, sum);
printf (“Prodotto: %d \n”, product);
return 0;
}
Prof.ssa Chiara Petrioli -- corso di
programmazione 1, a.a. 2006/2007
Programmazione strutturata
Alcuni costrutti del C consentono al
programmatore di specificare che la prossima
istruzione da eseguire sia diversa dall’istruzione
successiva (trasferimento di controllo)
Si scriva un programma che, dati tre interi, ne calcoli la somma, prodotto
/* Questo programma calcola la somma, prodotto*/
#include <stdio.h>
int main()
{
int integer1,integer2,integer3; /*interi che devono essere inseriti da input*/
int sum; /*variabile che conterra’ la somma dei tre interi)
int product; /*variabile che conterrà il prodotto dei tre interi*/
printf(“Inserite il valore del primo intero \n”);
scanf (“%d”,&integer1);
printf(“Inserite il valore del secondo intero \n”);
scanf (“%d”,&integer2);
printf(“Inserite il valore del terzo intero \n”);
scanf(“%d”,&integer3)
/* calcola somma, prodotto, e stampali in output*/
sum= integer1+integer2+integer3;
product = integer1*integer2*integer3;
printf (“Somma: %d \n”, sum);
printf (“Prodotto: %d \n”, product);
return 0;
}
Prof.ssa Chiara Petrioli -- corso di
programmazione 1, a.a. 2006/2007
Programmazione strutturata
Negli anni ’60 l’uso indiscriminato del trasferimento di controllo
(ed in particolare del costrutto GOTO) venne identificato come
causa di motivo di eccessiva complessita’ nella progettazione e
gestione del SW
Bohm e Jacopini (“Flow Diagrams, Turing Machines and
Languages with Only two Formations Rules, Communications
dell’ACM 1966”) mostrarono come si potesse evitare di usare il
GOTO, cosa che porto’ ad una forte riduzione dei tempi di
sviluppo del SW.
– Tutti i programmi possono essere scritti solo in termini di tre tipi di
strutture di controllo
La struttura di sequenza ( a meno di indicazioni diverse in C l’esecuzione
delle istruzioni e’ sequenziale)
La struttura di selezione (if, if…else, switch)
La struttura di ripetizione (costrutti iterativi while, do…while, for)
– Ciascun programma può essere scritto combinando costrutti di controllo
di sequenza, selezione o ripetizione
uno di seguito all’altro
o annidati uno dentro l’altro
Prof.ssa Chiara Petrioli -- corso di
programmazione 1, a.a. 2006/2007
Costrutto if
Viene analizzata la condizione
if (condizione)
Del costrutto if. Se tale condizione
BLOCCO DI CODICE; e’ vera viene eseguito il blocco
di codice che segue l’if, altrimenti
questo blocco viene saltato
VERA
condizione
BLOCCO DI
CODICE
FALSA
Prof.ssa Chiara Petrioli -- corso di
programmazione 1, a.a. 2006/2007
Operatori relazionali in C
Operatori di
uguaglianza algebrici
o operatori relazionali
Operatori di
uguaglianza o op.
relazionali in C
Es. di condizione in C
Significato della condizione
C
Gli operatori relazionali hanno tutti
lo stello livello di precedenza e
associano da sinistra a destra
Gli operatori di uguaglianza hanno
un livello di precedenza minore
ed associano da sinistra a destra
ATTENZIONE, errore tipico: scrivere l’operatore di uguaglianza come =
Prof.ssa Chiara Petrioli -- corso di
if (a=5) printf(“il
valore di a e’ 5 \n”);
programmazione 1, a.a. 2006/2007
Cosa succede nel caso di questo errore quando a vale 7?
Massimo e minimo di tre numeri…
Si scriva un programma che, dati tre interi, ne calcoli la somma, prodotto, minimo e
massimo
/* Questo programma calcola la somma, prodotto, massimo e minimo di tre interi*/
#include <stdio.h>
int main()
{
int integer1,integer2,integer3; /*interi che devono essere inseriti da input*/
int sum; /*variabile che conterra’ la somma dei tre interi)
int product; /*variabile che conterrà il prodotto dei tre interi*/
int min; /*variabile che conterrà il minimo dei tre interi */
int max; /*variabile che conterrà il massimo dei tre interi */
/*prende da input i tre interi */
printf(“Inserite il valore del primo intero \n”);
scanf (&integer1);
printf(“Inserite il valore del secondo intero \n”);
scanf (&integer2);
printf(“Inserite il valore del terzo intero \n”);
scanf(&interegr3)
/* calcola somma, prodotto, e stampali in output*/
sum= integer1+integer2+integer3;
product = integer1*integer2*integer3;
printf (“Somma: %d \n”, sum);
printf (“Prodotto: %d \n”, product);
Prof.ssa Chiara Petrioli -- corso di
programmazione 1, a.a. 2006/2007
Massimo e minimo di tre numeri…
min=integer1;
Se integer2 è piu’ piccolo di integer1
if (integer2 < integer 1)
Allora sicuramente integer1 non e’
min=integer2;
Il piu’ piccolo dei tre numeri
if (integer3 < min)
min=integer3;
In min e’ contenuto il minimo dei tre
printf (“Il minimo dei tre valori e’ %d \n”, min);
numeri
max=integer1;
if (integer2 > integer 1)
max=integer2;
if (integer3 > max)
max=integer3;
printf (“Il massimo dei tre valori e’ %d \n”, max);
return 0;
}
Prof.ssa Chiara Petrioli -- corso di
programmazione 1, a.a. 2006/2007
Esercizio
Si scriva un programma che legga da input un intero e
scriva in output se il numero e’ pari o dispari
/* Questo programma verifica se un numero e’ pari*/
#include <stdio.h>
int main()
{
int integer1; /*intero che deve essere inserito da input*/
printf(“Inserite il valore del primo intero \n”);
scanf (“%d”,&integer1);
if (integer1 %2 == 0)
printf (“il numero e’ pari \n”);
else
printf (“il numero e’ dispari \n”);
return 0;
}
Prof.ssa Chiara Petrioli -- corso di
programmazione 1, a.a. 2006/2007
Costrutto if…else
if (condizione)
BLOCCO DI CODICE 1;
else
BLOCCO DI CODICE 2;
Prof.ssa Chiara Petrioli -- corso di
programmazione 1, a.a. 2006/2007
Construtto if …else
VERA
condizione
Viene analizzata la condizione
Del costrutto if. Se tale condizione
e’ vera viene eseguito il primo blocco
di codice che segue l’if, altrimenti
viene eseguito il blocco di codice che
Segue l’else
BLOCCO DI
CODICE 1
FALSA
BLOCCO DI
CODICE 2
Prof.ssa Chiara Petrioli -- corso di
programmazione 1, a.a. 2006/2007
Esercizio (soluzione alternativa)
Si scriva un programma che legga da input un intero e
scriva in output se il numero e’ pari o dispari
/* Questo programma verifica se un numero e’ pari*/
#include <stdio.h>
int main()
Se un’espressione assume valori
Diversi da zero  TRUE
{
int integer1 /*intero che deve
essere
inserito
input*/
Se assume
valore
ugualeda
a zero

printf(“Inserite il valore del
primo intero \n”);
FALSE
scanf (“%d”,&integer1);
if (integer1 % 2)
printf (“il numero e’ dispari \n”);
else
printf (“il numero e’ pari \n”);
return 0;
}
Prof.ssa Chiara Petrioli -- corso di
programmazione 1, a.a. 2006/2007
Esercizio
Si scriva un programma che legga da input il voto preso
da uno studente nell’esame di prog1 e stampi se lo studente ha passato o
meno l’esame
/* Questo programma verifica se uno studente ha passato l’esame*/
#include <stdio.h>
int main()
{
int voto; /*voto che deve essere inserito da input*/
printf(“Inserite il valore del vostro voto \n”);
scanf (“%d”,&voto);
if (voto < 18)
{
printf (“l’esame NON e’ stato superato \n”);
printf (“l’esame deve essere ripetuto \n”);
}
else
printf (“l’esame e’ stato superato \n”);
return 0;
Prof.ssa Chiara Petrioli -- corso di
}
programmazione 1, a.a. 2006/2007
Esercizio
Si scriva un programma che legga da input una temperatura e scriva una
indicazione sul periodo in cui quella temperatura e’ tipica
#include <stdio.h>
int main()
{
float temperatura;
printf(“Inserite il valore della temperatura \n”);
scanf (“%f”,&temperatura);
if (temperatura < 15.0)
printf (“temperatura tipicamente invernale \n”);
else
{
if (temperatura <25.0)
printf (“temperatura tipicamente autunnale o
primaverile \n”);
else
printf (“temperatura tipicamente estiva \n”);
}
return 0;
}
Prof.ssa Chiara Petrioli -- corso di
programmazione 1, a.a. 2006/2007
Precedenza degli operatori
(riepilogo)
Prof.ssa Chiara Petrioli -- corso di
programmazione 1, a.a. 2006/2007
Keyword riservate
Identificatori che non possono essere usati
in un programma (essendo parole chiave
riservate)
Prof.ssa Chiara Petrioli -- corso di
programmazione 1, a.a. 2006/2007
Costrutto while
FALSA
ATTENZIONE: è importante che
la condizione in un tempo finito
vada a false. Altrimenti non si
Esce mai dal ciclo (loop infinito)
condizione
VERA
BLOCCO DI
CODICE
Viene analizzata la condizione
Del costrutto while. Se tale condizione
e’ vera viene eseguito il blocco
di codice che segue il while e viene
quindi testata nuovamente la condizione.
Quando la condizione viene trovata
falsa il blocco che segue il while
viene saltato (si dice che si esce dal while)
E viene eseguita la prima istruzione
Prof.ssa Chiara Petrioli -- corso di
che segue.
programmazione 1, a.a. 2006/2007
Esempio
Si scriva un programma che calcola la più piccola potenza
di 3 maggiore di un valore intero soglia x inserito da input
#include <stdio.h>
int main()
La variabile intera potenza
viene definita e
{
contemporaneamente
int x;
inizializzata a 1
int potenza = 1;
anche scrivere
printf(“Inserite il valore sogliaSixpuò
\n”);
potenza *= 3;
scanf (“%d”,&x);
while (potenza <= x)
In generale
potenza=potenza*3;
variabile = variabile operando espressione;
printf (“potenza
3 > più
x: concisamente
%d”, potenza);
Può esserediscritto
con
variabile
return
0; operando= espressione;
}
Prof.ssa Chiara Petrioli -- corso di
programmazione 1, a.a. 2006/2007
Esempio
Vediamo cosa succede se x=10
#include <stdio.h>
int main()
{
int x;
x=10
potenza=27
int potenza = 1;
la
condizione
e’ FALSA
prima
iterazione:
x=10
2a
iterazione:
x=10
sipotenza=1
esce
ciclo. x=10
Si esegue
printf(“Inserite il valore soglia
xdal\n”);
3a iterazione:
potenza=3
la
stampa
del valore
trovato
la
condizione
e’ VERA
potenza=9
scanf (“%d”,&x);
lailcondizione
e’termina.
VERA
ed
programma
si la
entra
nel cicloe’
eVERA
si
condizione
si
entra
nel
ciclo
e
si
while (potenza <= x)
aggiorna
valore
si entrailnel
ciclodie si
aggiorna il valore di
potenza
cheilviene
aggiorna
valoremesso
di
potenza=potenza*3; apotenza
che viene messo
3potenza che viene messo
a9
printf (“potenza di 3 > x: %d”,
a 27potenza);
return 0;
}
Prof.ssa Chiara Petrioli -- corso di
programmazione 1, a.a. 2006/2007
Una variante…
Supponiamo di voler stampare tutte le potenze di 3 minori
o uguali ad un valore x inserito da input
#include <stdio.h>
int main()
{
int x;
int potenza = 1;
printf(“Inserite il valore soglia xRISPOSTA:
\n”);
Avrei un ciclo infinito
scanf (“%d”,&x);
while (potenza <= x)
{
printf (“%d \n”, potenza);
potenza=potenza*3;
Q: cosa succederebbe
se mi dimenticassi di aggiornare il valore di potenza nel ciclo?
}
return 0;
Prof.ssa Chiara Petrioli -- corso di
}
programmazione 1, a.a. 2006/2007

Costrutto while
Costrutto di ripetizione
Consente al programmatore di specificare
che una certa azione deve essere ripetuta
fino a quando rimane valida una
determianta condizione
while (condizione)
BLOCCO DI CODICE;
Prof.ssa Chiara Petrioli -- corso di
programmazione 1, a.a. 2006/2007
SINTASSI
Esercizio
Si calcoli l’età media di una classe di 30 alunni
Pseudocodice
– Setta la variabile totale a 0
– Setta la variabile contatore a 1 (contatore conta il numero
di alunni finora considerati)
– Fino a quando il contatore ha un valore <= 30 (numero di
alunni)
Inserisci da input l’età del prossimo alunno
Somma tale valore a totale
Importante (il perche’ dopo)
Somma uno a contatore
– Poni la variabile media pari a totale/contatore
– Stampa il valore della variabile media
Prof.ssa Chiara Petrioli -- corso di
programmazione 1, a.a. 2006/2007
Soluzione
#include <stdio.h>
int main()
{
int totale = 0;
int temp;
int contatore =1;
float media;
while (contatore <= 30)
{
printf (“inserisci l’età dell’ %d esimo alunno \n”,
contatore);
scanf (“%d”, &temp);
Corrisponde a
totale += temp;
contatore =contatore +1;
contatore ++;
}
media = (float) totale /(contatore-1);
printf (“l’età media della classe è: %f \n”, media);
return 0;
Prof.ssa Chiara Petrioli -- corso di
programmazione 1, a.a. 2006/2007
}
Osservazione sul casting…
#include <stdio.h>
int main()
{
int totale COSA
= 0; SUCCEDEREBBE SE ELIMINASSIMO (float)?
int temp; Il risultato della divisione di totale e contatore
verrebbe
int contatore
=1; troncato ad un intero perche’ entrambe le
variabili sono intere  sbagliato!
float media;
L’operatore unario di cast (float) produce una copia
while (contatore <= 30)
reale temporanea della variabile totale (conversione
{
esplicita). La divisione di un float ed un intero da un
printf
(“inserisci
l’età
dell’
%d esimoimplicita
alunno o\n”,
float (viene
effettuata
una
conversione
una
contatore);
promozione dell’intero in float  accade sempre
scanf (“%d”,
&temp);
nel caso
di operandi di tipo diverso) .
totale
+= temp;
L’operatore
di cast ha precedenza maggiore rispetto
contatore ++; agli operatori * / %
}
media = (float) totale /contatore;
printf (“l’età media della classe è: %f \n”, media);
return 0;
Prof.ssa Chiara Petrioli -- corso di
programmazione 1, a.a. 2006/2007
}
Prof.ssa Chiara Petrioli -- corso di
programmazione 1, a.a. 2006/2007
Soluzione alternativa
#include <stdio.h>
In questo caso abbiamo
#define NUM_ALUNNI 30
usato una costante
int main()
simbolica. Se vogliamo
{
rieseguire il programma
int totale = 0;
per una classe di 50
int temp;
alunni, sara’ sufficiente
int contatore =1;
cambiare il valore della
float media;
costante simbolica
while (contatore <= NUM_ALUNNI)
Inoltre la costante
{
simbolica e’ molto piu’
printf (“inserisci l’età dell’ %d esimo alunno \n”,
espressiva (leggibilita’
contatore);
del codice)
scanf (“%d”, &temp);
totale += temp;
contatore ++;
}
Contatore non può mai essere 0
media = (float) totale /contatore;
printf (“l’età media della classe è: %f \n”, media);
return 0;
}
Prof.ssa Chiara Petrioli -- corso di
programmazione 1, a.a. 2006/2007
Alcune domande…
#include <stdio.h>
DOMANDA: COSA
#define NUM_ALUNNI 30
SUCCEDEREBBE SE NEL
int main()
CICLO MI DIMENTICASSI
{
DI INCREMENTARE IL
int totale = 0;
CONTATORE?
int temp;
int contatore =1;
float media;
while (contatore <= NUM_ALUNNI)
{
printf (“inserisci l’età dell’ %d esimo
alunno \n”,
RISPOSTA:
contatore);
LOOP INFINITO
scanf (“%d”, &temp);
SE ENTRO
totale += temp;
NEL CICLO
contatore ++;
}
media = (float) totale /contatore;
printf (“l’età media della classe è: %f \n”, media);
return 0;
}
Prof.ssa Chiara Petrioli -- corso di
programmazione 1, a.a. 2006/2007
Alcune domande…
#include <stdio.h>
DOMANDA: COSA
#define NUM_ALUNNI 30
SUCCEDEREBBE SE NON
int main()
INIZIALIZZASSI
{
totale o
int totale = 0;
contatore
int temp;
?
int contatore =1;
Ripetizione definita
float media;
(il numero di iterazioni è
while (contatore <= NUM_ALUNNI)
noto a priori, prima che si
{
cominci ad eseguire il ciclo)
printf (“inserisci l’età dell’ %d esimo alunno \n”,
contatore);
scanf (“%d”, &temp);
totale += temp;
contatore ++;
}
media = (float) totale /contatore;
printf (“l’età media della classe è: %f \n”, media);
return 0;
}
Prof.ssa Chiara Petrioli -- corso di
programmazione 1, a.a. 2006/2007
Risposta
#include <stdio.h>
…
int main()
{
int totale = 0;
int temp;
int contatore =1;
….
}
2040
Quando definiamo una
variabile le viene
associata una
locazione di memoria.
Se la variabile viene 3800
usata prima che sia
inizializzata con un
valore opportuno
4357
conterrà l’ultimo
valore che era stato
memorizzato in quella
locazione di memoria
5040
…
17534
totale
GRAVE ERRORE !!
…
ESECUZIONI
DIVERSE DEL PROGRAMMA
ASSOCIERANNO
ALLE VARIABILI
sum
LOCAZIONI DIVERSE E PRODURRANNO
RISULTATI OGNI VOLTA DIVERSI A
…
SECONDA DEL VALORE INIZIALMENTE
contatore
320
CONTENUTO NELLA LOCAZIONI
… DI MEMORIA ASSOCIATA
ALLA VARIABILE!
Prof.ssa Chiara Petrioli -- corso di
programmazione 1, a.a. 2006/2007
5
temp
Esercizio
Si scriva un programma che calcola la temperatura
media di un mese
Variante di prima..
– Mesi diversi hanno un numero diverso di giorni e quindi
un numero diverso di valori da inserire da input
– Come risolviamo questo problema?
Una soluzione è quella di usare una costante simbolica
NUM_GIORNI (ogni volta che eseguiamo il programma prima di
eseguirlo dobbiamo conoscere il numero di giorni e settare la
costante simbolica…)
FORTUNATAMENTE esistono soluzioni più semplici ed efficaci
che non richiedono di conoscere il numero di valori da prendere da
input prima dell’esecuzione del programma
– METODO A: Utilizzo di un valore sentinella
– METODO B: inserimento da input del numero di giorni.
Prof.ssa Chiara Petrioli -- corso di
programmazione 1, a.a. 2006/2007
Utilizzo di un valore sentinella
Assunzione e limite
Se ci sono dei valori che la variabile contatore
non assume mai uno di tali valori può essere
usato per segnalare che si è arrivati alla fine
della serie di valori da inserire da input
– Es. media dei voti degli esami (0…30). Il valore -1
può essere scelto come valore sentinella  quando
l’utente da input inserisce -1 significa che la serie di
voti da inserire e’ terminata
– Es. media delle temperature di un mese: la
temperatura di un mese non potrà mai arrivare a
migliaia di gradi. 1000 potrebbe essere scelto come
valore sentinella…
Ripetizione indefinita: il numero
diChiara
iterazioni
chediverranno eseguite NON è noto
Prof.ssa
Petrioli -- corso
programmazione
1, a.a. 2006/2007
prima
di entrare
nel ciclo.
Soluzione con utilizzo di un valore
sentinella
Pseudocodice
– Setta la variabile totale a 0
– Setta la variabile contatore a 1
– Inserisci il primo valore di temperatura
– Fino a quando non viene inserito da input il valore
sentinella
Somma il valore corrente di temperatura a totale
Somma uno a contatore
Inserisci il prossimo valore di temperatura (o il valore
sentinella se sono stati tutti inseriti)
– Poni la variabile media pari a totale/contatore
– Stampa il valore
della variabile media
Prof.ssa Chiara Petrioli -- corso di
programmazione 1, a.a. 2006/2007
Soluzione con utilizzo di un valore
sentinella
I float sono sempre rappresentati
in modo approssimato.
Attenzione!
potrebbe
essere critico verificare
#include <stdio.h>
seint
due
float sono uguali …
main()
{
float temperatura;
float totale=0.0;
int contatore = 1;
float media;
printf (“inserisci primo valore della temperatura, valore intero >=1000 per terminare \n”);
scanf(“%f”, &temperatura);
while (temperatura < 1000)
{
totale += temperatura;
Il valore soglia
contatore++;
printf (“inserisci valore della temperatura,
deve essere specificato
valore intero >=1000 per terminare \n”);
all’utente
scanf(“%f”, &temperatura);
}
if (contatore > 1)
{
media = totale /(contatore-1);
printf (“la temperatura media del mese è: %f \n”, media);
}
return 0;
}
Prof.ssa Chiara Petrioli -- corso di
programmazione 1, a.a. 2006/2007
Inserimento da input del numero
di iterazioni
Ripetizione definita (prima dell’entrata nel ciclo
si conosce il numero di iterazioni da effettuare)
Tale valore non ha tuttavia bisogno di essere
scritto in una costante simbolica. Viene inserito
in una variabile da input. Può variare (senza
toccare il codice) ad ogni esecuzione del
programma (ad esempio a seconda del numero
di giorni del particolare mese di cui si vuole
conoscere la temperatura media).
Prof.ssa Chiara Petrioli -- corso di
programmazione 1, a.a. 2006/2007
Inserimento da input del numero
di iterazioni
#include <stdio.h>
int main()
{
float temperatura;
float totale=0.0;
int i;
int contatore; /*non ho bisogno di inizializzare la variabile, il valore verra’ preso da input */
float media;
printf (“inserisci numero di campioni della temperatura \n”);
scanf(“%d”, &contatore);
i=contatore;
while (i > 0)
o equivalentemente
{
i--;della temperatura \n”);
printf (“inserisci primo valore
scanf(“%f”, &temperatura);
totale += temperatura;
i= i -1;
}
if (contatore != 0)
{
media = totale /contatore;
printf (“la temperatura media del mese è: %f \n”, media);
}
return 0;
Prof.ssa Chiara Petrioli -- corso di
}
programmazione 1, a.a. 2006/2007
Operatori di incremento e decremento
Operatore
Spiegazione
++
Espressione di
esempio
++a
++
a++
Usa il valore di a
nell’espressione, quindi
incrementa a di 1
--
--b
Decrementa b di 1 e usa il
valore risultante
nell’espressione in cui compare
questo termine
--
b--
Usa il valore di b
nell’espressione, quindi
decrementa b di 1
Prof.ssa Chiara Petrioli -- corso di
programmazione 1, a.a. 2006/2007
Incrementa a di 1 e usa il valore
risultante nell’espressione in cui
compare questo termine
Alcuni esempi
#include <stdio.h>
int main()
{
int c;
c=5;
printf(“%d\n”,c);
printf(“%d\n”,c++);
printf(“%d\n\n”,c);
c=5;
printf(“%d\n”,c);
printf(“%d\n”,++c);
printf(“%d\n\n”,c);
5
5
6
5
6
6
return 0;
}
Prof.ssa Chiara Petrioli -- corso di
programmazione 1, a.a. 2006/2007
Precedenza degli operatori
(sintesi)
Operatori unari
+, -
Operatori
++
--
+
-
(type)
*/%
+<
<= >
==
!=
>=
?:
=
+= -= *= /= %=
Prof.ssa Chiara Petrioli -- corso di
programmazione 1, a.a. 2006/2007
Esercizio
Una persona ha tenuto traccia dei pieni di
gasolio fatti con la sua automobile, e del
numero di chilometri fatti con ciascun
pieno. Vuole ora scrivere un programma
che gli consenta
di calcolare e stampare,
Numero di iterazioni: 3
Si inseriscano
i numeri di di
litri carburante,
usati: 12.8
per ciascun
rifornimento
i
Si inserisca il numero di chilometri: 287
Km/litro
per questo
sono:22.42
chilometri I per
litro
fatti pieno
dall’automobile.
Il
Si inseriscano i numeri di litri usati: 10.3
programma
stamperà
la 200
media di
Si inserisca
il numeroquindi
di chilometri:
Km/litro per questo pieno sono:19.41
chilometri ISiper
litro nel
periodo
monitorato.
inseriscano
i numeri
di litri usati:
5
?
Si inserisca il numero di chilometri: 120
I Km/litro per questo pieno sono:24
Prof.ssa Chiara Petrioli -- corso di
La media
sull’intero
programmazione
1, a.a.periodo
2006/2007 e’: 21.6
Soluzione
Pseudocodice
– Inserisci il numero di valori da inserire
– Inizializza a 0 due variabili reali tot_chilometri e tot_litri
– Fino a quando non sono stati considerati tutti i dati
prendi da input il numero di chilometri effettuati durante il periodo
considerato (memorizza tale valore nella variabile chilometri)
prendi da input il numero di litri di carburante acquistati nel periodo
considerato (memorizza tale valore nella variabile litri)
stampa il numero di chilometri per litro effettuati nel periodo
considerato
somma chilometri alla variabile tot_chilometri (numero di chilometri
finora esaminati)
somma carburante alla variabile tot_litri
– Stampa la media di consumo per litro durante l’intero
intervallo di osservazione
Prof.ssa Chiara Petrioli -- corso di
programmazione 1, a.a. 2006/2007
Soluzione
#include <stdio.h>
int main()
{
float tot_chilometri=0.0 ;
float tot_litri=0.0
int contatore;
int i;
float chilometri, litri;
printf (“inserisci numero di campioni \n”);
scanf(“%d”, &contatore);
i=contatore;
while (i > 0) /*alcuni valori ancora da considerare */
{
printf (“inserisci valore chilometri \n”);
scanf(“%f”, &chilometri);
printf (“inserisci numero di litri di carburante \n”);
scanf(“%f”, &litri);
if (litri !=0)
print (“il numero di Km/litro per questo pieno e’: %f \n”, chilometri/litri);
else
printf(“nessun litro in questo pieno \n”);
tot_chilometri += chilometri;
tot_litri +=litri;
i= i -1;
}
if (tot_litri !=0.0)
printf (“la media del numero di Km/litro sull’intero periodo è:
%f \n”,tot_chilometri/tot_litri );
else
printf(“nessun valore valido inserito \n”);
return 0;
Prof.ssa Chiara Petrioli -- corso di
}
programmazione 1, a.a. 2006/2007
Soluzione
#include <stdio.h>
int main()
{
float tot_chilometri=0.0 ;
float tot_litri=0.0
float chilometri, litri;
printf (“inserisci valore chilometri \n”);
scanf(“%f”, &chilometri);
printf (“inserisci numero di litri di carburante, valore sentinella 0 \n”);
scanf(“%f”, &litri);
while (litri > 0.0) /*alcuni valori ancora da considerare */
{
print (“il numero di Km/litro per questo pieno e’: %f \n”, chilometri/litri);
tot_chilometri += chilometri;
tot_litri +=litri;
printf (“inserisci valore chilometri \n”);
scanf(“%f”, &chilometri);
printf (“inserisci numero di litri di carburante \n”);
scanf(“%f”, &litri);
}
if (tot_litri !=0.0)
printf (“la media del numero di Km/litro sull’intero periodo è:
%f \n”,tot_chilometri/tot_litri );
return 0;
}
Prof.ssa Chiara Petrioli -- corso di
programmazione 1, a.a. 2006/2007
Esercizio
Si scriva da input un programma che
prenda da input una serie di temperature
Farenheit e ne calcoli (e stampi) il
corrispettivo in gradi Celsius.
Prof.ssa Chiara Petrioli -- corso di
programmazione 1, a.a. 2006/2007
Soluzione
Tc = (5/9)*(Tf-32);
– Tc = temperatura in gradi Celsius ,Tf = temperatura in gradi Fahrenheit
#include <stdio.h>
int main()
{
float temperatura;
printf (“inserisci un valore di temperatura
(se serie completata -1000) \n”);
scanf(“%d”, &temperatura);
while (temperatura > -1000) /*alcuni valori ancora da considerare */
{
printf (“valore temperatura %f F in gradi Celsius:
%f \n”, temperatura, (5/9)* (temperatura -32));
printf (“inserisci un valore di temperatura (se serie
completata -1000) \n”);
scanf(“%d”, &temperatura);
}
return 0;
}
Prof.ssa Chiara Petrioli -- corso di
programmazione 1, a.a. 2006/2007
Esercizio
Si scriva un programma che legga un valore del
lato di un quadrato (numero intero x) e quindi
stampi in output un quadrato costituito da x*x
asterischi.
Es. se x=5
*****
Se x=3
*****
***
*****
***
*****
***
*****
Prof.ssa Chiara Petrioli -- corso di
programmazione 1, a.a. 2006/2007
Soluzione
#include <stdio.h>
int main()
{
int i,j =0;
int righe;
printf (“inserisci il numero di righe della figura \n”);
scanf(“%d”, &righe);
while (i<righe)
Cicli annidati
{
while (j < righe)
{
printf (“*”);
j++;
}
printf(“\n”);
j=0;
i++;
}
}
Prof.ssa Chiara Petrioli -- corso di
programmazione 1, a.a. 2006/2007
Esercizio
Si modifichi il programma precedente in modo
da stampare la seguente figura geometrica:
Es. se x=5
*****
Se x=3
*****
***
*****
***
***
*****
*****
Prof.ssa Chiara Petrioli -- corso di
programmazione 1, a.a. 2006/2007
Soluzione
#include <stdio.h>
Int main()
{
int i,j =0;
int righe;
printf (“inserisci il numero di righe della figura \n”);
scanf(“%d”, &righe);
while (i<righe)
{
if (i%2)
printf(“ ”);
Costrutti
annidamento
while (j < righe)
In
{
sequenza
printf (“* ”);
j++;
}
printf(“\n”);
j=0;
i++;
}
}
Prof.ssa Chiara Petrioli -- corso di
programmazione 1, a.a. 2006/2007
Scarica

LEZ_2_3 - TWiki