Curs Programare C

29
1. Proiectat si implementat de Dennis Ritchie in 1972 la AT&T Bell Laboratories, pentru programe de sistem (dezvoltate doar in limbaje de asamblare); 2. C-ul este un succesor al limbajului B, creat de Ben Thompson in 1973; 3. Sistemul de operare UNIX este in totalitate scris in limbajul C; 4. Cartea de referinta care defineste un standard minim: Brian W. Kernighan, Dennis Ritchie - "The C Programming Language" - Prentice Hall 1978; 5. Dezvoltarea unui standard international (1983- 1989) -- ANSI C (ANSI - American National Standards Institute); 6. Dezvoltate medii de programare C performante sub UNIX si DOS; Dennis Ritchie Brian Kernighan http://en.wikipedia.org/wiki/Brian_Kernighan http://en.wikipedia.org/wiki/Dennis_Ritchie Limbajul C [ Caracteristici ] 2010/2011 - Suceava

description

It describes the way to learn C programing

Transcript of Curs Programare C

Page 1: Curs Programare C

1. Proiectat si implementat de Dennis Ritchie in 1972 la AT&T Bell Laboratories, pentru programe de sistem (dezvoltate doar in limbaje de asamblare);

2. C-ul este un succesor al limbajului B, creat de Ben Thompson in 1973;

3. Sistemul de operare UNIX este in totalitate scris in limbajul C;

4. Cartea de referinta care defineste un standard minim: Brian W. Kernighan, Dennis Ritchie -

"The C Programming Language" - Prentice Hall 1978;

5. Dezvoltarea unui standard international (1983-1989) -- ANSI C (ANSI - American National Standards Institute);

6. Dezvoltate medii de programare C performante sub UNIX si DOS;

Dennis Ritchie Brian Kernighanhttp://en.wikipedia.org/wiki/Brian_Kernighanhttp://en.wikipedia.org/wiki/Dennis_Ritchie

Limbajul C[ Caracteristici ]

2010/2011 - Suceava

Page 2: Curs Programare C

Dennis MacAlistair Ritchie (n. 9 septembrie 1941 - d. 12 octombrie 2011)

1. Este unul dintre pionierii tehnologiei informației. A dezvoltat împreună cu Ken Thompson și alți programatori prima versiune a sistemului de operare UNIX la AT&T Bell Labs și a scris “Unix Programmer's Manual” (1971).

2. Împreună cu Thompson și Brian Kernighan a dezvoltat limbajul de programare C și împreună cu Kernighan a scris cartea “Limbajul de programare C” (engleză The C Programming Language).

Dennis Ritchiehttp://en.wikipedia.org/wiki/Brian_Kernighanhttp://en.wikipedia.org/wiki/Dennis_Ritchie

Limbajul C[ Caracteristici ]

2010/2011 - Suceava

Page 3: Curs Programare C

Exemplu de program scris in limbajul B

http://en.wikipedia.org/wiki/Brian_Kernighanhttp://en.wikipedia.org/wiki/Dennis_Ritchie

Limbajul C[ Caracteristici ]

2010/2011 - Suceava

Page 4: Curs Programare C

Limbajul C[ Caracteristici ]

2010/2011 - Suceava Caracteristicile limbajului C, care i-au determinat popularitatea, sunt prezentate pe scurt mai jos si vor fi analizate pe parcursul cursului:• limbaj de nivel mediu, portabil, structurat,

flexibil• produce programe eficiente ( lungimea

codului scazuta, viteza de executie mare )• de dimensiune relativ scazuta• set bogat de operatori• multiple facilitati de reprezentare si

prelucrare a datelor• utilizare extensiva a apelurilor de functii si a

pointerilor• verificare mai scazuta a tipurilor -- loose

typing - spre deosebire de PASCAL• permite programarea la nivel scazut -- low

level , apropiat de hardware

Este utilizat in multiple aplicatii, in care nu predomina caracterul numeric:• programe de sistem• proiectare asistata de calculator• grafica• prelucrare de imagini• aplicatii de inteligenta artificiala.

[ date::structuri::functii ]

Page 5: Curs Programare C

Limbajul C[ alfabetul

limbajului ]

2010/2011 - Suceava

[ date::structuri::functii ]

Un program C cuprinde:

• atomi lexicali• identificatori, • constante -- numerice, caracter, sir, • operatori, • semne de punctuatie

• separatori• spatii, • comentarii, • terminator de linie

aranjati conform sintaxei limbajului.

Atomii si separatorii se construiesc din simbolurile ce formeaza alfabetul limbajului C.

Simbolurilese codifica conform codului ASCII ( American Standard Code for Information Interchange ), prin cate o configuratie de 8 biti ( un octet ), rezultand faptul ca sunt 256 ( 0 - 255 ) de caractere in tabela codurilorASCII.

Alfabetulcuprinde simboluri grafice si simboluri fara corespondent grafic:

Page 6: Curs Programare C

2010/2011 - Suceava

[ date::structuri::functii ]

Categorie Membri Cod ASCIIzecimal hexa octal

Litere A B C ..... Za b c ...... z

A -- 65 41 101Z -- 90 5A 132a -- 97 61 141z -- 122 7A 172

Cifre 0 1 2 ...... 9 0 -- 48 30 0609 –- 57 39 070

Liniuta de subliniere _ - -- 95 5F 137

Operatori si semnede punctuatie

! " # % & ' ( ) * + , - . / : ; < = > ? [ ] \ ^ { } | ~

Simboluri grafice

Simboluri fara corespondent grafic

Simbol Semnificatie Secventaescape

Cod ASCIIzecimal

SP avans cursor cu o pozitie - space 32BEL semnal acustic - bell \a 7BS revenire cursor cu o pozitie - back space \b 8FF salt la pagina noua - form feed \f 12NL avans cursor cu o linie - new line \n 10

CR revenire cursor la inceputul liniei curente-carriage return \r 13

HT salt la urm pozitie de tabulare orizontala -horizontal tab \t 9

VT salt la urm pozitie de tabulare verticala -vertical tab \v 11

NULL caracter cu cod 0 ( terminator de sir ) \0 0

Limbajul C[ alfabetul

limbajului ]

Page 7: Curs Programare C

In codificarea ASCII:û spatiul are codul mai mic decat simbolurile grafice (32)û cifrele ( in ordine crescatoare ), û literele mari si literele mici ( in ordine alfabetica ) ocupa cate trei zone compacte.

Limbajul C[ Tabela ASCII ]

2010/2011 - Suceava

[ date::structuri::functii ]http://www.cs.utk.edu/~pham/ascii.html

Page 8: Curs Programare C

2010/2011 - Suceava

[ date::structuri::functii ]

Limbajul C[ atomii

lexicali ]

Folosind simbolurile grafice se construiesc atomii lexicali:•identificatori•constante ( explicite ) -- numerice, caracter, sir•operatori•semne de punctuatie.

Atomii sunt separati de separatori: • spatiul, • caracterul de tabulare orizontala HT, • terminatorul de linie NL si • comentariul ( orice text aflat intre combinatiile de

caractere /* si */ , sau textul inceput cu // pana la sfarsitul liniei ).

Page 9: Curs Programare C

2010/2011 - Suceava

[ date::structuri::functii ]

Limbajul C[ atomii

lexicali ]

DefinitieNumele sau identificatorii se compun dintr-o secventa

de litere, cifre si/sau _ ( liniuta de subliniere ), primul caracter trebuind sa fie litera sau _.

Observatie• Numele sunt case sensitive, deci se face deosebire intre

literele mari si mici ( spre deosebire de PASCAL ), iar acestea pot fi:

1. nume utilizator • nume de variabile, • constante simbolice, • functii, • tipuri, • structuri, uniuni

2. cuvinte cheie ale limbajului C - pot fi folosite doar cu intelesul cu care au fost definite

3. cuvinte rezervate - intelesul poate fi modificat, de evitat acest lucru; pentru ca multe nume rezervate de compilator, invizibile programatorului, incep cu _, este indicat a nu utiliza _ pentru inceputul numelor utilizator.

Page 10: Curs Programare C

2010/2011 - Suceava

[ date::structuri::functii ]

Limbajul C[ atomii

lexicali ]

Exemple de nume utilizator

test produs x1 X1 PI fctRecursiva

Exemple de definitii de constante simbolice ( care sunt nume utilizator ):

#define PI 3.1415#define DIMENSIUNE 20#define Salut "Hello!"

Observatii1. Este bine ca numele utilizator, sa fie alese cat mai

sugestiv pentru scopul utilizarii;

2. Se obisnuieste ca numele constantelor simbolice sa fie compuse din majuscule

3. O constanta simbolica se defineste prin directiva #define, fiind recunoscuta in toate liniile de program ce urmeaza definirii;

4. Preprocesorul, anterior compilarii, inlocuieste orice aparitie a unei constante simbolice cu definitia sa

Page 11: Curs Programare C

2010/2011 - Suceava

[ date::structuri::functii ]

Limbajul C[ cuvinte

cheie ]

Tabela cuvintelor cheie contine 32 cuvinte cheie, dintre care • 27 provin din standardul initial Kernighan - Ritchie, iar • 5 au fost adaugate de comitetul ANSI ( enum, const,

signed, void, volatile ); Limbajele de nivel inalt au de obicei mult mai multe cuvinte

cheie, de exemplu BASIC dispune de peste 100

auto double int struct

break else long switch

case enum register typedef

char extern return union

const float short unsigned

continue for signed void

default goto sizeof volatile

do if static while

Tabela cuvintelor rezervate - proprii compilatorului de C: nume de registri, moduri de compilare, etc

asm _cs _BH _DH

cdecl _ds _BL _DI

far _es _BP _DL

huge _ss _BX _DX

interrupt _AH _CH _FLAGS

near _AL _CL _SI

pascal _AX _CX _SP

Page 12: Curs Programare C

2010/2011 - Suceava

[ date::structuri::functii ]

Limbajul C[ constante

numerice ]

Constantele numerice pot avea in componenta cifre si/sau caracterele

. + - E e f

Constantele nu au semn explicit: +12 sau -12

sunt expresii formate din cate o constanta precedata de operatorii unari +, respectiv -.

Constantele ocupa un spatiu de memorie minim, corespunzator tipului numeric caruia ii apartin

Constantele numerice pot fi:ü intregi - implicit in baza 10 ( zecimal );

• in baza 8 ( octal ) sunt precedate de 0, • in baza 16 ( hexazecimal ) de 0x;

Exemple: • 1, 29, 123123123, 0237 ( in octal ), • 0xffab ( in hexazecimal ); • aceeasi constanta in trei baze diferite:

255 0377 0xFFü reale - pot avea doar mantisa sau mantisa si exponent (

exponentul este precedat de litera e sau E si reprezinta puterea lui 10 );

Exemplu • o constanta in patru scrieri echivalente:

12.345 12.345f .12345E+2 1.2345e1 12345e-3

Page 13: Curs Programare C

2010/2011 - Suceava

[ date::structuri::functii ]

Limbajul C[ constante

caracter ]

Constantele caracter se precizeaza intre apostrofuri. O constanta caracter ocupa un spatiu de 2 octeti

• primul este 0, • al doilea codul ASCII al caracterului.

Caracterul poate fi:• un simbol grafic sau codul sau ASCII in hexazecimal sau octal

dupa \; Exemple: • 'A' '\x41' '\101' ( sunt echivalente ); • caracterele \ ' " se reprezinta constantele: '\\' '\'' '"‘

• un simbol fara echivalent grafic, dat ca secventa escape: '\n' '\xa' '\12' ( sunt echivalente ).

Constantele sir se precizeaza intre ghilimele.

Fiecare caracter din sir poate fi un simbol grafic, o secventa escape sau un cod ASCII ( in octal sau hexazecimal ).

Spatiul ocupat este un numar de octeti cu unu mai mare decat al caracterelor din sir, ultimul octet fiind rezervat pentru terminatorul de sir:

• caracterul cu codul ASCII 0, adica '\0'.

Exemple: • "CURS" "\x43URS" ( scrieri echivalente ale unui sir ce ocupa

5 octeti );• "1a24\t" "\x31\x61\x32\x34\11" ( scrieri echivalente ale

unui sir ce ocupa 6 octeti )• "'\"" ( sir ce contine caracterele ' " si terminatorul, deci

ocupa 3 octeti )

Page 14: Curs Programare C

2010/2011 - Suceava

[ date::structuri::functii ]

Limbajul C[ lista

operatorilor ]

Operatorii sunt formati din caracterele din tabela de simboluri grafice, prezentati mai jos.

Ca semn de punctuatie, limbajul C foloseste simbolul ; care termina instructiunile si nu le separa ca in PASCAL --lucru care duce la scaderea erorilor de sintaxa.

Operatori si semnede punctuatie

! " # % & ' ( ) * + , - . / : ; < = > ? [ ] \^ { } | ~

Operator Asociativitate(expr) [index] -> . Stanga==> Dreapta! ~ ++ -- (type) sizeofUnary operator: + - * & Dreapta<== Stanga

* / % Stanga==> Dreapta+ - Stanga==> Dreapta<< >> Stanga==> Dreapta< <= > >= Stanga==> Dreapta== != Stanga==> DreaptaBinary operator: & Stanga==> DreaptaBinary operator: ^ Stanga==> DreaptaBinary operator: | Stanga==> Dreapta&& Stanga==> Dreapta|| Stanga==> Dreaptaexpr ? true_expr : false_expr Dreapta<== Stanga+= -= *= /= <<=&= ^= |= %= >>= = Dreapta<== Stanga

, Stanga==> Dreapta

Page 15: Curs Programare C

/* Program: Informatii despre …** Author(s): Remus PRODAN*/ Date: 1/24/2008#include <stdio.h>

int main( void ) {

printf(“\nHello world”);return 0;

}

Directivepreprocesor

Comentarii

Functiamain() indicand

inceputulprogramului Sfarsitul executiei

main() ce corespundecu sfarsitul programului

afisare peconsola de iesire

Structura celui mai simplu program Cin Borland C++ 3.1

Limbajul C[ primul program ]

2010/2011 - Suceava

[ date::structuri::functii ]

Page 16: Curs Programare C

Limbajul C[ structura unui

program ]

2010/2011 - Suceava

[ date::structuri::functii ]

Un program C este compus dintr-o ierarhie de functii.

Orice program trebuind sa contina cel putin functia main, acesta fiind prima functie care se executa la lansarea programului C.

Un program C are, in principiu, urmatoarea structura:

• directive preprocesor

• definitii de tipuri

• prototipuri de functii -- un prototip declara tipul unei functii ( tipul valorii returnate ) si tipurile parametrilor transmisi functiei

• definitii de variabile globale

• 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 tipur

• definitii de variabile globale

• definitia functiei main

Page 17: Curs Programare C

û

/*is written in C? */#include <stdio.h>int l;int main(int o,char **O,int I){char c,*D=O[1];if(o>0){for(l=0;D[l ];D[l++]-=10){D [l++]-=120;D[l]-=110;while (!main(0,O,l))D[l]+= 20; putchar((D[l]+1032)/20 ) ;}putchar(10);}else{c=o+ (D[I]+82)%10-(I>l/2)*(D[I-l+I]+72)/10-9;D[I]+=I<0?0:!(o=main(c/10,O,I-1))*((c+999)%10-(D[I]+92)%10);}return o;}

Cum nu trebuie sa programam in C

dupa compilare

– la executie

Limbajul C[ contraindicatii

]

2010/2011 - Suceava

[ date::structuri::functii ]

Se poate programa in diferite stiluri ,utilizand limbajul C, dar nu se recomanda stilul practicat de mai jos

Page 18: Curs Programare C

û

main() { char *s="main() { char *s=%c%s%c; printf(s,34,s,34); }"; printf(s,34,s,34); }

Cod autoreproductibil in limbajul C

Limbajul C[ curiozitati ]

2010/2011 - Suceava

[ date::structuri::functii ]

Page 19: Curs Programare C

2010/2011 - Suceava

[ date::structuri::functii ]

Limbajul C[ tipuri de date

fundamentale ]

Un tip de date reprezinta o multime de valori pe care sunt definite anumite operatii.

Limbajul C defineste urmatoarele tipuri:1. fundamentale ( aritmetice )

• intregi, • reale, • enumerare, • void

2. derivate • tablou, • functie, • pointer, • structura, • uniune.

Majoritatea limbajelor de nivel inalt definesc tipurile de mai sus. Noutatea o constituie tipul void.

In schimb limbajul C nu defineste tipurile multime, sir de caractere ( existente in PASCAL ).

Tipul void

Tipul void poate insemna:1. nimic - cand se foloseste pentru functii care nu

returneaza nici un rezultat2. orice - cand se foloseste pentru pointeri care indica

spre entitati cu tip neprecizat.

Page 20: Curs Programare C

2010/2011 - Suceava

[ date::structuri::functii ]

Limbajul C[ tipuri de date

fundamentale ]

Tipuri intregi

La baza clasificarii tipurilor intregi stau doua criterii:1. dimensiunea memoriei utilizate pentru reprezentarea unei

valori: • 1 octet -char, • 2 octeti - int, • 4 octeti – long

2. modalitatea de tratare a valorii:• cu semn - signed: este modul implicit,

• bitul cel mai semnificativ este considerat bit de semn;

• valoarea 0 a acestuia inseamna o valoare pozitiva, iar

• valoarea 1, o valoare negativa; • reprezentarea valorilor se face in complement

fate de 2• fara semn - unsigned:

• toti bitii reprezentarii fac parte din valoarea numarului.

Pe urmatorul slide este prezentat un tablou al tipurilor intregi.

Pentru fiecare tip fiind precizate • valoarea minima si maxima, • scrise in

• zecimal, • hexazecimal si • binar:

Page 21: Curs Programare C

û

Limbajul C[ tipuri intregi ]

2010/2011 - Suceava

[ date::structuri::functii ]

Tip intreg nr octeti / nr biti

valoare minimazecimal hexa binar

valoare maximazecimal hexa binar

char (signed char)unsigned char 1 8 -128 0x80 -27

0 0x0 0127 0x7F 27-1255 0xFF 28-1

int ( signed int )unsigned int 2 16 -32768 0x8000 -215

0 0x0 032767 0x7FFF 215-165535 0xFFFF 216-1

long (signed long)unsigned long 4 32 -2147483648 0x80000000 -231

0 0x0 02147483647 0x7FFFFFFF 231-14294967295 0xFFFFFFFF 232-1

Tipurile char(signed char)si unsigned char sunt cele pentru care se aloca cel mai mic spatiu de memorie, 1 octet.

De cele mai multe ori valorile de aceste tipuri se interpreteaza ca reprezentand coduri de caractere, dar se folosesc si pentru memorarea intregilor de valori mici.

ExempluDaca o variabila trebuie sa retina un numar de apartament, de exemplu, poate fi declarata de tipul char.

Page 22: Curs Programare C

û

Limbajul C[ tipuri intregi ]

2010/2011 - Suceava

[ date::structuri::functii ]

Constantele intregi se reprezinta implicit in baza 10 si de tipul signed, care pentru reprezentare cere spatiu minim:

• 10000 (este int), • 65000 (este long ).

Pentru reprezentarea contantelor fara semn se foloseste sufixul u sau U:

• 32780 ( este long), • 32780u ( este unsigned int ).

Pentru reprezentarea constantelor in hexazecimal se foloseste prefixul 0x sau 0X:

• 0x8adf ( int ), • 0x1F111 ( long ).

Pentru reprezentarea constantelor in octal se foloseste prefixul 0 ( ZERO):

• 0721 ( int ), • 07111111 ( long ).

Constantele caracter au fost deja prezentate.

Fiecare constanta caracter ocupa 1 octet de memorie, continand toti cei 8 biti reprezentand codul ASCII al caracterului.

Page 23: Curs Programare C

û

Limbajul C[ tipuri reale ]

2010/2011 - Suceava

[ date::structuri::functii ]

Valorile reale sunt reprezentate in virgula mobila.

Trebuie semnalat faptul ca nu toate numerele reale pot fi reprezentate, deoarece memorarea valorilor reale, fiind realizata pe un numar anume de biti, nu poate retine decat o parte dintre cifrele semnificative.

Deci, numai anumite valori reale au reprezentarea exacta in calculator, restul confundandu-se cu reprezentarea cea mai apropiata.

Exista trei tipuri reale:• float,• double,• long double, cu caracteristici prezentate in tabelul

de mai jos.

Valorile minime si maxime sunt date in modul; • pentru fiecare dintre tipurile reale, pot fi reprezentate

valori intre [-valmax, valmax], • iar toate valorile intre (-valmin,valmin) se confunda

cu zero.

Tip real nr octeti/nr biti

valoare minima

valoare maxima

nr cifre semnificat.

float 4 32 3.4E-38 3.4E38 6

double 8 64 1.7E-308 1.7E308 15

long double 10 80 3.4E-4932 1.1E4932 18

Page 24: Curs Programare C

û

Limbajul C[ tipuri reale ]

2010/2011 - Suceava

[ date::structuri::functii ]

Constantele reale sunt implicit de tipul double;

Sufixul f sau F aplicat unei constante, o face de tipul float;Sufixul l sau L aplicat unei constante, o face de tipul long double.

O constanta reala ( double, pentru celelate doua tipuri reale, se adauga sufixul corespunzator ) se reprezinta sub forma:

• mantisasau perechea:

• mantisa parte_exponent

unde :mantisa = parte_intr.parte_zecimala ( oricare din cele doua parti poate lipsi, dar nu ambele )

exponent = e val_exponent sau E val_exponent

ObservatieValoarea constantei este produsul dintre mantisa si 10 la puterea data de exponent.

In tabelul de mai jos apar cateva exemple de constante reale:

Constante detip float

Constante de tip double

Constante de tip long double

1.f 1. 1.L

.241f .241 .241l

-12.5 e 5f -12.5 e 5 -12.5 e 5l

98. E -12f 98. E -12 98. E -12L

Page 25: Curs Programare C

û

Limbajul C[ definirea

variabilelor ]

2010/2011 - Suceava

[ date::structuri::functii ]

VARIABILE

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:• inaintea functiilor, caz in care sunt globale, deci pot fi

folosite de functii, sau • in corpul functiilor, inainte de prelucrari, caz in care

sunt locale functiei respective.

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.

Page 26: Curs Programare C

Limbajul C[ definirea

variabilelor ]

2010/2011 - Suceava

[ date::structuri::functii ]

Exemplu

char c1;char car1 = 'a',car2= car1 + 1;/* car2 se initializeaza cu 'b' */float real = 1.74, coef;

/*Observatie:In declaratia:

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 */

Definirea variabilelor se face:

<tip> <lista_declaratori>; /* tip poate fi oricare din tipurile elementare de mai sus sau derivate */

<lista_declaratori> <declarator> [ ,<declarator> ]/*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 */

Page 27: Curs Programare C

û

Limbajul C[ functii de citire

si scriere ]

2010/2011 - Suceava

[ date::structuri::functii ]

Afisarea pe consola

int printf( format, arg1, arg2, ... );Functia afiseaza valorile expresiilor din lista argumentelor, conform formatului specificat, unde argumentele pot fi:

• constante, • variabile, • expresii.

Formatul este un sir de caractere care trebuie sa includa cate un descriptor de format pentru fiecare din argumente.

Caracterele din format care nu fac parte din descriptori se tiparesc pe ecran.

Daca nu apare nici un argument, pe ecran se tiparesc doar caracterele din sirul format.

Functia returneaza numarul de valori tiparite sau EOF in cazul unei erori.

Descriptor Reprezentare%c caracter%d %i intreg in zecimal%u intreg in zecimal fara semn%o intreg in octal%x intreg in hexazecimal%ld %li%lu%lo %lx

cu semnificatiile de mai sus, pentru intregi lungi

%f %e float; pentru %e - o cifra la partea intreaga%lf %le double%Lf %Le long double

printf( “\nSuma lui %d + %d este %d”, x1, y1, x1+y1 );

Page 28: Curs Programare C

û

Limbajul C[ functii de citire

si scriere ]

2010/2011 - Suceava

[ date::structuri::functii ]

Citirea de la terminal

int scanf( format, adr1, adr2 ,...);

Functia citeste informatiile tastate pe care le interpreteaza conform specificatorilor din format, memorand valorile citite la adresele transmise ca parametri.

Formatul este un sir de caractere care trebuie sa includa cate un descriptor de format pentru fiecare dintre valorile citite.

Adresele sunt pointeri sau adresele variabilelor ale caror valori se citesc;

Observatii1. Adresa unei variabile se obtine folosind operatorul de

adresare &, astfel: &nume_variabila

2. Functia returneaza numarul de valori citite sau EOF daca s-a tastat Ctrl/Z.

3. Valorile intregi sau reale consecutive introduse de la tastatura trebuie separate de cel putin un Enter sau spatiu.

4. Atunci cand folosim printf sau scanf va trebui sa includem fisierul header stdio.h: #include <stdio.h>

int a;float real;char sir[20];scanf( “%d%f%s”, &a, &real, sir);

Page 29: Curs Programare C

Limbajul C[ DEMO ]

2010/2011 - Suceava

[ date::structuri::functii ]

PROBLEMA

Scrieti un program in Limbajul C ce va citi de la consola 3 valori reale si va afisa media aritmetica a valorilor citite.

ObservatieProblema va fi rezolvata ( daca va fi posibil ) in timpul cursului pentru a exemplifica modul de lucru cu mediul IDE Borland C++ 3.1, sau alte medii de programare in C (Code::Blocks, Visual Studio, GCC, etc )