Filehost.ro - gazduire fisiere
H4cky0u Forum
Tutoriale de toate tipurile
Nou pe simpatie:
Andreea_K
Femeie
25 ani
Caras Severin
cauta Barbat
30 - 49 ani
H4cky0u ForumReguliInregistrareLoginPozeNu sunteti logat. Lista Forumurilor Pe Tematici
H4cky0u Forum / C/C++/C# /

[C] Instructiunile de control ale programului

Pagini: 1 Moderat de PaiN
#1
GaMa
Administrator
Postari: 205
In acest tutorial prezint doua din cele mai importante instructiuni de control ale programelor scrise in limbajul C if si for,care constituie motorul principal al programelor.Pe langa aceasta,voi scrie despre secventele de instructiuni,despre operatorii relationari si logici,de asemenea mai multe amanunte despre functia printf()

1. Familiarizarea cu instructiunea if

Instructiunea ifeste una dintre instructiunile de selectie (numite uneori instructiuni conditionale) ale limbajului C
Actiunea sa este guvernata de rezultatul testului condtitional care poate fi evaluat ca true (adevarat) sau false (fals). Altfel spus,instructiunile de selectie iau decizii bazate pe rezultatul unei conditii.
In cea mai simpla forma a sa,instruciunea if permite programului sa execute contidionat o anumita instruciune. Acesta forma a lui if este urmatoare:

if(expresie) instructiune;

Unde:
-expresie = poate fi orice expresie C valida.
Daca expresia este evaluata ca true (adevarat),instructuinea va fi executat. Daca expresia este evaluata ca false (fals),atunci ea va fi sarita si se va executa instructiunea care urmeaza dupa if.
In C,o expresie este true daca ea este evaluata ca diferita de zero si false daca este evaluata ca fiind zero. Instruciunea care urmeaza unde if este considerata scop al instructiunii if.
In general,expresia din interiorul lui if compara o valoare cu alta folosind un operator relatie. Desi toti operatorii de relatie vor fi prezentati mai tarziu in acest tutorial,trei dintre ei sunt introdusi aici,astfel incat sa putem crea unele exemple.Un operator de relatie tasteaza in ce relatie se afla o valoare fata de alta. De exemplu,pentru a vede daca o valoare este mai mare decat alta,C foloseste operatorul de relatie >. Rezultatul acestei comparatii este true sau false.
De exemplu:
10>9 este true
9>10 este false
Instructiunea if din urmatorul fragment de program va face sa fie afisat mesajul true.

Code:

Code:

if (10>9)  printf(" true ");

Deoarece expresia din urmatoarea instructiune este false, if nu va executa scopul.

Code:

Code:

if (1>2) ptrinf(" nu se afiseaza nimic ");

C foloseste < ca operator mai mic decat
De exemplu: 10<11 este true
Pentru testarea egalitatii,C contine operatorul = =. Nu trebe sa existe spatiu intrecele doau semne de egal.
De exemplu: 10 = = 10 este true, dar 10 = = 11 este false.
Desigur,expresia din interorul instructiunii if poate contine variabile. De exemplu,urmatorul program arata daca numarul introdus de la tastatura este pozitiv sau negativ.

Code:

Code:

#include <stdio.h>
main()
{

  int num;

printf("introduceti un numar:");
scanf("%d",&num);
if(num < 0)
     printf("numarul este negatic");
if(num > 0)
     printf("numarul este pozitiv");
}

Reamintim ca,in C,true este orice valoare nonzero si false orice valoare 0.
Deci instructiunile de genul celei care urmeaza sun perfect valide.

if(count+1) printf("not zero";

Exemple:
a) programul urmator afiseaza doua numere si intreaba utilizatorul care este rezultatul,spunand apoi utilizatorului daca razultatul este corect sau gresit.

Code:

Code:

#include <stdio.h>
main()
{

    int answer;

    printf("Cat face 10+14?:");
    scanf("%d",&answer);

    if(answer == 10+14)
       printf("adevarat");
}

b) acest program converteset yarzi in metri sau metri in yarzi,dupa dorinta utilizatorului (1 yard=0,9144 m)

Code:

Code:

#include <stdio.h>
main()

{

     float num;
     int choice;

     printf("introduceti valoarea de convertit:");
     scanf("%f",&num);

     printf("1-yarzi in metri, 2-metri in yarzi");
     printf("\nalegeti operatia:");
     scanf("%d",&choice);

     if(choice = = 1)
         printf("%f",num * 0.9144);
     if(choice == 2)
         printf("%f",num / 0.9144);
}

2. Adaugarea lui else

Unei instructiuni if i se poate adauga instructiunea else. In acest caz,instructiunea if arata astfel:

if(expresie) instructiunea 1;
else instructiunea 2;

Daca expresia este true,va fi executat scopul lui if,iar scopul lui else va fi sarit.Daca expresia este false, atunci scopul lui if este sarit si se executa scopul lui else
In nici o circumstanta nu vor fi executate ambele instructiuni.Asadar,adaugarea lui else conduce la luarea unei decizii dintre cele doua cai posibile.

Exemplu:

a) Se poate folosi else pentru a crea programe mult mai eficente. De exemplu,aici else este folosit in locul celui de al doilea id din programul din cesctiunea precedenta,care determina daca un numar este pozitiv sau negativ.

Code:

Code:

#include <stdio.h>
main()

{

      int num;
   
      printf("introduceti un numar:");
      scanf("%d",&num);

      if(num < 0)
         printf("numarul este negativ");
      else
         printf("numarul este pozitiv");

}

b) acest program cere utilizatorului doau numere,divide pe primul cu al doilea si afiseaza rezultatul.Cum numitorul trebuie sa fie diferit de zero,rogramul utilizeaza un if si un else pentru a prevenit impartirea cu zero.

Code:

Code:

#include <stdio.h>
main()

{

    float num1,num2;

    prinf("introduceti primul numar:");
    scanf("%f",&num1);
    printf("introduceti al doilea numar:");
    scanf("%f",&num2);
    if(num2 == 0)
         printf("nu pot imparti la 0");
    else
         printf("rezultatul este:%f",num1 / num2);

}

3. Secvente de instructiuni

In C,se pot inlantui doau sau mai multe intructiuni. Aceasta inlantuire poarta numele de secventa de instructuni. Pentru a crea o secventa de instructuni este suficenta cuprinderea instructunilor ce vor forma secvente intre parantezele acolade. Grupul de instructuni cuprinse intre parantezele acolade formeaza o unitate logica ce poate fi utilizata oriunde ca o singura instructiune. De exemplu,forma generala a instructunii if folosind secventa de instructiuni este:

Code:

Code:

if(expresie)
{
instructiunea 1;
instructiunea 2;
.
.
instructiunea N;
{
else
{
instructiunea 1;
instructiunea 2;
.
.
instructiunea N;
}

Daca expresia este evaluata true,vor fi executate toate instructiunile de secventa asociate cu if,iar daca expresia este false,vor fi executate toate instructiunile din secventa else.Reamintim ca else este optional. De exemplu,acest fragemnt de program asieaza mesajul Acesta este un exemplu de secventa de instructiuni pentru MT,daca utilizatorul introduce orice numara pozitiv.

Code:

Code:

scanf("d", & num);
if(num > 0){
printf("Acesta este");
printf("un exemplu de");
printf("secventa de instructiuni pentru MT");
}

Trebe retinut ca o secventa de instructiuni reprezinta o unitate logica indivizibila.Aceasta inseamna ca in nici o circumstanta nu va fi executat un singur printf() din secventa de mai sus,fara a fi executate si celelalte doua.
In exemplu aratat,instructiunile care apar in secventea de instructiuni sunt paragrafate. Desi C nu tine cont de locul in care apare instructiunile pe linie,este o practica uzuala aceasta de paragrafa un nivel la inceputul secventei.Paragrafarea face ca structura uni program sa fie mai usor de inteles. De asemenea,modul in care se plaseaza parnatezele acolada este arbitrara, Totusi modul in care ele au fost plaste in exemplu mai sus constituie metoda cea mai comuna si va fi utilizata in continoare si in exemplele urmatoare.

Exemple:

a) acest program este o varianta imbunatatita a programului de conversie yarzi in metri si metri in yarzi. Observati modul in care folosirea secventei de instructiuni pemrite programului sa lucreze in mod specific pentru fiecare din cele doau transformari.

Code:

Code:

#include <stdio.h>
main()

{

     float num;
     int choice;

     printf("1-yarzi in metri, 2-metri in yarzi")'
     printf("\nalegeto operatia:");
     scanf("%d", &choice);

     if(choice == 1) {
           printf("introduceti numarul de yarzi:");
           scanf("%f", &num);
           printf("metri: %f", num * 0.9144);
}
else {
    printf("introduceti numarul de metri:");
    scanf("%f", &num);
    printf("yarzi: %f", num / 0.9144);
  }
}

4. Ciclul for

Ciclul for este una din cele trei instructiuni de ciclare ale limbajului C. El permite ca una sau mai multe instructiuni sa fie repetate. Daca ati programat in alte limbaje,cum ar fi BASIC,PASCAL sau DELPHI,veti constat ca ciclul for se comporta ca si echivalentii sai din alte limbaje.
Ciclul for este considerat de multi programatori C ca fiind cel mai flexibil ciclu al limbajului. Desi ciclul for permite un mare numar de varatiuni,in aceasta sectiune vom examina numai formele sale cele mai comune.
In aceste forme comune,ciclul for este folosit a repeta o instruciune sau o secventa de instructiuni de un numar specificat de ori. Forma sa generala pentru a repeta o singura instructiune esre urmatoare:

Code:

Code:

for(initializare; testul de conditie;  increment) instructiune;

Sectiunea initializare este folosita pentru a da o valoare initiala variabilei care controleaza ciclul. Aceasta variabila este in mod uzual numita variabhila de control a ciclului. Sectiunea de initializare este executata o singura data,inainte ca ciclul sa inceapa.
Sectiunea testul de conditie a ciclului testeaza variabila de control cu valoarea scop ori de cate ori ciclul se repeta. Daca testul de conditie este evaluat false,ciclul inceteaza si executia programului programului continua cu linia ce urmeaza dupa ciclu. Testul de conditie este facut la inceputul ciclului,de fiecare data cand ciclul se repeta.
Sectiunea increment a ciclului for este executat la sfarsitul fiecarui ciclu,adica dupa ce a fost executat instructiunea sau secventa de instructiuni,dar inainte de testul de conditie. Scopul sectiunii increment este sa incrementeze (sau sa decrementeze) variabila de control a ciclului cu o anumita cantitate. Ca un prim exemplu simplu,acest program utilizeaza ciclul for pentru a afisa pe ecran numerele de la 1 la 10.

Code:

Code:

#include <stdio.h>
main()
{

       int num;

       for(num=1;num<11;num=num+1)
            printf("%d",num);
       printf("am terminat");
}

Acest program produce urmatorul afisaj:

1 2 3 4 5 6 7 8 9 10 am terminat

Programul lucreaza in felul urmator:
-la inceput,variabila de control a ciclului num este initializata la 1. Apoi este evaluata expresia num < 11. Deoarece ea este true,ciclul for incepe executia. Dupa ce numarul este afisat,variabil num este incrementata cu 1 si expresia num < 11 (testul de conditie) este evaluata din nou. Acest proces continua pana cand num devine egal cu 11. Cand aceasta se intampla,ciclul for se opreste si este afisat am terminat. De retinut ca sectiunea de initializare a ciclului for este executat o singura data,la intrarea in for. Dupa cum am mentionat anterior,testul de conditie este executat la inceputul fiecarei interatii. Aceasta inseamna ca, daca testul este false chiar de la prima interatie,ciclul for nu se va executa. De exemplu,acest program va afisa numa am terminat,deoarece num este initializat la 11,ceea ce face ca testul de conditie sa fie evaluat false.

Code:

Code:

#include <stdio.h>
main()
{

   int num;

   /*acest ciclu nu se va executa*/
   for(num=11;num<11;num=num+1)
       printf("%d",num);
   printf("am terminat");
}

Pentru a repeta cateva instructiuni,folositi o secventa de instructiuni ca scop al ciclului for. De exemplu,acest program calculeaza produsul si suma numerelor de la 1 la 10.

Code:

Code:

#include <stdio.h>
main()
{

    int num,sum;
    long prod;

    sum = 0
    prod = 1
   
    for(num=1;num<11;num=num+1)  {
         sum = sum + num;
         prod = prod * num;
}
   printf("produsul si suma sunt: %1d %d",prod,sum);

}

Ciclul for poate rula si prin decrementare. De exemplu acest fragment decrementeaza variabila de control a ciclului.

for(num=20;num>0;num=num-1)......

Mai mult chiar,variabila de control a ciclului for poate fi incrementata sau decrementata prin mai mult decat 1.De exemplu,acest program afiseaza numerele pana la 100,din cinci in cinci.

Code:

Code:

#include<stdio.h>
main()
{
       int i;
       
       for(i=0;i<101;i=i+5)
       printf("%d",i);
}

5. Operatorii de incrementare si decrementare ai limbajului C

Cand am prezentat ciclul for,sectiunea increment a ciclului arata mai mult sau mai putin ca aceasta:

for(num=0;num<valoare;num=num+1)...

Desi sunt corecte,nu vor aparea niciodata instructiuni ca num = num + 1 in programele scrise de profesionisti,deoarece C pune la dispozitie un operator special care incrementeaza o variabila prin unu. Operatorul increment este ++ (doua semne plus fara spati intre ele) Folosind operatorul increment,se poate schimba urmatoare linie de cod:

i=i+1;

in

i++;


Deci ciclul for anterior va fi scris in mod normal:

for(num=0; num<valoare; num++)...

In mod similar,pentru a decrementa o variabila prin 1, se poate folosi operatorul decrement al limbajului c: -- (doua semne minus fara spati intre ele)
De exemplu:

count=count--1;

poate fi scrisa ca: count--;

Pe langa faptul ca economisesti un mic efort de tastare,motivul pentru care se prefera utilizarea operatorilor de incrementare este acela ca,pentru multe compilatoare C,ei sunt mai rapizi decat instructiunile echivalente de asignare. Cauza acestei diferente este ca in versiunea executabila a programului se evita incarcarea si depozitarea unor instructiuni in limbaj masina,prin substituirea cu o singura instructiune de incrementare sau decrementare.
Operatorii de incrementare sau decrementare nu trebuie neaparat sa urmeze variabila,ei o pot si preceda.Desi efectul asupra variabilei este acelasi,pozitia operatorului afecteaza momentul in care este facuta operatia de incrementare sau decrementare. Pentru a vedea cum,sa examinam acest program:

Code:

Code:

#include <stdio.h>
main()
{

      int i,j;
      i = 10;
      j = i++

      /* se va afisa 11 10 */
      printf(" i si j au valoarea %d %d",i,j);
}

Expresia j=i++ nu trebe sa va nelinisteasca,deoarece operatorul increment poate fi folosit in orice expresie C valida.Aceasta instructiune lucreaza astfel:
- mai intai,valoarea curenta a lui i este asignata lui j si apoi i este incrementat. Iata de ce j are valoarea 10 si nu 11.
Cand operatorii increment sau decrement urmeaza variabila,operatia de incrementare sau decrementare este executata dupa ce valoarea variabilei a fost folosita in expresie. Astfel,presupunand ca mas are valoarea 1,o expresie ca:

count = 10 * max++;

asigneaza valoarea lui 10 lui count si apoi incrementeaza max prin 1.
Daca variabila este precedata de operatorii de incremnetare sau decrementare,mai intai este efectuata operatia de incrementare sau decrementare si abia dupa aceea valoarea variabilei astfel obtinute este folosita in expresie. De exemplu,rescriind programul precedent dupa cum urmeaza,variabila j va avea valoarea 11:


Code:

Code:

#include <stdio.h>
main()
{

     int i,j;
     
     i = 10;
     j = ++i;

     /*se va afisa 11 11 */
     printf("i si j au valorile: %d %d", i,j);
}

Daca folositi operatorii de incrementare sau decrementare pentru a inlocui instructiunile echivalente de asignare,nu conteaza daca operatorul precede sau succede variabila. In acest caz,plasarea lor inainte sau dupa variabila este numai o problema de stil.

6.

Code:

Extinderea posibilitatilor functiei printf()

Pana acum functia printf() a fost utilizata pentru a afisa siruri de caractere si numere. Vom vede in continoare cum putem transmite functiei printf() ca dorim ca afisajul sa se produca pe linia urmatoare (sa treaca la o noua linie). Calea pentru a realiza aceasta (precum si alte actiuni) este folosirea caracterului backslash (\).
Limbajul C defineste 13 coduri speciale,aratate de mine mai jos,care nu pot fi introduse de la tastatura.Codurile backslash pot fi foloite oriunde pot fi folosite caractere normale.

Codurile Backslash ale Limbajului C


Code:

Code:

Cod              Seminificatie

\b                backspace
\f                form feed
\n                new line
\r                carriage return
\t                horizontal tab
\"                double quote
\'                single quote
\0                null
\\                backslash
\v                vertical tab
\a                bell
\N                octal constant (unde N este o constanta octala)
\xN               hexadecimal constant (unde N este o constanta hexa)

Cel mai utilizat cod backslash este \n care este numit newline character. Cand compilatorul C intalneste \n,el il translateaza intr-o combinatie carriage return/line feed. De exemplu,acest program:

Code:

Code:

#include <stdio.h>
main()
{

   printf("aceasta este linia unu\n");
   printf("aceasta este linia doi\n");
   printf("aceasta este linia trei");

}

afiseaza pe ecran:
aceasta este linia unu
aceasta este linia doi
aceasta este linia trei

Codurile backslash sunt constante tip char. Prin urmare,pentru a asigna un cod backslash,acesta trebuie inchis intre apostrofuri,ca in urmatorul fragmen de program:

Code:

Code:

char   ch;
ch='\t'                     // asignarea variabilei ch caracterului tab

7. Operatorii relationali si logici

Limbajul C constituie u set bogat de operatori. In aceasta sectiune va voi povesti despre operatorii relationali si operatorii logici. Cum deja cunoasteti,operatorii relationali compara doua valori si returneaza true sau false. Operatori logici conecteaza impreuna rezultatele true/false. Acesti operatori sunt aratati mai jos.
Operatori logici reprezinta operatiile logice de baza AND ON si NOT.
Tabelul de adevar al acestor operatorii este:

Code:

Code:

p    q     p&&q      p¦¦q    !p
         
         0    0       0         0      1
                                         
         0    1       0         1      1
                                     
         1    1       1         1      0
                                     
         1    0       0         1      0

Tabelul utilizeaza 1 pentru true si 0 pentru false.

Operatorii relationali si operatorii logici:

Operatorii relationali

Code:

Code:

operator         seminficatie
  >               greater than
  >=              greater than or equal
  <               less than
  <=              less than or equal
  ==              equal
  !=              not equal

Operatori Logici

Code:

Code:

Operator       Operatie

   &&             AND
     
   ¦¦             OR
     
   !              NOT

Operatorii relationali si cei logici sunt situati mai jos pe scara precedentei decat operatorii aritmetici. Aceasta inseamna ca o expresie ca:

10+count>a+12

este evaluata ca si cum ar fi scrisa :

(10+count) > (a+12)

Cu ajutorul operatorilor logici se pot pune impreuna oricat de multe operatii relationale. De exemplu,aceasta expresie reuneste trei operatii relationale:

var>max¦ !(max++100) && 0<=item

Exista un fapt important ce trebuie retinut in ceea ce priveste valorile produse de operatorii logici si de relatie: rezultatul nu poate fi decat 0 sau 1. Chiar daca limbajul C defineste ca true orice valoare non-zero,operatorii de relatie si logici produc totdeauna valoarea 1 pentru true. Programele dumneavoastra pot face uz de acest fapt. Operatorii logici si de relatie pot fi folositi atat in instructiunile if,cat si in instructiunile for. De exmplu: instructiunea urmatoare sesizeaza cand si a si b sunt pozitive:

Code:

Code:

if(a>0 && b>0)
      printf("ambele sunt pozitive");

Tabelul care urmeaza arata ordinea relativa a operatorilor relationali si logici:

Code:

Code:

Cea mai ridicata    !
                    >>    =<     < =
                    ==    !=       
                    &&   
Cea mai scazuta     ¦¦

Exemple:

a) este important sa reamintim ca rezultatul oricarei operatii relationale sau logice este 0 pentru false si 1 pentru true. De esemplu,urmatorul program cere introducerea a doi intregi,apoi afiseaza rezultatul fiecarei operatii relationale si logice aplicate lor.

Code:

Code:

#include <stdio.h>
main()

{

      int   i,j;

      printf("\nintroduceti primul numar:");
      scanf("%d", &i);
      printf("introduceti al doilea numar:");
      scanf("%d", &j);

      /* operatorii relationali */
      printf("i < j %d\n",i < j);
      printf("i <= j %d\n",i <= j);
      printf("i == j %d\n",i == j);
      printf("i > j %d\n",i > j);
      printf("i >= j %d\n", >= j);

      /* operatorii logici */
      printf("i && j %d\n",i && j);
      printf("i ¦¦ j %d\n",i ¦¦ j);
      printf("!i   !j %d %d\n", !i, !j);
}

Autor: dragon


 
   
Pagini: 1  
Mergi la