Sunteți pe pagina 1din 9

Instruciunea de atribuire.

Operatori aritmetici

INSTRUCIUNEA DE ATRIBUIRE. OPERATORI


ARITMETICI
1. SCOPUL LUCRRII
n aceast lucrare se vor studia urmtoarele:
-Funcii de citire / scriere:
-Instruciunea de atribuire
-Operatori aritmetici
2. BREVIAR TEORETIC

r1

o
at
or

b
La

2.1. Funcii de citire / scriere


Orice program are anumite date de intrare, pe care le
prelucreaz i n final afieaz rezultatul. Datele de intrare, ct i
rezultatele pariale i finale, sunt stocate (memorate) n variabile.
Datele de intrare ale programului pot fi:
- citite de la tastatura (tastatura este principala surs de date de intrare)
- iniializate direct prin instruciunea de atribuire
- iniializate cu numere generate aleator
- citite dintr-un fiier de pe disc
- recepionate dintr-un port de intrare al calculatorului (de exemplu de
pe portul serial sau paralel al PC-ului)
Astfel, funcia scanf() este folosit pentru a citi date de la
tastatur sub controlul unui format de citire. Datele citite sunt
memorate n variabilele specificate prin argumentele funciei.
Modul de utilizare tipic:
scanf(irul de formate, adresele variabilelor n care se citesc datele);
Formatele de citire cele mai folosite sunt:
%d
pentru tipul de date int
%c
pentru tipul de date char
%lf
pentru tipul de date double (Atenie: este lf i nu 1f)

LP

PC

Exemplu:
Pentru a citi un numr ntreg de la tastatur pe care s-l
memorm n variabila numr, se folosete secvena de program:
int numar;
scanf("%d,&numar);

Instruciunea de atribuire. Operatori aritmetici

Exemplu:
Pentru a citi de la tastatur, folosind o singur instruciune
scanf(), 4 valori numerice, i anume: dou numere ntregi, un caracter
i un numr real, se folosete secvena de program:
int i1,i2;
char c; double r;
scanf(%d%d%c%lf,&i1,&i2,&c,&r);

b
La

Datele de citit, se tasteaz separate prin caracterele: spaiu (blank) sau


TAB sau ENTER.
Pentru a citi date de tip caracter se poate folosi i instruciunea
getch(). Aceast funcie returneaz codul ASCII al tastei apsate.
Exemplu:
int c=getch();

o
at
or

r1

Folosind funcia getch(), caracterului tastat nu i se face ecou pe ecran.


Pentru a i se face ecou, se folosete o variant a acestei funcii, i
anume funcia getche().
Att funcia getch(), ct i funcia scanf(), ateapt pn cnd
utilizatorul tasteaz datele.
Pentru a detecta dac s-a apsat sau nu o tast, fr a atepta
apsarea efectiv, se folosete funcia kbhit(). Aceasta funcie nu are
nici un parametru. Ea ntoarce ca rezultat, valoarea 0, dac nu a fost
apsat nici o tast, i o valoare diferit de 0, dac a fost apsat o
tast. Funcia kbhit(), examineaz bufferul tastaturii n care sunt
automat stocate caracterele tastate. Dac nu este nici un caracter
prezent, ntoarce drept rezultat valoarea 0. Funcia kbhit() nu ateapt
apsarea unei taste, programul continund cu urmtoarea instruciune
din program.
Exemplu:
int este=kbhit();
Pentru a afia date pe monitor, n modul text, se folosete
funcia printf(). Ea afieaz texte i eventual, coninutul unor
variabile, sub controlul unor formate de afiare, ncepnd de la poziia
curent a cursorului. n cazul textului, pot aprea anumite caractere
speciale, ce nu sunt afiate ca atare, denumite secvene escape.
Caractere speciale uzual folosite n textul de afiat sunt:
\n - are rolul de a muta cursorul la nceputul liniei urmtoare
\t - are rolul de a avansa cursorul cu un TAB.

LP

PC

Instruciunea de atribuire. Operatori aritmetici

\\ - afieaz caracterul \
\ - afieaz caracterul

o
at
or

b
La

Exemplu:
printf("Numele directorului curent este: C:\\TURBO");
Pentru a afia, pe lng texte, i coninutul unor variabile,
sintaxa, n cazul general, este urmtoarea:
printf("Sirul de texte si formate",lista de variabile);
Cele mai utilizate formate de afiare, sunt urmtoarele:
%d pentru variabile de tipul int
%c
pentru variabile de tipul char
%lf pentru variabile de tipul double. (Atenie: este lf i nu
1f)
%f
pentru variabile de tipul float
Exemplu:
printf("x=%d,y=%d",x,y);

r1

2.2. Instruciunea de atribuire


Valoarea depozitat ntr-o locaie de memorie, poate fi
schimbat printr-o operaie de atribuire. Ca operator de atribuire, n
limbajul C, se folosete semnul egal.
Sintaxa operaiei de atribuire este urmtoarea:
nume_variabil = expresie ;
Exemplu:
x=2.5;

PC

LP

Se citete: x primete valoarea 2.5.


n urma acestei operaii, n variabila x se memoreaz valoarea 2.5 .
Variabila x trebuie declarat de tipul real (float sau double).
Exemplu:
x=x+1;
Se citete: x primete vechea valoare a lui x crescut cu 1.

Aceast operaie de cretere a coninutului unei variabile cu o


unitate, se cheam incrementare. Incrementarea fiind o operaie des
ntlnit n programe, n limbajul C exist un operator special ce o
realizeaz: operatorul ++ . Acesta este un operator unar i el poate fi
plasat fie la stnga, fie la dreapta unui operand. Aciunea lui va fi
diferit ns, depinznd de poziia lui (n stnga sau n dreapta
operandului).

10

Instruciunea de atribuire. Operatori aritmetici

o
at
or

b
La

Exemplu:
int x,y;
x=7;
y=x++;
Operatorul ++, n acest exemplu, este plasat la dreapta unui operand:
nti se va face operaia de atribuire (y=x) i apoi se va face
incrementarea variabilei x (x=x+1). Astfel, n final se va obine y=7 i
x=8.
Exemplu:
int x,y;
x=7;
y=++x;
Operatorul ++, n acest exemplu, este plasat la stnga unui operand:
nti se va face incrementarea variabilei x (x=x+1) i apoi se va face
operaia de atribuire (y=x). Astfel, n final se va obine y=8 i x=8.
Pentru decrementarea unei variabile (scderea valorii
variabilei cu o unitate ), exist n limbajul C un operator special:
operatorul -- . Acest operator se folosete la fel ca operatorul de
incrementare.

r1

2.3 Operatori aritmetici


Sunt 5 operatori aritmetici de baz, i anume:
+
adunare
scdere
*
nmulire
/
mprire
%
restul mpririi ( modulo)
Operatorul de mprire / , n cazul numerelor ntregi,
calculeaz trunchind rezultatul exact.
Astfel 7 / 2 este evaluat ca 3 si nu ca 3.5
Toi aceti operatori sunt operatori binari ( adic cu operanzi i
n stnga i n dreapta).
Operatorul % poate avea drept operanzi doar numere ntregi.
Operatorii aritmetici, au prioritile cunoscute de la aritmetic.
Astfel, n expresia a+b*c nti se calculeaz produsul i apoi suma.
Observaie important:
Deoarece limbajul C are foarte muli operatori, a cror
prioritate nu mai este chiar aa de evident ca la cei aritmetici, se
recomand, att pentru claritatea programului, ct i pentru evitarea

LP

PC

Instruciunea de atribuire. Operatori aritmetici

11

greelilor, folosirea parantezelor. Totdeauna operaiile cuprinse ntre


paranteze se execut primele.
3. DESFURAREA LUCRRII
Se vor edita i apoi executa programele descrise n continuare.

o
at
or

b
La

Programul nr. 1
Sa se afieze urmtorul text, citat din Biblie:
"Cautati mai intai Imparatia lui Dumnezeu !"
Se vor afia inclusiv ghilimelele.
Sursa programului:
#include<stdio.h>
#include<conio.h>
void main(void)
{
clrscr();
printf("\"Cautati mai intai Imparatia lui Dumnezeu !\"");
getch();
}

r1

Programul nr. 2
S se comute coninutul a dou variabile a i b, ntre ele.
Algoritm:
-se salveaz n variabila auxiliar aux, variabila a
-se copiaz n a variabila b
-se copiaz n b variabila aux
Greeli frecvente:
-Nu se folosete o variabila auxiliar, ci se face comutarea direct:
a=b i apoi b=a.
Sursa programului:
#include <stdio.h>
#include <conio.h>
void main()
{
int a, b, aux;
clrscr();
printf("a="); scanf("%d",&a);
printf("b="); scanf("%d",&b);
aux=a;
a=b;

LP

PC

12

Instruciunea de atribuire. Operatori aritmetici

b=aux;
printf("Dupa comutare: a=%d, b=%d",a,b);
getch();
}

r1

o
at
or

b
La

Programul nr. 3
Calculul mediei aritmetice a 3 numere ntregi, citite de la tastatur.
Algoritm:
- se calculeaz suma numerelor, i rezultatul se mparte la 3.
Greeli frecvente:
- se declar variabila medie, de tip ntreg
- se calculeaz medie=(a+b+c)/3 , ceea ce este greit cci rezultatul
se trunchiaz la ntreg.
Sursa programului:
#include <stdio.h>
#include <conio.h>
void main()
{
int a,b,c;
double medie;
clrscr();
printf("a="); scanf("%d",&a);
printf("b="); scanf("%d",&b);
printf("c="); scanf("%d",&c);
medie=(a+b+c)/3.0;
printf("medie=%lf",medie);
getch();
}

LP

PC

Programul nr. 4
Se citesc trei numere ntregi a, b i c de la tastatur, coeficieni ai
polinomului de gradul doi P(x)=ax2+bx+c. S se calculeze i afieze
valoarea polinomului pentru o valoare particular ntreag x, citit de
la tastatur.
Sursa programului:
# include <conio.h>
# include <stdio.h>
void main (void)
{
int a,b,c,x;

Instruciunea de atribuire. Operatori aritmetici

13

int P; //presupunem ca nu se depaseste capacitatea de stocare a


//tipului int
printf("Tastati 3 numere intregi, a, b si c: ");
scanf("%d%d%d",&a,&b,&c);
printf("x="); scanf("%d",&x);
P=a*x*x+b*x+c;
printf ("P=%d",P);
}

r1

o
at
or

b
La

Programul nr. 5
Se citete un numr ntreg de la tastatur. Acest numr are
semnificaia unui interval de secunde. S se afieze intervalul n ore,
minute i secunde.
Exemplu:
Dac numrul citit este 61, trebuie s se afieze:
Nr. Ore = 0; Nr. Minute = 1; Nr. Secunde = 1
Sursa programului:
#include <stdio.h>
void main(void)
{
int N; // intervalul in secunde citit
int nrOre; int nrMin; int nrSec;
printf(Tastati durata in secunde a intervalului: );
scanf(%d,&N);
nrOre = N/3600;
nrMin = (N % 3600)/60;
nrSec = N - nrOre * 3600 - nrMin * 60;
printf(\nNr. Ore=%d,nrOre);
printf(\nNr. Minute=%d,nrMin);
printf(\nNr. Secunde=%d,nrSec);
}

LP

PC

Programul nr. 6
Se citete un numr ntreg, pozitiv, de la tastatur. S se calculeze
cifra unitilor, cifra zecilor i cifra sutelor.
Algoritm:
- cifra unitilor este restul mpririi numrului la 10
- pentru calcul cifrei zecilor, se mparte numrul iniial la 10. n noul
numr obinut, vechea cifr a zecilor a devenit cifra unitilor. Aceasta
se afl ca restul mpririi noului numr la 10.

14

Instruciunea de atribuire. Operatori aritmetici

r1

o
at
or

b
La

- cifra sutelor se obine dupa acelai algoritm ca i cifra zecilor.


Greeli frecvente:
- se mparte direct numrul la 10, pentru a afla cifra zecilor
- se imparte direct numrul la 100, pentru a afla cifra sutelor
Sursa programului:
#include <stdio.h>
#include <conio.h>
void main()
{
int nr;
int u,z,s;//unitati, zeci, sute
clrscr();
printf("nr=");
scanf("%d",&nr);
//cifra unitatilor:
u=nr%10;
//calcul cifra zecilor:
nr=nr/10;
z=nr%10;
//cifra sutelor:
nr=nr/10;
s=nr%10;
//afisare rezultate:
printf("u=%d, z=%d, s=%d",u,z,s);
getch();
}

PC

LP

Programul nr. 7
Se citete un numr natural de la tastatur, care const din cel puin
dou cifre. S se calculeze noul numr obinut prin comutarea cifrei
unitilor cu cifra zecilor. Exemplu:
Pentru numrul iniial 4532, dup comutare se obine 4523.
Sursa programului:
# include <stdio.h>
void main (void)
{
int nr;
printf("Dati un numar natural >= 10: ");
scanf("%d",&nr);
int u;//cifra unitatilor

Instruciunea de atribuire. Operatori aritmetici

15

u=nr%10;
int z;//cifra zecilor
z=(nr/10)%10;
int ramas;//numarul ramas prin eliminarea cifrei zecilor si a cifrei
//unitatilor
ramas=nr/100;
//Dupa comutare, numarul devine:
nr=ramas*100+10*u+z;
printf("Dupa comutare, nr=%d",nr);
}

r1

o
at
or

b
La

Programul nr. 8
Se citesc doua numere naturale a si b, capetele unui interval inchis. Sa
se genereze un numar aleatoriu in intervalul [a, b]. Sa se afiseze acest
numar.
Sursa programului:
#include<stdio.h>
#include<stdlib.h>
void main(void)
{
int a,b,nr;
printf("a=");
scanf("%d",&a);
printf("b=");
scanf("%d",&b);
randomize();
nr=a+random(b-a+1);
printf("Numar=%d",nr);
}

LP

PC

4. PROBLEME PROPUSE
1.Sa se afieze un dreptunghi ale crui linii sunt formate din
stelue (caracterul *)
2. Se citete un numr natural care are cel puin trei cifre. S se
calculeze noul numr obinut prin comutarea cifrei unitilor cu cifra
sutelor.
3. Sa se genereze i afieze trei numere ntregi, aleatoare n
intervalul nchis [10,100].