CATEGORII DOCUMENTE |
Elementele limbajului de programare C
Limbajul de programare C a fost dezvoltat la inceputul anilor '70 de catre Ken Thompson si Dennis M. Ritchie. Popularitatea acestui limbaj a fost castigata datorita avantajelor pe care le prezinta:
programele scrise in C sunt portabile eficiente
permite utilizarea principiilor programarii structurate
ofera facilitati de manevrare a bitilor, octetilor si adreselor de memorie
este un limbaj dedicat paradigmei programarii procedurale
Prin limbaj de programare intelegem totalitatea regulilor sintactice si semantice prin care se pot comunica unui computer algoritmii de rezolvare a problemelor.
Elementele unui limbaj de programare sunt: alfabetul, unitatile lexicale, unitatile sintactice si comentarii.
A. Alfabetul limbajului C este format din:
<litera>::=A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Z|Y|a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|z|y|_
<cifra> ::= 0|1|2|3|4|5|6|7|8|9
<simboluriSpeciale>::=<simboluriSpecialeAfisabile>|<simboluriSpecialeNeafisabile>
<simboluriSpecialeAfisabile>::=!|,|"|%|#|&|(|)|*|/|+|-|:|
;|<|=|>|?|[|]||~||||.|'|spatiu|
<simboluriSpecialeNeafisabile>::=n |t |b |r |f |v |a
B. Unitatile lexicale:
Identificatori
Cuvinte cheie (cuvinte rezervate)
Constante
Operatori
C. Unitatile sintactice:
Expresii
Instructiuni
D. Comentarii: au rolul de a justifica textul sursa redactat si de a oferi o mai buna intelegere a acestuia. Comentariile sunt marcate in programul sursa prin // sau /*.*/
Exemple: //variabila i are semnificatia unui contor
/* acest program determina
solutiile ecuatiei de gradul II*/
B. Unitatile lexicale ale limbajului C
Unitatile lexicale sunt elementele atomice ale unui program, formate cu ajutorul simbolurilor precizate de alfabet.
B.1. Identificatorii: sunt secvente de litere si cifre ale limbajului definit care incep obligatoriu cu o litera sau caracterul '_', avand rolul de a identifica conceptele utilizate in program. Identificatorii corespund unor nume de variabile, nume de constante simbolice, nume de functii.
Variabile, tip de date
Variabila
are un nume care o identifica (acest nume este exprimat printr-un identificator)
are asociata o locatie de memorie in care se regaseste valoare curenta, continutul acestei locatii de memorie se poate schimba
are un anumit tip de date, care exprima natura si dimensiunea valorilor pe care le ia
Regula intr-un program C, toate datele (variabile) trebuie declarate pentru a putea fi folosite. Prin declararea unei date se intelege precizarea tipului datei respective si stabilirea identificatorului. Tipul datei ne spune domeniul valorilor datei cat si lungimea de reprezentare interna. Declararea datelor se face prin instructiuni de declarare de tip de date:
<instructiune de declarare de tip>::= <tip><lista de identificatori>;
unde: <tip> poate fi un tip predefinit (vezi lista tipurilor predefinite in C), un tip definit de programator sau tipul special void (tip nedefinit).
Exemple:
int a,b,c; // declararea a trei variabile simple de tip intreg
float var; //declararea unei variabile simple de tipul real, virgula flotanta in simpla precizie
char ch ; // declararea unei variabile de tip caracter
B.2. Cuvintele rezervate (cuvinte cheie) sunt identificatori care au o semnificatie speciala. Orice cuvant rezervat nu poate avea alta utilizare intr-un program decat cea predefinita. Multimea cuvintelor cheie ale limbajului C este prezentata in tabelul urmator:
Cuvintele cheie ale limbajului C |
||||
auto |
default |
float |
register |
switch |
break |
do |
for |
return |
typedef |
case |
double |
go to |
short |
union |
char |
else |
if |
signed |
unsigned |
const |
enum |
int |
sizeof |
void |
continue |
extern |
long |
static |
volatile |
struct |
while |
Lista cuvintelor rezervate contine si setul de tipuri predefinite ale limbajului C. Tipurile predefinite ale limbajului corespund tipurilor elementare de date: intreg, real, caracter. Aceste tipuri sunt introduse prin cuvintele rezervate:
Tipul predefinit |
Semnificatie |
Domeniul de valori |
int |
intreg reprezentat intern pe 16 biti, in cod complementar fasa de 2 | |
short |
intreg reprezentat intern pe 16 biti, in cod complementar fasa de 2 | |
long |
intreg reprezentat intern pe 32 biti, in cod complementar fasa de 2 | |
unsigned |
intreg fara semn reprezentat pe 16 biti | |
unsigned long |
intreg fara semn reprezentat pe 32 biti | |
char |
caracter reprezentat intern prin codul ASCII corespunzator pe 8 biti | |
float |
Real, reprezentat in virgula flotanta, simpla precizie - pe 32 biti |
[-,] - valorile minime cuprinse in intervalul [-,] se confunda cu 0 |
double |
Real, reprezentat in virgula flotanta, dubla precizie - pe 64 biti |
[-,] - valorile minime cuprinse in intervalul [-,] se confunda cu 0 |
unsigned char |
Caracter, reprezentare interna fara semn, pe 8 biti, echivalent implicit pentru char | |
signed char |
Caracter, reprezentare interna cu semn, pe 8 biti | |
long double |
Real, reprezentat in virgula flotanta, dubla precizie - pe 80 biti |
- valoarea minima absoluta reprezentabila: - valoarea maxima absoluta reprezentabila: |
B.3. Constante
Constantele sunt marimi ale caror valoare nu se modifica pe parcursul executiei unui program. Constantele se clasifica in patru categorii:
Constante caracter
Constante "sir de caracter"
Constante numerice
Constante simbolice
Constante caracter
Constanta caracter este un simbol care are atasata valoarea codului ASCII al caracterului corespondent.. Un caracter este reprezentat in memoria calculatorului pe un octet (8 biti).
Exista doua categorii de caractere: caractere afisabile (imprimabile) si caractere neafisabile:
<constanta caracter>::= ' <caracter> '
<caracter>::=<caracter afisabil (ASCII)> |<caracter neafisabil>
O constanta caracter grafica (afisabila) se specifica incluzand caracterul intre simbolurile apostrof: ' '.
Exemple
'A' - codul ASCII 65
'a' - codul ASCII 97
'+' - codul ASCII 77
'2' - codul ASCII 50
O constanta caracter non-grafica (neafisabila) au notatii speciale, se specifica utilizand caracterul backslash () si apostroful (').
Exemple:
Intoarcerea cu un spatiu (Backspace) 'b' - codul ASCII 8
Retur car 'r' - codul ASCII 13
Linie noua 'n' - codul ASCII 10
Constante sir de caractere
Sunt formate dintr-o succesiune de caractere care se delimiteaza prin ghilimele: "exemplu". Fiecare caracter al sirului se reprezinta in memoria calculatorului pe un octet, prin codul ASCII corespunzator. Sfarsitul secventei de coduri ale caracterelor dintr-un sir este marcata in memorie de un octet special cu valoarea NULL, corespunzator caracterului '0'.
Observatie: reprezentarea in memorie a lui 'k' este diferita de reprezentarea lui "k". Astfel, sirului "k" ii este alocat un spatiu de 2 octeti, ultimul fiind cel ce marcheaza sfarsitul NULL.
Constante numerice
Constantele numerice sunt in fapt numerele. In limbajul C se face o distinctie intre numere, in functie de tipul (intreg sau real), baza de numeratie si precizia codificarii.
Numerele intregi zecimale, exemple: -123, 5, +5.
Numerele octale intregi, incep cu cifra 0 si sunt de forma: 0c.c, unde c este cifra octala. Exemple: 0452 , unde 452 este numarul in baza 8
Numerele hexazecimale intregi: incep cu 0x sau 0X si sunt de forma: 0xc.c unde c sunt cifre hexazecimale. Exemplu: 0xabbd.
Numerele flotante de tip real in simpla precizie
[]dd.d . dd.d
Pot sa contina semnul (+ sau -) specificat la inceputul scrierii urmat de partea intreaga, punctul zecimal si partea fractionara.
Exemple: +23.567 , -.667 , .4567
Numerele flotante de tip real in dubla precizie
[]dd.d . dd.d [] dd sau:
[] <parte intreaga>.<parte fractionara> [] <exponent>
Exemple:
0.345E2 (corespunzator valorii 0.345*102)
-0. 012e-3 (-0.012*10-3)
22.0e12 (=22*1012)
Constante simbolice
Definirea constantelor simbolice se face prin directiva de preprocesare define, prin constructia:
#define <NumeConstanta> <ValoareAsociata>
Ex: #define PI 3.1415
#define raza 124
B.4. Operatorii
Operatorii sunt reprezentati de simboluri sau secvente de simboluri care intra in alcatuirea expresiilor.
In functie de tipul operatiilor pe care le induc, operatorii limbajului C sunt clasificati:
a. Operatori aritmetici
b. Operatori de incrementare si decrementare
c. Operatori logici
d. Operatori relationali
e. Operatori de deplasare
f. Operatori la nivel de biti
g. Operatori de asignare (atribuire)
h. Operatorul conditional
i. Alti operatori
Dupa numarul operanzilor pe care ii implica, operatorii pot fi:
- unari
- binari
- ternari
Operatorii aritmetici
Operatori aritmetici unari:
<OperatoriAritmeticiUnari>::= - | +
Au rolul de a specifica semnul unei expresii. Se folosesc in constructii de urmatoarea forma:
<expresie>
Daca o expresie nu este precedata de semn se considera implicit semnul + (pozitiv).
Exemple: +12.34, 0.56, (a-2), etc.
Operatori aritmetici binari
<OperatorAritmeticBinar>::= +| - | * | / | %
Au semnificatia operatiilor aritmetice: adunare, scadere, impartire, inmultire, modulo si se utilizeaza in structuri de forma:
<expresie1><OperatorAritmeticBinar><expresie2>
Expresiile 1, 2 pot fi reprezentate de constante, variabile, nume de functii sau alte expresii aritmetice.
Exemple: a+b, (a+b) / 2, suma(a,b) % c , etc.
Operatorii de incrementare-decrementare
<OperatorulDeIncrementare>::= ++
Se foloseste in constructii de forma:
++<expresie> (preincrementare)
<expresie>++ (postincrementare)
Semnificatia acestuia este urmatoarea:
++<expresie> este echivalent cu <expresie> := <expresie>+1, unde prin simbolul ":=" se intelege "i se atribuie"
<OperatorulDeDecrementare>::= --
Se foloseste in constructii de forma:
--<expresie> (predecrementare)
<expresie>-- (postdecrementare)
Semnificatia acestuia este urmatoarea:
--<expresie> este echivalent cu <expresie> := <expresie>-1
Diferenta dintre preincrementare si postincrementare:
Fie urmatoarele doua expresii:
1. A:=++B
2. A:=B++
si B are valoarea initiala 4.
Pentru prima expresie, in urma efectuarii calculelor B va avea valoarea 5 si A va avea valoarea 5 dat fiind faptul ca prima actiune este aceea de incrementare urmata de atribuire. In al doilea caz, B are valoarea 5 iar A=4, dat fiind faptul ca atribuirea se face inaintea incrementarii.
Operatorii relationali:
<OperatorRelational>::= | | < | <= | > | >=
Cu semnificatia:
= = egal
!= diferit
<= mai mic sau egal
>= mai mare sau egal, etc.
Se folosesc in constructii de forma:
<expresie1><OperatorRelational><expresie2>
O structura de forma anterioara este denumita expresie relationala si este evaluata la una dintre valorile logice de adevar True (1) sau False (0)
Exemplu: Fie expresia 2<3 ; in urma compararii operanzilor (constante numerice in acest caz) se constata ca valoarea logica este "adevar" ceea ce conduce la evaluarea expresiei 2<3 la valoarea 1 (Adevarat).
Operatorii logici:
<OperatorLogic> ::= && | || | !
Cu semnificatia:
&& - operatorul AND (SI) conjunctia
|| - operatorul OR (SAU) disjunctia
! - operatorul NOT (negatia)
Exemple:
(a<b) && (b !=c) , a || (!a)
Operatori de deplasare:
<OperatorDepalsare>::= << | >>
Sunt operatori binari utilizati in constructii de forma:
<expresie1><OperatorDeplasare><expresie2>
unde: expresiile sunt evaluate in prealabil la valori intregi;
Operatorii de deplasare corespund operatiilor de deplasare pe biti, efectul acestora fiind acela de a provoca deplasarea bitilor din reprezentarea binara a intregului dat de expresia 1 la stanga (<<) sau la dreapta (>>) cu un numar de pozitii specificat de valoarea intreaga a expresiei 2.
Regula Prin aceste operatii de deplasare, bitii deplasati in afara limitei de reprezentare se pierd, iar bitii eliberati sunt completati cu 0 sau 1 in functie de semnul intregului respectiv: pozitiv sau negativ:
A<<B are semnificatia de deplasare a bitilor din reprezentarea binara a lui A cu B pozitii la stanga
A>>B are semnificatia de deplasare a bitilor din reprezentarea binara a lui A cu B pozitii la dreapta
Operatorii la nivel de biti:
Acestia corespund operatorilor logici (boolean): SI, SAU, Negatie, SAU EXCLUSIV
<OperatoriBoolean>::= & | | | ~ | ^
& - SI
- SAU
~ - Negatia
^ - SAU EXCLUSIV
|
|
|
|
Operatorii la nivel de biti se utilizeaza in manevrarea bitilor din reprezentarile binare ale operanzilor intregi sau caracter.
Exemplu:
Fie A si B doua numere intregi ale caror reprezentari pe 16 biti sunt:
A= 0001 0010 1010 1011 si
B= 1101 1111 0000 0101
Atunci:
A&B= 0001 0010 0000 0001
A|B = 1101 1111 1010 1111
Operatori de asignare (atribuire):
<OperatorAsignare>::= = | += | -= | *= | /= | %= | >>= | <<= | &= | != | ^=
Cea mai simpla operatie de asignare este cea formata prin constructia:
<variabila> = <expresie>
avand semnificatia urmatoare: expresia din partea dreapta a operatorului de asignare este evaluata iar rezultatul evaluarii (o valoare) este atribuit variabilei din partea stanga a operatorului =.
In cazul general, cand avem asignari de forma:
<variabila> <operator> = <expresie>
unde: <operator>::=+|-|*|/|%|>>|<<|&|!|^ , structura este echivalenta cu:
<variabila>=<variabila> <operator> <expresie>
Operatorul conditional:
Este un operator ternar format din doua simboluri "?" si ":" si folosit in constructii de forma:
<expresie1>? <expresie2>:<expresie3>
Semnificatie expresiile 1,2,3 sunt evaluate si valoarea de evaluare a expresiei globale este valoarea expresiei 2 daca expresia 1 este adevarata altfel valoarea expresiei 3 daca expresia 1 este falsa.
Exemple: (A<B) ? A : B
(A= =0) ? "egal cu zero" : "diferit de zero"
Operatorul secvential ",":
Se foloseste in constructii de forma:
<expr1> , <expr2> , <expr3> , .. , <exprn>
Expresia globala de mai sus se evaluaza de la stanga la dreapta, valoarea finala este cea rezultata in urma evaluarii ultimei sub-expresii exprn.
Operatorul de conversie explicita ( cast)
Efectul operatorului cast este conversia explicita a unei expresii la un alt tip de data decat cel implicit. Utilizarea operatorului se face prin constructii: (tip) expresie, unde tip - reprezinta tipul de date spre care se face conversia.
Expresiile de forma var=expresie semnifica evaluarea prima data a expresiei, si daca tipul rezultatului obtinut este diferit de cel al variabilei, se realizeaza conversia implicita la tipul variabilei. In conversiile explicite, operatorul cast apare in expresii de forma: var = (tip) expresie si prin aceasta operatie, variabila primeste valoarea la care a fost evaluata expresia convertita la tipul explicit tip.
C. Unitatile sintactice
Unitatile sintactice sunt elemente complexe alcatuite prin combinarea a doua sau mai multe unitati lexicale.
C.1. Expresii
Expresiile sunt secvente de operatori si operanzi. In functie de tipul operatorilor utilizati, expresiile pot fi: expresii aritmetice, expresii logice, relationale, etc. Operanzii care intra in alcatuirea expresiilor pot fi:
variabile
constante
apel de functii
alte expresii
C.2. Instructiuni
Instructiunile sunt propozitii care respecta regulile limbajului de programare in care sunt redactate. Instructiunile pot fi simple sau compuse.
Sintaxa instructiuni expresie este urmatoarea:
<expresie>;
Exemplu: a=b+c;
Sintaxa:
Rolul acestei instructiuni este de a grupa mai multe instructiuni simple, compuse sau alte instructiuni bloc.
corespund structurilor alternative: decizie simpla si decizie multipla.
Instructiunea if
Sintaxa instructiunii:
if ( <expresie> )
<instructiune_1>
else
<instructiune_2>
sau:
if ( <expresie> )
<instructiune_1>
Unde, instructiunile 1 sau 2 pot fi de asemenea instructiuni compuse sau bloc de instructiuni.
Efectul instructiunii
<expresia> este evaluata si daca valoarea obtinuta in urma evaluarii este diferita de 0 se executa instructiunea 1, altfel se executa instructiunea 2.
Cele doua instructiuni 1 si 2 se exclud reciproc.
Instructiunea IF simpla nu contine partea else <instructiune 2>
Instructiunea IF completa contine ambele ramuri.
Exemple:
if (a!=0) b=1/a; |
If (a>=b) maxim=a; else maxim=b; |
if (delta>=0) |
Sintaxa limbajului C permite ca in cadrul instructiunilor compuse ce constituie cele doua ramuri ale structurii alternative IF sa existe alte structuri alternative IF. O astfel de constructie se denumeste structura alternativa imbricata sau instructiuni IF imbricate.
Instructiunea switch
- reprezinta o generalizare a structurii alternative (if).
- se poate inlocui printr-o secventa de structuri alternative imbricate.
In structura instructiunii switch este regasita o instructiune simpla de a carei prezenta depinde executia corecta a instructiunii alternative switch. Aceasta instructiune are sintaxa:
break;
Rolul instructiunii break este de a intrerupe executia instructiunii curente si de a trece la executia urmatoarei instructiuni ce urmeaza instructiunii switch.
Sintaxa generala:
switch (<expresie>)
Efectul instructiunii:
Se evalueaza expresia dintre paranteze la o valoare.
Se "cauta" secvential valoarea la care a fost evaluata expresia in lista de valori val1, val2, .valn.
Daca nu se gaseste nici o valoare val1, val2,.valn egala cu valoarea la care a fost evaluata expresia se va executa, daca este precizata, instructiunea default sau efectul instructiunii switch este nul
Daca s-a gasit o valoare egala cu valoarea expresiei se va executa instructiunea corespunzatoare si se va parasi structura alternativa.
Exemplu: Afisarea numelui zilei din saptamana careia ii corespunde un numar 1,2,,7:
switch (numar)
D. Instructiunile de ciclare
In pseudocod am evidentiat cele trei tipuri de structuri repetitive. Acestora le corespund trei instructiuni de ciclare in limbajului C:
Structura repetitiva preconditionata -> instructiunea while
Structura repetitiva postconditionata -> instructiunea do . while
Structura repetitiva cu numar prefixat de repetari -> instructiunea for
Instructiunea while
Sintaxa:
while (<expresie>) //antetul instructiunii
<instructiune> //corpul instructiunii
unde: <instructiune> poate fi o instructiune simpla, compusa, si poate contine alte instructiuni while, caz in care spunem ca avem o instructiune while imbricata
Efectul instructiunii:
In primul pas, se evalueaza expresia dintre paranteze. Daca rezultatul evaluarii este o valoare non-nula (adevarat) se executa instructiunea din corpul while si procesul se reia prin reevaluarea expresiei. Daca rezultatul unei evaluari este nul, se intrerupe executia instructiunii while, si programul se continua cu urmatoarea instructiune ce urmeaza instructiunii while.
Simplificat, o instructiune while are semnificatie:
"Cat timp expresia este adevarata repeta corpul de instructiuni"
Observatie: corpul instructiunii while este posibil sa nu se execute nici o data, in situatia in care expresia evaluata este de la inceput falsa.
Exemplu 1:Se tipareste valoarea unui contor pana cand acesta devine mai mare decat 10. Valoarea initiala a contorului este 0.
i=0;
while (i<=10)
Exemplu 2: Se calculeaza suma primelor 10 numere naturale, respectiv: 1+2+3+.+10
i=1;s=0; //initializarea
while (i<=10)
Instructiunea do.while
Sintaxa
do
<instructiune> //corpul
while (<expresie>);
<instructiune>: poate fi o instructiune simpla, compusa, si poate contine alte instructiuni do.while, caz in care spunem ca avem o instructiune repetitiva imbricata.
Efectul instructiunii do.while:
- in primul pas se executa corpul instructiunii do.while
- Se evalueaza expresia dintre paranteze
- daca rezultatul evaluarii expresiei este adevarat se reia procesul prin executia corpului instructiunii, in caz contrar se incheie executia instructiunii do.while
Semnificatie:
"Executa blocul de instructiuni pana cand expresia devine falsa"
Observatie: corpul unei instructiuni repetitive postconditionate se executa cel putin o data. (chiar daca expresia este falsa de la prima evaluare).
Exemplu 1. Citeste un caracter de la tastatura pana cand se introduce caracterul '0'.
do
while (caracter<>'0');
Exemplu 2. Calculeaza suma unor numere intregi citite de la tastatura pana la introducerea unui numar negativ sau zero:
suma=0;
do
while (nr>0) ;
Exemplu 3: Programul urmator citeste un text (terminat prin Enter) si afiseaza numarul de vocale din compunerea textului.
#include <stdio.h>
void main()
while (t!=10); //10 - este codul ASCII pentru Enter
printf('Numarul de vocale: %d',contor);
Instructiunea for
Sintaxa
for ( <expresie1> ; <expresie2> ; <expresie3> )
<instructiune>
Unde:
cele trei expresii din antetul instructiunii sunt separate prin caracterul ;
<instructiune> poate fi simpla, compusa sau poate contine o alta instructiune repetitiva for.
<expresie1> - reprezinta expresia de initializare. (initializarea contorului)
<expresie2> - reprezinta o expresia ce este evaluata si de a carei valori de evaluare depinde repetarea corpului instructiunii.
<expresie3> - reprezinta expresia de actualizare (actualizarea contorului)
Efect:
In primul pas, se evalueaza expresia1, respectiv se executa secventa de initializare
Se evalueaza expresia2 (aceasta expresie are acelasi rol ca <expresie> din structura while sau do.while )
Daca rezultatul evaluarii anterioare este adevarat se executa corpul instructiunii for si apoi se executa secventa de actualizare specificata prin expresie3
Daca rezultatul este fals, se incheie executia for.
Exemplu 1 Afisarea primelor 10 numere naturale.
for ( i=1; i<=10; i++)
printf("n %d", i);
Exemplu 2: Calcularea lui n!
fact=1;
for (i=1;i<=n;i++)
E. Apelul functiilor de intrare - iesire
Operatiile de intrare-iesire (citirea datelor de intrare si afisarea rezultatelor) nu se realizeaza prin instructiuni ale limbajului C, ci prin apelarea unor functii speciale, definite in bibliotecile de functii ale limbajului C.
Functiile printf, scanf
- printf si scanf sunt functii predefinite de intrare-iesire definite in biblioteca stdio
Pentru a putea folosi aceste functii intr-un program C este necesara in prealabil specificarea prin directiva de preprocesare a fisierului antet (header) ce contine prototipurile acestora:
#include <stdio.h> //la inceputul programului sursa
Prin apelul functiei printf se realizeaza afisarea pe ecran a mesajelor, datelor, valorilor unor variabile sau rezultate finale sau intermediare ale programului.
Sintaxa apelului functiei printf:
printf("sir de formatare", expr1, expr2, .)
unde:
expr1, expr2, . sunt expresii separate prin virgula si pot reprezenta variabile, constante sau orice expresie evaluabila (aritmetica, logica, relationala, etc.)
sir de formatare este incadrat de caracterele ghilimele " " si reprezinta forma sub care vor fi tiparite pe ecran valorile expresiilor.
Efect: prin apelul functiei printf se realizeaza afisarea pe ecran a datelor intr-un anumit format.
Sir de formatare poate contine doar text si lista de expresii poate fi vida, caz in care prin apelul functiei printf se tipareste pe ecran textul specificat in acest cimp.
Exemple:
printf("exemplu de program!")
printf("n acest text este afisat pe ecran")
In general sir de formatare poate contine:
Text
Specificatori de format
Secvente escape
Secventele escape sau comenzi de control pot fi de doua tipuri: secvente negrafice si secvente grafice sau afisabile. Numarul specificatorilor de format este egal cu numarul de expresii separate prin virgula. Fiecare specificator de format se refera la modul de redare a valorii expresiei de pe pozitia corespondenta:
Secventele escape negrafice
n - trecere la linie noua
t - deplasare la dreapta cu un tab
b - deplasare la stanga cu o pozitie
r - revenire la inceputul randului
f - trecere la pagina urmatoare
a - semnal sonor
Secventele escape grafice
' - afisare apostrof
" - afisare ghilimele
- afisare backslash
xCC - afisare caracterul al carui cod ASCII in hexazecimal este dat prin secventa CC de cifre in baza 16.
Specificatorii de format
<specificator de format>::= % [-] [m.[n]] [l] <conversie>
<conversie>::= d|o|x|X|u|s|c|f|e|E|g|G
caracterul - daca apare semnifica cadrarea la stanga a rezultatului corespunzator specificatorului curent
m - specifica numarul minim de caractere ale datei ce va fi afisate
.n - semnifica in cazul datelor numerice numarul de cifre dupa punctul zecimal
l - semnifica conversie din formatul intern long in formatul extern.
Conversie specifica tipul de conversie din formatul intern (reprezentarea interna) in cel extern (cum va fi afisat):
d - intreg int cu semn
o - intreg in octal
x, X - intreg in hexazecimal (litere mici sau MARI pentru cifrele a,b,.f respectiv A,B,.F)
u - intreg fara semn (unsigned)
c - din codul ASCII al reprezentarii binare interne -> caracterul
s - din sirul de coduri ASCII -> sirul de caractere
f - conversie din float sau double in formatul extern zecimal
e,E - conversie din float sau double in formatul cu mantisa si exponent
g,G - conversiile de la f si E sau f si e dar alegerea se face pentru numarul minim de pozitii
Exemple:
printf("valoarea intreaga a= %d",a);
printf("realul a= %5.2f",a);
printf("%d + %d = %d",a,b,a+b);
printf("suma este %4.4f" , suma);
Sintaxa apelului functiei scanf :
printf("sir de formatare", adr1, adr2, .)
Efect: prin apelul functiei scanf se realizeaza citirea de la tastatura datelor intr-un anumit format.
Sirul de formatare are aceeasi semnificatie ca si la functia printf.
Sirul de adrese: adr1, adr2,.adrn se asociaza specificatorilor de format pastrand ordinea. O adresa se specifica prin precedarea numelui variabilei de operatorul unar adresa notat &. Astfel var este numele unei variabile, iar &var este adresa de memorie la care se stocheaza valoarea variabilei.
Exceptie nu se utilizeaza operatorul adresa in cazul in care variabila este o variabila speciala pointer, respectiv cand numele variabilei este o adresa de memorie.
Exemple:
scanf ("%d", &x);
scanf ("%d %d %f",&a,&b,&x);
scanf("%d %d %d", &x[0], &x[1], &x[2]);
scanf("%s %s %d", nume, prenume, &varsta);
Structura unui program C
Redactarea unui program in limbajul C este libera atata timp cat se respecta regulile sintactice, semnele de punctuatie si se folosesc constructiile specifice in mod corect. Programul C este constituit dintr-o secventa de instructiuni, intr-o ordine determinata, corespunzator algoritmului de rezolvare a problemei considerate. Instructiunile programului pot fi instructiuni de declarare sau definire a unor variabile, functii si instructiuni care se regasesc in corpul functiilor.
Structura unui program C este urmatoarea:
<program>::= [<directive de procesare>]
[<instructiuni de declarare a variabilelor globale>]
<functii>
Directivele de preprocesare: sunt numite si comenzi de preprocesare si aparitie lor in program nu este obligatorie. Sunt marcate prin simbolul # (diez) care le precede.
Exemplu:
/* includerea bibliotecii standard de functii de intrare-iesire */
#include <stdio.h>
Instructiuni de declarare a variabilelor globale: optional; Anumite variabile sunt folosite in cadrul mai multor functii, avand o utilizare globala., fapt pentru care aceste variabile sunt declarate in secventa de declarare a variabilelor cu caracter global (in afara oricaror functii ale programului).
Functii: sunt unitati independente ale unui program prin care se reprezinta un subalgoritm (procedura, modul) al unui algoritm de rezolvare a unei probleme date.
Clasificare functii:
Functii standard - au nume prestabilit, sunt constituite in biblioteci de functii standard
Functii utilizator - au nume ales de catre utilizator si sunt construite de catre acesta
Functia principala (main)
Un program C contine obligatoriu functia principala main. Putem avea mai multe functii utilizator declarate si definite sau alte functii standard ce sunt apelate dar in prealabil au fost incluse, prin directive de preprocesare, bibliotecile din care fac parte.
Sintaxa functiei main:
void main (void)
Exemplu de program C:
#include <stdio.h> //rezolvarea ec. de gradul II
#include <math.h>
void main(void)
else
else
printf('Ecuatia de gr. II nu are solutii reale!');
Probleme
1. Sa se citeasca un sir de n numere intregi de la tastatura si sa se calculeze suma acestora.
2. Sa se citeasca n numere intregi si sa se numere cate elemente sunt pozitive.
3. Sa se scrie un program C pentru afisarea relatiei dintre doua numere: < , > sau =.
4. Scrieti un program C pentru rezolvarea ecuatiei de gradul II
Obs. Pentru scrierea unui program care rezolva ecuatia de gradul 2 este necesara cunoașterea functiei de extragere a radicalului: sqr(<parametru>) al carei prototip se afla in biblioteca math.h
5. Sa se scrie un program C care citeste doua numere reale si un caracter: + , - , / sau * si afiseaza rezultatul operatiei aritmetice corespunzatoare.
6. Sa se scrie un program C care afiseaza toti multiplii de k mai mici decat o valoare data n.
7. Sa se scrie un program C care calculeaza si afiseaza puterile lui 2 pana la n, adica 2, 22,23, ., 2n .
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 1219
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved