curs 3 - phys.ubbcluj.rovasile.chis/cursuri/info/c03ppt.pdf · jocuri, etc. - nu este specializat...

32
CURS 3 Limbajul C - dezvoltat între anii 1969-1973 (D.M.Ritchie – AT&T Bell Laboratories), o dată cu dezvoltarea sistemului de operare Unix. (Ken Thompson & D.M.Ritchie); - 1972 - anul "naşterii" limbajului C. - 1973 - elementele esenţiale ale limbajului C au fost complete - 1977-1979 schimbari majore - 1978 – apare cartea "The C programming language" scrisă de către B.W.Kernighan, D.M.Ritchie - 1983 incepe standardizarea limbajului C de către ANSI (American National Standards Institute) - 1989 - a apărut ANSI C. (C89) Bibliografie suplimentara https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6- 087-practical-programming-in-c-january-iap-2010/lecture-notes/

Upload: others

Post on 04-Oct-2019

8 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: CURS 3 - phys.ubbcluj.rovasile.chis/cursuri/info/c03ppt.pdf · jocuri, etc. - nu este specializat pe un domeniu particular de aplicaţii - control modern al funcţiilor şi al structurilor

CURS 3

Limbajul C - dezvoltat între anii 1969-1973 (D.M.Ritchie – AT&T Bell Laboratories), o dată cu dezvoltarea sistemului de operare Unix. (Ken Thompson & D.M.Ritchie); - 1972 - anul "naşterii" limbajului C. - 1973 - elementele esenţiale ale limbajului C au fost complete - 1977-1979 schimbari majore - 1978 – apare cartea "The C programming language" scrisă de către B.W.Kernighan, D.M.Ritchie - 1983 incepe standardizarea limbajului C de către ANSI (American National Standards Institute) - 1989 - a apărut ANSI C. (C89)

Bibliografie suplimentara https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-087-practical-programming-in-c-january-iap-2010/lecture-notes/

Page 2: CURS 3 - phys.ubbcluj.rovasile.chis/cursuri/info/c03ppt.pdf · jocuri, etc. - nu este specializat pe un domeniu particular de aplicaţii - control modern al funcţiilor şi al structurilor

Avantaje

1. limbaj de programare de scop general => dezvoltarea de aplicaţii diverse: soft ştiinţific, soft pentru gestiunea bazelor de date, editoare de texte, jocuri, etc. - nu este specializat pe un domeniu particular de aplicaţii - control modern al funcţiilor şi al structurilor de date - set bogat de operatori 2. permite o foarte bună portabilitate a programelor 3. permite programarea structurată (modulară) 4. permite scrierea softului de bază (programare de sistem) 5. oferă posibilitatea lucrului pe biţi şi a calculului adreselor 6. ofera posibilitatea managementului memoriei 7. compilarea si rularea se face mai rapid decat in cazul altor limbaje 8. C ca si baza => C++ => Java => C# (Python) “But C is a bit like Latin and ancient Greek, since it is the foundation many modern languages were built on, it is still useful to know even if you won’t use it directly”. https://www.quora.com/What-are-the-advantages-of-learning-C-language

Page 3: CURS 3 - phys.ubbcluj.rovasile.chis/cursuri/info/c03ppt.pdf · jocuri, etc. - nu este specializat pe un domeniu particular de aplicaţii - control modern al funcţiilor şi al structurilor

Elementele limbajului C Exemple

Semnifica executie cu succes

Page 4: CURS 3 - phys.ubbcluj.rovasile.chis/cursuri/info/c03ppt.pdf · jocuri, etc. - nu este specializat pe un domeniu particular de aplicaţii - control modern al funcţiilor şi al structurilor

Categorii de elemente

Comentarii - note explicative (adnotări) în program - complet ignorate de către compilator - şiruri de caractere (pot fi şi caractere speciale sau cuvinte cheie) cuprinse între /* */ sau care se găsesc pe un singur rând după caracterele //

Page 6: CURS 3 - phys.ubbcluj.rovasile.chis/cursuri/info/c03ppt.pdf · jocuri, etc. - nu este specializat pe un domeniu particular de aplicaţii - control modern al funcţiilor şi al structurilor

- folosiţi pentru a denumi variabile, constante, funcţii, structuri de date, etc. - = succesiuni de caractere alfanumerice, primul caracter trebuind să fie literar

- in C, de ex., S s - un identificator poate conţine oricâte caractere dar sunt luate în considerare doar

primele 32 caractere - nu pot conţine caractere speciale:

+ - / ^ < > ( ) [ ] { } . , : ; ' # $ @ - spatiu

Identificatori (nume)

Recomandare - sa fie sugestivi - x2: x2, xx, xla2, xp, etc.

Exemple: a, suma, SUMA, m2, nr_stud_an1f, NrStudAn1F 2x, a*b, if

Obs. Identificatorii care încep cu _ sau conţin _ _ sunt folositi pentru implementare şi pentru librăriile standard în C şi C++.

Page 7: CURS 3 - phys.ubbcluj.rovasile.chis/cursuri/info/c03ppt.pdf · jocuri, etc. - nu este specializat pe un domeniu particular de aplicaţii - control modern al funcţiilor şi al structurilor

- nume simbolice asociate unor locaţii de memorie - valorile lor pot fi modificate prin instrucţiuni ale programului - declararea (definirea) variabilelor constă în precizarea tipului şi numelui lor.

Variabile

Exemple:

Page 8: CURS 3 - phys.ubbcluj.rovasile.chis/cursuri/info/c03ppt.pdf · jocuri, etc. - nu este specializat pe un domeniu particular de aplicaţii - control modern al funcţiilor şi al structurilor

Variabile globale - variabile declarate in afara functiei main - se initializeaza automat cu zero

Exercitiu Scrieti programul pentru transformarea oC->oF

Page 9: CURS 3 - phys.ubbcluj.rovasile.chis/cursuri/info/c03ppt.pdf · jocuri, etc. - nu este specializat pe un domeniu particular de aplicaţii - control modern al funcţiilor şi al structurilor

Constante - valori care nu pot fi modificate în decursul programului constante simbolice

constante obiect

Constante simbolice

- se definesc cu directiva define - constante fara tip

Directiva define - stabileşte (defineşte) un nume simbolic pentru o anumită valoare - se compune din: cuvântul cheie #define, o denumire simbolică, o valoare - nu se termină cu ; - autorizează substituţia pe care o defineşte din punctul în care este scrisă până

la sfârşitul fişierului sursa sau până la întâlnirea unei directive undef.

Page 10: CURS 3 - phys.ubbcluj.rovasile.chis/cursuri/info/c03ppt.pdf · jocuri, etc. - nu este specializat pe un domeniu particular de aplicaţii - control modern al funcţiilor şi al structurilor

- constante cu tip - Se declara folosind cuvântul cheie const urmat de tipul constantei şi de un

identificator iniţializat. - declararea acestor constante se termină cu caracterul ;

Constantele obiect

Exemplu

O constantă de tip char (caracter) este un întreg, scris ca un singur caracter între două simboluri '. Valoarea constantei caracter este valoarea caracterului respectiv în setul de caractere ASCII (American Standard Code for Information Interchange). Astfel, de exemplu, '0' are valoarea 48, 'A' are valoarea 65, iar 'a' are valoarea 97.

Page 11: CURS 3 - phys.ubbcluj.rovasile.chis/cursuri/info/c03ppt.pdf · jocuri, etc. - nu este specializat pe un domeniu particular de aplicaţii - control modern al funcţiilor şi al structurilor

- părţi (linii) de program care prin compilare produc acţiuni (coduri) executabile - se termină cu caracterul ; - terminator de instrucţiune - lipsa caracterului ; este semnalata la începutul liniei următoare

Instrucţiuni

Page 12: CURS 3 - phys.ubbcluj.rovasile.chis/cursuri/info/c03ppt.pdf · jocuri, etc. - nu este specializat pe un domeniu particular de aplicaţii - control modern al funcţiilor şi al structurilor

Exemple

► In urma execuţiei programului se tipăresc valorile de la 5 la 105 ► Dacă nu se pun acolade la while se va tipări doar valoarea 105

Page 13: CURS 3 - phys.ubbcluj.rovasile.chis/cursuri/info/c03ppt.pdf · jocuri, etc. - nu este specializat pe un domeniu particular de aplicaţii - control modern al funcţiilor şi al structurilor

- construcţii formate din operanzi şi operatori. - au valori şi tipuri - valorile şi tipurile expresiilor sunt determinate de către valorile şi tipurilor

operanzilor şi de către operatorii care compun expresia.

Expresii

Exemplu b*b-4*a*c expresie a , b , c operanzii expresiei *, - operatorii expresiei delta = b*b - 4*a*c ; instrucţiune prin care se atribuie variabilei delta rezultatul evaluarii expresiei b2 - 4ac

Operanzii pot fi : - constante - identificatori (nume) de variabile - nume de tipuri de date - apeluri de funcţii - expresii cuprinse între paranteze rotunde

Page 14: CURS 3 - phys.ubbcluj.rovasile.chis/cursuri/info/c03ppt.pdf · jocuri, etc. - nu este specializat pe un domeniu particular de aplicaţii - control modern al funcţiilor şi al structurilor

Funcţii

- grupuri de instrucţiuni recunoscute sub un anumit nume - realizează acţiuni şi întorc (returnează) valori programului principal (funcţiei

principale) sau altei funcţii apelante. - se apelează prin nume şi lista lor de parametri.

Parametrii funcţiilor sau valorile cu care sunt apelate transferă informaţia din exteriorul funcţiilor în interiorul lor.

Valorile pe care le returnează funcţiile nu trebuie folosite în mod obligatoriu (vezi de ex. funcţiile scanf() şi printf())

Funcţia principală returnează valori sistemului de operare, acesta fiind programul apelant al ei. Anumite funcţii standard sunt gata scrise şi prototipurile lor se găsesc în bibliotecile limbajului

(header files).

<stdio.h> - conţine funcţii standard de intrare ieşire (I/O): printf, scanf, getch, ... <stdlib.h> - conţine funcţii standard precum: abort, exit, rand, atoi, itoa,... <string.h> - conţine funcţii pentru prelucrarea şirurilor de caractere: strcpy, strlen, strcmp, strcat,... <math.h> - conţine funcţii matematice: cos, sin, pow, fabs, abs, ... <graphics.h> - conţine funcţii pentru gestiunea ecranului în mod grafic (initgraph, putpixel, line, outtext, outtextxy , cleardevice, ...) <conio.h> - conţine funcţii standard de intrare ieşire de la consolă (clrscr, getch, getche, gotoxy, putch, wherex, wherey,...) <time.h> - conţine funcţii pentru gestiunea orei şi a datei sistemului de calcul (gettime, settime, ctime,...) <dos.h> - conţine funcţii pentru interacţiunea cu sistemul de operare DOS (setdrive, inport, outport) … etc.

Page 15: CURS 3 - phys.ubbcluj.rovasile.chis/cursuri/info/c03ppt.pdf · jocuri, etc. - nu este specializat pe un domeniu particular de aplicaţii - control modern al funcţiilor şi al structurilor

Funcţia itoa (nu este suportată de toate compilatoarele)

Page 16: CURS 3 - phys.ubbcluj.rovasile.chis/cursuri/info/c03ppt.pdf · jocuri, etc. - nu este specializat pe un domeniu particular de aplicaţii - control modern al funcţiilor şi al structurilor

Structura funcţiilor

Antetul - tipul valorii pe care o returnează funcţia + numele funcţiei + lista parametrilor funcţiei

(tipul şi numele variabilelor funcţiei) Corpul de instructiuni - grupul de instrucţiuni care se execută la apelul funcţiei respective.

Page 17: CURS 3 - phys.ubbcluj.rovasile.chis/cursuri/info/c03ppt.pdf · jocuri, etc. - nu este specializat pe un domeniu particular de aplicaţii - control modern al funcţiilor şi al structurilor

Apelul functiilor - prin nume şi lista de parametri. La apelul funcţiei, controlul programului este pasat acelei funcţii. La întâlnirea instrucţiunii return în interiorul unei funcţii se face saltul în afara funcţiei, controlul fiind preluat de către funcţia main, din locul imediat următor celui în care a fost apelată funcţia din care se face saltul.

Page 18: CURS 3 - phys.ubbcluj.rovasile.chis/cursuri/info/c03ppt.pdf · jocuri, etc. - nu este specializat pe un domeniu particular de aplicaţii - control modern al funcţiilor şi al structurilor

Funcţia main - partea principală a unui program C - este apelată şi lansată în execuţie de către sistemul de operare.

Funcţii recursive - functii care se autoapelează - se folosesc la definirea proceselor recursive.

Proces este recursiv - proces care are o parte care se defineşte prin el însuşi.

Page 19: CURS 3 - phys.ubbcluj.rovasile.chis/cursuri/info/c03ppt.pdf · jocuri, etc. - nu este specializat pe un domeniu particular de aplicaţii - control modern al funcţiilor şi al structurilor

Exemple Funcţia factorial dacă n==0 fact(n)=1 <- aceasta este partea apelului recursiv care nu se defineşte prin el însuşi (partea definită direct) altfel fact(n)=n*fact(n-1) <- se defineşte funcţia fact prin ea însăşi

Cel mai mare divizor comun dacă a%b==0 cmmdc(a,b)=b altfel cmmdc(a,b)=cmmdc(b,a%b)

Funcţia fact recursivă:

Funcţia cmmdc recursivă: Recursivitatea nu conduce la coduri mai rapide şi nici la necesităţi de memorie mai mici. - convenabila pentru structuri de date definite recursiv (arbori) Codurile recursive sunt mai compacte şi uneori mai uşor de înţeles.

Page 20: CURS 3 - phys.ubbcluj.rovasile.chis/cursuri/info/c03ppt.pdf · jocuri, etc. - nu este specializat pe un domeniu particular de aplicaţii - control modern al funcţiilor şi al structurilor

- colecţii de valori de acelaşi tip - plasate in zone contigue de memorie - elementele - pot fi referentiate si accesate individual folosind un index - sunt indexate de la 0 la n-1 unde n reprezintă dimensiunea tabloului

Este declarat un tablou unidimensional de 5 elemente şi elementele tabloului sunt apoi iniţializate cu valoarea 0.

Exemple

Tablouri

int a[5]; int i; for(i=0;i<5;i++) a[i]=0;

float medii[10]; medii[10]=9.85;

float x[6]; x[1] = 12; x[2]=34; … x[5] = 14; //x[0] = nedefinit !! float x[6] = {12, 34, 1, 9, 14} //rezultă: x[0] = 12; ... x[4] = 14; şi x[5] = nedefinit !!

Page 21: CURS 3 - phys.ubbcluj.rovasile.chis/cursuri/info/c03ppt.pdf · jocuri, etc. - nu este specializat pe un domeniu particular de aplicaţii - control modern al funcţiilor şi al structurilor

Care va fi output-ul urmatorului program

Page 22: CURS 3 - phys.ubbcluj.rovasile.chis/cursuri/info/c03ppt.pdf · jocuri, etc. - nu este specializat pe un domeniu particular de aplicaţii - control modern al funcţiilor şi al structurilor

Care va fi output-ul urmatorului program

Fara _kbhit() si fara <conio.h>

Page 23: CURS 3 - phys.ubbcluj.rovasile.chis/cursuri/info/c03ppt.pdf · jocuri, etc. - nu este specializat pe un domeniu particular de aplicaţii - control modern al funcţiilor şi al structurilor

Tema: Modificati programul de mai sus astfel incat sa se tipareasca notatia tablei de sah:

Page 24: CURS 3 - phys.ubbcluj.rovasile.chis/cursuri/info/c03ppt.pdf · jocuri, etc. - nu este specializat pe un domeniu particular de aplicaţii - control modern al funcţiilor şi al structurilor

- tablouri cu elemente de tip char (caractere).

Şiruri de caractere

Exemple: #include <string.h>

.....................

char nume[20];

.....................

gets(nume);

....................

puts(nume);

....................

char nume[20], prenume[20]; char nume[20] = "Popescu";

Şirurile de caractere trebuie cuprinse între " ".

Dacă avem declaraţia: char nume[20] = "Popescu”;

Atunci o reiniţializare de forma: nume = "Ionescu"

va produce o eroare.

# include <stdio.h>

.................

char nume[20] = "Popescu";

.................

strcpy (nume, "Ionescu");

.................

Iniţializare şirurilor: - la declararea lor - folosind funcţia strcpy (string copy)

Citirea şi tipărirea şirurilor - cu funcţiile gets( ) şi puts( )

Page 25: CURS 3 - phys.ubbcluj.rovasile.chis/cursuri/info/c03ppt.pdf · jocuri, etc. - nu este specializat pe un domeniu particular de aplicaţii - control modern al funcţiilor şi al structurilor

Un şir de caractere este terminat cu caracterul NULL (caracterul '\0').

Sirul de caractere "Programare" este stocat în tabloul de caractere sircar[] după cum urmează: char sircar[DIM]

sircar[0]='P'; sircar[1]='r'; sircar[2]='o’;

sircar[3]='g‘ sircar[4]='r' sircar[5]='a';

sircar[6]='m'; sircar[7]='a'; sircar[8]='r’

sircar[9]='e'; sircar[10]=‘\0';

Exemplu

Caracterul NULL - este scris folosind secvenţa escape '\0’ - este definit în <stdio.h>

- valoarea sa ASCII este 0.

printf("String1:\t");

strcpy(S1,"testare\0siruri"); //’\0’ = NULL

printf("\n%s",S1);

l1=strlen(S1);

printf("\nLungimea sirului 1: %d\n",l1);

Exemple printf("String1:\t");

strcpy(S1,"testare\\0siruri"); //’\0’ = NULL

printf("\n%s",S1);

l1=strlen(S1);

printf("\nLungimea sirului 1: %d\n",l1);

Page 26: CURS 3 - phys.ubbcluj.rovasile.chis/cursuri/info/c03ppt.pdf · jocuri, etc. - nu este specializat pe un domeniu particular de aplicaţii - control modern al funcţiilor şi al structurilor

strcmpy

int strcmp ( const char * str1, const char * str2 );

Compare two strings Compares the C string str1 to the C string str2. This function starts comparing the first character of each string. If they are equal to each other, it continues with the following pairs until the characters differ or until a terminating null-character is reached. This function performs a binary comparison of the characters. Parameters str1

C string to be compared. str2

C string to be compared. Return Value Returns an integral value indicating the relationship between the strings: A zero value indicates that both strings are equal. A value greater than zero indicates that the first character that does not match has a greater value in str1 than instr2; And a value less than zero indicates the opposite.

http://www.cplusplus.com/reference/

strcmp este utila la ordonarea alfabetica a cuvintelor!

Exemplificare strcmp() si strlen()

Page 27: CURS 3 - phys.ubbcluj.rovasile.chis/cursuri/info/c03ppt.pdf · jocuri, etc. - nu este specializat pe un domeniu particular de aplicaţii - control modern al funcţiilor şi al structurilor

strlen size_t strlen ( const char * str ); Get string length Returns the length of the C string str. The length of a C string is determined by the terminating null-character: A C string is as long as the number of characters between the beginning of the string and the terminating null character (without including the terminating null character itself). This should not be confused with the size of the array that holds the string. For example: char mystr[100]="test string"; defines an array of characters with a size of 100 chars, but the C string with which mystr has been initialized has a length of only 11 characters. Therefore, while sizeof(mystr) evaluates to 100, strlen(mystr) returns 11. In C++, char_traits::length implements the same behavior. Parameters str

C string. Return Value The length of string.

http://www.cplusplus.com/reference/ Exemplificare strcmp() si strlen()

Page 28: CURS 3 - phys.ubbcluj.rovasile.chis/cursuri/info/c03ppt.pdf · jocuri, etc. - nu este specializat pe un domeniu particular de aplicaţii - control modern al funcţiilor şi al structurilor

- coduri de control (spaţii albe), folosite pentru specificarea formatelor de scriere a datelor - constau din combinaţii dintre un caracter backslash \ urmat de o literă sau de o combinaţie de cifre .

Secvenţe escape

Setul de secvente escape în C: Unele secvenţe escape sunt specifice perifericelor folosite. \v (tabulator vertical) şi \f (pagină nouă la imprimantă) nu afectează formatul de ieşire al datelor pe monitor ci numai la imprimantă.

Exemple: printf("\nSuma celor %d numere este %g\t\a“,n,s); Suma celor 5 numere este 43.75 ♫_ (cursor)

Page 29: CURS 3 - phys.ubbcluj.rovasile.chis/cursuri/info/c03ppt.pdf · jocuri, etc. - nu este specializat pe un domeniu particular de aplicaţii - control modern al funcţiilor şi al structurilor

printf("\n\tSem I\t\tSem II");

for(i=1; i<=nrstud; i++)

printf("\n%d:\t%5.2f\t\t%5.2f",i,medsem1[i],medsem2[i]);

Sem I Sem II

1: 8.75 5.25

2: 10.00 10.00

3: 5.30 6.67

...................................................

#define fis_intrare "d:\\fiz1r\\centru.dat“ Pentru despărţirea directoarelor într-o cale de directoare scrisă într-un program C trebuie folosite două caractere backslash (\\).

Page 30: CURS 3 - phys.ubbcluj.rovasile.chis/cursuri/info/c03ppt.pdf · jocuri, etc. - nu este specializat pe un domeniu particular de aplicaţii - control modern al funcţiilor şi al structurilor

- cod standard de reprezentare a caracterelor ca valori întregi pe 7 biţi. - introdus pentru a se obţine o compatibilitate între tipuri diferite de echipamente folosite la procesarea datelor. - ASCII standard

- constă din 128 de numere întregi (reprezentate pe 7 biţi, cu valori între 0 şi 127) atribuite unor caractere (cele englezeşti), numere, semne de punctuaţie, celor mai uzuale caractere speciale şi unor coduri de control (comenzi) netipăribile (primele 32 de caractere).

- Codul ASCII extins - constă de asemenea din 128 numere întregi, cu valori între 128 şi 255 (pentru reprezentarea

lor folosindu-se toţi cei 8 biţi ai unui octet), care reprezintă caractere suplimentare din alte limbi, simboluri matematice, grafice, caractere speciale sau sau simboluri ale unor monede străine.

- Folosirea acestor coduri face posibilă şi prelucrarea caracterelor, nu numai a numerelor.

Codul ASCII (American Standard Code for Information Interchange)

Page 31: CURS 3 - phys.ubbcluj.rovasile.chis/cursuri/info/c03ppt.pdf · jocuri, etc. - nu este specializat pe un domeniu particular de aplicaţii - control modern al funcţiilor şi al structurilor

Codul ASCII standard

Page 32: CURS 3 - phys.ubbcluj.rovasile.chis/cursuri/info/c03ppt.pdf · jocuri, etc. - nu este specializat pe un domeniu particular de aplicaţii - control modern al funcţiilor şi al structurilor

Codul ASCII extins