Documente Academic
Documente Profesional
Documente Cultură
#include<stdio.h>
int main()
int a=1; /* a este o locatie de memorie pentru elemente de tip int pe doi
//declaram pointerul
#include<stdio.h>
#include<stdio.h>
void main()
int a=1; /*a este o locatie de memorie pentru elemente de tip int pe doi octeti,
int *b; /* b este o variabila pointer spre tipul int, adica capabila a retine adrese ale
//declaram pointerul
a=&x; //initializam a
b=&y; //initializam b
printf("Introduceti a: ",a);
scanf("%d", a);
printf("Introduceti b: ",b);
scanf("%d", b);
printf("\nInainte de interschimbare: \n");
//interschimbarea
getchar();
int k;
scanf("&d", k);
}
a=&x; //initializam a
b=&y; //initializam b
c=&z; //initializam c
printf("Introduceti a: ",a);
scanf("%d", a);
printf("Introduceti b: ",b);
scanf("%d", b);
//interschimbarea
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; //initializam a
b=&y; //initializam b
printf("Introduceti a: ",a);
scanf("%d", a);
printf("Introduceti b: ",b);
scanf("%d", b);
//interschimbarea
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/sca dere de valori.
#include<stdio.h>
void main()
{
getchar();
int k;
scanf("&d", k);
}
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);
}
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);
getchar();
int k;
scanf("&d", k);
}
10) Transferul parametrilor prin valoare (exemplul 1).
#include<stdio.h>
void modifica(int x, int y, int z)
{
printf("Valori initiale in functie: %d %d %d\n",x,y,z); //1 2 3
x+=10;
y+=10;
z+=10;
printf("Valori finale in functie: %d %d %d\n",x,y,z); //11 12 13
}
void main()
{
int a=1,b=2,c=3;
printf("Valori initiale in program: %d %d %d\n",a,b,c); //1 2 3
modifica(a,b,c);
printf("Valori finale in program: %d %d %d\n",a,b,c); //1 2 3
getchar();
int k;
scanf("&d", k);
}
void main()
{
int s=0;
suma(s);
printf("Suma este: %d", s); //Sume este 0
getchar();
int k;
scanf("%d",k);
}
12) Transferul parametrilor prin adresa (exemplul 1).
#include<stdio.h>
void modifica(int* x, int* y, int* z)
{
printf("Valori initiale in functie: %d %d %d\n",*x,*y,*z); //1 2 3
*x+=10;
*y+=10;
*z+=10;
printf("Valori finale in functie: %d %d %d\n",*x,*y,*z); //11 12
13
}
void main()
{
int a=1,b=2,c=3;
printf("Valori initiale in program: %d %d %d\n",a,b,c);
//1 2 3 modifica(&a,&b,&c);
getchar();
int k;
scanf("%d",k);
}
getchar();
int k;
scanf("%d",k);
}
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);
}
getchar();
int k;
scanf("%d",k);
}
int a,b;
int f(int m,int n)
{
m=n+b;
//printf("\nm=%d", m);
n+=1;
//printf("\nn=%d", n);
return n+b+m;
//printf("\nm=%d", n+b+m);
}
void main()
{
a=6;
b=5;
printf("\n%d %d ",a,b);
printf("\n%d ",f(a,b));
printf("\n%d %d ",a,b);
getchar();
int k;
scanf("%d",k);
}
Raspuns: 6 5 21 6 5
18) Se cere a se scrie o funcţie care va calcula suma cifrelor unui numar. Funcţia se
va scrie cu prototip (zona declarativă diferenţiată 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);
}
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
*/
printf("\nIntroduceti n: ");
scanf("%d", &n);
printf("\n\tRezultatul expresiei este: %.2f", suma(n));
getchar();
int k;
scanf("%d", k);
}
void main()
{
int n,m;
printf("\nIntroduceti n: ");
scanf("%d", &n);
printf("\nIntroduceti m: ");
scanf("%d", &m);
getchar();
int k;
scanf("%d", k);
}
int b;
printf("Introduceti b: ");
scanf("%d", &b);
getchar();
int k;
scanf("%d", k);
}
22) Scrieţi o funcţie care primeşte ca parametru lungimea laturii unui pătrat şi
returnează aria sa şi o funcţie care returnează diagonala.
#include<stdio.h>
#include<math.h>
float lungime (int n)
{
float aria;
aria=n*n;
return aria;
}
void main()
{
int n;
printf("Introduceti n: ");
scanf("%d", &n);
getchar();
int k;
scanf("%d", k);
}
printf("Rezultat: %d",triunghi(x,y,z)),
getchar();
int k;
scanf("%d", k);
}
24) Scrieţi o funcţie care returnează ultima cifră a unui număr natural. De exemplu,
dacă numărul este 234, funcţia va returna 4.
#include<stdio.h>
#include<math.h>
int cifra (int a)
{
int b;
b=a%10;
return b;
}
void main()
{
int a;
getchar();
int k;
scanf("%d", k);
}
Vectori
ezolvari
1) Declarare a unui şir (tablou sau matrice unidimensionată) cu iniţializare de
valori.
#include<stdio.h>
void main()
{
int a[]={2,91,0,-45}; /*un sir de elemente intregi,
variabila matrice
initializata la declarare. Memoria
alocata
pentru aceasta matrice vine direct
din numarul
de elemente cu care este initilizata
*/
getchar();
int k;
scanf("%d", k);
}
3) Sa se scrie funcţii de citire şi afişare ale şirului de numere întregi, după ce acesta
a fost în prealabil declarat.
#include<stdio.h>
void citire(int a[], int* n)
{
printf("Dati numarul de elemente ale sirului: ");
scanf("%d",n);
printf("\nIntroduceti elementele sirului:\n");
for(int i=0;i<*n;i++)
{
printf("\tIntroduceti elem %d: ",i+1);
scanf("%d",&a[i]);
}
}
void afisare(int a[], int n)
{
printf("\nElementele sirului sunt: ");
for(int i=0;i<n;i++)
printf("%d ",a[i]);
}
void main()
{
int a[20],n;
citire(a,&n);
afisare(a,n);
getchar();
int k;
scanf("%d", &k);
}
4) Sa se scrie funcţii de citire şi afişare ale şirului de numere întregi, după ce acesta
a fost în prealabil declarat. Se cere construcţia unui tip propriu pentru reţinerea
şirurilor de elemente întregi.
#include<stdio.h>
typedef int vector[20]; /*vector de tip propriu creat pt retinerea
sirurilor,
cu o dimensiune max de 20 elemente*/
void citire(vector a, int* n)
{
printf("Dati numarul de elemente ale sirului: ");
scanf("%d",n);
printf("Introduceti elementele sirului:\n");
for(int i=0;i<*n;i++)
{
printf("\telem %d: ",i+1);
scanf("%d",&a[i]);
}
}
void afisare(vector a, int n)
{
printf("Elementele sirului sunt: ");
for(int i=0;i<n;i++)
printf("%d ",a[i]);
}
void main()
{
vector a;
int n;
citire(a,&n);
afisare(a,n);
getchar();
int k;
scanf("%d", &k);
}
getchar();
int k;
scanf("%d", &k);
}
void main()
{
vector v;
int n;
v=alocare(v,&n); //apelul functiei de alocare
afisare(v,n);
int s1=suma1(v,n);
printf("\n\nSuma elementelor: %d",s1);
int s2;
suma2(v,n,&s2);
printf("\nSuma elementelor: %d",s2);
int p=produs(v,n);
printf("\nProdusul elementelor: %d",p);
float m=media(v,n);
printf("\nMedia elementelor: %.2f",m);
int neg,poz;
nr_neg_poz(v,n,&neg,&poz);
printf("\nNr. de elem. negative: %d; Nr. de elem. pozitive:
%d",neg,poz);
int min,max;
min_max(v,n,&min,&max);
printf("\nMinimul din sir: %d; Maximul din sir: %d",min,max);
sortare(v,n);
afisare(v,n);
int elem;
printf("\nDati un element ce se doreste a fi cautat: ");
scanf("%d",&elem);
if(cautare(v,n,elem)) //rezultat diferit de 0
printf("\tElementul se gaseste pe pozitia %d",
cautare(v,n,elem));
else
printf("\tElementul nu se afla in sir");
getchar();
int k;
scanf("%d", &k);
}
vector alocare(vector a, int* n)
{
printf("Dati numarul de elemente: ");
scanf("%d",n);
a=(int*)malloc(*n*sizeof(int));
return a;
}
void citire(vector a, int n)
{
printf("Introduceti elementele:\n");
for(int i=0;i<n;i++)
{
printf("\telem %d= ",i+1);
scanf("%d",&a[i]);
}
}
void afisare(vector a, int n)
{
printf("\nSirul este: ");
for(int i=0;i<n;i++)
printf("%d ",a[i]);
}
int suma1(vector a, int n)
{
int s=0;
for(int i=0;i<n;i++)
s+=a[i]; //s=s+a[i];
return s;
}
void suma2(vector a, int n, int* s)
{
*s=0;
for(int i=0;i<n;i++)
*s+=a[i];
}
int produs(vector a, int n)
{
int p=1;
for(int i=0;i<n;i++)
p*=a[i];
return p;
}
float media(vector a, int n)
{
return (float)suma1(a,n)/n;
}
void nr_neg_poz(vector a, int n, int* neg, int* poz)
{
*neg=*poz=0;
for(int i=0;i<n;i++)
if(a[i]>=0)
(*poz)++;
else
(*neg)++;
}
void min_max(vector a, int n, int* m, int* M)
{
*m=*M=a[0]; /*mergem de la premiza ca primul element va fi atat
element
minim cat si maxim in sir*/
for(int i=1;i<n;i++)
if(a[i]<*m)
*m=a[i];
else
if(a[i]>*M)
*M=a[i];
}
void sortare(vector a, int n)
{
int aux;
for(int i=0;i<n-1;i++)
for(int j=i+1;j<n;j++)
if(a[i]>a[j]) //sortare ascendenta
{
aux=a[i];
a[i]=a[j];
a[j]=aux;
}
}
int cautare(vector a, int n, int e)
{
for(int i=0;i<n;i++)
if(a[i]==e)
return i+1;
return 0;
}
7) Citirea si afisarea unui sir de numere, prin constructia unui tip propriu pentru
retinerea sirului de numere intregi. Funcţia va fi descrisa cu zonă declarativă
explicită, adică, cu prototip de funcţie.
#include<stdio.h>
#include<malloc.h>
typedef int* vector;
vector alocare (vector a, int* n)
{
printf("Dati numarul de elemente: ");
scanf("%d",n);
a=(int*)malloc(*n*sizeof(int));
return a;
}
void citire(vector a, int n)
{
printf("Introduceti elementele:\n");
for(int i=0;i<n;i++)
{
printf("\telem %d= ",i+1);
scanf("%d",&a[i]);
}
}
void afisare(vector a, int n)
{
printf("\nSirul este: ");
for(int i=0;i<n;i++)
printf("%d ",a[i]);
}
void main()
{
vector x; //sirul de nr. intregi
int n; //nr. de elemente ce vor fi citite in sir
x=alocare(x,&n);
citire(x,n);
afisare(x,n);
getchar();
int k;
scanf("%d",k);
}
8) Fie declaraţiile : int a[20]; int n; float e;
Să se determine valoarea expresiei e în fiecare din cazul: e = x1+x2+x3+…+xn;
#include<stdio.h>
void citire(int a[], int* n)
{
printf("\nIntroduceti nr de elemente: ");
scanf("%d", n);
printf("\nIntroduceti elementele: ");
for(int i=0; i<*n; i++)
{
printf("\nElem %d: ", i+1);
scanf("%d", &a[i]);
}
}
int expresie(int a[20],int n)
{
int e=0;
for(int i=0; i<n; i++)
{
e=e+a[i];
}
return e;
}
void main()
{
int a[20], n, e;
citire(a, &n);
printf("\nRezultatul este: %d", expresie(a,n));
getchar();
int var;
scanf("%d", &var);
}
int j;
scanf("%d", &j);
}
10) Fie declaraţiile : int a[20]; int n; float e; Să se determine valoarea expresiei e în
fiecare din cazurile:
a) e = x1+x2+x3+…+xn;
b) e = x1*x2*x3*…*xn;
c) e = media aritmetica a componentelor din vector;
d) e = suma patratelor componentelor din vector;
e) e = suma cuburilor componentelor negative din vector;
f) e = x1-x2+x3-x4+…±xn
#include<stdio.h>
getchar();
int var;
scanf("%d", &var);
}
11) Să se realizeze un program care interclasează doi vectori într -un al treilea
vector. Primii doi vor fi iniţial sortaţi.
#include<stdio.h>
#include<stdlib.h>
void main()
{
int n , m, *a, *b, i, j, gasit, aux, k, *c;
//------------------------------------------------------------------------
---------
printf ("Dati numarul de elemente ale sirului1: ");
scanf ("%d", &n);
//alocare memorie pt memorarea unui sir in mod dinamic de n
elemente
a=(int*) malloc(n*sizeof(int));
//introducere elementelor in sir
printf ("Introduceti elementele in sir1: \n");
for (i=0; i<n; i++)
{
printf ("element %d: ", i+1);
scanf ("%d", &a[i]);
}
//------------------------------------------------------------------------
---------
do
{
gasit=0;
for(i=0;i<n-1;i++)
if (a[i]>a[i+1])
{
aux=a[i];
a[i]=a[i+1];
a[i+1]=aux;
gasit=1;
}
}
while(gasit);
//afisare dupa sortare sir 1
for(i=0;i<m-1;i++)
for(j=i+1;j<m;j++)
if(b[i]>b[j])
{
aux=b[i];
b[i]=b[j];
b[j]=aux;
}
Matrice
Rezolvari
getchar();
int k;
scanf("%d", k);
}
getchar();
int k;
scanf("%d", k);
}
getchar();
int k;
scanf("%d", k);
}
suma8(a,n,l);
getchar();
int k;
scanf("%d", k);
}
6) Se va scrie un program pentru realizarea principalelor sumări între elementele
unei matrice bidimensionale, astfel încât funcţiile vor transmite rezultatele, nu doar
le vor afişa în interiorul corpului acestora.
#include<stdio.h>
//definirea unui tip matrice cu un numar specificat de linii si coloane
typedef int matrice[10][10];
void citire(matrice a, int *n, char c)
{
int i,j;
printf("Introduceti datele matricei %c:\n",c);
//introducerea dimensiunii matricei
printf("\tnumarul de linii (coloane): ");
scanf("%d",n);
//introducerea elementelor matricei
printf("\telementele matricei:\n");
for(i=0;i<*n;i++)
for(j=0;j<*n;j++)
{
printf("\t\t%c[%d][%d]= ",c,i+1,j+1);
scanf("%d",&a[i][j]);
}
}
void afisare(matrice a, int n, char c)
{
int i,j;
printf("Matricea %c este:\n",c);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%5d",a[i][j]);
printf("\n");
}
}
//suma tuturor elementelor matricei
int suma1(matrice a, int n)
{
int s=0,i,j;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
s+=a[i][j];
return s;
}
//suma elementelor de pe diagonala principala
int suma2(matrice a, int n)
{
int s=0,i;
for(i=0;i<n;i++)
s+=a[i][i];
return s;
}
//suma elementelor de deasupra diagonalei principale
int suma3(matrice a,int n)
{
int s=0,i,j;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
s+=a[i][j];
return s;
}
//suma elementelor de sub diagonala principala
int suma4(matrice a,int n)
{
int s=0,i,j;
for(i=1;i<n;i++)
for(j=0;j<=i-1;j++)
s+=a[i][j];
return s;
}
//suma elementelor de pe diagonala secundara
int suma5(matrice a,int n)
{
int s=0,i;
for(i=n-1;i>=0;i--)
s+=a[i][n-i-1];
return s;
}
//suma elementelor de deasupra diagonalei secundare
int suma6(matrice a,int n)
{
int s=0,i,j;
for(i=0;i<n-1;i++)
for(j=0;j<=n-2-i;j++)
s+=a[i][j];
return s;
}
//suma elemntelor de sub diagonala secundara
int suma7(matrice a,int n)
{
int s=0,i,j;
for(i=n-1;i>=1;i--)
for(j=n-i;j<n;j++)
s+=a[i][j];
return s;
}
//suma elementelor de pe o anumita linie
int suma8(matrice a,int n,int l)
{
int s=0,j;
for(j=0;j<n;j++)
s+=a[l-1][j];
return s;
}
void main()
{
matrice a,b,c;
int n,l;
citire(a,&n,'A');
afisare(a,n,'A');
printf("\nSuma tuturor elementelor este: %d", suma1(a,n));
printf("\nSuma elementelor de pe diagonala principala este: %d",
suma2(a,n));
printf("\nSuma elementelor de deasupra diagonalei principale e: %d",
suma3(a,n));
printf("\nSuma elementelor de sub diagonala principala este: %d",
suma4(a,n));
printf("\nSuma elementelor de pe diagonala secundara este: %d",
suma5(a,n));
printf("\nSuma elementelor de deasupra diagonalei secundare este: %d",
suma6(a,n));
printf("\nSuma elemntelor de sub diagonala secundara este: %d",
suma7(a,n));
getchar();
int k;
scanf("%d", k);
}
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
z[i][j] = x[i][j] + y[i][j];
}
void main()
{
matrice A,B,C;
int n;
suma(A,B,C,n);
afisare(C,n,"A+B");
getchar();
int k;
scanf("%d", &k);
}
inmultire(A,B,C,n);
afisare(C,n,"A*B");
getchar();
int k;
scanf("%d", &k);
}
int min=a[0][0];
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
if(a[i][j]<min)
min=a[i][j];
}
getchar();
int k;
scanf("%d", k);
}
STRUCTURI
Rezolvari
printf("angajat: %s %s\n",x.nume,x.prenume);
printf("data angajarii: %d/%d/%d\n",x.data_angajarii.zi,
x.data_angajarii.luna, x.data_angajarii.an);
printf("salariu incadrare: %.2f",x.sal_incadrare);
getchar();
int k;
scanf("%d", &k);
}
getchar();
int k;
scanf("%d", &k);
}
printf("%ld\n",x.a);
printf("%s\n",x.b);
printf("%s\n",x.c);
getchar();
int k;
scanf("%d", &k);
}
3) Să se realizeze o aplicaţie care realizează prelucrări cu numere complexe, adică
citire, afişare, modul, sumă şi produs între două astfel de numere.
#include<stdio.h>
#include<math.h>
typedef struct{
float a; //partea reala
float b; //partea imaginara
}complex; //numele structurii
//citirea unui nr. complex
void citire(complex* z,char s[]) //s retine numele nr. complex
{
printf("Introducem nr. complex %s:\n",s);
printf("\tpartea reala: ");
scanf("%f",&(*z).a);
printf("\tpartea imaginara: ");
scanf("%f",&z->b); //alt mod de scriere
}
//afisarea unui nr. complex
void afisare(complex z,char s[])
{
printf("Nr. complex %s: ",s);
if(z.b>=0)
printf("%.2f+%.2fi\n",z.a,z.b);
else
printf("%.2f%.2fi\n",z.a,z.b);
}
//modulul unui nr. complex
float modul(complex z)
{
return sqrt(pow(z.a,2)+pow(z.b,2));
}
//conjugatul unui numar complex
complex conjugat(complex z)
{
complex t;
t.a=z.a;
t.b=-z.b;
return t;
}
//suma a doua nr. complexe (varianta cu transfer prin tipul rezultat)
complex suma1(complex x,complex y)
{
complex z;
z.a=x.a+y.a;
z.b=x.b+y.b;
return z;
}
//suma a doua nr. complexe (varianta cu transfer prin linia de parametri)
void suma2(complex x,complex y,complex* z)
{
z->a=x.a+y.a; //(*z).a=x.a+y.a;
z->b=x.b+y.b;
}
//produsul a doua nr. complexe
complex produs(complex x,complex y)
{
complex z;
z.a=x.a*y.a-x.b*y.b;
z.b=x.a*y.b+x.b*y.a;
return z;
}
//functia principala in rulare
void main()
{
complex z1,z2;
//citirea celor doua nr. complexe
citire(&z1,"z1");
citire(&z2,"z2");
printf("\n");
//afisarea celor doua nr. complexe
afisare(z1,"z1");
afisare(z2,"z2");
printf("\n");
//modulele celor doua nr. complexe
printf("Modulul lui z1: %.2f\n",modul(z1));
printf("Modulul lui z2: %.2f\n",modul(z2));
printf("\n");
//conjugatele celor doua numere complexe
afisare(conjugat(z1),"conjugat z1");
afisare(conjugat(z2),"conjugat z2");
//suma a doua nr. complexe - varianta 1
complex s1;
s1=suma1(z1,z2);
afisare(s1,"z1+z2");
//suma a doua nr. complexe - varianta 2
complex s2;
suma2(z1,z2,&s2);
afisare(s2,"z1+z2");
//produsul a doua nr. complexe
complex p;
p=produs(z1,z2);
afisare(p,"z1*z2");
getchar();
int k;
scanf("%d", &k);
}
citire(&x,'x');
citire(&y,'y');
afisare(x,"x");
afisare(y,"y");
rational s;
s=adunare(x,y);
afisare(s,"x+y");
rational p;
p=inmultire(x,y);
afisare(p,"x*y");
getchar();
int k;
scanf("%d", &k);
}
getchar();
int k;
scanf("%d", &k);
Siruri
1) Să se realizeze un program care arată diferenţa dintre 'A' si "A".
#include<stdio.h>
#include<conio.h>
void main()
{
char a1='A';
char a2[]="A";
printf("%c %c %s",a1,a2[0],a2); //afisam continutul celor doua
variabile
printf("\n%d %d",sizeof(a1),sizeof(a2)); //verificam memoria ocupata de
cele doua variabile
printf("\n%s adica %d",a2[1],a2[1]); //vedem care este cel de-al
doilea element
getch();
}
2) Să se realizeze un program care afiseaza intr -un sir de caractere literele mari ale
alfabetului si face prelucrari asupra acestuia.
#include<stdio.h>
#include<string.h>
#include<conio.h>
void main()
{
char a[256];
for(int i=0;i<26;i++)
a[i]='A'+i;
getch();
}
3) Diferenţa între tipul şir de elemente ce reprezintă caractere şi tipul adresă pentru
memorarea unui şir de caractere.
#include<stdio.h>
#include<string.h>
#include<conio.h>
void main()
{
char a[]="Salut C!"; // sir de elemente ce reprezinta caractere
char* b="Salut C!"; // tipul adresa pentru memorarea unui sir de
caractere
puts(a);
puts(b);
printf("%d",sizeof(a));
printf("\n%d",sizeof(b));
getch();
}
a=(char*)malloc(sizeof(char)*255) ;
getch();
}
p=strtok(txt," ");
while (p!=NULL)
{
p=strtok(NULL, " ");
k++;
}
printf("\nNumarul de cuvinte este: %d",k); //nu se numara
caracterul NULL
getch();
}
getch();
}
7) Să se realizeze un program care citeste intr -un sir n cuvinte. Acestea vor fi
sortate alfabetic.
#include<stdio.h>
#include<string.h>
#include<conio.h>
#include<stdlib.h>
void main()
{
char cuvinte[10][25]; /* fiecare linie din cele 10 ale matricei poate
retine un sir de tipul char*.
Acesta poate avea cel mult 25 de caractere
(inclusiv caracterul nul).
Cuvintele pot fi adresate prin a[0] (primul cuvant), a[1]
(cuvantul al doilea) etc*/
char *aux;
int i,n,gasit;
printf("Dati numarul de cuvinte: ");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("cuvant: ");
scanf("%s",&cuvinte[i]);
}
do
{
gasit=0;
for(i=0;i<n-1;i++)
if ( strcmp(cuvinte[i],cuvinte[i+1]) > 0 )
{
strcpy(aux,cuvinte[i]);
strcpy(cuvinte[i],cuvinte[i+1]);
strcpy(cuvinte[i+1],aux);
gasit=1;
}
} while (gasit);
for(i=0;i<n;i++)
printf("\n%s",cuvinte[i]);
getch();
}
Recursivitate
Rezolvari
if(!n)
printf("0!=1\n");
else
printf("%d!=%ld\n",n,factorial(n));
getchar();
int var;
scanf("%d", var);
}
if(!n)
printf("0!=1\n");
else
printf("%d!=%ld\n",n,factorial(n));
getchar();
int var;
scanf("%d", var);
}
3) Să se calculeze recursiv suma elementelor unui sir.
#include<stdio.h>
int suma(int n)
{
if (n==0) return 0;
else return (n + suma(n-1));
}
void main()
{
int n;
printf("Introduceti n: ");
scanf("%d", &n);
printf("Suma elementelor este %d\n",suma(n));
getchar();
int var;
scanf("%d", var);
}
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 fără semn (pentru determinarea cmmdc -ului vom folosi algritmul lui Euclid
prin scăderi). Varianta iterativa.
#include <stdio.h>
#include <conio.h>
getch();
}
getch();
}
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)
//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();
}
int suma(int n)
{
if(!n) return 0; //!n=daca nu exista n
else return n%10+suma(n/10);
}
void main()
{
int n;
printf("Introduceti numarul: ");
scanf("%d", &n);
getch();
}
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, câtul se
împarte la k, se retine restul... pâna când câtul este mai mic decât împartitorul.
Rezultatul se obtine prin scrierea în ordine inversa a resturilor obtinute. Tiparirea
restului se face dupa autoapel.
#include<stdio.h>
#include<conio.h>
int F(int x)
{
if (x>=12) return x-1;
return F(F(x+2));
}
void main()
{
int x;
printf("x="); scanf("%d",&x);
printf("Valoarea functiei este: %d",F(x));
getch();
}
void main()
{
int n,U0=0,U1=1,U2;
printf("n="); scanf("%d",&n);
if(!n) printf("%d",U0);
else
if (n==1) printf("%d",U1);
else
{
for (int i=2;i<=n;i++)
{
U2=U0+U1;
U0=U1;
U1=U2;
}
printf("%d",U2);
}
/*
ptr. n=3
i=2: U2=U0+U1
U0=U1
U1=U2
i=3: U2=U1+U2
*/
getch();
}
int U (int n)
{
if (!n) return 0;
else if (n==1) return 1;
else return U(n-1)+U(n-2);
}
void main()
{
int n;
printf("Introduceti n=");
scanf("%d",&n);
getch();
Instructiuni
Rezolvari
#include<stdio.h>
void main()
{
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);
}
void main()
{
int n, s=0, i=1;
printf("Introduceti n:");
scanf("%d",&n);
while(i<=n)
{
s+=i; //s=s+i;
i++;
}
getchar();
int k;
scanf("%d", k);
}
void main()
{
int n, s=0, i=1;
printf("Introduceti n:");
scanf("%d",&n);
do
{
s+=i; //s=s+i;
i++;
}
while(i<=n)
getchar();
int k;
scanf("%d", k);
}
{
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);
}
void main()
{
int n;
printf("Introduceti n:");
scanf("%d", &n);
getchar();
int k;
scanf("%d", k);
}
{
int P=1; int i=1;
while(i<=n)
{
P=P*i;
i++;
}
return P;
}
int produs3(int n) //cu instructiunea DO WHILE
{
int P=1; int i=1;
do{
P=P*i;
i++;
}
while(i<=n);
return P;
}
void main()
{
int n;
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);
}
getchar();
int k;
scanf("%d", k);
}
printf("Introduceti n:");
scanf("%d", &n);
z=pow(x,y);
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;
char k;
k=getchar(); //citeste un carater, care va fi primul din text, care va fi
trimis variabilei k
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++;
}
}
getchar();
int z;
scanf("%d", z);
}
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);
}
#include<stdio.h>
void main ()
{
int x,xpi,xp,p;
printf ("Dati x in baza 10:");
scanf ("%d",&x);
printf("Dati noua baza p:");
scanf("%d",&p);
//un alt mod de a scrie o instructiune for
for (xpi=0; x; xpi=10*xpi+x%p+1,x=x/p);
for (xp=0; xpi; xp=10*xp+(xpi-1)%10,xpi=xpi/10);
printf("Numarul in baza %d este:%d",p,xp);
getchar();
int var;
scanf("%d", var);
}
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);
}
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);
}
for(i=2;i<=n;i++)
{
if (!(i%2)) //se mai putea scrie if(i%2==0) <=> testeaza
dc e par
p*=i;
}
printf("Produsul este: %d",p);
getchar();
int var;
scanf("&d", var);
}
for(i=1;i<=n;i++)
s=s+i*i;
getchar();
int var;
scanf("&d", var);
}
void main()
{
int n,i,s=0,semn=1;
printf("n= ");scanf("%d",&n);
for(i=1;i<=n;i++)
{
s=s+semn*factorial(i);
semn=-1;
}
printf("Suma este egala cu: %d",s);
getchar();
int var;
scanf("&d", var);
}
while(n!=0)
{
c=n%p;
y=y*10+c;
n=n/p;
}
getchar();
int var;
scanf("&d", var);
}