Sunteți pe pagina 1din 21

Programare in limbajul C Cursul 2

Tipuri de date elementare i operatori


Prof. univ. dr. Constantin Popescu

Agenda

Numele variabilelor in C
Tipuri de baza in C
Declararea variabilelor
Constante
Declararea constantelor
Operatori aritmetici
Operatorul de atribuire
Apeluri de funcii

Numele variabilelor in C (1)


Nume de variabile:
Numele poate contine litere, cifre si liniuta de
subliniere
Primul caracter trebuie sa fie o litera sau liniuta de
subliniere.
Atentie la liniuta de subliniere

Cuvintele cheie C nu pot fi utilizate ca nume de


variabile:
present, hello, y2x3, r2d3, ...

/* OK */

Hello#there

/* ilegal */

double

/* ilegal */

2fartogo

/* ilegal */

Numele variabilelor in C (2)


Sugestii pentru numele variabilelor:
DA: utilizati nume de variabile ce sunt descriptive
DA: adoptati si mentineti un standard de numire
Este folositor mai ales pentru aplicatii mari

EVITATI: numele de variabile care incep cu liniuta de


subliniere (underscore)
Acestea sunt utilizate adesea de sistemul de operare

EVITATI: utilizarea literelor mari pentru nume de


variabile
In general acestea sunt folosite pentru pre-procesor

Tipuri de baza C (1)

n C exist doar 4 tipuri de baz:


char un caracter (un octet sau byte)
int un ntreg cuprins n intervalul [32768, 32767], (de ex.
32 sau 64 biti)
float un numr real, simpla precizie
double un numr real, cu dubla precizie i domeniu mai
mare dect float.

Tipuri de baza C (2)

Exista si alte tipuri ce deriva din tipurile de baza:


lungimea datelor
short int:

long int:

long double

- intreg "scurt", <= numarul de biti dintr-un int


- se poate scrie doar "short"
- intreg "lung", >= numarul de biti dintr-un int
- un ntreg cuprins n intervalul [214743648,
2147483647]
- adesea are acelasi numar de biti dintr-un int
- se poate scrie doar "long"
- precizie extinsa pentru float

cu semn si fara semn


unsigned int
- tipul int fara semn
- daca int are 32-biti, se afla in 0..232-1
- se poate folosi cu long si short
unsigned char
- un numar intre 0 si 255
signed char
- un numar intre 128 si 127 (valoare de 8-biti)
- similar cu byte in Java

Tipuri de baza C (3)

Toate tipurile au o marime fixa asociata cu ele:


Aceasta marime poate fi determinata in timpul compilarii

Exemple
DATE

Octeti necesari

Litera x (char)

Numarul 100 (int)

Numarul 120.145 (double)

Aceste numere sunt variabile intre compilatoarele C si


arhitectura computerului.
Atentie la portabilitate

Tipuri de baza C (4)


Pentru computere pe 32 biti
Tip

Cuvint cheie Octeti

Interval

character
integer
short integer
long integer
long long integer

char
int
short
long
long long

1
4
2
4
8

unsigned character
unsigned integer
unsigned short integer
unsigned long integer
single-precision
double-precision

unsigned char
unsigned int
unsigned short
unsigned long
float
double

1
2
2
4
4
8

-128...127
-2 147 483 648...2 147 438 647
-32768...32367
-2 147 483 648...2 147 438 647
-9223372036854775808
9223372036854775807
0...255
0...4 294 967 295
0...65535
0...4 294 967 295
1.2E-38...3.4E38
2.2E-308...1.8E308

Declararea variabilelor (1)

Forma generala:
numetip

numevar1, numevar2, ...;

Exemple:
int count;
float a;
double percent, total;
unsigned char x,y,z;
long int aLongInt;
long AnotherLongInt;
unsigned long a_1, a_2, a_3;
unsigned long int b_1, b_2, b_3;
typedef long int32;
int32 n;

Declaratiile variabilelor afecteaza scopul si vizibilitatea


Variabilele declarate in afara oricarei functii sunt variabile globale
De ex. Chiar inainte de rutina main

Initializarea variabilelor (2)


Initializarea variabilelor:

INTOTDEAUNA se initializeaza o variabila inainte de utilizare


Altfel apar erori
Valoarea unei variabile neinitializata este nedefinita in standardul C

Exemple:
int count;
count = 0;

/* Aloca spatiu pentru variabila count */


/* Initializeaza count cu 0 */

Initializarea se poate face la definitie:


int count = 0;
double percent = 10.0, rate = 0.56;

Atentie: la iesirea din interval (out of range errors)


unsigned int value = -2500;
Compilatorul C nu detecteaza aceasta ca o eroare
Limbajul C face distincie ntre literele mari i mici: identificatorii variabila,
Variabila, VARIABILA sau variAbila vor fi diferii.

Constante (1)

Cele mai simple sunt constantele ntregi n baza 10, de ex. 0, 1, 2, 123.
Cteodat e necesar specificarea constantelor n baza 8 sau baza 16
(octal sau hexazecimal)
Pentru ca o constant s fie interpretat ca un numr n baza 8 acesta se
precede cu 0, iar pentru a fi interpretat n baza 16 se precede cu 0x sau
0X: constantele 100, 0144 i 0x64 toate reprezint acelai numr. (Dac
scriei 0123 aceast constant va fi interpretat ca i o constant n baza 8
a crei valoare n baza 10 este 1x82 + 2x81 + 3x80 = 83).
O constant poate fi forat a fi de tip long int dac folosim sufixul L (litera
mare sau mic, dei e recomandat a se folosi litera L mare pentru c litera l
mic se confund cu cifra 1).
O constant ce conine un punct sau litera e (sau ambele) este o constant
real: 3.14, 10., .01, 123e4, 123.456e7.
O constant caracter este doar un caracter cuprins ntre apostrofuri: A, .,
%. Valoarea numeric a unei constante caracter este valoarea caracterului
n setul de caractere al mainii. (n ASCII caracterul A are codul 65).
Un ir de caractere este reprezentat n C printr-o succesiune de caractere.
Un ir de caractere constant este o succesiune de zero sau mai multe
caractere delimitate de ghilimele: hello, world, John. n cadrul
constantelor caracter i ir de caractere, caracterul \ (backslash) are un
sens special; el este folosit pentru a reprezenta caractere ce nu se pot
introduce de la tastatur sau care din anumite motive nu se pot reprezenta
altfel n cadrul constantelor.

Constante (2)

Cele mai folosite astfel de secvene escape sunt:


Secventa
\a
\b
\n
\t
\\
\'
\"
\xhh
\ooo

Ce reprezinta
Bell (alertare)
Backspace
Newline (linie noua)
Tab orizontal
Backslash
Apostrof
Ghilimele
Caracterul ASCII specificat de hh
Caracterul ASCII specificat de ooo

Constante (3)

De exemplu, el a spus \Salut\ este un ir constant ce conine


ghilimele iar \ este o constant caracter ce conine caracterul apostrof.
De reinut: constanta A este diferit de irul de caractere A.
Exemplu: Funcia care urmeaz returneaz lungimea unui ir de
caractere:

#include <stdio.h>
int strlen(char s[]);
int main()
{
char s[100];
printf("Introduceti sirul: \n");
gets(s);
printf("Lungimea sirului este:
%d\n", strlen(s));
return 0;
}

int strlen(char s[])


{
int i;
i=0;
while(s[i]!=\0)
++i;
return i;
}

Declararea constantelor (1)


Constante
Se pot declara variabile ca fiind constante:
Utilizind const:
Nota: simple calcule
const double pi=3.1415926;
sunt permise se evalueaza
in momentul compilarii
const int maxlength=2356;
const int val=(3*7+6)*5;
Constantele sunt utile deoarece:
Arata programatorului ca o valoare nu se schimba
Codul poate fi citit mai usor
Spune compilatorului ca o valoare nu se schimba
Compilatorul poate astfel compila codul mai rapid

Este bine sa se aleaga nume de constante cit mai


elocvente

Declararea constantelor (2)


Constante Preprocesor

Forma Generica:
#define CONSTNAME identificator
In general constantele pre-processor se scriu cu litere
mari (prin conventie).

Exemplu:
#define PI 3.14159

Ce se intimpla?:
Preprocesorul C ruleaza inaintea compilatorului.
Cind intilneste simbolul PI, il substituie cu valoarea 3.14159.
Compilatorul ruleaza apoi cu acest cod C pre-procesat.

Declararea constantelor (3)

Exemplu:
#include <stdio.h>
#define GRAMS_PER_POUND 454
const int FARFARAWAY = 3000;
int main ()
{
int weight_in_grams, weight_in_pounds;
int year_of_birth, age_in_3000;
printf ("Enter your weight in pounds: ");
scanf ("%d", &weight_in_pounds);
printf ("Enter your year of birth: ");
scanf ("%d", &year_of_birth);
weight_in_grams = weight_in_pounds * GRAMS_PER_POUND;
age_in_3000 = FARFARAWAY - year_of_birth;
printf ("Your weight in grams = %d\n", weight_in_grams);
printf ("In 3000 you will be %d years old\n", age_in_3000);
return 0;
}

Operatori aritmetici

Operatorii aritmetici din limbajul C sunt :


+
adunare

scdere
*
nmulire
/
mprire
%
rest
Operatorul poate fi utilizat n dou moduri: pentru a face diferena
dintre dou numere (a - b), sau ca operator unar (-a sau a + - b).
Cnd operatorul de mprire este aplicat numerelor ntregi, nu se va
ine cont de restul mpririi aa c 1/2 va fi 0 iar 7/4 va fi 1. Dar,
cnd unul din operanzi este de tip real (float sau double), operatorul
de mprire va genera un rezultat care este numr real cu o parte
fracionar diferit de zero de cele mai multe ori. Aadar 1 / 2.0 va
avea valoarea 0.5 i 7.0 / 4.0 va avea valoarea 1.75.
Operatorul rest % va genera restul mpririi a doi ntregi: 1 % 2 are
valoarea 1, 7 % 4 are valoarea 3. (Operatorul poate fi aplicat doar
asupra ntregilor).
nmulirea, mprirea i restul sunt operatori cu preceden mai
mare dect adunarea i scderea.

Operatorul de atribuire

Operatorul de asignare atribuie o valoare unei variabile. De exemplu,


x=1
stabilete valoarea lui x la 1, i
a=b
atribuie variabilei a valoarea lui b.
Expresia:
i=i+1
Este o expresie standard n programare pentru incrementarea valorii
unei variabilei cu 1.
Expresia ia valoarea veche a lui i, i adaug 1 i salveaz noua
valoare n variabila i. Semnul egal a fost numit operator de asignare
iar expresiile n care apare se numesc expresii de asignare. Semnul
egal este un operator n limbajul C la fel cum sunt + i -.
Limbajul C nu are o instruciune de asignare; o asignare de genul a =
b este o expresie i poate fi folosit oriunde poate s apar o
expresie. Fiind o expresie, asignarea a = b are o valoare i anume
aceeai valoare care se asigneaz variabilei a. Aceast valoare poate
fi folosit n alte expresii; de exemplu, putem scrie:
c = a = b, care este o expresie echivalent cu c = (a = b)
Valoarea lui b este atribuit att lui a ct i lui c.

Exemplu

Urmtorul program tiprete un tabel cu temp. Fahrenheit i


echivalentul lor n grade Celsius, utiliz. formula C=(5/9)(F-32).
#include <stdio.h>
int main()
{
int lower, upper, step;
float fahr, celsius;
lower = 0;
/*limita de jos a tabelei de temperaturi*/
upper = 300;
/* limita de sus a tabelei de temperaturi */
step = 20;
/* marimea pasului*/
fahr=lower;
while(fahr <= upper)
{
celsius = 5 * (fahr - 32)/9;
printf(%4.0f\t%6.1f\n", fahr, celsius);
fahr = fahr + step;
}
return 0;
}

Apeluri de funcii

Exemple de apeluri de funcii:


printf("Hello, world!\n")
printf("%d\n", i)
sqrt(144.)
getchar()
Parametri unei funcii pot fi i expresii. Prin urmare nu trebuie s
folosim cod de genul:
int sum = a + b + c;
printf("sum = %d\n", sum);
n locul celor dou linii de cod de mai sus putem scrie una
singur:
printf("sum = %d\n", a + b + c);
Multe funcii returneaz o valoare, iar apelurile acelor funcii pot
fi introduse n expresii:
c = sqrt(a * a + b * b);
x = r * cos(theta);
i = f1(f2(j));

Exemplu-calculul ipotenuzei
#include <stdio.h>
#include <conio.h>
#include <math.h>
int main() {
float cateta1, cateta2, ipotenuza;
printf(Calculul ipotenuzei\n");
printf("---------------------\n\n");
printf(Introduceti o cateta: "); scanf("%f", & cateta1);
printf(" Introduceti a doua cateta : "); scanf("%f", & cateta2);
ipotenuza = sqrt ( pow(cateta1,2) + pow(cateta2,2) );
printf("\n\n O cateta este: %10.3f\n", cateta1);
printf(" Cealalta cateta este : %10.3f\n", cateta2);
printf(Ipotenuza este: %10.3f\n", ipotenuza);
printf("\nApasa orice tasta..."); getch();
return 0;
}

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