Documente Academic
Documente Profesional
Documente Cultură
48
CAPITOLUL 4
INSTRUCŢIUNILE LIMBAJULUI C
Instrucţiunea if
Aplicaţia 1:
Să se realizeze programul care calculează valoarea funcţiei y
într-un punct x citit de la tastatură.
9 x 4 + 7 x 3 − 2 x 2 + x − 1; x < 0
y( x) = 2 ;5x = 0
3
2 x + 8 x + 4; x > 0
49 Instrucţiunile limbajului C.
Specificarea problemei:
Date de intrare: x - punctul în care se calculează valoarea funcţiei;
Date de ieşire: y - valoarea funcţiei;
Date de test: Valoarea lui x = 3
y (x) = 71,86
Algoritmul problemei:
Început algoritm
Citeşte x
dacă x<0 atunci y ←9 ⋅ x 4 + 7 ⋅ x 3 − 2 ⋅ x 2 + x −1
altfel dacă x = 0 atunci y ← 25
altfel y ←2 ⋅ x 3 + 8 x + 4
sfârşit dacă
sfârşit dacă
scrie y
sfârşit algoritm.
Programul corespunzător algoritmului este:
#include<stdio.h>
#include<math.h>
void main()
{ float x,y;
printf("Introduceti pe x:");
scanf("%f",&x);
if(x<0) y=9*x*x*x*x+7*x*x*x-2*x*x+x-1;
else if(x= =0) y=25;
else y=2*x*x*x+8*sqrt(x)+4;
printf("y(x)=%6.2f",y);
}
Analiza problemei:
În corpul funcţiei principale se declară variabile cu următoarea semnificaţie:
x – reprezintă punctul în care se calculează valoarea funcţiei;
y – reprezintă valoarea funcţiei;
Folosind funcţia standard scanf se va citi valoarea punctului în care se calculează
funcţia iar cu ajutorul instrucţii condiţionale if, în funcţie de valoarea citită, se va calcula
valoarea funcţiei y. La sfârşit, se afişează rezultatul folosind funcţia standard printf.
S-a inclus fişierul sursă math.h datorită funcţiei matematice sgrt care returnează
rădăcina pătrată variabilei x.
Aplicaţia 2:
Să se realizeze un meniu cu următoarele opţiuni:
Adunare
Scădere
Multiplicare
Împărţire
iar în funcţie de alegerea făcută de utilizator să se realizeze operaţiile specificate pentru doua
numere citite de la tastatură.
Instrucţiunile limbajului C. 50
Specificarea problemei:
Date de intrare: meniul;
a, b - două numere citite de la tastatură;
Date de ieşire: realizarea operaţiilor corespunzătoare: adunare, scădere, multiplicare,
împărţire
Date de test: Doriti:
Adunare
Scadere
Multiplicare
Impartire
Introduceti prima litera: m
Introduceti primul număr: 4.3
Introduceti al doilea număr: 2.8
a*b=12.04
Algoritmul problemei:
Început algoritm
scrie “Doriţi Adunare Scădere Multiplicare”
citeşte prima literă, a, b
dacă (literă = A sau literă = a) atunci scrie a+b
altfel dacă (literă = S sau literă = s) atunci scrie a-b
altfel dacă (literă = M sau literă = m) atunci scrie a*b
altfel dacă (literă = I şi b ≠ 0) sau (literă = i şi b ≠ 0) scrie
a/b
sfârşit dacă
sfârşit dacă
sfârşit dacă
sfârşit dacă
sfârşit algoritm
Programul corespunzător algoritmului este:
#include <conio.h>
#include <stdio.h>
void main ()
{
float a,b;
char ch;
clrscr();
printf ("Doriti :\n");
printf ("Adunare\nScadere\nMultiplicare\nImpartire\n");
printf ("Introduceti prima litera: ");
ch=getche ();
printf ("\nIntroduceti primul numar: ");
scanf ("%f", &a);
printf ("\nintroduceti al doilea numar: ");
scanf ("%f", &b);
if ((ch=='A')||(ch=='a')) printf ( "a+b=%1.2f", a+b);
else if ((ch=='S')||(ch=='s')) printf ("a-b=%1.2f", a-b);
else if ((ch=='M')||(ch=='m')) printf ("a*b=%1.2f", a*b);
else if ((ch=='I'&&b!=0)||(ch=='i'&&b!=0)) printf ("a/b=%1.2f", a/b);
getch();
}
51 Instrucţiunile limbajului C.
Analiza problemei:
În corpul funcţiei principale se declară variabile cu următoarea semnificaţie:
a – reprezintă primul număr;
b – reprezintă al doilea număr;
ch - este variabila în care se va păstra codul tastei apăsate;
Folosind funcţia standard printf se va afişa pe ecran meniul şi se va cere utilizatorului
să introducă prima literă corespunzătoare operaţiei dorite. Citirea celor două numere se face cu
ajutorul funcţiei standard scanf. Funcţia getche se foloseşte pentru a citi tasta apăsată, iar
codul tastei apăsate se va depune în variabila ch. Această funcţie are cele mai comune utilizări
în citirea variabilelor selectate dintr-un meniu Cu ajutorul instrucţiunii condiţionale if, în
funcţie de tasta apăsată, se va realiza operaţia corespunzătoare. În partea de expresie a
instrucţiunii if s-a folosit operatorul SAU (||) pentru a realiza operaţia corespunzătoare
indiferent dacă se apasă tasta a sau A. La realizarea operaţiei de împărţire avem nevoie de
operatorul SI (&&) pentru a determina dacă numitorul este diferit de zero.
Aplicaţia 3:
Să se realizeze programul care calculează media generală a unui student care a avut trei
examene în sesiunea de iarna. Pentru fiecare materie trebuie să se introducă notele obţinute şi
numărul de credite.
Formula după care se calculează media este următoarea:
n1 ⋅ c1 + n 2 ⋅ c 2 + n3 ⋅ c3
media =
c1 + c 2 + c3
În funcţie de medie se va afişa dacă studentul este bursier sau nebursier, condiţia
pentru bursier fiind ca media ≥ 8.
Specificarea problemei:
Date de intrare: n1, n2, n3, c1, c2, c3 - trei note şi trei credite citite de la tastatură;
Date de ieşire: media şi informaţia privind situaţia de bursier sau nebursier a
studentului;
Date de test: Introduceti nota 1 si creditele corespunzatoare notei:
10 2
Introduceti nota 2 si creditele corespunzatoare notei:
7 3
Introduceti nota 3 si creditele corespunzatoare notei:
8 2
Media = 8.14
BURSIER
Algoritmul problemei:
Început algoritm
citeşte n1,n2,n3,c1,c2,c3
n1 ⋅ c1 + n 2 ⋅ c 2 + n3 ⋅ c3
media ←
c1 + c 2 + c3
dacă media ≥ 8 atunci scrie BURSIER
altfel scrie NEBURSIER
sfârşit dacă
sfârşit algoritm.
Instrucţiunile limbajului C. 52
Instrucţiunea for
Este una din cele trei instrucţiuni de ciclare ale limbajului C. Ea permite ca una sau
mai multe instrucţiuni să fie repetate. Forma generală a instrucţiunii for este următoarea:
for (iniţializare; test_ condiţie; reiniţializare) instrucţiune;
iniţializare – dă o valoare iniţiala variabilei care controlează ciclul.
test_condiţie – testează variabila de control, cu valoarea scop ori de cate ori ciclul se repetă.
reiniţializare – este executat la sfârşitul fiecărui ciclu. Scopul este să incrementeze variabila
de control a ciclului cu o anumită cantitate.
Aplicaţia 1:
Să se realizeze programul care afişează în ordine numerele de la 1 până la un număr n
citit de la tastatură, iar apoi afişează mesajul "am terminat".
Specificarea problemei:
Date de intrare: n - numărul până la care se vor afişa numerele;
Date de ieşire: numerele de la 1 la n şi mesajul "am terminat";
53 Instrucţiunile limbajului C.
Aplicaţia 2:
Să se realizeze programul care calculează suma şi produsul numerelor până la n, citit de
la tastatură, folosind instrucţiunea for.
S=1+2+3+...+n
P=1*2*3*....*n
Specificarea problemei:
Date de intrare: n - numărul până la care se face suma şi produsul;
Date de ieşire: S şi P;
Date de test: Introduceti pe n: 5
suma este S=15
produsul este P=120
Instrucţiunile limbajului C. 54
Algoritmul problemei:
Început algoritm
citeşte n
S← 0
P← 1
cât timp i ≤ n execută S ← S+i
P ← P*i
i ← i+1
sfârşit cât timp
scrie S, P
sfârşit algoritm
Programul corespunzător algoritmului este:
#include<conio.h>
#include<stdio.h>
void main()
{
int n,S,i;
long P;
clrscr();
printf("Introduceti pe n: ");
scanf("%d",&n);
S=0;
P=1;
for(i=1;i<=n;i++)
{
S+=i;
P*=i;
}
printf("suma este S=%d\nprodusul este P=%ld",S,P);
getch();
}
Analiza problemei:
În corpul funcţiei principale se declară variabile cu următoarea semnificaţie:
i – reprezintă variabila de control a ciclului;
n – reprezintă numărul până la care se va calcula suma şi produsul;
S - în această variabilă se va calcula suma;
P - în această variabilă se va calcula produsul;
Folosind funcţia standard scanf se va citi numărul n. Se iniţializează S cu zero
deoarece acesta este element neutru la adunare şi P cu unu deoarece acesta este element neutru
la înmulţire. La început variabila de contor a ciclului se va iniţializa cu 1. Apoi este evaluată
expresia i ≤ n. Deoarece ea este true, ciclul for începe execuţia. După ce se calculează S şi P,
variabila i este incrementată cu 1 şi testul de condiţie (i ≤ n) este evaluat din nou. Acest
proces continuă până când i devine mai mare decât n. Când aceasta se întâmplă, ciclul for se
opreşte şi sunt afişate suma S şi produsul P.
Aplicaţia 3:
Exemplul următor calculează suma numerelor pare (s1), şi a celor impare (s2) a unui şir
de numere n citit de la tastatură.
Pentru n=4
2, 3, 4, 7 s1=2+4 , s2=3+7;
55 Instrucţiunile limbajului C.
Specificarea problemei:
Date de intrare: n - numărul de valori din care este compus şirul;
a - valorile efective;
Date de ieşire: s1 şi s2;
Date de test: Introduceti numarul de valori: 4
Introduceti valoarea 1: 1
Introduceti valoarea 2: 2
Introduceti valoarea 3: 3
Introduceti valoarea 4: 4
s1=6 si s2=4
Algoritmul problemei:
Început algoritm
Citeşte n
s1 ← 0
s2 ← 0
i←1
cât timp i ≤ n execută citeşte a
dacă a mod 2 =0 atunci s1 ← s1+a
altfel s2 ← s2+a
sfârşit dacă
i ← i+1
sfârşit cât timp
scrie s1, s2
sfârşit algoritm
Programul corespunzător algoritmului este:
#include<conio.h>
#include<stdio.h>
void main()
{
clrscr();
int n,i,s1,s2,a;
printf("Introduceti numarul de valori: ");
scanf("%d",&n);
s1=0;
s2=0;
for(i=1;i<=n;i++)
{
printf("Introduceti valoarea %d: ",i);
scanf("%d",&a);
if(a%2==0) s1+=a;
else s2+=a;
}
printf("s1=%d si s2=%d",s1,s2);
getch();
}
Analiza problemei:
În corpul funcţiei principale se declară variabile cu următoarea semnificaţie:
i – reprezintă variabila de control a ciclului;
n – reprezintă numărul de valori din care este compus şirul;
a - valorile efective;
Instrucţiunile limbajului C. 56
Instrucţiunea while
Aplicaţia 1:
Să se realizeze programul care determină dacă un număr n este sau nu un număr prim.
Un număr este prim daca nu se împarte decât la 1 si la el însuşi.
Specificarea problemei:
Date de intrare: n - numărul pe care îl verificăm dacă este sau nu prim;
Date de ieşire: dacă numărul este sau nu prim;
Date de test: Introduceti numarul: 9
Numarul nu este prim
Algoritmul problemei:
Început algoritm
citeşte n
prim ← 0
i← 2
cât timp i ≤ n/2 şi prim=0 execută dacă n mod i =0 atunci prim ← 1
sfârşit dacă
i ← i+1
sfârşit cât timp
dacă prim ← 0 atunci scrie „Numărul este prim”
altfel scrie „Numărul nu este prim”
sfârşit dacă
sfârşit algoritm
Programul corespunzător algoritmului este:
#include<conio.h>
#include<stdio.h>
void main()
{
int n,i,prim;
clrscr();
57 Instrucţiunile limbajului C.
printf("Introduceti numarul: ");
scanf("%d",&n);
prim=0;
i=2;
while(i<=n/2&&prim==0)
{
if(n%i==0) prim=1;
i=i+1;
}
if(prim==0) printf("Numarul este prim");
else printf("Numarul nu este prim");
getch();
}
Analiza problemei:
În corpul funcţiei principale se declară variabile cu următoarea semnificaţie:
i – reprezintă variabila de control a ciclului;
n – reprezintă numărul ce se citeşte, respectiv numărul care vrem să vedem dacă
este un număr prim sau nu este un număr prim;
prim - este o variabilă de test;
Folosind funcţia standard scanf se va citi numărul n. La început variabila prim este
iniţializată cu zero. În momentul în care am găsit un divizor al numărului citit de la tastatură,
variabila prim va lua valoarea 1. Dacă am găsit un divizor nu mai are sens să mai continuăm şi
de aceea în testul de condiţie al instrucţiunii while se mai pune o condiţie prim=0. Se
realizează testarea condiţiei până când i devine mai mare sau egal cu n/2 sau prim=1. Când
aceasta se întâmplă, ciclul while se opreşte şi la sfârşit se testează variabila prim. Dacă este
zero numărul este prim iar dacă nu este numărul nu este prim deoarece am găsit cel puţin un
divizor al său.
Aplicaţia 2:
Să se realizeze programul care calculează suma şi numărul cifrelor unui număr n ce se
citeşte de a tastatură.
n=234 , S=9, nr=3
Specificarea problemei:
Date de intrare: n - numărul pentru care calculăm suma şi numărul cifrelor;
Date de ieşire: suma cifrelor S, numărul cifrelor Nr;
Date de test: Introduceti numarul: 23456
Suma cifrelor: S=20
Numarul cifrelor: Nr=5
Algoritmul problemei:
Început algoritm
citeşte n
S← 0
Nr ← 0
cât timp n ≠ 0 execută r ← n mod 10
S ← S+r
n ← [n / 10 ]
Nr ← Nr+1
sfârşit cât timp
scrie S, Nr
sfârşit algoritm
Instrucţiunile limbajului C. 58
Programul corespunzător algoritmului este:
#include<conio.h>
#include<stdio.h>
void main()
{
int Nr,S,n,r;
clrscr();
printf("Introduceti numarul: ");
scanf("%d",&n);
S=0;
Nr=0;
while(n!=0)
{
r=n%10;
S=S+r;
n=n/10;
Nr=Nr++;
}
printf("Suma cifrelor: S=%d\nNumarul cifrelor: Nr=%d",S,Nr);
getch();
}
Analiza problemei:
În corpul funcţiei principale se declară variabile cu următoarea semnificaţie:
n – reprezintă numărul pentru care calculăm suma şi numărul cifrelor;
r - este o variabilă în care vom reţine ultima cifră din număr;
S - în această variabilă se va calcula suma cifrelor numărului n;
Nr - în această variabilă se va calcula numărul cifrelor numărului n;
Folosind funcţia standard scanf se va citi numărul n. Iniţializăm suma S cu zero iar Nr
tot cu zero, acesta fiind elementul neutru la adunare. Până când numărul citit n este diferit de
zero se realizează o serie de operaţii asupra acestuia. Pentru a obţine ultima cifră a numărului
se va reţine în variabila r restul împărţirii lui n la 10. Pentru exemplul nostru la prima iteraţie
în variabila r vom avea cifra 6. Apoi acest rest, respectiv ultima cifră a numărului, se adună în
suma S (S=0+6). Mai trebuie să scăpăm de ultima cifră a numărului pentru a putea relua
algoritmul. Acest lucru se realizează prin împărţire întreagă a lui n la 10 (n=2345). Totodată se
realizează şi o contorizare a numărului de cifre în variabila Nr care se incrementează la fiecare
iteraţie (Nr=1). Se realizează testarea condiţiei până când n va fi egal cu zero. Când aceasta se
întâmplă, ciclul while se opreşte şi se afişează rezultatul obţinut: suma S şi numărul de cifre
Nr.
Aplicaţia 3:
Să se calculeze suma numerelor impare şi produsul numerelor pare până la un n citit de
la tastatură. Se cere ca suma şi produsul să se calculeze folosind două structuri while, una
pentru calcului sumei şi una pentru calculul produsului.
S=1+3+5+.......+2n-1
P=2*4*6*......*2n
Specificarea problemei:
Date de intrare: n - numărul până la care dorim să calculăm suma şi produsul;
Date de ieşire: Suma S, Produsul P;
Date de test: Introduceti pe n: 4
Suma: S=16
59 Instrucţiunile limbajului C.
Produsul: P=384
Algoritmul problemei:
Început algoritm
citeşte n
S← 0
i←1
cât timp i ≤ 2n-1 execută S ← S+i
i ← i+2
sfârşit cât timp
scrie S
P← 1
i←2
cât timp i ≤ 2n execută P ← P*i
i ← i+2
sfârşit cât timp
scrie P
sfârşit algoritm
Programul corespunzător algoritmului este:
#include<conio.h>
#include<stdio.h>
void main()
{
int i,n,S;
long P
clrscr();
printf("Introduceti pe n: ");
scanf("%d",&n);
S=0;
i=1;
while(i<=2*n-1)
{
S+=i;
i+=2;
}
printf("Suma S=%d",S);
P=1;
i=2;
while(i<=2*n)
{
P*=i;
i+=2;
}
printf("\nProdusul P=%ld",P);
getch();
}
Analiza problemei:
În corpul funcţiei principale se declară variabile cu următoarea semnificaţie:
i – reprezintă variabila de control a ciclului;
Instrucţiunea do-while
Aplicaţia 1:
Să se realizeze programul care va afişa pe ecran următorul meniu:
Adunare
Scădere
Multiplicare
şi va realiza operaţiile corespunzătoare. Dacă utilizatorul va tasta A se va face adunare, dacă
va apăsa S se va realiza scădere, dacă se va apăsa M se va face multiplicare. Utilizând
instrucţiunea do-while se va forţa utilizatorul să introducă un răspuns valid, repetând ciclul
până când se va obţine un astfel de răspuns.
Specificarea problemei:
Date de intrare: meniu;
a, b - două numere citite de la tastatură;
Date de ieşire: realizarea operaţiilor corespunzătoare: adunare, scădere,
multiplicare, împărţire;
Date de test: Doriti:
Adunare
Scadere
Multiplicare
Introduceti prima litera: A
Introduceti primul numar: 3.4
Aplicaţia 2:
Să se determine dacă un număr este sau nu este palindrom. Un număr este palindrom
dacă coincide cu numărul format din cifrele sale în ordine inversă.
Numărul 23432 este palindrom pentru că inversul său 23432 coincide cu numărul iniţial.
Numărul 234 nu este palindrom pentru că inversul său 432 nu coincide cu numărul iniţial.
Specificarea problemei:
Date de intrare: n - numărul care dorim să verificăm dacă este palindrom;
Date de ieşire: este palindrom sau nu este palindrom;
Date de test: Introduceti numărul: 23432
Numărul este palindrom
Algoritmul problemei:
Început algoritm
citeşte n
m← n
inv ← 0
repetă r ← n mod 10
inv ← inv*10+r
n ← [n / 10 ]
până când n=0
dacă inv = m atunci scrie „Numărul este palindrom”
altfel scrie „Numărul nu este palindrom”
sfârşit dacă
sfârşit algoritm
Programul corespunzător algoritmului este:
#include<conio.h>
#include<stdio.h>
void main()
{
int n,m,inv,r;
clrscr();
printf("Introduceti numarul: ");
scanf("%d",&n);
m=n;
inv=0;
do{
r=n%10;
inv=inv*10+r;
n=n/10;
}while(n!=0);
if(inv==m)printf("Numarul este palindrom");
else printf("Numarul nu este palindrom");
getch();
}
Analiza problemei:
În corpul funcţiei principale se declară variabile cu următoarea semnificaţie:
n – reprezintă numărul pe care îl verificăm dacă este sau nu palindrom;
Aplicaţia 3:
La o staţie meteorologică se înregistrează zilnic temperaturi până când se înregistrează
temperatura de zero grade. Să se scrie programul care determină care a fost cea mai mare
temperatură şi numărul de temperaturi înregistrate.
Specificarea problemei:
Date de intrare: t - temperaturile citite;
Date de ieşire: cea mai mare temperatură şi numărul de temperaturi înregistrate;
Date de test: Dati prima temperatura: 5
Dati o nouă temperatura: 5.8
Dati o nouă temperatura: 6
Dati o nouă temperatura: 9.5
Dati o nouă temperatura: 0
Cea mai mare temperatura este : 9.50
Numarul de temperaturi inregistrate este: 4
Algoritmul problemei:
Început algoritm
scrie „Daţi prima temperatură t”
citeşte t
dacă t=0 atunci scrie „Nu s-a înregistrat nici o temperatură”
altfel nr ← 0, max ← t
repetă scrie “Daţi o nouă temperatură”
citeşte t
nr ← nr+1
dacă t>max atunci max ← t
sfârşit dacă
Instrucţiunea switch
65 Instrucţiunile limbajului C.
Atunci când este necesară alegerea dintre mai multe alternative se foloseşte
instrucţiunea switch. Ea lucrează astfel: o variabilă este testată succesiv cu o listă de întregi
sau constante de tip char. Când apare egalitatea, sunt executate instrucţiunile asociate acelei
valori din listă. Forma generală a instrucţiunii switch este următoarea:
switch (variabilă)
{ case constant1: instrucţiuni
break;
case constant2: instrucţiuni
break;
…….
default: instrucţiuni
}
Două constante case nu pot avea valori identice în acelaşi switch.
Dacă a fost parcursă toată lista şi variabilă nu a fost egală cu nici una dintre consant1,
constant2….,atunci se execută instrucţiunea asociată cu default. Cazul default este opţional.
Dacă variabilă nu egalează nici un caz, iar default este absent nu se va produce nici o acţiune.
Switch lucrează numai cu tipul int şi tipul char.
Aplicaţia 1:
Să se realizeze programul care cere utilizatorului să introducă un număr întreg între unu
şi patru iar apoi, utilizând instrucţiunea switch, să afişeze numărul în cifre. În cazul în care
utilizatorul a introdus altă cifră decât cea specificată, să se afişeze mesajul "număr
necunoscut".
Specificarea problemei:
Date de intrare: numărul în cifre;
Date de ieşire: numărul în litere;
Date de test: Introduceti un numar intreg intre 1 şi 4: 1
Unu
Programul corespunzător este:
#include <stdio.h>
#include<conio.h>
void main ()
{
int i;
clrscr();
printf ("Introduceti un numar intreg intre 1 si 4: ");
printf ("Trei");
break;
case 4:
Instrucţiunile limbajului C. 66
printf ("Patru");
break;
default:
printf ("Numar necunoscut");
}
getch();
}
Analiza problemei:
În corpul funcţiei principale se declară variabile cu următoarea semnificaţie:
i – reprezintă numărul pe care îl citim;
Folosind funcţia standard printf se va cere utilizatorului să introducă un număr întreg
între unu şi patru. Se citeşte acest număr cu ajutorul funcţiei standard scanf, iar apoi folosind
instrucţiunea switch se compară numărul citit cu constantele case. Dacă se găseşte o egalitate
atunci se execută instrucţiunea asociată iar dacă nu se execută instrucţiunea de pe ramura
default.
Aplicaţia 2:
Să se realizeze programul care determină dacă o literă citită de la tastatură este consoană
sau vocală. Se va utiliza instrucţiunea switch.
Specificarea problemei:
Date de intrare: ch - o literă citită;
Date de ieşire: este vocală sau consoană;
Date de test: Introduceti o litera: a
Este o vocala
Programul corespunzător este:
#include<conio.h>
#include<stdio.h>
void main()
{
char ch;
clrscr();
printf("Introduceti o litera: ");
scanf("%c",&ch);
switch(ch)
{
case 'a':
case 'e':
case 'i':
case 'o':
case 'u':
printf("Este o vocala");
break;
default:
printf("Este o consoana");
}
getch();
}
Analiza problemei:
În corpul funcţiei principale se declară variabila cu următoarea semnificaţie:
ch – reprezintă codul ASCII al tastei apăsate;
67 Instrucţiunile limbajului C.
Folosind funcţia standard printf se va cere utilizatorului să introducă o literă. Această
literă se citeşte cu ajutorul funcţiei standard scanf, iar apoi folosind instrucţiunea switch se
compară litera citită cu constantele case. Datorită faptului că instrucţiunile asociate unui case
pot să lipsească, toate cele 5 case vor executa aceeaşi instrucţiune fără a fi nevoie de
duplicarea ei. Literele a, e, i, o, u sunt toate vocale iar la apăsarea uneia dintre aceste taste se
va afişa mesajul „Este o vocală”. În cazul în care se apasă altă tastă se execută instrucţiunea de
pe ramura default scriind la consolă mesajul „Este o consoană„
Aplicaţia 3:
Să se realizeze programul care afişează meniul următor:
1.Yarzi in metri
2.Metri in yarzi
3.Pounds in kilograme
4.Kilograme in pounds
5.Quit.
şi în funcţie de alegerea utilizatorului să se efectueze transformarea respectivă pentru un
număr citit.
Se specifică următoarele: 1yard=0,9144m, 1 pound=0,453 Kg
Specificarea problemei:
Date de intrare: meniu;
i - numărul ce trebuie transformat;
Date de ieşire: rezultatul transformării;
Date de test: Yarzi in metri
Metri in yarzi
Pounds in kilograme
Kilograme in pounds
Quit
2
Introduceti valoarea in metrii: 3.5
Valoarea in yarzi este: 3.828
Programul corespunzător este:
#include<conio.h>
#include<stdio.h>
void main()
{
int i;
float y,m,k,p;
clrscr();
printf("1.Yarzi in metri\n2.Metri in yarzi\n3.Pounds in kilograme\n");
printf("4.Kilograme in pounds\n5.Quit\n");
scanf("%d",&i);
switch(i)
{
case 1:
printf("Introduceti valoarea in yarzi: ");
scanf("%f",&y);
printf("Valoarea in metri este: %1.2f",y*0.9144);
break;
case 2:
printf("Introduceti valoarea in metri: ");
Instrucţiunile limbajului C. 68
scanf("%f",&m);
printf("Valoarea in yarzi este: %1.3f",m/0.9144);
break;
case 3:
printf("Introduceti valoarea in pounds: ");
scanf("%f",p);
printf("Valoarea in pounds este: %1.3f",p*0.453);
break;
case 4:
printf("Introduceti valoareain kilograme: ");
scanf("%f",&k);
printf("Valoarea in pounds este: %1.3f",k/0.453);
case 5:goto end;
}
end:getch();
}
Analiza problemei:
În corpul funcţiei principale se declară variabilele cu următoarea semnificaţie:
y – reprezintă variabila în care citim valoarea în yarzi;
m - reprezintă variabil în care citim valoarea în metri;
k - reprezintă variabila în care citim valoarea în kilograme;
p - reprezintă variabila în care citim valoarea în pounds;
i - reprezintă variabila în care citim indicele corespunzător meniului;
Folosind funcţia standard printf se va afişa meniul. Indicele corespunzător meniului
se citeşte cu ajutorul funcţiei standard scanf, iar apoi folosind instrucţiunea switch se compară
acesta cu constantele case. În cazul în care s-a apăsat tasta 1 se va realiza o transformare din
yarzi în metrii şi se citeşte valoarea în yarzi, iar apoi se afişează valoarea în metrii. În cazul în
care s-a apăsat tasta 2 se va realiza o transformare din metrii în yarzi şi se citeşte valoarea în
metrii, iar apoi se afişează valoarea în yarzi. În cazul în care se-a apăsat tasta 3 se va realiza o
transformare din pounds în kilograme şi se citeşte valoarea în pounds, iar apoi se afişează
valoarea în kilograme. La apăsarea tastei 3 se face o transformare din pounds în kilograme
citindu-se valoarea în pounds şi afişând valoarea în kilograme. Tasta de ieşire este tasta 5,
când cu ajutorul instrucţiunii goto se face un salt la sfârşitul programului.
Instrucţiunea break permite ieşirea dintr-un ciclu, din oricare punct din interiorul său.
Când instrucţiunea break este întâlnită în interiorul unui ciclu, aceasta se termină imediat, iar
controlul va trece la instrucţiunea ce urmează după ciclu. Instrucţiunea break poate fi folosită
69 Instrucţiunile limbajului C.
cu oricare din cele trei cicluri ale limbajului, această instrucţiune producând ieşirea din ciclul
cel mai interior. În general se recomandă ca instrucţiunea break să fie utilizată pentru scopuri
speciale şi nu ca ieşire normală din ciclu.
Forma generală a instrucţiunii break este următoarea:
break;
Această instrucţiune are cea mai comună utilizare în cadrul instrucţiunii switch.
Aplicaţie:
Să se realizeze programul care afişează următorul meniu:
1....FOR
2.....WHILE
3.....DO-WHILE
iar în funcţie de tasta apăsată de utilizator va realiza următoarele operaţii:
-în cazul în care este apăsată tasta 1 cu ajutorul instrucţiunii for se va realiza citirea unui
număr şi afişarea descrescătoare până la zero.
-în cazul în care este apăsată tasta doi, cu ajutorul instrucţiunii while se va realiza citirea unui
număr şi realizarea sumei S = 1 + 1 * 2 + 1 * 2 * 3 + ... + 1 * 2 * 3 * ... * n
-în cazul în care este apăsată tasta trei, cu ajutorul instrucţiunii do-while se va realiza citirea
1 1 1
unui număr şi realizarea sumei H = 1 + + + .. +
2 3 n
La sfârşitul fiecărei opţiuni utilizatorul va fi întrebat dacă doreşte să continue, iar în
cazul unui răspuns afirmativ, cu ajutorul instrucţiunii goto se va face saltul la începutul
opţiunii.
Specificarea problemei:
Date de intrare: meniu;
n - numărul până la care calculăm cele două sume şi până la
care afişăm în ordine descrescătoare numerele;
Date de ieşire: S, H şi numerele afişate în ordine descrescătoare;
Date de test: 1……FOR
2…….WHILE
3……..DO-WHILE
1
Introduceti pe n: 7
76543210
Doriti sa continuati?y/n
y
1……FOR
2…….WHILE
3……..DO-WHILE
2
Introduceti pe n: 3
S=9
Doriti sa continuati?y/n
y
1……FOR
2…….WHILE
3……..DO-WHILE
3
Introduceti pe n: 4
H=2.083333
Instrucţiunile limbajului C. 70
Doriti sa continuati?y/n n
Programul corespunzător este următorul:
#include<conio.h>
#include<stdio.h>
void main()
{
int i,n,S,P;
float H;
char ch;
clrscr();
unu: printf("\n1.....FOR");
printf("\n2.....WHILE");
printf("\n3.....DO-WHILE\n");
scanf("%d",&i);
switch(i)
{
case 1:
printf("\nIntroduceti pe n: ");
scanf("%d",&n);
for(i=n;i>=0;i--)
printf("%d ",i);
printf("\nDoriti sa continuati? y/n\n");
ch=getche();
if (ch=='n') break;
else goto unu;
break;
case 2:
printf("Introduceti pe n: ");
scanf("%d",&n);
i=1;
S=0;
P=1;
while(i<=n)
{
P*=i;
S+=P;
i++;
}
printf("S=%d\n",S);
printf("Doriti sa continuati? y/n\n");
ch=getche();
if (ch=='n') break;
else goto unu;
break;
case 3:
printf("Introduceti pe n: ");
scanf("%d",&n);
float i=1;
H=0;
do{
71 Instrucţiunile limbajului C.
H+=1/i;
i++;
}while(i<=n);
printf("H=%f\n",H);
printf("Doriti sa continuati? y/n\n");
ch=getche();
if(ch=='n') break;
else goto unu;
break;
}
getch();
}
Analiza problemei:
În corpul funcţiei principale se declară variabilele cu următoarea semnificaţie:
n – reprezintă numărul până la care se realizează operaţiile corespunzătoare;
i – reprezintă variabila de control a ciclului for;
ch - reprezintă variabila în care se va citi codul ASCII al tastei apăsate;
S - în această variabilă se va calcula suma:
S = 1 +1* 2 +1* 2 * 3 + ... +1* 2 * 3 * ... * n
P - în această variabilă se va calcula produsul 1*2, 1*2*3, ….1*2…*n;
H - în această variabilă se va calcula suma:
1 1 1
H =1 + + + .. +
2 3 n
Folosind funcţia standard printf se va afişa meniul iar cu ajutorul funcţiei standard
scanf se va citi tasta apăsată. Apoi, cu ajutorul instrucţiunii switch , în funcţie de tasta apăsată
de utilizator, se vor face operaţiile corespunzătoare folosind instrucţiunile specificate: for,
while, do-while. După afişarea rezultatului obţinut se va întreba utilizatorul dacă doreşte să
continue. În cazul în care răspunsul este diferit de n (nu) se va afişa din nou meniul cu cele trei
opţiuni, aşteptând introducerea unei valori 1, 2 sau 3 şi efectuând operaţiile corespunzătoare
selecţiei făcute, procesul repetându-se până când la întrebarea “Doriţi să continuaţi? y/n” se va
da răspunsul n. Atunci cu ajutorul instrucţiunii break se va ieşi.
Instrucţiunea continue
Aplicaţie:
Sa dau cele n note ale unui student. Se cere să se realizeze programul care calculează
numărul de note peste 8 ale studentului utilizând instrucţiunea continue.
Specificarea problemei:
Date de intrare: n - numărul de note;
Instrucţiunile limbajului C. 72
Nota - valoarea efectivă a notelor;
Date de ieşire: nr - numărul notelor peste 8;
Date de test: Introduceti numarul de note: 4
Introduceti nota 1: 7
Introduceti nota 2: 8.5
Introduceti nota 3: 9
Introduceti nota 4: 10
Numarul de note peste 8 sunt: 3