Documente Academic
Documente Profesional
Documente Cultură
Tipuri fundamentale
Definirea variabilelor
Functii de citire/scriere
Quiz
Exercitii
Structura unui
program C
Un program C este compus dintr-o ierarhie de functii, orice program
trebuind sa contina cel putin functia main, prima care se executa la
lansarea programului C.
Un program C are, in principiu, urmatoarea structura:
directive preprocesor
definitii de tipuri
definitii de functii
Intr-o prima faza, programele C care vor fi concepute vor contine doar
functia main ( care va fi void, deci nu va returna nici un rezultat si nu va
primi parametri, deci si lista parametrilor va fi void ).Structura acestor
programe va fi:
directive preprocesor
definitii de tipuri
Iata un alt exemplu de program C, dintre cele mai simple, care contine
doar functia main si realizeaza afisarea unor date:
/* program foarte simplu - acesta este un comentariu */
#include <stdio.h>
/* Rulati programul !
Pe ecran va apare:
Buna ziua!
Cursul de C/C++ e in saptamana 1 si va tine 5
Modificati programul pentru a tipari la inceput un mesaj personalizat :
Buna dimineata / ziua / seara, numele_dvs!
iar la sfarsit
Succes!
Comentati linia marcata cu !! punand in fata //
Rulati din nou, care e deosebirea?
Cum puteti sa revedeti ecranul cu rezultate - User Screen?
Sa observam ca liniile care compun corpul unei functii, se scriu de
obicei decalat fata de antet, pentru o mai buna lizibilitate a
programului */
Tipuri
fundamentale
Un tip de date reprezinta o multime de valori pe care sunt definite anumite
operatii.
Limbajul C defineste urmatoarele tipuri:
Tipuri intregi
La baza clasificarii tipurilor intregi stau doua criterii:
Mai jos sunt este prezentat un tablou al tipurilor intregi, pentru fiecare tip
fiind precizate valoarea minima si maxima, scrise in zecimal, hexazecimal
si binar:
nr
Tip intreg octeti /
nr biti
char
1
8
(signed
valoare minima
zecimal
hexazecimal binar
-128
0x80
-27
valoare minima
zecimal
hexazecimal binar
127
0x7F
27-1
char)
unsigned
char
int ( signed
int )
2
unsigned
int
long
(signed
4
long)
unsigned
long
0
0x0
-32768
0x8000
0
16
0x0
32
0
-215
0
-2147483648
0x80000000 -231
0
0x0
0
255
0xFF
32767
0x7FFF
65535
0xFFFF
28-1
215-1
216-1
2147483647
0x7FFFFFFF 231-1
4294967295
0xFFFFFFFF 232-1
Tip real
float
nr octeti/
nr biti
4
32
valoare
minima
3.4E-38
valoare
maxima
3.4E38
nr cifre
semnificative
6
double
long
double
64
1.7E-308
1.7E308
15
10
80 3.4E-4932 1.1E4932
18
Constantele reale sunt implicit de tipul double; sufixul f sau F aplicat unei
constante, o face de tipul float, iar l sau L de tipul long double.
O constanta reala ( double, pentru celelate doua tipuri reale, se adauga
sufixul corespunzator ) se reprezinta sub forma
mantisa
sau perechea
mantisa parte_exponent
unde mantisa=parte_intr.parte_zecimala ( oricare din cele doua parti poate
lipsi, dar nu ambele )
exponent=eval_exponent sau Eval_exponent
Valoarea constantei este produsul dintre mantisa si 10 la puterea data de
exponent.
In tabelul de mai jos apar cateva exemple de constante reale:
Constante de Constante de
tip float
tip double
1.f
1.
.241f
.241
-12.5e5f
-12.5e5
98.E-12f
98.E-12
Constante de tip
long double
1.L
.241l
-12.5e5l
98.E-12L
printf("long\t\t%d\n",sizeof(long));
printf("float\t\t%d\n",sizeof(float));
printf("double\t\t%d\n",sizeof(double));
printf("long double\t%d\n",sizeof(long
double));
printf("32780\t\t%d\n",sizeof(32780));
printf("32780u\t\t%d\n",sizeof(32780u));
printf("-10000\t\t%d\n",sizeof(-10000));
printf("'a'\t\t%d\n",sizeof('a'));
printf("07111111\t%d\n",sizeof(07111111));
printf("22l\t\t%d\n",sizeof(22l));
printf("1.f\t\t%d\n",sizeof(1.f));
printf(".241\t\t%d\n",sizeof(.241));
printf("98.E-12L\t\t%d\n",sizeof(98.E-12L));
getche();
! */
/* functia are prototipul in conio.h; se va astepta tastarea unui
caracter, pentru a nu "disparea"
ecranul utilizator cu afisarile realizate de program; ecranul poate fi
vizualizat tastand Alt/F5 */
}
Tipul enumerare
Tipul enumerare este un caz particular al tipurilor intregi. Se utilizeaza
pentru a realiza o reprezentare comoda si sugestiva a unor obiecte ale
caror valori sunt identificate printr-un numar finit de nume simbolice. Tipul
enumerare declara constante simbolice, carora li se asociaza coduri
numerice de tip intreg, astfel:
enum nume_tip { lista_constante_simbolice }; /* nume_tip poate lipsi */
Compilatorul asociaza constantelor enumerate cate un cod intreg din
succesiunea incepand cu 0.
Exemple:
enum zile_lucr { luni, marti, miercuri, joi,
vineri };
/* luni e asociat cu 0, marti cu 1, ..., vineri cu 4 */
/* se pot defini variabile de tipul zile_lucr, ca mai jos, variabila zi */
enum zile_lucr zi=marti;
Daca se doreste o alta codificare a constantelor din enumerare decat cea
implicita, pot fi folosite in enumerare elemente de forma:
nume_constanta=valoare_intreaga;
Definirea
variabilelor
Variabila este o entitate folosita pentru memorarea unei valori de tipul
asociat variabilei. O variabila se caracterizeaza printr-un nume, un tip, o
valoare. Oricarei variabile i se aloca ( rezerva ) un spatiu de memorie care
corespunzator tipului variabilei.
Definirea variabilelor se poate face inainte de a functiilor, caz in care
sunt globale, deci pot fi folosite de functii, sau in corpul functiilor, inainte de
prelucrari, caz in care sunt localefunctiei respective ( vezi Structura unui
program C ). Numele unei variabile este unic ( nu pot exista mai multe
variabile cu acelasi nume ), dar o variabila locala poate avea numele uneia
globale, caz in care in interiorul functiei, e valabila noua semnificatie a
numelui.
Definirea variabilelor se face:
tip lista_declaratori;
/* tip poate fi oricare din tipurile
elementare de mai sus sau derivate */
lista_declaratori -- cuprinde unul sau mai multi declaratori,
despartiti prin virgula
declarator -- nume_variabila sau
nume_variabila=expresie_de_initializare /
* in expresie_de_initializare pot
apare doar constante sau variabile initializate */
Exemple:
char c1;
char car1='a',car2=car1+1; /* car2 se initializeaza cu 'b' */
float real=1.74, coef;
In definirea
tip lista_declaratori;
tip poate fi precedat sau urmat de cuvantul cheie const, caz in care
variabilele astfel definite trebuie sa fie initializate si nu-si pot modifica
valoarea:
const int coef1=-2, coef2=14;
coef1=5; /* modificarea valorii unei variabile declarate cu const e
gresita, apare eroare in compilare */
Functii de
citire si scriere
In limbajul C, nu exista instructiuni de intrare/iesire ( citire/scriere ), tocmai
pentru a mari portabilitatea limbajului. Pentru a realiza citiri de la tastatura
si scrieri pe ecran, se apeleaza functii de intrare/iesire din biblioteca
mediului de programare.
Mai jos se vor prezenta functiile de I/E cele mai uzuale, primele avand
prototipul in stdio.h, urmatoarele in conio.h; utilizarea lor intr-un
program, va presupune deci, includerea respectivelor fisiere header.
Functii de I/E cu prototip in stdio.h
De remarcat ca functiile de citire din aceasta categorie, realizeaza o citire
cu buffer. Aceasta inseamna faptul ca toate codurile caracterelor tastate
pana la Enter ( inclusiv ) sunt introduse intr-un buffer de intrare ( pentru
Enter codul 10 corespunzator lui '\n' ), de unde sunt extrase pentru
prelucrare de catre functiile de intrare; daca in buffer exista caractere
neprelucrate, la apelul unei functii de intrare, acestea vor prelua codurile
din buffer, numai dupa epuizarea acestora asteptandu-se o noua tastare.
int getchar(void);
Descriptor
%c
%d %i
Reprezentare
caracter
intreg in zecimal
intreg in zecimal fara
%u
semn
%o
intreg in octal
%x
intreg in hexazecimal
%ld %li
cu semnificatiile de mai
%lu
sus,
%lo %lx
pentru intregi lungi
float;pentru %e - o cifra
%f %e
la partea intreaga
%lf %le
double
%Lf %Le
long double
int scanf(format,adr1,adr2,...);
&nume_variabila
Functia returneaza numarul de valori citite sau EOF daca s-a tastat Ctrl/Z.
Valorile intregi sau reale consecutive introduse de la tastatura trebuie
separate de cel putin un Enter sau spatiu.
int puts(const char * sir);
Quiz
Daca la autotestele de mai jos, alegeti varianta corecta, pasul urmator
sunt Exercitiile!
Daca nu, revedeti putin notitele de mai sus :-)
1.Cum se defineste corect o variabila suma de tip intreg?
Exercitii
1.Pentru cate un intreg citit de la tastatura, sa se afiseze valoarea lui si a
opusului in zecimal, hexazecimal, octal; programul se va modifica astfel
incat sa permita citirea in zecimal, hexazecimal, respectiv octal.
Incercati sa gasiti valorile care vor fi tiparite inainte de rulare!
La executia programului se vor introduce
- valorile extreme: 32767, -32768
- valori pozitive si negative din domeniul int precum si care depasesc
tipul int
- valorile 0, 1, -1.
#include <stdio.h>
void main(void){
int i;
printf("i\thexa\toctal\t-i\thexa\toctal\n");
while(1){ /* ciclu "infinit" din care se iese tastand Ctrl/Break */
putchar(':');scanf("%d",&i); /* formatul se va modifica la %x,
%o */
printf("%d\t%x\t%o\t%d\t%x\t%o\n",i,i,i,-i,-i,-i);
}
}
2.Sa se afiseze valorile extreme in zecimal, octal, hexa pentru toate tipurile
intregi.
#include <stdio.h>
void main(void){
char Mc=0x7F,mc=0x80;
unsigned char Muc=0xFF,muc=0;
int Mi=0x7FFF,mi=0x8000;
unsigned Mui=0xFFFF,mui=0;
long Ml=0x7FFFFFFF,ml=0x80000000;
long Mul=0xFFFFFFFF,mul=0;
clrscr();
printf("tip\tmax\thexa\toctal\tmin\thexa\toctal\n");
printf("char\t%d\t%x\t%o\t%d\t%x\t
%o\n",Mc,Mc,Mc,mc,mc,mc);
printf("u char\t%u\t%x\t%o\t%u\t%x\t
%o\n",Muc,Muc,Muc,muc,muc,muc);
printf("int\t%d\t%x\t%o\t%d\t%x\t
%o\n",Mi,Mi,Mi,mi,mi,mi);
printf("u int\t%u\t%x\t%o\t%u\t%x\t
%o\n",Mui,Mui,Mui,mui,mui,mui);
printf("l int\t%ld\t%lx\t%lo\t%ld\t%lx\t
%lo\n",Ml,Ml,Ml,ml,ml,ml);
printf("lu int\t%lu\t%lx\t%lo\t%lu\t%lx\t
%lo\n",Mul,Mul,Mul,mul,mul,mul);
getche();
}
3 Se citesc triplete de numere reale; sa se tipareasca suma si produsul lor.
Se va observa :
- separarea numerelor introduse prin blancuri sau terminator de linie
- tastarea de numerele pozitive sau negative, ca intregi, cu zecimale sau cu
exponent
- numarul de cifre semnificative si deci aproximarea numerelor ( de
exemplu pentru tastarea numerelor 0.0000001 1 1 )
- daca descriptorii se transforma in %e, numerele pot fi furnizate la fel,
tiparirea e diferita.
#include <stdio.h>
void main(void){
float r1,r2,r3;
while(1){
putchar(':');scanf("%e%e%e",&r1,&r2,&r3);
printf("suma=%e\tprodus=%e\n",r1+r2+r3,r1*r2*r3);
}
zi1=%d\n",zi1);
zi2=%d\n",zi2);
voi_merge_cu=%d\n",voi_merge_cu);
profesia_mea=%d\n",profesia_mea);
amestec=zi1*zi2+vineri+'d'+avion+voi_merge_cu-'a'+profe
sia_mea;
printf("val amestec=%d\n",amestec);
getch();
}
9. Scrieti programul care citeste de la tastatura doua caractere
reprezentand initialele unei persoane si anul nasterii, afisand
Persoana X.Y. are varsta de Z ani
<<Pagina Materiale