Limbajul C CURS 1 Ş.l. Carmen Odubăşteanu
Bibliografie: curs.cs.pub.ro Programarea Calculatoarelor seria 1CC elf.cs.pub.ro/programare laboratoare si simulator http://posdru62485.discipline.upb.ro/ - curs detaliat Negrescu L - Limbajele C şi C++ pentru începători, volumul 1: Limbajul C, Ed. Albastră, Cluj-Napoca, 2002 Florian Moraru Programarea Calculatoarelor Brian W. Kernighan, Dennis M. Ritchie - The C Programming Language
Cuprins Introducere Algoritm şi obiectele acestuia Limbaje de programare Programare structurată Scheme logice, pseudocod Exemple Istoric limbaj C Elemente de bază ale limbajului C Tipuri de date şi constante Variabile şi operatori Expresii Funcţii I/O Instrucţiuni Directive de preprocesare Tablouri
Cuprins Funcţii Pointeri Vectori şi pointeri Funcţii şi pointeri Şiruri de caractere Structuri Alocare dinamică Fişiere text şi fişiere binare Tipuri generice Programe complexe. Compilări separate. Fişiere proiect. Convenţii de programare
Obiective Cursanţii vor dobândi următoarele abilităţi: Să scrie, să compileze şi să ruleze un program simplu C Să utilezeze corect elementele de bază ale limbajului C Să foloseasca tipurile structurate de date (vectori, matrici, structuri) Să proiecteze şi să implementeze programe modulare utilizând definirea de funcţii proprii Să acceseze memoria folosind pointeri Să acceseze şi să prelucreze date aflate in fişiere
Obiective Să proiecteze şi să implementeze programe complexe sub formă de proiecte Să testeze şi să depaneze un program C Să folosească un stil de scriere a programelor cât mai eficient (comentarii, codificări) Să treacă examenul de PC şi examenele de programare care vor urma în anii următori. Uraaaaaa!
Obiective Condiţiile pentru dobândirea acestor capabilităţi? Dar beneficiile?
Nota finală Prezenţa laborator Activitate laborator Teme de casă Cei care au temele asemănătoare 0 p Total din timpul semestrului: 4 p Examen final condiţie de intrare în examen: 50% din punctajul maxim din timpul semestrului
Introducere in programare x 2-2, x<0 F(x)= 3, x=0 x+2, x>0 x = {-3, 0,1,7, 2.23, etc} 100 valori Etape 1. Elaborare algoritm 2. Transpunere algoritm în limbaj de programare 3. Rulare şi... din nou etapa 1 dacă nu am obţinut ce trebuia
Algoritm Succesiune de etape ce se poate aplica mecanic pentru rezolvarea unei clase de probleme Redactare Scheme logice Pseudocod Mental cine îşi permite? Cerinţe Claritate fără ambiguităţi Generalitate pentru o întreagă clasă de probleme Finitudine furnizare rezultat în timp finit Obs: O problemă poate avea mai mulţi algoritmi de rezolvare cel mai bun?
Obiecte cu care lucrează algoritmii Date Intrare Ieşire După tipul lor: Întregi: 2, -4 Reale: 3.25 Logice: true şi false Caracter: y Şir de caractere: ab23_c Constante: date conţinute în program fără a fi citite sau calculate - π
Obiecte cu care lucrează algoritmii Variabile: nume unic, conţinut diferit Nume Tip Valoarea la un moment dat Locul în memorie (adresa) x1, x2, x3... -> x F(x1), F(x2), F(x3),... -> F x este de tipul real, are valoarea 3 la un moment dat şi se află în memorie la adresa 0xFF32
Obiecte cu care lucrează algoritmii Expresii Construite cu constante, variabile, operatori De mai multe tipuri, ca şi variabilele: 3*x+7, x<y, etc Operaţii Intrare: preluarea unei date de la un dispozitiv de intrare Ieşire: trecerea unei date din memorie către un dispozitiv de ieşire Atribuire: x=3; y=x; y=x+y Se evaluează expresia din dreapta atribuirii Valoarea obţinută este atribuită variabilei din stânga, care îşi pierde vechea valoare Decizie
Program Descriere precisă şi concisă a unui algoritm într-un anumit limbaj de programare
Limbaje de programare Limbaje de nivel coborât, dependente de calculator: Limbaj maşină Limbaj de asamblare mnemonice pentru operaţiuni simboluri pentru adrese greu, dar interesant!
Limbaje de programare Limbaje de nivel înalt, independente de structura calculatorului: Fortran (FORmula TRANslation) 1955, IBM, probleme tehnico-ştiinţifice Cobol 1959, probleme economice Programare structurată 70 Programare orientată pe obiecte 80
Programare structurată Dijkstra şi Hoare Programarea in care abordarea este topdown: descompunerea problemei complexe în subprobleme mai simple - modul Teorema de structură a lui Bohm şi Jacopini: orice algoritm poate fi compus din numai trei structuri de calcul: structura secvenţială - secvenţa; structura alternativă - decizia; structura repetitivă - ciclul. o singură intrare şi o singură ieşire pentru fiecare
Operaţii auxiliare Start/Stop Start Stop Acţiuni nedetaliate Prelucrare
Secvenţa Atribuirea: operaţia prin care unei variabile i se atribuie o valoare. Operaţiile de intrare/ieşire: programatorul ia de la tastatură o valoare (intrarea) afişează pe ecran o valoare (ieşirea) Pseudocod: Exemplu: Citirea şi scrierea unei valori. i=7; citeste a; scrie a;
Decizia O întrebare ridicată de programator la un moment dat în program. In funcţie de răspunsul la întrebare - care poate fi ori Da, ori Nu - programul se continuă pe una din ramuri. daca conditie adevarata instructiuni1; altfel instructiuni2; Să se afişeze maximul dintre două valori a şi b.
Structura alternativă Caz particular decizie Condiţie Instrucţiunile care se execută dacă respectiva condiţie este adevarată Instrucţiunile care se execută dacă este falsă. Rezolvarea ecuaţiei de grad 1: ax+b=0
Structura repetitivă cu conditie iniţială O condiţie, care se află la început Un bloc de instrucţiuni, care se execută dacă rezultatul evaluarii condiţiei este adevărat atata timp cat conditie adevarata instructiuni Să se afişeze suma primelor n numere naturale, n citit de la tastatură.
Structura repetitivă cu condiţie finală Bloc de instrucţiuni, apoi condiţie. Obs: Blocul de instrucţiuni se execută minim o dată, spre deosebire de structura repetitivă cu test iniţial, unde blocul de instrucţiuni era posibil să nu se execute deloc, dacă rezultatul evaluării condiţiei iniţiale era fals. executa { instructiuni } atata timp cat conditie adevarata
Structura repetitivă cu contor Caz particular al structurii de control cu test iniţial. Utilizează o variabilă pe care o foloseşte ca un contor. pleacă de la o valoare; ajunge la o valoare; înaintează cu un pas. pentru contor de la val_initiala la val_finala cu pasul pas instructiuni Suma primelor n numere naturale
Probleme propuse 1. Interschimbul valorilor a două variabile a şi b. 2. Rezolvarea ecuaţiei de grad 2: ax 2 +bx+c=0. 3. Să se afişeze în ordine crescătoare valorile a 3 variabile a, b şi c. 4. Să se calculeze şi să se afişeze suma: S=1+1*2+1*2*3+..+n! 5. Să se calculeze şi să se afişeze suma cifrelor unui număr natural n. 6. Să se calculeze şi să se afişeze inversul unui număr natural n. 7. Să se afişeze dacă un număr natural dat x este prim. 8. Să se afişeze primele n numere naturale prime. 9. Să se descompună în factori primi un număr dat n. 10. Să se afişeze toate numerele naturale mai mici decât 10000 care se pot descompune în două moduri diferite ca sumă de două cuburi.
Probleme propuse Să se calculeze valoarea minimă, respectiv maximă, dintr-o secvenţă de n numere reale. Se dă o secvenţă de n numere întregi pozitive. Să se afişeze cele mai mari numere de 2 cifre care nu se află în secvenţa respectivă. Se dă o secvenţă de n numere întregi, ale căror valori sunt cuprinse în intervalul 0-100. Să se afişeze valorile care apar cel mai des. (vectori).
Limbajul C - Scurt istoric 1972, Dennis Ritchie (Laboratoarele AT&T Bell) pentru programe de sistem 1973, sistemul de operare UNIX este în totalitate scris în C cartea de referinţă care defineşte un standard minim: Brian W. Kernighan, Dennis Ritchie - "The C Programming Language" - Prentice Hall 1978 a fost dezvoltat un standard internaţional (1983-1989)- ANSI C (ANSI - American National Standards Institute) sunt dezvoltate medii de programare C performante sub UNIX şi DOS, care contribuie la utilizarea masivă a limbajului.
Limbajul C - Scurt istoric gruparea structurilor de date cu operaţiile care prelucrează respectivele date - obiect sau clasa. 1980, Bjarne Stroustrup: "C with Classes 1983, C-with-classes a pătruns şi în lumea academică şi a instituţiilor de cercetare. Denumirea finală a acestui limbaj a fost C++. Succes: a extins cel mai popular limbaj al momentului, C. Programele scrise în C funcţionează şi în C++, şi ele pot fi transformate în C++ cu eforturi minime. Cea mai recentă etapă în evoluţia acestui limbaj - limbajul JAVA (SUN)
Structura unui program C Un program C este compus dintr-o ierarhie de funcţii, orice program trebuind să conţină cel puţin funcţia main, prima care se execută la lansarea programului C. Un program C are, în principiu, următoarea structura: directive preprocesor definiţii de tipuri prototipuri de funcţii - tipul unei funcţii (tipul valorii returnate) şi tipurile parametrilor transmişi funcţiei definiţii de variabile globale definiţii de funcţii
Primul program C #include<stdio.h> void main(void) { printf( Hello World! ); } Sau: #include<stdio.h> void main() { printf( Hello World! ); }
Primul program C fără warning la compilare #include<stdio.h> int main() { } printf( Hello World! ); return 0;
Observaţii execuţia programului începe cu prima linie din main() cuvintele cheie sunt scrise cu litere mici instrucţiunile se termină cu ';' şirurile de caractere sunt incluse între ghilimele limbajul C este case sensitive \n poziţionează cursorul la începutul liniei următoare printf() poate fi utilizată pentru afişare pe ecran { } delimitează începutul şi sfârşitul unui blocprogram #include: directivă de preprocesare (includerea unor funcţii de bibliotecă)
Elemente de bază ale limbajului C Alfabetul şi atomii lexicali Identificatorii Cuvintele cheie Tipurile de date Constantele şi variabilele Comentariile Operatorii şi expresiile
1. Alfabetul limbajului Caracterele se codifică conform codului ASCII (American Standard Code for Information Interchange ) Codificare pe 8 biţi (un octet); sunt 256 (0-255) de caractere în codul ASCII. alfabetul cuprinde simboluri grafice şi simboluri fără corespondent grafic spaţiul are codul mai mic decat simbolurile grafice (32) cifrele (în ordine crescătoare), literele mari şi literele mici (în ordine alfabetică) ocupă cate trei zone compacte.
2. Atomi lexicali identificatori constante (explicite) - numerice, caracter, şir operatori semne de punctuatie. Separati de separatori: spaţiul caracterul de tabulare orizontală terminatorul de linie comentariul orice text aflat între combinaţiile de caractere /* şi */ textul început cu // până la sfârşitul liniei