Sunteți pe pagina 1din 44

Scopul cursului

Structuri de control în limbajul C


 Structura repetitivă for

 Structura repetitivă while

 Structura repetitivă do/while

 Instrucțiunile break și continue

 Instrucțiunea goto

 Operatorii logici

Programarea calculatoarelor I - Gyorodi


Cornelia 1
Elemente esențiale ale unei instrucțiuni repetitive
 Buclă
 Grup de instrucțiuni care se repetă cât timp condiția rămâne true

 Variabila contor
 Variabila contor este folosită pentru a număra execuția repetă a

instrucțiunilor din interiorul buclei


 Variabila fanion sau santinelă (Sentinel-controlled repetition)
 Nu definește numărul de repetări a buclei

 Este utilizată când nu se cunoaște numărul exact al repetări bulei

 Valoarea variabilei fanion indică sfârșitul bulei

Programarea calculatoarelor I - Gyorodi


Cornelia 2
Cerințe pentru variabila contor

 Inițializarea variabilei contor


 O condiție care testează valoarea finală a variabilei

contor ( dacă bucla trebuie să continue)


 O operație de incrementare sau decrementare a

variabilei contror la fiecare trecere prin buclă

Programarea calculatoarelor I - Gyorodi


Cornelia 3
Exemple
int counter = 1; // initializare
while ( counter <= 10 ) {
printf( "%d\n", counter );
++counter; // increment
}
 Instructiunea
int counter = 1;
 Numele variabilei counter

 Declararea ei ca și întreg
 Inițializarea cu valoarea 1

Programarea calculatoarelor I - Gyorodi


Cornelia 4
Instrucțiunea for

for (iniţializare; testul de condiţie; incrementare)


instrucţiune;
 Secţiunea iniţializare este folosită pentru a specifica o valoare iniţială
variabilei care controlează ciclul, numită variabilă de control a ciclului.
 Secţiunea de iniţializare se execută o singură dată înainte ca ciclul să
înceapă.
 Secţiunea testul de condiţie a ciclului testează variabila de control, ori de
cîte ori se repetă ciclul. Dacă testul de condiţie este evaluat false, ciclul
încetează şi execuţia programului continuă cu linia ce urmează după ciclul
for.
Programarea calculatoarelor I - Gyorodi
Cornelia 5
Instrucțiunea for

 Secţiunea incrementare a ciclului for este executată la


sfârşitul fiecărui ciclu for, adică după ce a fost executată
instrucţiunea sau secvenţa de instrucţiuni, dar înainte de
testul de condiţie. Scopul secţiunii este să incrementeze
(sau să decrementeze) variabila de control a ciclului.

Programarea calculatoarelor I - Gyorodi


Cornelia 6
Instrucțiunea for

 Exemple:
for( int counter = 1; counter <= 10; counter++ )
printf( "%d\n", counter );

 Tipărește întregi de la 1 la 10

Programarea calculatoarelor I - Gyorodi


Cornelia 7
Instrucțiunea for
 Variante ale instrucțiuni for :
for (; test de condiţie; increment)
instrucţiune;
Exemplu:
void main ( )
{
int i;
printf ("Introduceti un nr. întreg:");
scanf ("%d", &i);
for (; i; i--)
printf( "%d", i);
}
Programarea calculatoarelor I - Gyorodi
Cornelia 8
Variante ale instrucțiuni for
 O altă variantă a lui for este aceea în care instrucțiunea poate
să fie goală.
for (; test de condiţie; increment) ;
 Exemplu: Program care introduce în mod continuu caractere, până când utilizatorul
tastează litera q.
# include <stdio.h>
# include <conio.h>
main ()
{
char ch;

for (ch = getch( ); ch!='q'; ch = getch( ) );


printf ("\n Am găsit pe q");
} 9
Variante ale instrucțiuni for
 Variabila de control a ciclului poate să fie modificată în afara
secţiunii de incrementare.

for (iniţializare; testul de condiţie;)


{
instrucţiune;
incrementare;
}

Programarea calculatoarelor I - Gyorodi


Cornelia 10
Variante ale instrucțiuni for
 Exemplu:
main ( )
{
int i;
for (i=0; i<=10;)
{
printf ("%d", i;)
i++;
}
}

Programarea calculatoarelor I - Gyorodi


Cornelia 11
Variante ale instrucțiuni for

 Folosind for este posibil să creem un ciclu infinit, care nu se


opreşte niciodată:
for (; ; ;)
{ ... }

 Când nu există nicio expresie în secţiunea testului de condiţie


compilatorul presupune că el este true şi îşi continuă execuţia.

Programarea calculatoarelor I - Gyorodi


Cornelia 12
Exemplu
 Se citește un număr n strict pozitiv de la tastatură și se afișează suma numerelor mai mici sau egale cu
n și factorialul numărului n.
# include <stdio.h>
int main ( )
{
int i, suma=0, contor, factorial;
printf ("Introduceti un nr. intreg:");
scanf ("%d", &i);
suma=0;
factorial=1;
for (contor=1; contor<=i; contor++){
suma = suma + contor;
factorial *= contor;
}
printf( "Suma este %d \nFactorial este %d", suma, factorial);
return 0;
}
Mai multe detalii în Bibl 1 - Exemplu 3.7 13
Instrucţiunea while
 Ciclul while se execută atâta timp cât expresie_logică este true, în
cazul când expresie_logică este false ciclul încetează.
 Valoarea expresiei este evaluată la începutul ciclului, aceasta înseamnă
că, dacă expresie_logică are valoarea false de la început, ciclul nu se va
executa.
 Forma generală a instrucţiuni este:
while (expresie_logică)
instructiune;

14 Programarea calculatoarelor I - Gyorodi Cornelia


Exemplu 1 – instrucțiunea While
#include <stdio.h>
main ( )
{
char ch;

ch = getchar( );

while (ch! = 'x')


ch = getchar( );
printf("Am gasit pe x");
}

Programarea calculatoarelor I - Gyorodi


Cornelia 15
Exemplu 2 – instrucțiunea While

#include <stdio.h>

int main () value of x: 1


{ value of x: 2
value of x: 3
/* local variable definition */ value of x: 4
int x = 1; value of x: 5
/* while loop execution */ value of a: 6
value of x: 7
while( x < 10 ) { value of a: 8
printf("value of x: %d\n", x); value of x: 9
x++;
}
return 0;
}

Programarea calculatoarelor I - Gyorodi


Cornelia 16
Instrucţiunea do
 O buclă do ... while este similară cu o buclă while, cu excepția faptului că
este garantată executarea instrucțiuni/instrucțiunilor cel puțin o dată.
 Instrucţiunea do este o instrucţiune ciclică şi are următoarea formă
generală:
do
{
instructiuni
}
while(expresie);
 Ciclul do repetă instrucţiunea sau instrucţiunile din corpul buclei cât timp
expresie este true şi se opreşte când expresie devine false.
Programarea calculatoarelor I - Gyorodi
Cornelia 17
Instrucţiunea do

 Schema bloc a instrucțiuni do/while

action(s)

true
condition

false

Programarea calculatoarelor I - Gyorodi Cornelia 18


Exemplu 1 – Instrucţiunea do

#include <stdio.h>

int main () value of x: 1


{ value of x: 2
value of x: 3
/* local variable definition */ value of x: 4
int x = 1; value of x: 5
/* do loop execution */ value of a: 6
value of x: 7
do { value of a: 8
printf("value of x: %d\n", x); value of x: 9
x++;
} while ( x < 10 );
return 0;
}

Programarea calculatoarelor I - Gyorodi


Cornelia 19
Exemplu 2 - Instrucţiunea do
Exemplu: /* programul verifică dacă am tastat litera q */
#include <stdio.h>
#include <conio.h>
void main ( )
{
char ch;
do{
ch = getchar( );
}while (ch!='q');
printf("\n Am gasit pe q");
}

Programarea calculatoarelor I - Gyorodi


Cornelia 20
Exemplu 3 - Instrucţiunea do
 Se citesc de la tastatură n numere, programul calculează și afișează media aritmetică a
numerelor impare (se va folosi instrucțiunea ciclică do).
#include <stdio.h>
int main()
{
int n, a, i, s, j;
float ma;
s = 0;
i = 0;
j = 0;
printf("Introduceti numarul de numere: ");
scanf("%d", &n);

Programarea calculatoarelor I - Gyorodi


Cornelia 21
Exemplu 3 (continuare)
do
{
printf("Introduceti un numar :");
scanf("%d", &a); // citim numerele
if(a % 2 == 1) // verificam daca numarul este impar
{
s = s + a;
j = j + 1;
}
i = i + 1;

}while(i < n); // verificam numarul de numere citite

ma = s / j;
printf("Media aritmetica a nr. impare este: %f ", ma);
return 0;
}
Mai multe detalii în Bibl 1 - Exemplu 3.9
Programarea calculatoarelor I - Gyorodi Cornelia 22
Instrucțiuni ciclice (bucle) imbricate în C – Instrucțiunea For
 Limbajul C permite utilizarea unei bucle în interiorul altei bucle. Următoarea
secțiune prezintă câteva exemple pentru a ilustra conceptul.
 Sintaxa pentru instrucțiunea for imbricată în C este următoarea:
for (iniţializare; testul de condiţie; incrementare)
{
for (iniţializare; testul de condiţie; incrementare){
instrucţiune/instrucțiuni;
}
instrucţiune/instrucțiuni;
}

Programarea calculatoarelor I - Gyorodi


Cornelia 23
Instrucțiuni ciclice (bucle) imbricate în C – Instrucțiunea
While

 Sintaxa pentru instrucțiunea while imbricată în C este


următoarea:

while (expresie_logică) {
while (expresie_logică) {
instrucţiune/instrucțiuni;
}
instrucţiune/instrucțiuni;
}
Programarea calculatoarelor I - Gyorodi
Cornelia 24
Instrucțiuni ciclice (bucle) imbricate în C – Instrucțiunea do
 Sintaxa pentru instrucțiunea do imbricată în C este următoarea:
do
{
instructiuni;
do{
instructiuni;
} while(expresie);

} while(expresie);
 Putem include orice tip de buclă în orice alt tip de buclă. De exemplu, o buclă „for”

poate fi în interiorul unei bucle „while” sau invers.


Programarea calculatoarelor I - Gyorodi
Cornelia 25
Instrucțiuni ciclice (bucle) imbricate în C - Exemplu

 Exemplu : Programul determină numerele prime de la 2 la 1000 și folosește o buclă


imbricată for.
#include <stdio.h>
int main ()
{
int i, j;
for(i = 2; i<1000; i++) {
for(j = 2; j <= (i/j); j++)
if(!(i%j)) break; // if factor found, not prime
if(j > (i/j)) printf("%d is prime\n", i);
}
return 0;
}

Programarea calculatoarelor I - Gyorodi


Cornelia 26
Instrucţiunea break
 Instrucţiunea break permite ieşirea dintr-o buclă
repetitivă respectiv din instrucțiunile while, for,
do/while sau switch

 Programul va continua cu următoarea instrucțiune după bucla


repetitivă
 Oricare dintre aceste instrucțiuni poate conține mai multe
instrucțiuni break
 De obicei instrucțiunea break apare condiționată de un if.

Programarea calculatoarelor I - Gyorodi


Cornelia 27
Instrucţiunea break
 Instrucţiunea break poate fi folosită cu oricare din cele
trei instrucțiuni repetitive ale limbajului.
 Intr-un ciclu pot exista oricâte instrucţiuni break.
 Instrucţiunea break produce ieşirea numai din ciclu cel
mai interior.

Programarea calculatoarelor I - Gyorodi


Cornelia 28
Schema bloc - Instrucţiunea break

Programarea calculatoarelor I - Gyorodi


Cornelia 29
Instrucţiunea break

while(expresie){ for(expresie1;expresie2;expresie3) do{


{ ...
... ... if(exprb)break;
if(exprb)break if(exprb)break; ...
; ... }while(expresie);
... }
}

Programarea calculatoarelor I - Gyorodi


Cornelia 30
Exemplu 1 – Instrucțiunea break
#include <stdio.h>
int main ()
{
int a = 1;
/* while loop execution */ value of a: 1
while( a < 10 ) { value of a: 2
printf("value of a: %d\n", a); value of a: 3
a++; value of a: 4
if( a > 5) {
/* terminate the loop using break statement */
break;
}
}
return 0;
}
Programarea calculatoarelor I - Gyorodi
Cornelia 31
Exemplu 2 – Instrucțiunea break
 Să se scrie un program care afișează numerele mai mici decât 1000 multiplu de 6 până la apăsarea tastei Q sau q.
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

int main(void)
{
char ch;
int i;
/* Afiseaza numerele multiplu de 6 <1000 */
printf("Numerele <1000 care sunt multiplu de 6 sunt:\n");
for(i=1; i<1000; i++) {
if (!(i % 6)) {
printf("%d\n Apasa Q to quit, sau orice tasta pentru a continua ...", i);
ch = getch();
printf("\r \r");
if ((ch == 'q') || (ch == 'Q')) {
printf("Bye.\n");
break;
}
}
}
/* Exit program */
return EXIT_SUCCESS;
}

Mai multe detalii în Bibl 1 - Exemplu 3.10 32


Instrucţiunea continue
 Instrucţiunea continue forţează ca următoarea iteraţie a ciclului să aibă
loc trecând peste instrucţiunile dintre ea şi testul de condiţie.

 În ciclurile while şi do-while, la întâlnirea instrucţiunii continue,


controlul trece direct la testul de condiţie şi apoi procesul de ciclare
continuă.

 În cazul instrucţiuni for este executată secţiunea increment, apoi testul


de condiţie după care procesul de ciclare continuă.

Programarea calculatoarelor I - Gyorodi


Cornelia 33
Schema bloc - Instrucţiunea continue

Programarea calculatoarelor I - Gyorodi


Cornelia 34
Exemplu – Instrucțiunea continue
 Programul va afișa numerele impare < 50, folosind instrucțiunea continue.
#include <stdio.h>
int main( )
{
int i;
printf("Programul care afiseaza numere impare < 50 \n");
for (i = 0; i < 50; i++)
{
if (i%2==0){
continue;
printf ("%d ", i); /*aceasta nu va fi afisata */
}
else
printf ("%d ", i);
}
return 0;
}
Mai multe detalii în Bibl 1 - Exemplu 3.11
Programarea calculatoarelor I - Gyorodi
Cornelia 35
Instrucțiunea goto

 Limbajul C conţine o instrucţiune de salt necondiţoinat


numită goto.
 Instrucţiunea goto efectuează un salt în interiorul unei
funcţii. Ea nu poate face saltul dincolo de funcţie.
 Instrucţiunea goto lucrează cu o etichetă.
 In C, o etichetă este un nume de identificare urmat de :

Programarea calculatoarelor I - Gyorodi


Cornelia 36
Instrucțiunea goto

 Sintaxa instrucțiuni goto:

goto label;

label: instructiune;

Programarea calculatoarelor I - Gyorodi


Cornelia 37
Schema bloc - Instrucțiunea goto

Programarea calculatoarelor I - Gyorodi


Cornelia 38
Instrucțiunea goto
Exemplu:Instrucțiunea goto efectuează un salt necondiţionat peste
instrucţiunea printf( ), la eticheta label.
void main ()
{

goto label;
printf(" Acesta nu se va afisa ");
label : printf(" Acesta se va afişa");
}

Programarea calculatoarelor I - Gyorodi


Cornelia 39
Exemplu: Instrucțiunea goto

#include <stdio.h>
int main () {
/* local variable definition */
int a = 1;
value of a: 1
/* do loop execution */
value of a: 2
LOOP:do { value of a: 3
if( a == 5) { value of a: 4
/* skip the iteration */ value of a: 6
a = a + 1; value of a: 7
goto LOOP; value of a: 8
} value of a: 9
printf("value of a: %d\n", a);
a++;
}while( a < 10 );
return 0;
}
Programarea calculatoarelor I - Gyorodi Cornelia 40
Operatorii logici
 && ( ȘI logic)
 Returnează true dacă ambele condiții sunt true

 || ( SAU logic )
 Returnează true dacă una din conditii este true

 ! ( NOT logic)
 Este un operator unar

Expresie Rezultat
true && false false
true || false true
!false true

Programarea calculatoarelor I - Gyorodi


Cornelia 41
Exemplu - Operatorii logici
#include <stdio.h>
main() {
int a = 5;
int b = 20;
int c ;
if ( a && b )
printf("Line 1 - Condition is true\n" );
if ( a || b )
printf("Line 2 - Condition is true\n" );
/* lets change the value of a and b */
a = 0;
b = 10;
if ( a && b )
printf("Line 3 - Condition is true\n" );
else
printf("Line 3 - Condition is not true\n" );
if ( !(a && b) )
printf("Line 4 - Condition is true\n" );
} 42
Operatorii logici

Exemplu:
for(ch = getchar(); (ch != ‘y’) && (ch != ‘Y’); ch
= getchar());

Programarea calculatoarelor I - Gyorodi


Cornelia 43
Mulțumesc pentru atenție!

44

S-ar putea să vă placă și