This is an old revision of the document!
Responsabili:
În urma parcurgerii acestui laborator, studentul va fi capabil:
1. (task1.c) Fie funcţiile definite astfel:
int functie(void); int functie();
Sunt cele două definiţii echivalente? Scrieţi un program C care să justifice răspunsul dat.
2. (task2.c) Scrieţi un program care să afişeze propriul cod sursă.
3. (task3.c) Rezolvaţi următoarele cerinţe:
Formatul fisierului:
n x1 y1 x2 y2 … xn yn
4. (task4.c) Scrieţi un program care poate primi (ca argumente în linia de comandă) opţiunile “-a” şi “-p”. Programul primeşte ca prim parametru în linia de comandă un număr întreg n.
*Opţiunea “-a” va avea ca efect afişarea adresei variabilei din program în care se reţine numărul. *Opţiunea “-p” va avea ca efect afişarea pătratului numarului. Pentru a calcula pătratul numărului se va folosi o macroinscructiune. *Se permite rularea executabilului cu ambele opţiuni, caz în care se va afişa atât adresa variabilei cât şi pătratul valorii. La rularea executabilului fără opţiuni, nu se va afiţa nimic. *Se va afişa un mesaj de eroare în oricare dintre cazurile: lipsa parametrului n, parametrii nu sunt cei specificaţi mai sus, număr prea mare de parametri.
5. (task5.c) Scrieţi un program care interschimbă două variabile x şi y, fără a folosi o variabilă auxiliară.
6. Modificaţi următorul fişier makefile, astfel încât executabilul de la problema 4 să se numească task6.
#makefile
CC=gcc CFLAGS=-Wall
all: task1 task2 task3 task4 task5
task1: task1.c task2: task2.c task3: task3.c task4: task4.c task5: task5.c
1. (task1.c) De ce urmatorul program nu afişează rezultatul corect/aşteptat?
#include <stdio.h> int main() { float f=0.0f; int i; for(i=0;i<10;i++) f = f + 0.1f; if(f == 1.0f) printf("f is 1.0 \n"); else printf("f is NOT 1.0\n"); return 0; }
2. (task2.c) Scrieţi un program care să afişeze câţi biţi dintr-un număr reprezentat pe 4 octeţi sunt 1.
3. (task3.c) Rezolvaţi următoarele cerinţe:
Formatul fişierului:
n nr_1 nr_2 … nr_n
i1 f1 i2 f2 … in fn, unde i reprezintă partea întreagă, iar f partea fracţionară.
4. (task4.c) Scrieţi un program care primeşte (ca argumente în linia de comandă) două numere a
şi b
, şi poate primi una dintre opţiunile: “-m” sau “-f”.
* Veţi defini un macro care calculează minimul dintre a şi b, precum şi o funcţie cu acelaşi scop: <tt>int minim(int a, int b)</tt>.
* Dacă este apelat cu optiunea “-m”, programul va afisa minimul dintre a si b, folosind macrodefinitia.
* Dacă este apelat cu optiunea “-f”, programul va afişa adresa funcţiei <tt>minim</tt>. Dacă este apelat cu ambele optiuni, vor fi afişate ambele informaţii.
* Programul va afişa un mesaj de eroare în oricare dintre următoarele cazuri: nu sunt daţi parametrii a şi b (sau unul dintre ei), parametrii nu sunt cei specificaţi mai sus, număr prea mare de parametri.
5. (task5.c) Scrieţi un program care afişează caracterul ';' (cod ASCII: 59), fără a folosi 'deloc
' ';' în sursa C. (task5.c)
6. Modificaţi următorul fişier makefile, adăugând o regulă <tt>clean</tt>, care să şteargă fişierele executabile, precum şi fisierele temporare, ale căror nume se termină cu '~'.
#makefile
CC=gcc CFLAGS=-Wall
all: task1 task2 task3 task4 task5
task1: task1.c task2: task2.c task3: task3.c task4: task4.c task5: task5.c