You are on page 1of 9

Elemente de baz ale programrii n C - Aplicaii de Laborator

Laborator nr. 4
Instruciuni de control
4.1.

Instruciuni de selecie

n C sunt disponibile doua tipuri de instruciuni de selecie: if i switch.

4.1.1.

Instruciunea if

Instruciunea if permite s realizeze o ramificare a execuiei n funcie de valoarea unei


expresii. Ea are unul din urmtoarele formate:
Format 1:
if(expresie) instruciune 1
Format 2:
if(expresie) instruciune 1
else instruciune 2

4.1.2.

Exemple de probleme utiliznd instrucia if

Problema 4.1.
//program de citire a trei numere ntregi i afieaz maximul dintre ele
#include<stdio.h>
void main () /* citete a,b,c i scrie maximul dintre ele */
{
int a,b,c, max;
scanf (%d%d%d, &a, &b, &c);
if (a > b) max = a;
else max = b;
if (c >max) max = c;
printf (max(%d, %d, %d) = %d\n, a, b, c, max);
}
Problema 4.2.
// citete valoarea lui x i scrie valoarea funciei de mai jos
4 + 5 2 + 1 < 0
100
= 0
// =

2 + 8 1 > 0
#include<stdio.h>
void main () /* citete x, calculeaz f(x) i scrie valoarea lui f */
{
29
MatrixRom 2013

ISBN: 978-973-755-897-8

Elemente de baz ale programrii n C - Aplicaii de Laborator

float x,y;
scanf(%f, &x);
if(x < 0) y = 4*x*x*x+5*x*x-2*x+1;
else if (x = = 0) y = 100.0;
else y = 2*x*x+8*x-1;
printf(y(x) = %f\n, y);
}
Problema 4.3.
// programul nr.1 de ghicire a unui numr
#include<stdio.h>
#include<stlib.h>
void main (void)
{
int magic; /* numrul care trebuie ghicit*/
int ghiceste; /*numrul indicat de utilizare*/
magic=rand(); /*genereaznumrul ascuns*/
printf("ghiceste numarul ascuns: ");
scanf("%d", &ghiceste);
if (ghiceste== magic)
{
printf("**corect**");
printf("%d este nr magic\n", magic);
}
else
{
printf("gresit");
if (ghiceste >magic)
printf("prea mare\n");
else
printf("prea mic\n");
}
}
Problema 4.4.
// programul nr.2 de ghicire a unui numr
#include <stdio.h>
#include <stdlib.h>
void main(void)
{
int magic; /*numrul care trebuie ghicit*/
int ghiceste; /*numrul indicat de utilizator*/
magic = rand(); /* genereaz numrul ascuns*/
printf("Ghiceste numarul ascuns: ");
scanf("%d", &ghiceste);
if (ghiceste == magic) printf("**Corect**");
30
MatrixRom 2013

ISBN: 978-973-755-897-8

Elemente de baz ale programrii n C - Aplicaii de Laborator

else printf("Gresit");
}

4.1.3.

Instruciunea switch

Instruciunea switch permite realizarea structurii selective multiple, fiind folosit pentru
ramificarea programului pe mai multe ramuri. Structura general a unei instruciuni switch

poate fi descris astfel:


switch( argument )
{
case expresie1:
instruciuni1;
[case expresie2:
instruciuni 2;]
[case expresie3:
instruciuni 3;]
[default: instructiuni4;]
}
Instruciunea break se utilizeaz pentru a iei dintr-o instruciune switch. Ea mai poate fi
utilizat pentru a iei dintr-o instruciune ciclic.

4.1.4.

Exemple de probleme utiliznd instrucia switch

Problema 4.5.
//program de calcul al primelor trei puteri a unui numr introdus de la tastatura
#include<stdio.h>
void main (void)
{
int y, optiune;
printf("introdu un intreg ");
scanf("%d",&y);
printf("1. Iesire din program\n");
printf("2. Patratul lui y\n");
printf("3. Cubul lui y\n");
printf("4. Primele trei puteri ale lui y\n");
scanf("%d\n", &optiune);
switch(optiune)
{
case 1: printf("iesire");
break;
case 4: printf("%d\n",y*y*y*y);
case 3: printf("%d\n",y*y*y);
case 2: printf("%d\n",y*y);
break;
default: printf("optiune necunoscuta\n");
}
}

31
MatrixRom 2013

ISBN: 978-973-755-897-8

Elemente de baz ale programrii n C - Aplicaii de Laborator

Problema 4.6.
// Programul urmtor citete o dat calendaristic de forma: zzllaaaa i o scrie sub forma:
//aaaa, luna zi
// unde:zz este ziua pe 2 cifre; ll este luna pe 2 cifre; aaaa este anul pe 4 cifre; zi este ziua
// pe 1-2cifre; luna este denumirea lunii calendaristice;
#include<stdio.h>
void main () /* citete zzllaaaa i scrie aaaa, luna zz */
{
int zz,ll,an;
scanf (%2d%2d%4d, &zz, &ll, &an);
printf(%d ,an);
switch (ll)
{
case 1: printf (Ianuarie); break;
case 2: printf (Februarie); break;
case 3: printf (Martie); break;
case 4: printf (Aprilie); break;
case 5: printf (Mai); break;
case 6: printf (Iunie); break;
case 7: printf (Iulie); break;
case 8: printf (August); break;
case 9: printf (Septembrie); break;
case 10: printf (Octombrie); break;
case 11: printf (Decembrie); break;
case 12: printf (Noiembrie); break;
default: printf (luna eronata);
}
printf (\t%d\n, zz);
}

4.2.

Instruciuni de iteraie

n C sunt disponibile dou tipuri de instruciuni de iteraie: for i while.

4.2.1.

Instrucia while

Structura iterativ de baz este while care, practic, repet o structur if att timp ct
expresia de control e adevrat. Aadar, instruciunea while este folosit pentru realizarea unei
structuri ciclice condiionate anterior i are sintaxa:
while (expresie)
instruciuni;

4.2.2.

Exemple de probleme utiliznd instrucia while

Problema 4.7.
// citete un ir de numere ntregi i scrie maximul dintre ele
32
MatrixRom 2013

ISBN: 978-973-755-897-8

Elemente de baz ale programrii n C - Aplicaii de Laborator

#include<stdio.h>
void main ()
{
int max,i;
scanf(%d, &max);
while(scanf(%d, &i) = =1) if(i >max) max = i;
printf(max = %d\n, max);
}
Problema 4.8.
// program de afiare a poziiilor din codul ASCI a caracterelor dintr-un sir
#include <string.h>
#include <stdio.h>
void main (void)
{
char *p1;
char s[80];
do
{
p1=s;
gets(s);
while (*p1) printf("%d", *p1++);
}
while(strcmp (s, "gata"));
}
Problema 4.9.
// program ce utilizeaz funciei while in conversia literelor
#include<stdio.h>
#include <ctype.h>
#include <conio.h>
void main(void)
{
char litera; //litera introdus de utilizator
printf("doriti sa continuati? {D/N}: ");
litera = getch(); //citete litera
litera = toupper(litera); //convertete in majuscula;
while ((litera != 'D') && (litera !='N'));
{
putch(7); //emite un sunet
litera = getch(); //citete litera
litera = toupper(litera); //convertete in majuscula;
}
printf("\n rspunsul a fost %c \n", litera);
}

33
MatrixRom 2013

ISBN: 978-973-755-897-8

Elemente de baz ale programrii n C - Aplicaii de Laborator

4.2.3.

Instrucia for

Instruciunea for, ca i instruciunea while, realizeaz o structur repetitiv condiionat


anterior. Este folosit pentru repetarea operaiilor n care se cunoate numrul de pai i dup o
condiie. Formatul instruciunii este:
for(exp1; exp2; exp3) instruciune
unde exp1, exp2, exp3 sunt expresii.
Instruciunea for se execut conform urmtorilor pai:
1.Se execut secvena de iniializare definit de expresia exp1.
2.Se evalueaz exp2. Dac exp2 are valoarea zero, atunci se iese din ciclu. Altfel
se execut instruciunea din corpul ciclului.
3.Se execut secvena de reiniializare definit de exp3, apoi se reia de la pasul 2.

4.2.4.

Exemple de probleme utiliznd instrucia for

Problema 4.10.
//program ce calculeaz puterea a doua a numerelor de la 0 la 10 inclusiv
#include <stdio.h>
void main(void)
{
for(int k = 0;k<=10; k++) printf("%d\n", k*k);
}
Problema 4.11.
//program de numrare de la 0 la 10
#include<stdio.h>
void afiseaza(int nume[10]);
void main(void)
{
int t[10],i;
for(i=0;i<10;++i)
t[i]=i;
afiseaza(t);
}
void afiseaza(int num[10])
{
int i;
for(i=0;i<=10;i++) printf("%4d",num[i]);
}
Problema 4.12.
//program de calcul a lui n! unde n este introdus de la tastatura
#include <stdio.h>
void main(void)
{
34
MatrixRom 2013

ISBN: 978-973-755-897-8

Elemente de baz ale programrii n C - Aplicaii de Laborator

int p=1,k,n;
printf("introdu n \n");
scanf("%d", &n);
for(k=1; k <= n; ++k)
p = p*k;
printf("%d", p);
}
Problema 4.13.
//program de calcul a unei sume cu numere zecimale
#include <stdio.h>
void main(void)
{
float s=0;
int k,n;
printf("introdu un n");
scanf("%d", &n);
for(k=1; k <= n; k++)
s=s+1/k;
printf("%d", s);
}
Problema4.14.
//program de realizare a unor bucle de numeraie
#include <stdio.h>
void main (void)
{
int contor;
for (contor = 1; contor <= 5; contor++)
printf("%d ", contor);
printf("\nIncepe a doua bucla\n");
for (contor = 1; contor <= 10; contor++)
printf("%d ", contor);
printf("\nIncepe a treia bucla\n");
for (contor = 100; contor <= 5; contor++)
printf("%d ", contor);
}
Problema 4.15.
//program nr.1 de calcul pentru ridicarea la ptrat a primelor 10 numere naturale
#include <stdio.h>
void main(void)
{
for(int k = 1;k++; k< 10)
printf(%d\n, k*k)
}
35
MatrixRom 2013

ISBN: 978-973-755-897-8

Elemente de baz ale programrii n C - Aplicaii de Laborator

Problema 4.16.
//program de calcul a puterii a doua si a treia pentru primelor 20 numere naturale
#include <stdio.h>
void main(void)
{
int i;
for(i=1;i<20;i++)
printf("%8d %8d%8d\n",i,i*i,i*i*i);
}
Problema 4.17.
//program nr.2 de calcul pentru ridicarea la ptrat a primelor 10 numere naturale
#include <stdio.h>
void main(void)
{
for(int k = 1;k<10; k++)
printf("%d\n", k*k);
}
Problema 4.18.
//program de calcul a unei sume cu numere zecimale
#include<stdio.h>
int n,i,s=0;
void main()
{
printf("dai n ");
double x;
x=1/n;
for(i=1;i<=10;i++)
{
s=s+n+x;
printf("afieaz rezultatul %d" , s);
}
}
Problema 4.19.
//program de aranjare a elementelor dintr-o stiva
#include<stdio.h>
#include<conio.h>
int n,i,s;
void main(void)
{
double x;
printf("dai n>0 ");
scanf("%d", &n);
36
MatrixRom 2013

ISBN: 978-973-755-897-8

Elemente de baz ale programrii n C - Aplicaii de Laborator

for(i=1;i<=10;i++)
{
s=0;
x=1/i;
s=i+x;
}
printf("afiseaza rezultatul %f" , s);
}

4.3.

Probleme

4.3.1. Care sunt tipurile de instruciuni de control n C?


4.3.2. Precizai care sunt diferenele dintre instruciunea if i switch.
4.3.3. Scriei un program cu instrucia if care s rezolve ecuaia.

4.3.4.
4.3.5.
4.3.6.
4.3.7.

6 2 9 + 12 < 0
4
= 0
=

2 8 + 4 1 > 0
Scriei un program cu instrucia switch.
Precizai care sunt diferenele dintre instruciunea while i for
Scriei un program cu instrucia while.
Scriei un program cu instrucia for.

37
MatrixRom 2013

ISBN: 978-973-755-897-8

You might also like