Sarcini Practice
Sarcini Practice
1. Incercuiți doar acele nume din șirul de mai jos care sunt corecte:
A, b_1, count, _functie, f_x3
2. Care din următoarele declarații sunt corecte:
double f,g;
float x; unsigned a;
3. Fie declarațiile: int a=5, b=17;
Scrieți rezultatele următoarelor expresii:
2 * a + (b % 3) = 2 *5 + ( 17 % 3) = 12;
++a + b-- = 23;
a / b = 0;
(float) a / b = 0.294118;
(float) a / (float) b = 0.294118;
a << 4 = 5 << 4 = 80;
b >> 2 = 17 >> 2 = 68;
(a < b) && (a % 2) = ( 5 < 17 ) && ( 5 % 2) = 1 && 1 = 1;
(a > b) || !(a % 5) = ( 5 > 17 ) || ! ( 5 & 5 ) = 0 || ! 0 = || 1 = 1;
a | b = 21;
a & b = 1;
a ^ b = 20;
4. Fie următorul program C:
1. #include<stdio.h>
2.
3.
4. void sum (int n, int m) {
5. printf ("%d + %d = %d",n,m,n+m);
6. printf ("\n");
7. }
8.
9. void reduct (int n, int m){
10. printf ("%d - %d = %d",n,m,n-m);
11. printf ("\n");
12. }
13.
14.
15. void product(int n, int m){
16. printf("%d * %d = %d",n,m,n*m);
17. printf("\n");
18. }
19.
20. void divid (int n, int m){
21. printf ("%d : %d = %.2f",n,m,(float)n/m);
22. printf("\n");
23. }
24.
25. int main(void){
26. int m,n,op;
27. char r;
28.
29. printf("Introduceti doua numere intregi\n");
30. printf("n=");
31. scanf("%d",&n);
32. printf("m=");
33. scanf("%d",&m);
34.
35. printf("Ce operatie doriti sa se efectueze cu aceste numere?");
36. printf("\n");
37. printf("\n1-adunare\n2-scadere\n3-inmultire\n4-impartire\n");
38. scanf("%d",&op);
39.
40. r='y';
41. while(r=='y'){
42. switch(op){
43. case 1:
44. sum(n,m);
45. break;
46. case 2:
47. reduct(n,m);
48. break;
49. case 3:
50. product(n,m);
51. break;
52. case 4:
53. divid (m,n);
54. break;
55.
56. default:
57. printf("Ati introdus gresit operatia!\n");
58. }
59.
60. printf("\nDoriti sa continuati? y/n ");
61. r = qetchar ();
62. if(r=='y'){
63. printf("\nCe operatie doriti sa se efectueze cu aceste
numere?\n");
64. printf("\n1-adunare\n2-scadere\n3-inmultire\n4-impartire\
n");
65. scanf("%d",&op);
66. }
67. }
68. }
a) Determinați principalele componente ale lui, după cum urmează:
Constante - 'y', 'n', 1, 2, 3, 4;
Variabile - m, n, op, r;
Funcții - summ(), reduct(), product(), divid(), main(), printf(), scanf(), getchar();
Tipuri de date - int, char, float, void;
Operatori - +, -, *, /, %, =, ==, ++, --, &.
b) Determinați ce vor afișa următoarele funcții printf():
printf("%d + %d = %d",n,m,n+m) = n + m = (n+m);
printf("%d - %d = %d",n,m,n-m) = n - m = (n-m);
printf("%d * %d = %d",n,m,n*m) = n * m = (n*m);
printf("%d : %d = %.2f",n,m,(float)n/m) = n : m = (n/m(float));
8. Modificați programul din exemplul 1.7 pentru celelalte operații aritmetice: mai întâi
diferența, apoi produsul și câtul.
1. #include <stdio.h>
2.
3. int main() {
4. int a, b;
5.
6. printf("Introduceti doua numere intregi:\n");
7. printf("a = ");
8. scanf("%d", &a);
9. printf("b = ");
10. scanf("%d", &b);
11.
12. printf("\n%d + %d = %d\n", a, b, a + b);
13.
14. printf("%d - %d = %d\n", a, b, a - b);
15.
16. printf("%d * %d = %d\n", a, b, a * b);
17.
18. printf("%d / %d = %.2f\n", a, b, (float)a / b);
19. }
Sarcina practica Nr 3
...
double k;
scanf(“%lf”,&k); Nu se folosesc valori reale double sau float in switch
switch (k){
case 21.6: …
2. Transformați această serie de if-uri într-o instrucțiune switch echivalentă.
1. switch(c) {
2.
3. case 'P': pornire();
4. break;
5.
6. case 'S': salvare();
7. break;
8.
9. case 'I': introducere();
10. break;
11.
12. case 'A': afisare();
13. break;
14.
15. case 'Q': iesire();
16. break;
17. }
Programul compară vârsta a doi copii și afișează care este mai mare și cu câți ani.
5. Să se calculeze suma cifrelor unui număr întreg, utilizând ciclurile while și do / while (ve
zi exemplu 2.8, pag. 61).
1. #include <stdio.h>
2.
3. int main() {
4. int n, sum = 0;
5.
6. printf("Introduceti un numar intreg: ");
7. scanf("%d", &n);
8.
9. while (n != 0) {
10. sum += n % 10;
11. n /= 10;
12. }
13.
14. printf("Suma cifrelor este: %d\n", sum);
15.
16. }
6. Să se determine câte cifre are și câte din ele sunt pare în înscrierea zecimală a numărului
dat n.
1. #include <stdio.h>
2.
3. int main() {
4. int n;
5. int total = 0;
6. int pare = 0;
7.
8. printf("Introduceti un numar intreg pozitiv: ");
9. scanf("%d", &n);
10.
11. int x = n;
12.
13. while (x > 0) {
14. int cifra = x % 10;
15. total++;
16.
17. if (cifra % 2 == 0)
18. pare++;
19.
20. x = x / 10;
21. }
22.
23. printf("Numarul are %d cifre.\n", total);
24. printf("Din ele %d sunt pare.\n", pare);
25. }
7. Să se modifice exemplul 2.3, pag. 56, astfel încât să se calculeze care va fi cea mai mică
medie din grupa de n studenți.
8. Să se tipărească toată tabla înmulțirii de la 1 la 10, așteptând tastarea lui Enter, pentru a
putea trece de la un număr la altul. Folosiți pe rând toate structurile ciclice studiate.
1. #include <stdio.h>
2.
3. int main() {
4. int i, j;
5. for(i = 1; i <= 10; i++) {
6. printf("Tabla inmultirii cu %d:\n", i);
7. for(j = 1; j <= 10; j++) {
8. printf("%d x %d = %d\n", i, j, i*j);
9. }
10. printf("Apasa Enter pentru continuare...");
11. getchar();
12. }
13. }
9. Să se calculeze suma s = 1*2 + 2*3 + 3*4 + … + (n - 1)*n, pentru un n dat de la tastatură.
1. #include <stdio.h>
2.
3. int main() {
4. int n, i;
5. long suma = 0;
6. printf("Introduceti n: ");
7. scanf("%d", &n);
8.
9. for(i = 1; i < n; i++) {
10. suma += i * (i + 1);
11. }
12. printf("Suma este: %ld\n", suma);
13.
14. }
10. Să se elaboreze un program care afișează toate numerele prime de la 100 la 300.
1. #include <stdio.h>
2.
3. int main() {
4. int a, i, prim;
5. printf("Numere prime intre 100 si 300:\n");
6.
7. for(a = 100; a <= 300; a++) {
8. prim = 1;
9. for(i = 2; i <= a/2; i++) {
10. if(a % i == 0) {
11. prim = 0;
12. break;
13. }
14. }
15. if(prim == 1) printf("%d ", a);
16. }
17. printf("\n");
18. }
Sarcina practica Nr 4
1. Fie declarația double m,*p; Asignați indirect variabilei m valoarea 5,14 prin intermediul
pointerului p.
1. double m, *p;
2. p = &m;
3. *p = 5.14;
1. #include <stdio.h>
2.
3. int main() {
4. float a, b, medie;
5.
6. printf("Introduceti doua valori: ");
7. scanf("%f %f", &a, &b);
8.
9. float *p1 = &a, *p2 = &b, *pm = &medie;
10. *pm = (*p1 + *p2) / 2.0;
11.
12. printf("Media: %.2f\n", *pm);
13. return 0;
14. }
Sarcina practica Nr 5
1. #include <stdio.h>
2.
3. int main() {
4. float tablou[15];
5. int i;
6.
7. printf("Introduceti 15 numere:\n");
8. for(i = 0; i < 15; i++) {
9. printf("Elementul %d: ", i + 1);
10. scanf("%f", &tablou[i]);
11. }
12.
13. printf("Tabloul introdus:\n");
14. for(i = 0; i < 15; i++) {
15. printf("%.2f ", tablou[i]);
16. }
17. printf("\n");
18. }
1. #include<conio.h>
2. #include<stdio.h>
3.
4. main(){
5. int tab[]={6, 2, 7, -3, 0};
6. int vector[5];
7. tab = vector;
8. getch();
9. }
10.
Nu se poate face atribuire directa intre tablouri in C
1. #include <stdio.h>
2.
3. int main() {
4. int k, i, j;
5. float temp;
6.
7. printf("Introduceti numarul de elemente: ");
8. scanf("%d", &k);
9.
10. float tablou[k];
11.
12. printf("Introduceti %d numere:\n", k);
13. for(i = 0; i < k; i++) {
14. printf("Elementul %d: ", i + 1);
15. scanf("%f", &tablou[i]);
16. }
17.
18. for(i = 0; i < k - 1; i++) {
19. for(j = 0; j < k - i - 1; j++) {
20. if(tablou[j] < tablou[j + 1]) {
21. temp = tablou[j];
22. tablou[j] = tablou[j + 1];
23. tablou[j + 1] = temp;
24. }
25. }
26. }
27.
28. printf("Tabloul sortat descrescator: ");
29. for(i = 0; i < k; i++) {
30. printf("%.2f ", tablou[i]);
31. }
32. printf("\n");
33. }
1. #include <stdio.h>
2.
3. int main() {
4. int linii, coloane, i, j;
5.
6. printf("Introduceti numarul de linii: ");
7. scanf("%d", &linii);
8. printf("Introduceti numarul de coloane: ");
9. scanf("%d", &coloane);
10.
11. double matrice1[linii][coloane], matrice2[linii][coloane];
12. double suma[linii][coloane], diferenta[linii][coloane];
13.
14. printf("\nIntroduceti elementele primei matrice:\n");
15. for(i = 0; i < linii; i++) {
16. for(j = 0; j < coloane; j++) {
17. printf("matrice1[%d][%d] = ", i, j);
18. scanf("%lf", &matrice1[i][j]);
19. }
20. }
21.
22. printf("\nIntroduceti elementele celei de-a doua matrice:\n");
23. for(i = 0; i < linii; i++) {
24. for(j = 0; j < coloane; j++) {
25. printf("matrice2[%d][%d] = ", i, j);
26. scanf("%lf", &matrice2[i][j]);
27. }
28. }
29.
30. for(i = 0; i < linii; i++) {
31. for(j = 0; j < coloane; j++) {
32. suma[i][j] = matrice1[i][j] + matrice2[i][j];
33. diferenta[i][j] = matrice1[i][j] - matrice2[i][j];
34. }
35. }
36.
37. printf("\nMatricea 1:\n");
38. for(i = 0; i < linii; i++) {
39. for(j = 0; j < coloane; j++) {
40. printf("%8.2lf ", matrice1[i][j]);
41. }
42. printf("\n");
43. }
44.
45. printf("\nMatricea 2:\n");
46. for(i = 0; i < linii; i++) {
47. for(j = 0; j < coloane; j++) {
48. printf("%8.2lf ", matrice2[i][j]);
49. }
50. printf("\n");
51. }
52.
53. printf("\nSuma matricelor:\n");
54. for(i = 0; i < linii; i++) {
55. for(j = 0; j < coloane; j++) {
56. printf("%8.2lf ", suma[i][j]);
57. }
58. printf("\n");
59. }
60.
61. printf("\nDiferenta matricelor:\n");
62. for(i = 0; i < linii; i++) {
63. for(j = 0; j < coloane; j++) {
64. printf("%8.2lf ", diferenta[i][j]);
65. }
66. printf("\n");
67. }
68. }
1. #include <stdio.h>
2.
3. int main() {
4. int linii, coloane, i, j;
5. float suma;
6.
7. printf("Introduceti numarul de linii: ");
8. scanf("%d", &linii);
9. printf("Introduceti numarul de coloane: ");
10. scanf("%d", &coloane);
11.
12. int matrice[linii][coloane];
13.
14. printf("Introduceti elementele matricei:\n");
15. for(i = 0; i < linii; i++) {
16. for(j = 0; j < coloane; j++) {
17. printf("matrice[%d][%d] = ", i, j);
18. scanf("%d", &matrice[i][j]);
19. }
20. }
21.
22. printf("\nMatricea:\n");
23. for(i = 0; i < linii; i++) {
24. for(j = 0; j < coloane; j++) {
25. printf("%6d ", matrice[i][j]);
26. }
27. printf("\n");
28. }
29.
30. printf("\nMediile coloanelor:\n");
31. for(j = 0; j < coloane; j++) {
32. suma = 0;
33. for(i = 0; i < linii; i++) {
34. suma = suma + matrice[i][j];
35. }
36. printf("%6.2f ", suma / linii);
37. }
38. printf("\n");
39. }
11. Elaborați un program care cere să se introducă o propoziție ce se termină cu punct și apoi
afișează numărul de cuvinte pe care le conține.
1. #include <stdio.h>
2.
3. int main() {
4. char propozitie[1000];
5. int i, numarCuvinte = 0;
6.
7. printf("Introduceti o propozitie (se termina cu punct): ");
8. scanf(" %[^\n]", propozitie);
9.
10. for(i = 0; propozitie[i] != '\0'; i++) {
11. if(propozitie[i] == ' ' || propozitie[i] == '.') {
12. numarCuvinte++;
13. }
14. }
15.
16. printf("Propozitia contine %d cuvinte.\n", numarCuvinte);
17. }
12. Să se înlocuiască o literă citită de la tastatură cu o altă literă citită de la tastatură, într-un
șir de caractere dat.
1. #include <stdio.h>
2.
3. int main() {
4. char sir[1000];
5. char literaVeche, literaNoua;
6. int i;
7.
8. printf("Introduceti un sir de caractere: ");
9. scanf(" %[^\n]", sir);
10.
11. printf("Introduceti litera de inlocuit: ");
12. scanf(" %c", &literaVeche);
13.
14. printf("Introduceti litera cu care se inlocuieste: ");
15. scanf(" %c", &literaNoua);
16.
17. for(i = 0; sir[i] != '\0'; i++) {
18. if(sir[i] == literaVeche) {
19. sir[i] = literaNoua;
20. }
21. }
22.
23. printf("Sirul dupa inlocuire: %s\n", sir);
24. }
13. Să se introducă un număr întreg pozitiv. Să se verifice dacă s-a introdus corect. Dacă nu,
atunci să se afișeze mesajul corespunzător și să se repete introducerea, până când se va
realiza citirea corectă. Să se afișeze toți divizorii proprii numărului introdus.
1. #include <stdio.h>
2.
3. int main() {
4. int numar, i, corect = 0;
5.
6. while(corect == 0) {
7. printf("Introduceti un numar intreg pozitiv: ");
8.
9. if(scanf("%d", &numar) != 1) {
10. printf("EROARE: Nu ati introdus un numar!\n");
11.
12. while(getchar() != '\n');
13. } else if(numar <= 0) {
14. printf("EROARE: Numai numere pozitive sunt acceptate!\n");
15. } else {
16. corect = 1;
17. }
18. }
19.
20.
21. printf("Divizorii proprii ai numarului %d sunt: ", numar);
22.
23. int areDivizori = 0;
24.
25. for(i = 2; i <= numar / 2; i++) {
26. if(numar % i == 0) {
27. printf("%d ", i);
28. areDivizori = 1;
29. }
30. }
31.
32. if(areDivizori == 0) {
33. printf("Acest numar nu are divizori proprii");
34. }
35.
36. printf("\n");
37. }
14. Să se numere câte cifre (de la 0 la 9) sunt în șirul de caractere dat, utilizându-se un
pointer către șir. Să se utilizeze funcția isdigit(ch) din fișierul ctype.h, care întoarce un
rezultat diferit de 0 dacă simbolul parametru ch este o cifră și 0 în caz contrar.
1. #include <stdio.h>
2. #include <ctype.h>
3.
4. int main() {
5. char sir[1000];
6. char *pointer;
7. int numarCifre = 0, i;
8.
9. printf("Introduceti un sir de caractere: ");
10. scanf(" %[^\n]", sir);
11.
12. pointer = sir;
13.
14.
15. while(*pointer != '\0') {
16. if(isdigit(*pointer)) {
17. numarCifre++;
18. }
19. pointer++;
20. }
21.
22. printf("In sir sunt %d cifre.\n", numarCifre);
23.
24. }
15. Utilizându-se un pointer către un șir de caractere să se afișeze toate sufixele lui, în ordine
descrescătoare. Prin sufix vom conveni a înțelege sfârșitul cuvântului, de la o literă la tot
cuvântul. De exemplu: Date de intrare: point. Date de ieșire:
point
oint
int
nt
t
1. #include <stdio.h>
2.
3. int main() {
4. char sir[100];
5. char *pointer;
6. int i, j;
7.
8. printf("Introduceti un cuvant: ");
9. scanf("%s", sir);
10.
11. printf("Sufixele cuvantului '%s':\n", sir);
12.
13.
14. pointer = sir;
15.
16.
17. for(i = 0; sir[i] != '\0'; i++) {
18. for(j = i; sir[j] != '\0'; j++) {
19. printf("%c", sir[j]);
20. }
21. printf("\n");
22. }
23. }
Sarcina practica Nr 7
1. Fie funcția:
double v_p (double a, double b, double c)
{return a*b*c;}
a) numele funcției este v_p
b) tipul funcției este double
c) cantitatea de parametri este 3
d) tipul parametrilor formali este double
e) rezultatul întors este produsul a × b × c
f) exemplu de apel al funcției v_p(), cu parametri efectivi de tip constantă v_p(2.5, 3.0, 4.0)
g) exemplu de apel al funcției v_p(), cu parametri efectivi de tip variabilă v_p(x, y, z)
h) prototipul funcției v_p() este double v_p(double a, double b, double c);
1. #include <stdio.h>
2.
3. int main() {
4. int m1, n1, m2, n2;
5. int numarator, numitor;
6.
7. printf("Introduceti prima fractie (m1 n1): ");
8. scanf("%d %d", &m1, &n1);
9.
10. printf("Introduceti a doua fractie (m2 n2): ");
11. scanf("%d %d", &m2, &n2);
12.
13. numarator = m1 * n2 + m2 * n1;
14. numitor = n1 * n2;
15.
16. printf("Suma fractiilor este: %d/%d\n", numarator, numitor);
17.
18. }
3. Redactați funcția suma_frac(), astfel încât să utilizați în cadrul ei funcția cmmdc() din
exemplul 6.8, pentru a simplifica fracția sumă obținută, înainte de a fi tipărit rezultatul.
1. #include <stdio.h>
2.
3. int main() {
4. int m1, n1, m2, n2, a, b, rest;
5.
6. printf("Introduceti prima fractie (m1 n1): ");
7. scanf("%d %d", &m1, &n1);
8. printf("Introduceti a doua fractie (m2 n2): ");
9. scanf("%d %d", &m2, &n2);
10.
11. a = m1 * n2 + m2 * n1;
12. b = n1 * n2;
13.
14. int temp_a = a, temp_b = b;
15. while (temp_b != 0) {
16. rest = temp_a % temp_b;
17. temp_a = temp_b;
18. temp_b = rest;
19. }
20.
21. printf("Suma fractiilor este: %d/%d\n", a/temp_a, b/temp_a);
22.
23. }
4. Redactați funcția suma_frac(), astfel încât fracția sumă să nu fie tipărită direct din funcție,
dar să întoarcă acest rezultat în funcția apelantă prin adresă.
1. #include <stdio.h>
2.
3.
4. int main() {
5. int m1, n1, m2, n2;
6. int numarator, numitor;
7.
8. printf("Introduceti prima fractie (m1 n1): ");
9. scanf("%d %d", &m1, &n1);
10.
11.
12. printf("Introduceti a doua fractie (m2 n2): ");
13. scanf("%d %d", &m2, &n2);
14.
15. numarator = m1 * n2 + m2 * n1;
16. numitor = n1 * n2;
17.
18.
19. printf("Suma fractiilor este: %d/%d\n", numarator, numitor);
20.
21. return 0;
22. }
7. Elaborați un program care ar calcula prin intermediul a două funcții, elementele maxim și
minim ale unui tablou unidimensional.
1. #include <stdio.h>
2.
3. int main() {
4. int n, i;
5.
6. printf("Cate elemente are tabloul? ");
7. scanf("%d", &n);
8.
9. float tablou[n];
10. printf("Introduceti %d numere:\n", n);
11. for(i = 0; i < n; i++) {
12. printf("Elementul %d: ", i + 1);
13. scanf("%f", &tablou[i]);
14. }
15.
16. float maxim = tablou[0];
17. for(i = 1; i < n; i++) {
18. if(tablou[i] > maxim) {
19. maxim = tablou[i];
20. }
21. }
22.
23. float minim = tablou[0];
24. for(i = 1; i < n; i++) {
25. if(tablou[i] < minim) {
26. minim = tablou[i];
27. }
28. }
29.
30. printf("Elementul maxim este: %.2f\n", maxim);
31. printf("Elementul minim este: %.2f\n", minim);
32. }