Documente Academic
Documente Profesional
Documente Cultură
2) Sa se scrie un program care afiseaza textul "Hello!", astfel incat mesajul de afisat sa fie transmis prin intermediul unei variabile de un tip corect adaptat.
#include<stdio.h> void main() { char a[]="Hello!"; printf("%s",a); getchar(); }
3) Sa se scrie un program care afiseaza textul "Hello!", astfel incat mesajul de afisat sa fie transmis prin intermediul unei variabile de un tip corect adaptat, cu alt tip de memorare.
#include<stdio.h> void main() { char* a="Hello!"; printf("%s",a); getchar(); }
4) Sa se scrie un program care afiseaza textul "Hello!", astfel incat afisarea sa se realizeze prin intermediul unei functii definite de utilizator.
#include<stdio.h> void afisare() { printf("Hello!"); } void main() { afisare(); getchar(); }
5) Sa se scrie un program care afiseaza textul "Hello!", astfel incat afisarea sa se realizeze prin intermediul unei functii universale,cu posibilitatea transmiterii sirului prin parametru.
#include<stdio.h> void afiseaza(char a[]) { printf("%s", a); } void main() { afiseaza("Hello!"); getchar(); }
6) Sa se scrie un program care afiseaza textul "Hello!", astfel incat afisarea sa se realizeze prin intermediul unei functii universale, cu posibilitatea transmiterii sirului prin parametru, alt fel de scriere.
#include<stdio.h> void afiseaza(char* a) { printf("%s", a); } void main() { afiseaza("Hello!"); getchar(); }
7) Sa se scrie un program care introduce de la tastatura sirul dorit, apoi il afiseaza pe ecran.
#include<stdio.h> void main() { char* a; printf("Introduceti sirul de la tastatura:"); scanf("%s",a); printf(a); getchar(); }
8) Sa se scrie un program care introduce de la tastatura sirul dorit, apoi il afiseaza pe ecran (alta varianta decat cea de sus).
#include<stdio.h> void main() { char* a; printf("Introduceti sirul de la tastatura:"); gets(a); printf(a); getchar(); }
9) Sa se calculeze suma numerelor intregi, astfel: se dau doua valori direct in program memorate la cele doua locatii de memorie si se calculeaza suma lor.
#include<stdio.h> void main() { int a=3, b=7, c; c=a+b; printf("Suma celor doua nr este: %d\n", c); getchar(); }
10) Sa se calculeze suma numerelor intregi, astfel: se citesc doua numere de la tastatura si se calculeaza suma lor.
#include<stdio.h> void main() { int a,b; printf("Introduceti a=");
scanf("%d", &a); printf("Introduceti b="); scanf("%d", &b); printf("Suma a+b=%d\n", a+b); getchar(); int k; scanf("%d", &k); }
11) Sa se calculeze suma numerelor intregi, astfel: se citesc doua numere de la tastatura si se calculeaza suma lor, iar rezultatul e retinut prin intermediul unei variabile.
#include<stdio.h> void main() { int a,b; printf("Introduceti a:"); scanf("%d", &a); printf("Introduceti b:"); scanf("%d", &b); int c; c=a+b; printf("a+b=%d\n", c); getchar(); int k; scanf("%d",k); }
12) Sa se calculeze suma numerelor intregi, astfel: se va scrie o functie de sumare a doua numere intregi.
#include<stdio.h> int suma (int x, int { int s; s=x+y; return s; } void main() { int a,b; printf("dati printf("dati int c; c=suma(a,b); printf("Suma y)
13) Sa se calculeze suma numerelor intregi, astfel: se citesc doua numere de la tastatura si se calculeaza suma lor. Se va scrie o functie de sumare a doua numere intregi. Functia va intoarce rezultatul prin linia de parametrii.
#include<stdio.h> void suma(int x,int y,int* s) { *s=x+y;
} void main() { int a,b; printf("dati a: "); scanf("%d",&a); printf("dati b: "); scanf("%d",&b); int c; suma(a,b,&c); printf("Suma este: %d\n",c); getchar(); int k; scanf("%d", k); }
14) Sa se scrie o functie care calculeaza media aritmetica a doua numere intregi.
#include<stdio.h> int media (int x, int y) { int ma; ma=(x+y)/2; return ma; } void main () { int a, b; printf("Introduceti a: "); scanf("%d", &a); printf("Introduceti b: "); scanf("%d", &b); int m; m=media(a,b); printf("Media aritmetica este: %d\n", m); getchar(); int k; scanf("%d", k); }
15) Sa se calculeze media aritmetica a doua numere intregi, astfel: se citesc doua numere de la tastatura si se calculeaza media artimetica a lor. Se va scrie o functie care calculeaza media aritmetica a doua numere intregi. Functia va intoarce rezultatul prin linia de parametrii.
#include<stdio.h> void media(int a, int b, int* c) { *c=(a+b)/2; } void main() { int x,y; printf("Introduceti x: "); scanf("%d", &x); printf("Introduceti y: "); scanf("%d", &y); int z; media(x,y,&z); printf("Media artimetica este: %d", z); getchar(); int k;
scanf("%d", k); }
17) Sa se calculeze puterea a n-a a lui 2, unde n este un intreg citit de la tastatura.
#include<stdio.h> void main() { int n; printf("Introduceti n:"); scanf("%d", &n); int p=1; printf("2^%d=%d",n,p=(p<<n)); //The shift operators shift (schimba) their first operand left (<<) //or right (>>) by the number of positions the second operand specifies getchar(); int k; scanf("%d", k); }
18) Se citeste un numar zecimal si unul in hexa de cel mult 4 cifre fiecare si se cere sa se afiseze valorile respective in sistemele de numerotatie cu baza 10, 8 si 16.
#include<stdio.h> void main() { unsigned int a,b; printf("Dati nr. intreg zecimal: "); scanf("%d",&a); printf("Dati nr. intreg hexazecimal: "); scanf("%x",&b); printf("\nnr. zecimal:\tBaza 10: %u\tBaza 8: %#o\tBaza 16: %#X",a,a,a); printf("\nnr. hexazecimal:\tBaza 10: %u\tBaza 8: %#o\tBaza 16: %#X",b,b,b); getchar(); int k; scanf("%d", k); }
21) Sa se scrie un program care citeste valoarea lui x, pozitiv, afiseaza valorile lui x, [x], {x}, calculeaza si afiseaza valoarea urmatoarei expresii : 5*x*[x]-3*{x}+15.
#include<stdio.h> void main() { double x; int y; double z;
printf("Introduceti x:"); scanf("%lf", &x); printf("x= %g\t", x); printf("[x]= %d\t", y=x); printf("{x}= %f\t", z=x-y); printf("e=%g\n", 5*x*x-3*z+15);
23) Se dau trei numere reale a,b,c. Pot reprezenta ele lungimile laturilor unui triunghi?
#include<stdio.h> void main() { float a,b,c; printf("Dati lungimile laturilor:\n"); scanf("%f %f %f", &a, &b, &c); (a>=0 && b>=0 && c>=0 && a<b+c && b<a+c && c<a+b)?printf("\t %4.2f, %4.2f si %4.2f formeaza triunghi.",a,b,c):printf ("\t Nu formeaza triunghi."); getchar(); int k; scanf("%d", k); }
24) Sa se scrie un rpogram care citeste pe n de tip intreg si afiseaza valoarea expresiei: n/(n+1) cu 15 zecimale.
#include<stdio.h> void main() { int n; printf("Introduceti n:"); scanf("%d", &n); float e; e=(float)n/(n+1); printf("Valoarea expresiei este: %.15f", e); getchar(); int k; scanf("%d", k); }
26) Sa se scrie un program care sa calculeze numarul de picioare dintr-o curte, in care se afla g gaini, p pisici si un om.
#include<stdio.h> void main() { int g,p; printf("\nIntroduceti numarul de gaini:" ); scanf("%d", &g); printf("\nIntroduceti numarul de pisici:" ); scanf("%d", &p); printf("\n\tNumarul de picioare este: %d", g*2+p*4+2); getchar(); int k; scanf("%d", k); }
27) Folosind operatorul conditional sa se verifice daca un numar real x se afla in intervalul [a,b), unde a si b sunt date de la tastatura.
#include<stdio.h> void main() { float x; printf("Introduceti x:"); scanf("%f", &x); int a,b; printf("Introduceti a: "); scanf("%d", &a); printf("Introduceti b: "); scanf("%d", &b); (x>=a&&x<b) ? printf("\n\tX se afla in intervalul [%d %d)", a,b) : printf("\n\tX nu se afla in intervalul [%d %d)", a,b); getchar(); int k; scanf("%d", k); }
28) Sa se scrie un program care citeste valoarea variabilei x si afiseaza valoarea functiei f(x) :
|3*x*x+7*x-10 f(x)= |2 |4*x*x #include<stdio.h> void main() { x<0 x=0 x>0
int x; printf("Introduceti x:"); scanf("%d", &x); if(x==0) printf("F(x)=2"); else if(x<0) printf("F(x)=%d",3*x*x+7*x-10); else printf("F(x)=%d",4*x*x); getchar(); int k; scanf("%d", k); }
int n,s=0; printf("Introduceti n:"); scanf("%d",&n); for(int i=1;i<=n;i++) s+=i; //s=s+i; printf("Suma primelor %d numere naturale este: %d\n",n,s); getchar(); int k; scanf("%d", k); }
//s=s+i;
printf("Suma primelor %d numere naturale este: %d\n",n,s); getchar(); int k; scanf("%d", k); }
4) Sa se scrie un program care calculeaza suma primelor n numere naturale cu "do while".
#include<stdio.h> void main() { int n, s=0, i=1; printf("Introduceti n:"); scanf("%d",&n); do { s+=i; i++; } while(i<=n) printf("Suma primelor %d numere naturale este: %d\n",n,s); getchar(); int k; scanf("%d", k); } //s=s+i;
{ int a,b,c; float x1,x2,d; printf("Introduceti coeficientii ecuatiei.\n"); printf("\ta="); scanf("%d",&a); printf("\tb="); scanf("%d",&b); printf("\tc="); scanf("%d",&c); if(!a) //a==0 if(!b) if(!c) printf("Ecuatia are o infinitate de solutii."); else printf("Ecuatia nu are nici o solutie."); else { x1=-c/(float)b; printf("Solutia ec. este: %.2f.",x1); } else x1=-c/(float)b; printf("Solutia ec. este: %.2f.",x1); { d =b*b-4*a*c; if(d<0) printf("Ec nu are solutii reale."); else { x1=(-b-sqrt(d))/2*a; printf("Solutiile sunt:\n\tx1 este: %.2f\n",x1); x2=(-b+sqrt(d))/2*a; printf("\tx2 este: %.2f\n",x2); } } getchar(); int k; scanf("%d", k); }
6) sa se scrie un program care calculeaza valoarea expresiei S=1-2+3-4+....+, folosind functii proprii.
#include <stdio.h> int suma1(int n) { int s=0, i=1, semn=1; for(; i<=n; i++) { s+=semn*i; semn=-semn; } return s; } int suma2(int n) { int s=0, i=1, semn=1; while (i<=n) { s+=semn*i; semn=-semn; i++; } //cu instructiunea FOR
//s=s+semn*i
//s=s+semn*i
return s; } int suma3(int n) { int s=0, i=1, semn=1; do { s+=semn*i; semn=-semn; i++; } while (i<=n); return s; } void main() { int n; printf("Introduceti n:"); scanf("%d", &n); printf("\n\tSuma calculata cu FOR are valoarea: %d" , suma1(n)); printf("\n\tSuma calculata cu WHILE are valoarea: %d" , suma2(n)); printf("\n\tSuma calculata cu DO WHILE are valoarea: %d" , suma3(n)); getchar(); int k; scanf("%d", k); } //cu instructiunea DO WHILE
//s=s+semn*i
printf("Introduceti n: "); scanf("%d", &n); printf("\n\tProdusul calculat cu FOR are valoarea: %d.\n" , produs1(n)); printf("\n\tProdusul calculat cu WHILE are valoarea: %d.\n" , produs2(n)); printf("\n\tProdusul calculat cu DO WHILE are valoarea: %d.\n" , produs3(n)); getchar(); int k; scanf("%d", k); }
for(int i=1; i<=n; i++) { if (!(i%2)) //se mai putea scrie if(i%2==0) <=> testeaza dc nu e impar { z=1/(float)i; p =p*z; } else p=p*i; } return p; //pt impar
} float produs2(int n) //cu instructiunea WHILE { float p=1; float z=1; int i=1; while(i<=n) { if (!(i%2)) //se mai putea scrie if(i%2==0) <=> testeaza dc nu e impar { z=1/(float)i; p =p*z; } else p=p*i; //pt impar i++; } return p; } float produs3(int n) //cu instructiunea WHILE { float p=1; float z=1; int i=1; do { if (!(i%2)) //se mai putea scrie if(i%2==0) <=> testeaza dc e par { z=1/(float)i;
p =p*z; } else p=p*i; i++; } while(i<=n); return p; } void main() { int n; printf("Introduceti n: "); scanf("%d", &n); printf("\nProdusul cu FOR este: %.5f\n", produs1(n)); printf("\nProdusul cu WHILE este: %.5f\n", produs2(n)); printf("\nProdusul cu DO WHILE este: %.5f\n", produs3(n)); getchar(); int k; scanf("%d", k); } //pt impar
printf("\nAti introdus y= %.2lf", y); z=pow(x,y); printf("\n\n\%.2lf^%.2lf= %.2lf", x,y,z); getchar(); int k; scanf("%d", k); }
11) Se citeste un text format din cuvinte ce pot fi despartite prin spatiu sau virgula. Textul citit se termina cu punct sau enter. Sa se contorizeze vocalele si consoanele din acel text.
#include<stdio.h> void main() { int v=0; int c=0; printf("Introduceti textul dorit: "); char k; k=getchar(); //citeste un carater, care va fi primul din text, care va fi trimis variabilei k while(k!='.' && k!='\n') { if (k!=',' && k!=' ') switch (k) { case 'a': case 'A': case 'e': case 'E': case 'i': case 'I': case 'o': case 'O': case 'u': case 'U': v++; break; default: c++; } k=getchar(); //urmatorul caracter din text va fi trimis in variabila k } printf("Numarul de vocale este: %u\n",v); printf("Numarul de consoane este: %u\n",c); getchar(); int z; scanf("%d", z); }
12) Se citeste un text format din cuvinte ce pot fi despartite prin spatiu sau virgula. Textul citit se termina cu punct sau enter. Sa se contorizeze vocalele si consoanele din acel text. Sa se rezolve problema folosind o bucla repetitiva conditionata posterior.
#include<stdio.h> void main() {
int v=0; int c=0; printf("Introduceti textul dorit: "); char k; do { k=getchar(); if (k!=',' && k!=' ' && k!='\n' && k!='.') switch (k) { case 'a': case 'A': case 'e': case 'E': case 'i': case 'I': case 'o': case 'O': case 'u': case 'U': v++; break; default: c++; } } while(k!='.' && k!='\n'); printf("Numarul de vocale este %u\n",v); printf("Numarul de consoane este %u\n",c); getchar(); int z; scanf("%d", z); }
13) Sa se contorizeze numarul de vocale si cel de consoane din alfabet, folosind instructiunea de salt "goto".
#include<stdio.h> void main() { int v=0; int c=0; char litera='A'; eticheta: switch (litera) { case 'A': case 'E': case 'I': case 'O': case 'U': v++; break; default: c++; } litera++; if(litera<='Z') goto eticheta; printf("Numarul de vocale este %d\n",v); printf("Numarul de consoane este %d\n",c); getchar(); int var;
scanf("%d", var); }
14) Sa se afiseze din intregul alfabet doar literele caractere mari pana la 'M'. Bucla se va incheia in mod voit, prin folosirea instructiunii "break".
#include<stdio.h> void main() { for(char litera='A'; litera<='Z'; litera++) { if(litera=='M') break; printf("%c", litera); } getchar(); int var; scanf("%d", var); }
16) Sa se realizeze un program care intr-o bucla "while" calculeaza suma cifrelor unui numar introdus de la tastatura si afiseaza inversul lui.
#include<stdio.h> #include<math.h> void main() { int nr; int s=0;
//suma cifrelor
int inv=0; //inversul numarului printf("Introduceti numarul: "); scanf("%d",&nr); while (nr) //sau while(n!=0) { s=s+nr%10; inv=inv*10+nr%10; nr/=10; } /* instructiunea repetitiva de mai sus se mai putea scrie si asa: while(ninv*=10,ninv+=n%10,s+=n%10,n/=10); */ printf("Suma este: %d",s); printf("\nInversul este: %d",inv); getchar(); int var; scanf("&d", var); }
17) Fiind furnizate 3 numere intregi sa se verifice daca acestea pot fi masurile unui triunghi, si in caz afirmativ sa se calculeze perimetrul.
#include<stdio.h> int triunghi(int a,int b,int c) { if((a>0)&&(b>0)&&(c>0)&&(a<b+c)&&(b<a+c)&&(c<a+b)) return 1; else return 0; } void main() { int a,b,c,s=0; printf("a= ");scanf("%d",&a); printf("b= ");scanf("%d",&b); printf("c= ");scanf("%d",&c); if(triunghi(a,b,c)==1) { s=a+b+c; printf("Perimetrul triunghiului ABC este: %d",s); } else printf("Nu este triunghi"); getchar(); int var; scanf("&d", var); }
18) Sa se calculeze valoarea functiei f definita pe multimea numerelor reale pentru un x citit:
| x-3, ptr. x<5 F=| x+1, ptr. 5>x>25 | x-5x+6,ptr. x>25 #include<stdio.h> void main() { int x; printf("Introduceti numarul: "); scanf("%d",&x); if(x>=5&&x<=25) printf("F(x)= %d",x+1);
else { if(x<5) printf("F(x)= %d",x-3); else printf("F(x)= %d",x-5*x+6); } getchar(); int var; scanf("&d", var); }
19) Sa se afiseze suma cifrelor unui numar natural dat. Indicatie: se detaseaza fiecare cifra de la sfarsitul numarului calculand restul impartirii numarului la 10; numarul ramas dupa desprinderea cifrei este catul impartirii la 10.
#include<stdio.h> void main() { int n,s=0; printf("n= ");scanf("%d",&n); while(n!=0) { s=s+n%10; n=n/10; } printf("Suma cifrelor este: %d",s); getchar(); int var; scanf("&d", var); }
n=n*2; for(i=2;i<=n;i++) { if (!(i%2)) par p*=i; } printf("Produsul este: %d",p); getchar(); int var; scanf("&d", var); }
void main() { int n,m,p,y=0,c; printf("Nr in baza 10 este: ");scanf("%d",&n); printf("Baza in care se converteste: ");scanf("%d",&p); while(n!=0) { c=n%p; y=y*10+c; n=n/p; } printf("Nr. in baza %d este: %d",p,y); getchar(); int var; scanf("&d", var); }
b=&a;
2) Exemplificare in declarare si folosirea variabilelor pointer. Transferul se va face doar intre valori retinute la anumite locatii de memorie.
#include<stdio.h> void main() { int a=1; /*a este o locatie de memorie pentru elemente de tip int pe doi octeti, pe care am initializat-o cu valoarea 1 */ int x=55;
int *b; /* b este o variabila pointer spre tipul int, adica capabila a retine adrese ale altor variabile de tipul specificat */ //declaram pointerul b=&x; variabilei) x, deci b devine adresa locatiei de memorie x */ *b = a; */ printf("Val a= %d\t Val b= %d\n\n", a,*b); printf("Adresa a= %p\t Adresa b= %p", &a, b); getchar(); int k; scanf("&d", k); } /* transferul se face intre valori; valorii retinute la adresa b ii atribuim valoarea retinuta in a //initializam pointerul /* in adresa b retinem adresa locatiei de memorie (adica a
3) Transmiterea informatiilor prin intermediul adreselor. Interschimbarea se va face intre adrese ale locatiilor de memorie, elementul auxiliar interschimbarii fiind tot o adresa.
#include<stdio.h> void main() { int *a, *b, *c; int x=55; int y=66; a=&x; b=&y; //initializam a //initializam b
printf("Introduceti a: ",a); scanf("%d", a); printf("Introduceti b: ",b); scanf("%d", b); printf("\nInainte de interschimbare: \n"); printf("\tVal a= %d\tVal b= %d\n\n", *a,*b); printf("\tAdresa a= %p\tAdresa b= %p\n", a, b); //interschimbarea c=a; a=b; b=c; printf("\nDupa interschimbare: \n"); printf("\tVal a= %d\tVal b= %d\n\n", *a,*b); printf("\tAdresa a= %p\tAdresa b= %p\n", a, b); getchar(); int k; scanf("&d", k); }
4) Transmiterea informatiilor prin intermediul adreselor. Interschimbarea se va face intre adrese ale locatiilor de memorie, elementul auxiliar interschimbarii nefiind o adresa (un pointer).
#include<stdio.h> void main() { int *a, *b, c; int x=2, y=5; a=&x; b=&y; //initializam a //initializam b
printf("Introduceti a: ",a); scanf("%d", a); printf("Introduceti b: ",b); scanf("%d", b); printf("\nInainte de interschimbare: \n"); printf("\tVal a= %d\tVal b= %d\n\n", *a,*b); printf("\tAdresa a= %p\tAdresa b= %p\n", a, b); //interschimbarea c=*a; valida a=b; b=&c; printf("\nDupa interschimbare: \n"); printf("\tVal a= %d\tVal b= %d\n\n", *a,*b); printf("\tAdresa a= %p\tAdresa b= %p\n", a, b); getchar(); int k; scanf("&d", k); } // transfer intre valori, pt ca expresia &c=a; nu ar fi fost
5) Transmiterea informatiilor prin intermediul adreselor. Interschimbarea se va face intre valorile retinute la locatiile de memorie ale respectivelor adrese, elementul auxiliar interschimbarii fiind o adresa (un pointer).
#include<stdio.h> void main() { int *a, *b, *c; int x=2, y=5, z=7; a=&x; b=&y; c=&z; //initializam a //initializam b //initializam c
printf("Introduceti a: ",a); scanf("%d", a); printf("Introduceti b: ",b); scanf("%d", b); printf("\nInainte de interschimbare: \n"); printf("\tVal a= %d\tVal b= %d\n\n", *a,*b); printf("\tAdresa a= %p\tAdresa b= %p\n", a, b); //interschimbarea *c=*a; // transfer intre valori *a=*b;
*b=*c; printf("\nDupa interschimbare: \n"); printf("\tVal a= %d\tVal b= %d\n\n", *a,*b); printf("\tAdresa a= %p\tAdresa b= %p\n", a, b); getchar(); int k; scanf("&d", k); }
6) Transmiterea informatiilor prin intermediul adreselor. Interschimbarea se va face intre valorile retinute la locatiile de memorie ale respectivelor adrese, elementul auxiliar interschimbarii nefiind o adresa (un pointer).
#include<stdio.h> void main() { int *a, *b, c; int x=2, y=5; a=&x; b=&y; //initializam a //initializam b
printf("Introduceti a: ",a); scanf("%d", a); printf("Introduceti b: ",b); scanf("%d", b); printf("\nInainte de interschimbare: \n"); printf("\tVal a= %d\tVal b= %d\n\n", *a,*b); printf("\tAdresa a= %p\tAdresa b= %p\n", a, b); //interschimbarea c=*a; *a=*b; *b=c; // transfer intre valori
printf("\nDupa interschimbare: \n"); printf("\tVal a= %d\tVal b= %d\n\n", *a,*b); printf("\tAdresa a= %p\tAdresa b= %p\n", a, b); getchar(); int k; scanf("&d", k); }
7) Aritmetica pointerilor. Se va scrie o rutina in C pentru exemplificarea aritmeticii in cazul pointerilor, exemplificare pe cazurile operatiilor de incrementare/decrementare, respectiv adunare/scadere de valori.
#include<stdio.h> void main() { int a[]={10,20,30,40,50}; /*am declarat un sir de elemente de tip int pe care
l-am initializat cu valorile aflate in multime*/ int* b; // b este pointer spre tipul int b=a; //in adresa b retinem sirul a /* transferul se face astfel deoarece a este o adresa prin numele sau, adresa primului element din sir*/ for(int i=1; i<=5; i++) { printf("%d\n", *b); /* b-ul prin transfer fiind adresa primului element, rezultatul acestei expresii, va fi prima valoare din sir, adica 10*/ b++; //se face trecerea la elementul urmator din sir } // ne vom intoarce cu pointerul de cursor al sirului in prima pozitie b-=5; //sau b=b-5 printf("Primul element al sirului: %d\n", *b); /* ne pastram pozitia de pointare in sir, daca vrem sa afisam elementul al treilea al sirului*/ printf("Al treilea element al sirului: %d\n", *(b+2)); getchar(); int k; scanf("&d", k); }
8) Aritmetica pointerilor. Se va scrie o rutina in C pentru exemplificarea aritmeticii in cazul pointerilor, exemplificare pe cazurile operatiilor de incrementare/decrementare, respectiv adunare/scadere asupra unui sir de caractere prin prelucrare pe subsiruri ale acestuia.
#include<stdio.h> void main() { char a[]="ABCDE"; //sirul a retine un sir de caractere, in numar de 5 char* b; b=a; for(int i=1;i<=5;i++) { printf("%s\n",b); /* un sir este o adresa, iar, mesajul acesta va afisa subsirul incepand cu prima pozitie, adica "ABCDE" */ b++; } b-=5; printf("subsirul incepand cu prima pozitie: %s\n",b); printf("subsirul incepand cu a treia pozitie: %s",b+2); getchar(); int k; scanf("&d", k); }
9) Alocarea memorie dinamice n lucrul cu variabile pointer. S se realizeze un program care interschimb dou valori reale folosind variabile pointer.
#include<stdio.h> #include<stdlib.h> //sau #include<alloc.h> void main() { double *a,*b,*c; /* vom crea variabile dinamice, adica variabile ce isi vor pastra memoria extinsa intr-o zona, numita zona HEAP */ a=(double*)malloc(sizeof(double)); suficient pentru /* in zona HEAP am rezervat spatiu
memorarea unei variabile de tipul double */ printf("Introduceti a: "); scanf("%lf",a); b=(double*)malloc(sizeof(double)); printf("Introduceti b: "); scanf("%lf",b); c=a; /* pentru c nu este nevoie sa alocam memorie dinamica, pentru ca c primeste prin transfer de la a */ a=b; b=c; printf("dupa interschimbare: a= %.2lf\tb= %.2lf",*a,*b); /* desi in acest caz nu este necesar, pentru ca o variabila dinamica nu mai este viabila la sfarsitul executiei functiei, totusi noi putem opta pentru dealocare explicita pentru variabilele create dinamic */ free(a); free(b); getchar(); int k; scanf("&d", k); }
//Sume este 0
//1 2 3
//11 12 13
//1 2 //11 12 13
//Sume este 55
14) Sa se scrie un program care va realiza interschimbarea coninutului a dou variabile ce pot reine valori reale. Programul va defini funcii de citire i afiare pentru un numr real, precum i o funcie proprie pentru interschimbarea coninutului variabilelor, cu rmnerea rezultatului i n afara execuiei funciei.
#include<stdio.h> //citirea unei variabile reale void citire(float* x, char c) { printf("Introduceti %c: ", c); scanf("%f", x); } //afisarea continutului unei variabile reale void afisare(float x, char c) { printf("Valoarea din %c este: %.2f\n", c,x); } //functia de interschimbare a continutului a doua variabile reale void interschimbare(float *x, float *y) { float z; z=*x; *x=*y; *y=z; } void main() { float a, b; citire(&a,'a'); citire(&b,'b'); printf("\nINITIAL:\n"); afisare(a,'a'); afisare(b,'b'); printf("\nDUPA INTERSCHIMBARE:\n"); interschimbare(&a,&b); afisare(a,'a'); afisare(b,'b'); getchar(); int k; scanf("%d",k); }
15) Sa se scrie un program care va realiza interschimbarea coninutului a dou variabile ce pot reine valori reale. Programul va defini funcii de citire i afiare pentru un numr real, precum i o funcie proprie pentru interschimbarea coninutului variabilelor, cu rmnerea rezultatului i n afara execuiei funciei. Variabilele sunt declarate global; declarate de un tip standard definit.
#include<stdio.h> float a,b; //functia de citire a celor doua variabile void citire() { printf("Introduceti a: "); scanf("%f", &a); printf("Introduceti b: "); scanf("%f", &b); } //functia de afisare
void afisare() { printf("Valoarile sunt: a=%.2f, b=%.2f\n", a, b); } //functia de interschimbare void interschimbare() { float c; c=a; a=b; b=c; } void main() { citire(); afisare(); printf("\n"); interschimbare(); afisare(); getchar(); int k; scanf("%d",k); }
16) Sa se scrie un program care va realiza interschimbarea coninutului a dou variabile ce pot reine valori reale. Programul va defini funcii de citire i afiare pentru un numr real, precum i o funcie proprie pentru interschimbarea coninutului variabilelor, cu rmnerea rezultatului i n afara execuiei funciei. Variabilele sunt declarate global; declarate de un tip pointer spre un tip real.
#include<stdio.h> #include<stdlib.h> float*a,*b; void alocare() { a=(float*)malloc(sizeof(float)); b=(float*)malloc(sizeof(float)); } void citire() { alocare(); printf("dati a: "); scanf("%f",a); printf("dati b: "); scanf("%f",b); } void afisare() { printf("valorile sunt: a=%.2f, b=%.2f\n",*a,*b); } void interschimba() { float c; c=*a; *a=*b; *b=c; } void main() { citire(); afisare(); printf("\n"); interschimba(); afisare();
18) Se cere a se scrie o funcie care va calcula suma cifrelor unui numar. Funcia se va scrie cu prototip (zona declarativ difereniat de cea definitiv).
#include<stdio.h> //in acest caz rezultatul se va transmite prin tipul rezultat int suma(int); //suma cifrelor unui nr. intreg void main() { int n, suma_cifrelor=0, nr_invers=0; printf("Introduceti n: "); scanf("%d",&n); suma_cifrelor=suma(n); printf("\nSuma cifrelor sale este: %d", suma_cifrelor); getchar(); int k; scanf("%d",k); } /* suma cifrelor unui numar intreg: Presupunem nr. dorit ca fiind 523 ptr. care sa calculam suma cifrelor 523 : 10 = 52 rest 3 Suma cifrelor intermediara: 0+3=3 52 : 10 = 5 rest 2
Suma cifrelor intermediara: 3+2=5 5 : 10 = 0 rest 5 Suma cifrelor finala: 5+5=10 */ int suma(int n) { int s=0; while (n) { s=s+n%10; n/=10; } return s; } /* inversul unui numar intreg: Presupunem nr. dorit ca fiind 523 ptr. care dorim sa-i aflam inversul 523 : 10 = 52 rest 3 Numarul invers intermediar: 0*10+3=3 52 : 10 = 5 rest 2 Numarul invers intermediar: 3*10+2=32 5 : 10 = 0 rest 5 Numarul invers final: 32*10+5=325 */
19) Folosind o funcie s se realizeze un program care calculeaz urmtoarea expresie: (1+ + 1/3+ ++1/n)^n , unde n este un ntreg dat de la tastatur.
#include<stdio.h> #include<math.h> float suma (int n) { float s=0; float p=1; for(int i=1; i<=n; i++) { p=1/(float)i; s=s+p; } s=pow(s,n); return s; } void main() { int n; printf("\nIntroduceti n: "); scanf("%d", &n); printf("\n\tRezultatul expresiei este: %.2f", suma(n)); getchar(); int k; scanf("%d", k); }
20) S se realizeze un program care calculeaza prin intermediul a dou funcii cmmdc-ul i cmmmcul a dou numere date de la tastatur.
#include <stdio.h> #include <math.h> int cmmdc (int n, int m)
{ while(n!=m) { if(n>m) n =n-m; else m =m-n; } return n; } int cmmmc (int n, int m) { int z; z=(n*m)/cmmdc(n,m); return z; } void main() { int n,m; printf("\nIntroduceti n: "); scanf("%d", &n); printf("\nIntroduceti m: "); scanf("%d", &m); printf("\nCmmdc este: %d", cmmdc(n,m)); printf("\nCmmmc este: %d", cmmmc(n,m)); getchar(); int k; scanf("%d", k); }
21) S se realizeze adunarea i nmulirea a dou numere reale folosind variabile de tipul pointer.
#include<stdio.h> void main() { int a; printf("Introduceti a: "); scanf("%d", &a); int b; printf("Introduceti b: "); scanf("%d", &b); int* n; //declar pointer int* m; //declar pointer n=&a; m=&b; //initializez pointer //initializez pointer
printf("\nSuma este: %d", *n+*m); printf("\nProdusul este: %d", *n * *m); getchar(); int k; scanf("%d", k); }
22) Scriei o funcie care primete ca parametru lungimea laturii unui ptrat i returneaz aria sa i o funcie care returneaz diagonala.
#include<stdio.h> #include<math.h> float lungime (int n) { float aria; aria=n*n; return aria; } float diagonala (double n) { double diag; diag=sqrt((n*n)+(n*n)); return diag; } void main() { int n; printf("Introduceti n: "); scanf("%d", &n); printf("\nAria patratului este: %.2f", lungime(n)); printf("\nDiagonala patratului este: %.2lf", diagonala(n)); getchar(); int k; scanf("%d", k); }
23) Scriei o funcie care primete 3 parametri de tip real, cu semnificaia de lungimi pentru 3 segmente. Funcia va returna 1, dac cele trei segmente pot forma un triunghi i 0, n caz contrar.
#include<stdio.h> #include<math.h> int triunghi (float x, float y, float z) { if((x>0)&&(y>0)&&(z>0)&&(x<y+z)&&(y<x+z)&&(z<x+y)) return 1; else return 0; } void main() { float x; float y; float z; printf("Introduceti x: "); scanf("%f", &x); printf("Introduceti y: "); scanf("%f", &y); printf("Introduceti z: "); scanf("%f", &z); printf("Rezultat: %d",triunghi(x,y,z)), getchar(); int k; scanf("%d", k); }
24) Scriei o funcie care returneaz ultima cifr a unui numr natural. De exemplu, dac numrul este 234, funcia va returna 4.
#include<stdio.h> #include<math.h> int cifra (int a) { int b; b=a%10; return b; } void main() { int a; printf("Introduceti numarul: "); scanf("%d", &a); printf("Ultima cifra este: %d",cifra(a)); getchar(); int k; scanf("%d", k); }
} void main() { int n; printf("Introduceti n= "); scanf("%d", &n); if(!n) printf("0!=1\n"); else printf("%d!=%ld\n",n,factorial(n)); getchar(); int var; scanf("%d", var); }
4) Scrieti o functie proprie care realizeaza calculul recursiv al sumei elementelor unui vector, de n<=10, de nr reale. Scrieti functia main care citeste datele de la tastatura, calculeaza suma, utilizand functia recursiva anterior definita si afiseaza valoarea obtinuta.
#include <stdio.h> #include <conio.h> int a[10], n; int Suma (int n, int a[10]) { if(n==0) return 0; else return(a[n]+Suma(n-1,a)); } void main() { // Citire date de intrare printf("Introduceti nr de elemente: "); scanf("%d", &n); for (int i=1; i<=n; i++) { printf("Elementul [%d] = ", i); scanf("%d", &a[i]); } // Afisarea rezultatelor printf("Suma = %d", Suma(n,a));
getch(); }
5) S se scrie un program C, pentru rezolvarea cmmdc-ului dintre dou numere ntregi fr semn (pentru determinarea cmmdc-ului vom folosi algritmul lui Euclid prin scderi). Varianta iterativa.
#include <stdio.h> #include <conio.h> unsigned int cmmdc(unsigned int a, unsigned int b) { while(a!=b) { if(a>b) a =a-b; else b =b-a; } return a; } void main() { unsigned int x,y; printf("Introduceti x: "); scanf("%u",&x); printf("Introduceti y: "); scanf("%u",&y); if(!x || !y) //daca x=0 sau y=0 printf("cmmdc(%u,%u) = 1\n",x,y); else printf("cmmdc(%u,%u) = %u\n",x,y,cmmdc(x,y)); getch(); }
6) S se scrie un program C, pentru rezolvarea cmmdc-ului dintre dou numere ntregi fr semn (pentru determinarea cmmdc-ului vom folosi algritmul lui Euclid prin scderi). Varianta recursiva.
#include <stdio.h> #include <conio.h> unsigned int cmmdc(unsigned int a, unsigned int b) { if(a==b) return a; else if(a>b) return cmmdc(a-b,b); else return cmmdc(a,b-a); } void main() { unsigned int x,y; printf("Introduceti x: "); scanf("%u",&x); printf("Introduceti y: "); scanf("%u",&y); if(!x || !y) //daca x=0 sau y=0 printf("cmmdc(%u,%u) = 1\n",x,y); else printf("cmmdc(%u,%u) = %u\n",x,y,cmmdc(x,y)); getch();
7) S se scrie un program C, pentru rezolvarea cmmdc-ului a n numere ntregi fr semn (pentru determinarea cmmdc-ului vom folosi algritmul lui Euclid prin scderi). Varianta recursiva.
#include <stdio.h> #include <conio.h> unsigned int cmmdc_2(unsigned int a, unsigned int b) { if(a==b) return a; if(a>b) return cmmdc_2(a-b,b); else return cmmdc_2(a,b-a); } unsigned int cmmdc_n(unsigned int x[], int n) { if (n==2) return cmmdc_2(x[0],x[1]); else return cmmdc_2(cmmdc_n(x,n-1),x[n-1]); } void main() { unsigned int x[20]; int n; printf("Introduceti n: "); scanf("%d",&n); for(int i=0;i<n;i++) { printf("elementul %d= ",i+1); scanf("%u",&x[i]); } if (n==1) printf("\nCmmdc-ul numerelor: %u",x[0]); else printf("\nCmmdc-ul numerelor: %u",cmmdc_n(x,n)); getch(); }
8) Se considera urmatoarele declaratii i conventii: typedef int vector[20]; x este un vector (sir de elemente) n este lungimea sa (n>=1) Se cere sa se scrie functii recursive pentru a determina, pentru un vector x de lungime n, urmatoarele: a. citirea componentelor sirului b. afisarea elementelor din sir c. suma componentelor d. produsul componentelor e. numarul componentelor negative f. produsul componentelor pozitive g. media aritmetica a elementelor
#include<stdio.h> #include<conio.h> /* un tip propriu definit pentru memorarea sirurilor de elemente intregi, cu o dimensiune maxima de 20 de componente */ typedef int vector[20]; //functia de citire void citire(vector x,int n) //n este dimensiunea reala a sirului { //citim ultimul element din sir printf("\telementul %d: ",n); scanf("%d",&x[n-1]);
if(n>=2) citire(x,n-1); //apelul recursiv al functiei } //functia de afisare void afisare(vector x,int n) //n este dimensiunea reala (nr. de elem. din sir) { //afisam ultimul element printf("%d ",x[n-1]); if(n>=2) afisare(x,n-1); //apelul recursiv al functiei } //adunarea componentelor unui sir int suma(vector x,int n) //n in acest caz il consideram fiind indice element dinsir { if(n==-1) return 0; //situatia in care nu mai sunt elemente in sir, pozitia n=-1 nefiind in sir else return x[n]+suma(x,n-1); } //produsul componentelor int produs(vector x,int n) { if(n==-1) return 1; else return x[n]*produs(x,n-1); } //numarul de componente negative int numar_negative(vector x,int n) { //ne pozitionam pe primul element din sir si verificam dc acesta este negativ if(n==0) return (x[n]<0); //expresia conditionata va returna 1 in caz de adv. si 0 in caz de fals else return (x[n]<0)+numar_negative(x,n-1); } //produsul componentelor pozitive int produs_pozitive(vector x,int n) { if(n==0) return (x[n]>0?x[n]:1); /* am folosit operatorul de conditionare, care, daca expresia evaluata ca fi adv. se va lua in calcul x[n], altfel, valoarea 1 */ else return (x[n]>0?x[n]:1)*produs_pozitive(x,n-1); } //media aritmetica a componentelor sirului float media(vector x, int m, int n) //cu m am notat indicele elementelor, iar cu n dimensiunea reala a sirului { return (float)x[m]/n + ((m!=0)?media(x,m-1,n):0); /* - am folosit expresia (float) pentru o conversie explicita a rezultatului spre un tip real - prin x[m]/n intelegem un element (in prima faza, acesta fiind ultimul element din sir) impartit la numarul total de componente */ } //functia principala in rulare void main() { vector x; //sirul de elemente int n; //dimensiunea sa (numarul de componente citite) //realizarea operatiei de citire a sirului printf("Dati numarul de elemente: "); scanf("%d",&n); printf("Introduceti elementele sirului:\n");
citire(x,n); //realizarea operatiei de afisare a sirului printf("Sirul de elemente este: "); afisare(x,n); //sumarea elementelor printf("\nSuma elementelor: %d",suma(x,n-1)); /* am apelat cu n-1, ptr ca am spus mai sus ca acest parametru reprezinta indicele ultimului element din sir */ //produsul elementelor printf("\nProdusul elementelor: %d",produs(x,n-1)); //numarul elementelor negative din sir printf("\nNumarul elementelor negative: %d",numar_negative(x,n-1)); //produsul componentelor pozitive printf("\nProdusul elementelor pozitive: %d",produs_pozitive(x,n-1)); //media componentelor din sir printf("\nMedia componentelor din sir: %.2f",media(x,n-1,n)); /* primul parametru - sirul, al doilea parametru - indicele ultimului element din sir, al treilea parametru - dimensiunea reala a sirului (numarul de elemente citite) */ getch(); }
9) Sa se scrie o functie recursiva pentru determinarea sumei cifrelor unui numar natural. Indicatie: Se izoleaza ultima cifra, iar lui n i se atribuie ctul ntreg dintre vechea valoare i 10.
#include<stdio.h> #include<conio.h> int suma(int n) { if(!n) return 0; else return n%10+suma(n/10); } void main() { int n; printf("Introduceti numarul: "); scanf("%d", &n);
//!n=daca nu exista n
10) Sa se scrie o functie recursiva pentru a transforma un numar natural n, din baza 10 n baza k (1<k<=10). Indicatie: Numarul se mparte la k, se retine restul, ctul se mparte la k, se retine restul... pna cnd ctul este mai mic dect mpartitorul. Rezultatul se obtine prin scrierea n ordine inversa a resturilor obtinute. Tiparirea restului se face dupa autoapel.
#include<stdio.h> #include<conio.h> void transform(int n,int b) { int rest=n%b; if (n>=b) transform(n/b,b);
printf("%d",rest); } void main() { int n,b; printf("n="); scanf("%d",&n); printf("baza="); scanf("%d",&b); transform(n,b); getch(); }