Documente Academic
Documente Profesional
Documente Cultură
Primele 128 sunt din setul ASCII standard, iar următoarele 128 sunt coduri de
caractere afișabile pentru caracterele unor alfabete naționale europene (francez,
spaniol, român etc.), o parte din literele alfabetului grecesc, unele simboluri
matematice, caractere speciale pentru desenat tabele etc.
1. cuvinte cheie – acestea au un înțeles explicit într-un context precizat (de ex., în
unele limbaje de programare cuvintele ce desemnează instrucțiuni pot fi folosite
și ca nume de variabile, neexistând restricții; asemenea situații nu sunt însă
indicate deoarece pot ascunde erori în logica programului și îl fac mai greu de
înțeles);
2. cuvinte rezervate – acestea nu pot fi folosite decât în scopul pentru care au fost
definite (de ex., în limbajul C++). Avantajele utilizării acestei categorii de cuvinte
sunt următoarele:
2
Curs 2. Elemente de bază în C/C++ (I)
3
Curs 2. Elemente de bază în C/C++ (I)
Notatia BNF
Notatia BNF (Backus-Naur Form) a fost utilizata prima data la descrierea sintaxei
limbajului ALGOL (în cadrul raportului ALGOL60 aparut în 1963) si este numita dupa
doi dintre autorii acestui raport. În cadrul BNF sunt folosite metasimboluri, simboluri
terminale si simboluri neterminale.
Metasimboluri sunt simbolurile <, >, ½ si ::= si ele fac parte din mecanismul de
descriere a limbajului. Simbolul ½ semnifica o alternativa, simbolul ::= inseamna „se
definește astfel”.
Simbolurile terminale sunt cuvinte care apar acolo unde se specifica în productii (de
ex., for, while, do, +, ; etc.).
Simbolurile neterminale sunt încadrate în < si > si sunt definite prin productii ale
limbajului (de ex., <variabila>, <identificator>, <instructiune if> etc.).
<identificator>::=<litera>|<identificator><cifra>|<identificator><literă>|
unde
<litera>::=a|b|...|z|A|B|...|Z|_
<cifra>::=0|1|2|...|9
Conform acestei reguli, identificatorul are 3 definiții alternative: un identificator este fie o
<litera>, fie un <identificator> urmat de o <cifra> sau o <litera> (definitie recursiva).
Semnificatia acestei definitii este urmatoarea: un identificator poate sa contina o
singura litera, sau o litera urmata de oricâte litere si/sau cifre. Conform acestei definitii,
sunt corecte sintactic urmatorii identificatori: a, t1, sec12a1.
Descrierea sintaxei instructiunii conditionale if-else din limbajul C++ în notatie BNF
este:
4
Curs 2. Elemente de bază în C/C++ (I)
<instructiune1>
else
<instructiune2>
Astfel, pentru instrucțiunea if-else de mai sus, se evalua condiția <conditie>, iar dacă
aceasta este adevărată (în momentul evaluării), atunci se va executa o singură dată
instrucțiunea <instructiune1>, respectiv, dacă este falsă, se va executa o singură dată
instrucțiunea <instructiune2>.
5
Curs 2. Elemente de bază în C/C++ (I)
*/
#include <iostream>
int main ()
6
Curs 2. Elemente de bază în C/C++ (I)
std::cout << "Primul test 1, 2, 3. ";
return 0;
SAU
/*
*/
#include <iostream>
int main ()
char c;
cin >> c;
return 0;
Rezultatul va fi:
7
Curs 2. Elemente de bază în C/C++ (I)
Forma unui program simplu în C++
/*comentariu; el nu influențează programul */
//directive preprocesare
#define
tipuri utilizator;
Variabile;
Funcții;
....
//funcția principală
int main()
..........
return 0;
Preprocesarea în limbajul C
Directive preprocesare
Directiva preprocesare #include
copiază conținutul fișierului specificat în textul sursă
Sintaxa:
#include <nume_fisier>
#include "nume_fisier"
#include <nume_fisier> caută nume_fisier în directorul unde se află fișierele din librăria
standard instalată odată cu compilatorul
Exemple:
#include <iostream>
#include <math.h>
#include <stdlib.h>
#include “biblioteca_mea.h”
#include “t1.h”
definirea unei constante simbolice este un caz special al definirii unui macro
(fragment de cod care primeste un nume)
Sintaxa:
#define nume
9
Curs 2. Elemente de bază în C/C++ (I)
#define nume text
Exemple:
#define pi 3.1415926
#define then
#define si &&
#define daca if
#include <stdio.h>
int main()
float a,b,c;
scanf("%f %f %f",&a,&b,&c);
altfel
10
Curs 2. Elemente de bază în C/C++ (I)
return 0;
Compilarea condiționată
11
Curs 2. Elemente de bază în C/C++ (I)
Directivele #ifdef și #ifndef sunt folosite de obicei pentru a evita incluziunea multiplă a
modulelor în programarea modulară
#ifndef _MODUL_A_
#define _MODUL_A_
...
#endif /* _MODUL_A_ */
13
Curs 2. Elemente de bază în C/C++ (I)
14
Curs 2. Elemente de bază în C/C++ (I)
Date
Variabile și constante. Expresii
În cadrul programului, datele pot fi declarate ca fiind constante sau variabile.
Evident, atunci când se va declara o dată constantă, se va preciza şi valoarea ei, iar
când se va declara o dată variabilă, se subînţelege că ulterior, pentru a putea fi folosită,
această variabilă va primi o anumită valoare.
Fireşte, atât constantele cât şi variabilele au o anumită structură, mai simplă sau mai
complicată, şi o anumită natură, dată de mulţimea valorilor posibile pentru o dată. Cu
ele se pot face anumite operaţii, în funcţie de natura şi structura lor. Astfel, vom spune
că o dată are un anumit tip.
ALL_CAPS pentru constante
lowerToUpper pentru variabile, cu nume cât mai sugestive
Expresii
Majoritatea limbajelor de programare definesc expresiile după un sistem de reguli
sintactice, care, în general sunt următoarele:
15
Curs 2. Elemente de bază în C/C++ (I)
3. dacă E este expresie, atunci şi (E), -E, +E, F(E) sunt expresii, unde F este
numele unei funcţii aplicabile expresiei E;
4. dacă E1 şi E2 sunt expresii, atunci şi E1+E2, E1-E2, E1*E2, E1/E2 sunt expresii.
Acum, pe baza regulilor de mai sus putem construi expresii foarte complexe, pornind
de la constante şi variabile. Astfel, să considerăm entitatea (3+A)*(5/(-B+C)) şi să
verificăm dacă ea este expresie sau nu. Să presupunem că A, B şi C sunt variabile
numerice întregi. Cum 3 este constantă, conform regulii 1, ea este şi expresie. A, fiind
variabilă este, conform regulii 2 expresie. Acum, conform regulii 4, 3+A este expresie,
iar (3+A) este tot expresie, conform regulii 3. După simbolul înmulţirii (reprezentat
adesea prin *), avem: 5 este expresie, fiind constantă, B, C, apoi -B şi -B+C sunt
expresii. În fine, conform regulii 3, (-B+C) este tot expresie, apoi şi (5/(-B+C)) este
expresie, în conformitate cu regula 4, şi, tot după această regulă, şi (3+A)*(5/(-B+C))
este expresie.
Tip
Nume
Valoare
Domeniu de vizibilitate
Timp de viaţă
Operatori
Apeluri de funcții
Variabile în C++
Declararea variabilelor
tip variabila;
tip var1, var2, …, varn;
Exemplificare
char c;
16
Curs 2. Elemente de bază în C/C++ (I)
signed char sc;
int a, b;
a = b = 5;
int i;
int suma = 0;
long j;
float pi = 3.14;
double y;
int patrat(int y)
int x; x=y*y;
return x;
Tip = int
Nume = x
Valoare = 4
17
Curs 2. Elemente de bază în C/C++ (I)
Domeniu de vizibilitate: funcția patrat
Timp de viaţă = pe durata unui apel al funcției
SAU
Exemplu
În atribuirea
În atribuiri apar alte două probleme, despre care vom vorbi mai târziu:
Compatibilitate
Conversii
18
Curs 2. Elemente de bază în C/C++ (I)
Tipuri de variabile și vizibilitatea lor
Tip de date
Prin tip de date vom înţelege o mulţime de valori, împreună cu operaţiile ce se pot
executa cu ele. Fiecărei variabile, la declarare, i se va asocia un anumit tip. Tipul unei
constante poate fi determinat implicit din valoarea constantei, sau poate fi precizat
explicit ca în cazul variabilelor. Astfel, dacă constanta K are valoarea numerică 7,
putem trage concluzia că ea este de tip întreg, sau de tip real, nu şi logic sau şir de
caractere.
Totuşi, există şi limbaje în care se fac anumite convenţii, de pildă că orice număr diferit
de zero este considerat ca fiind cu valoarea de adevăr adevărat, iar numărul zero are
valoarea de adevăr fals.
19
Curs 2. Elemente de bază în C/C++ (I)
Unele limbaje de programare permit declararea unor variabile fără a se preciza tipul lor,
considerându-se astfel ca având un anumit tip general. Astfel, atunci când va fi folosită,
variabila respectivă va fi considerată ca având cel mai adecvat tip cu putinţă, în situaţia
concretă respectivă. De pildă, dacă este declarată o variabilă X, iar la un moment dat i
se atribuie valoarea 3,. atunci ea poate fi considerată ca având un tip numeric. Dacă
ulterior, variabila X va primi valoarea „abc”, adică un şir de caractere, se poate
considera că X este de tip şir de caractere.
Domeniul tipului (colecţia de obiecte) – mulțime de valori pentru care s-a adoptat un
anumit mod de reprezentare în memorie
(32 biți)
20
Curs 2. Elemente de bază în C/C++ (I)
Reprezentarea în memorie
21
Curs 2. Elemente de bază în C/C++ (I)
Există 10 tipuri de studenți la FII: cei care înțeleg sistemul binar și cei care nu îl
înțeleg.
22
Curs 2. Elemente de bază în C/C++ (I)
Modificatori de tip
signed
modificatorul implicit pentru toate tipurile de date
bitul cel mai semnificativ din reprezentarea valorii este semnul
unsigned
restricționează valorile numerice memorate la valori pozitive
domeniul de valori este mai mare deoarece bitul de semn este liber și
participă în reprezentarea valorilor
short
reduce dimensiunea tipului de date întreg la jumătate
se aplică doar pe întregi
long
permite memorarea valorilor care depășesc limita specifică tipului de date
se aplică doar pe int sau double: la int dimensiunea tipului de bază se
dublează, la double se mărește dimensiunea de regulă cu doi octeți (de la
8 la 10 octeți)
long long
introdus in C99 pentru stocarea unor valori întregi de dimensiuni foarte
mari
23
Curs 2. Elemente de bază în C/C++ (I)
Signed vs unsigned
24
Curs 2. Elemente de bază în C/C++ (I)
25
Curs 2. Elemente de bază în C/C++ (I)
26
Curs 2. Elemente de bază în C/C++ (I)
Tipul pointer, derivat dintr-un tip referenţiat (tip funcţie, tip obiect, tip incomplet).
Valorile tipului pointer sunt referinţe la o entitate de tipul referenţiat (pointer la T)
Tipuri scalare: tipurile aritmetice şi tipul pointer
Tipuri agregat: tablouri şi structuri
Un tablou de dimensiune necunoscută, o structură sau uniune cu conţinut
necunoscut sunt tipuri incomplete
Tipuri întregi
Constante întregi
Funcţii:
Operatori
27
Curs 2. Elemente de bază în C/C++ (I)
Operatorii ++ și —
Alte exemple:
28
Curs 2. Elemente de bază în C/C++ (I)
Tipul flotant (real)
float
double
long double
Constante reale
29
Curs 2. Elemente de bază în C/C++ (I)
23e4f = 23 x 104 = 230000.00
sin, cos, tan, asin, acos, atan, sinh, cosh, tanh, exp, log, log10, pow, sqrt, ceil,
floor, fabs, ldexp, frexp, modf, fmod.
Expresii logice
expresie_relationala ::= expr < expr | expr > expr | expr <= expr | expr >= expr | expr ==
expr | expr != expr expresie_logica ::= ! expr | expr || expr | expr && expr
30
Curs 2. Elemente de bază în C/C++ (I)
Negația logică
! 0 = 1, ! orice_nr_diferit_de_0 = 0
Exemple
O condiţie de forma a ≤ x ≤ b se scrie în limbajul C++ astfel:
31
Curs 2. Elemente de bază în C/C++ (I)
O condiţie de forma a > x sau x > b se scrie în limbajul C++ astfel:
Tipul void
Conversia în tip void a unei expresii semnifică faptul că valoarea sa este ignorată
Utilizat pentru tipul pointer; nu se face controlul tipului la un pointer de tip void
Utilizat pentru funcţii fără valoare returnată sau pentru funcţii fără parametri
Este un tip incomplet ce nu poate fi completat
Conversia în tip void a unei expresii semnifică faptul că valoarea sa este ignorată
Utilizat pentru tipul pointer; nu se face controlul tipului la un pointer de tip void
Utilizat pentru funcţii fără valoare returnată sau pentru funcţii fără parametri
Este un tip incomplet ce nu poate fi completat
litera_mare u, v=‘a’;
vector x; string s;
32
Curs 2. Elemente de bază în C/C++ (I)
matrice a;
complex z;
sau funcții
complex z;
z.re=z1.re+z2.re; z.im=z1.im+z2.im;
return z;
Operatorul condiţional ? :
Sintaxa
exp1 ? exp2 : exp3
Semantica
Se evaluează exp1
Dacă exp1 are valoare true (nenulă), atunci valoarea expresiei este valoarea lui
exp2; exp3 nu se evaluează
Dacă exp1 are valoare false (nulă), atunci valoarea expresiei este valoarea lui
exp3; exp2 nu se evaluează
x > y ? x : y
joc=(raspuns==’1’)?JocSimplu();JocDublu();
#include <iostream>
33
Curs 2. Elemente de bază în C/C++ (I)
void main(){
int x, y, z;
x = a?b:c?a:b;
Operatorul virgulă ,
Sintaxa
expresia_virgula ::= expresie, expresie
Semantica
Exemplu
a = 1, b = 2;
i = 1, j = 2, ++k + 1;
k != 1, ++x * 2.0 + 1;
Operatorul sizeof()
sizeof() este un operator unar ce permite determinarea numărului de octeţi pe care se
reprezintă un obiect (un tip sau o expresie)
34
Curs 2. Elemente de bază în C/C++ (I)
Exemple:
sizeof(int), sizeof(double);
sizeof(b*b-4*a*c), sizeof(i);
sizeof(char)<=sizeof(short)<=sizeof(int)<=sizeof(long)
sizeof(signed)=sizeof(unsigned) = sizeof(int)
sizeof(float)<=sizeof(double)<=sizeof(long double)
Utilizare
#include <iostream>
void main(){
cout << "sizeof(long double) = " << sizeof(long double) << endl;
Operatorul sizeof()
sizeof(char) = 1
35
Curs 2. Elemente de bază în C/C++ (I)
sizeof(int) = 4
sizeof(short) = 2
sizeof(long) = 4
sizeof(float) = 4
sizeof(double) = 8
sizeof(long double) = 8
sizeof(x + y + z) = 8
36
Curs 2. Elemente de bază în C/C++ (I)
Reguli pentru conversia implicită
În absenţa unui unsigned , obiectele se convertesc la tipul cel mai “înalt” în ordinea
(descrescătoare):
Conversia la unsigned se face doar în caz de necesitate (de ex. valoarea din unsigned
nu “încape” în celălalt operand).
Regula “integer promotion” : operaţiile se fac cel puţin în int, deci char şi short sunt
“promovaţi” la int.
#include <iostream>
int main(void){
s1 = c1;
37
Curs 2. Elemente de bază în C/C++ (I)
cout << "c1=" << (int)c1 << " s1=" << s1 << endl;
c2 = s2;
cout << "c2=" << (int)c2 << " s2=" << s2 << endl;
c3 = s3;
cout << "c3=" << (int)c3 << " s3=" << s3 << endl;
s4 = c4;
cout << "c4=" << (int)c4 << " s4=" << s4 << endl;
return 0;
(numetip) expresie
Exemple:
(long)(‘A’ + 1.0)
38
Curs 2. Elemente de bază în C/C++ (I)
(int)(b*b-4*a*c)
(double)(x+y)/z
(float)x*y/z
x / (float)2
Exemplu cast
#include <iostream>
int main(void){
int i, j; double x, y, z, t;
i = 5/2; x = 5/2;
y = (double)(5/2); j = (double)5/2;
z = (double)5/2; t = 5./2;
cout << z << ", " << t << ", " << endl;
return 0;
/* 2, 2, 2, 2, 2.5, 2.5 */
<stdlib.h>
Functia printf()
Cu ajutorul acestei functii putem afisa mesaje pe ecran. Cand programul dvs. foloseste
printf, datele pe care vreti sa le afisati reprezinta parametrii sau argumentele functiei
printf. Urmatoare instructiune foloseste functia printf() pentru a afisa pe ecran mesajul
Hello:
printf("Hello!");
Functia printf accepta mai multi parametri. Primul parametru trebuie intotdeauna sa fie
un sir de caractere, parametrul care urmeaza primului sir de caractere pot fi numere,
variabile, expresii (cum ar fi 10*7) sau chiar alte siruri de caractere. Atunci cand doriti
ca printf sa afiseze o valoare sau o variabila, trebuie sa includeti informatia despre tipul
variabilei in primul parametru. Pe langa caractere in primul parametru puteti sa
40
Curs 2. Elemente de bază în C/C++ (I)
introduceti specificatori de format, care arata functiei printf cum sa afiseze ceilalti
parametri.
Spre ex. pentru a afisa o valoare de tip int, veti folosi %d. De asemenea, pentru a tipari
o valoare in virgula mobila (float), puteti folosi %f. Urmatoarele intructiuni ilustreaza
utilizarea specificatorilor de format in cadrul functiei printf():
varsta,greutate,inaltime);
#include <stdio.h>
int main()
41
Curs 2. Elemente de bază în C/C++ (I)
printf("%d plus %d egal %d\n",1,2,1+2);
1 plus 2 egal 3
#include <stdio.h>
int main()
valoare, valoare);
valoare, valoare);
valoare, valoare);
}
42
Curs 2. Elemente de bază în C/C++ (I)
#include <stdio.h>
int main()
43
Curs 2. Elemente de bază în C/C++ (I)
Afișarea valorilor de tip long int folosind funcția printf
Pentru a afisa valorile de tip long int cu functia printf, trebuie sa folositi specificatorul de
format %ld. Daca folositi %d in loc de %ld, printf va trata valoarea respectiva ca fiind te
tip int si probabil va afisa rezutatul gresit. Urmatorul program long_int.c foloseste
specificatorii de format %ld si %d pentru a afisa valoarea 1000000.
#include <stdio.h>
int main()
Un milion is 16960
#include <stdio.h>
int main()
44
Curs 2. Elemente de bază în C/C++ (I)
printf("Pretul este %f\n", pret);
#include <stdio.h>
int main()
Dupa cum vedeti, programul va afisa litera A utilizand constanta de tip caracter ‘A’ si
valoarea ASCII 65. Atunci cand veti compila si executa programul pe ecran va fi afisat
urmatorul rezultat:
Litera este A
Litera este A
#include <stdio.h>
int main()
float pi = 3.14159;
#include
int main()
46
Curs 2. Elemente de bază în C/C++ (I)
printf("Numarul 0.00001234 este afisat in formatul %g\n", 0.00001234);
Atunci cand compilati si executati programul veti observa pe ecran urmatorul rezultat:
#include <stdio.h>
int main()
47
Curs 2. Elemente de bază în C/C++ (I)
in specificatorul de format. Urmatorul program, ilustreaza utilizarea semnului plus
pentru specificatorii de format:
#include<stdio.h>
int main()
int poz_int = 5;
Vanzator Cantitate
Ionescu 332
Popescu 1200
Georgescu 3311
48
Curs 2. Elemente de bază în C/C++ (I)
Daca folositi specificatorul de format %d, puteti sa indicati functiei printf sa afiseze un
numar minim de caractere. Urmatorul program ilustreaza modul in care puteti formata
valorile intregi folosind specificatorul %d:
#include <stdio.h>
int main()
int valoare = 5;
printf("%1d\n", valoare);
printf("%2d\n", valoare);
printf("%3d\n", valoare);
printf("%4d\n", valoare);
Cifra pe care o plasati dupa % precizeaza numarul minim de caractere pe care printf il
foloseste pentru a afisa o valoare intreaga. Daca, de exemplu specificati %5d si
valoarea pe care vreti sa o afisati este 10, printf va introduce trei spatii libere inainte de
valoare. Retineti ca valoarea precizeaza numarul minim de caractere pe care il va avea
iesirea. Daca valoarea pe care doriti sa o afisati are mai multe caractere decat ati
precizat, printf va folosi numarul de caractere necesar pentru afisarea corecta a valorii.
#include <stdio.h>
int main()
int valoare = 5;
49
Curs 2. Elemente de bază în C/C++ (I)
printf("%01d\n", valoare);
printf("%02d\n", valoare);
printf("%03d\n", valoare);
printf("%04d\n", valoare);
05
005
0005
Pentru a indica functiei printf sa adauge prefixul potrivit unei valori octale sau
hexazecimale , plasati caracterul # imediat dupa % in specificatorul de format.
Urmatorul program va exemplifica acest lucru:
#include <stdio.h>
int main()
50
Curs 2. Elemente de bază în C/C++ (I)
printf("Valoarea zecimala %d este %#X in hexazecimal\n", valoare);
#include <stdio.h>
int main()
printf(„%8.1f\n”, valoare);
printf(„%8.3f\n”, valoare);
printf(„%8.5f\n”, valoare);
In mod similar puteti cere functiei printf sa formateze o valoare in virgula mobila, in
format exponential.
51
Curs 2. Elemente de bază în C/C++ (I)
Alinierea la stanga a iesirii
Atunci cand afisati un text utilizand formatarea cu printf, alinierea prestabilita este la
dreapta. In functie de programul dvs. este posibil sa doriti ca printf sa faca alinierea
textului la stanga. Pentru a alinia un text la stanga trebuie sa plasati un semn minus
imediat dupa % in specificatorul de format. De ex:
#include <stdio.h>
int main()
int val_int = 5;
#include <stdio.h>
52
Curs 2. Elemente de bază în C/C++ (I)
int main()
int val_int = 5;
Functia scanf()
Funcția scanf este o functie cu ajutorul careia putem citi date de la tastatura. Sintaxa
functiei scanf este urmatoarea:
Obs: Indiferent de formatul folosit, la intalnirea unui spatiu in introducerea datelor, este
terminata citirea variabilei.
Obs: Indiferent de formatul folosit, la intalnirea unui spatiu in introducerea datelor, este
terminata citirea variabilei.
Pentru functia de citire scanf trebuie folosit operatorul de adresa “&”. Pentru variabilele
citite cu aceasta functie trebuie precizate adresele la care se stocheaza in memoria
53
Curs 2. Elemente de bază în C/C++ (I)
calculatorului valorile variabilelor. Functia va introduce valorile citite direct la acele
adrese.
Singurul caz in care nu este obligatorie folosirea operatorului adresa pentru citirea
valorii unei variabile cu functia scanf este citirea unui sir de caractere.
Obs: citirea cu ajutorul functiei scanf a sirurilor de caractere care contin spatii este
imposibila.
%c – citeste un caracter
%d – citeste un intreg zecimal
%i – citeste un intreg zecimal
%e – citeste un numar float
%f – citeste un numar float
%g – citeste un numar float
%o – citeste un nr octal fara semn
%s – citeste un sir de caractere
%x – citeste un nr hexazecimal fara semn
%p – citeste un pointer
%n – argumentul asociat primeste o valoare intreaga egala cu numarul de
caractere deja citite
%u – citeste un numar intreg fara semn
%[] – scanare pentru set de caractere
54
Curs 2. Elemente de bază în C/C++ (I)
Modificatorul l, poate precede caracterele de conversie d,i,o,u,x,X, caz in care valoarea
trebuie memorata ca un long int sau unsigned long int, sau poate precede caracterele
e,E,f,g,G, caz in care valoarea trebuie memorata ca un double.
#include <cstdio>
int a[100][100],i,j,n,k,i1,j1;
int main()
do{
fscanf(fin,"%d",&n);
}while(n%2==0);
a[i][j]=k;
55
Curs 2. Elemente de bază în C/C++ (I)
while(k<n*n)
i1=i;j1=j; i=i+1;j=j+1;
if(i>n)i=1;
else if(j>n)j=1;
if(a[i][j]!=0||j>n)
i=i1;j=j1;
j=j-1;
k=k+1;
a[i][j]=k;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
fprintf(fout,"%d ",a[i][j]);
fprintf(fout,"\n");
fclose(fin);
fclose(fout);
return 0;
56
Curs 2. Elemente de bază în C/C++ (I)
}
Rezumat
Discuție cu studenții în clasă
57