Sunteți pe pagina 1din 53

Introducere n C

B. Kernighan, D. Richie-Limbajul C
1. Despre C. Primul program
2. Variabile i expresii aritmetice
3. Instruciunea for
4. Constante simbolice
5. Citirea i scrierea caracterelor
6. Tablouri
7. Funcii
8. Tablouri de caractere
9. Variabile automatice i domenii de vizibilitate

Introducere n C
Despre C
C este un limbaj de programare cu destinaie universal. Este
implementat pe majoritatea platformelor de calcul existente
azi.
 Este cel mai popular limbaj de programare pentru scrierea de
software de sistem. Este folosit la fel de bine i la scrierea
altor programe de importan deosebit n domenii numeroase
i diverse.
 Este apreciat pentru eficiena codului obiect pe care l poate
genera i pentru portabilitatea sa.
 A fost dezvoltat la nceputul anilor 1970 de Ken Thompson
i Dennis Ritchie, care aveau nevoie de un limbaj simplu i
portabil pentru scrierea nucleului sistemului de operare UNIX.


Introducere n C
Despre C

 n anul 1978 s-a publicat prima ediie a crii Limbajul

de programare C, avndu-i ca autori pe Brian W.


Kernighan i Dennis M. Richie.
 n 1983, Institutul Naional pentru Standarde din America
(the American National Standards Institute ANSI) a
nfiinat o comisie care s creeze o definiie lipsit de
ambiguiti i independent de main a limbajului C,
meninndu-i n acelai timp stilul. Rezultatul este
standardul ANSI pentru C.
 Ediia a 2-a a crii Limbajul de programare C(1988)
descrie limbajul C aa cum este definit de standardul ANSI.
 Aa cum s-a scris i n prefaa primei ediii, limbajul C
devine tot mai folositor pe msura ce experiena n lucrul
cu acesta crete.

Introducere n C
De ce C ?
Argumente n favoarea programrii n C
 Limbaj de programare structurat: permite o bun

organizare a programelor
 Complexitatea limbajului este de nivel mediu
 Permite programarea la un nivel mai sczut dect alte
limbaje, mai apropiat de hardware: operaii pe bii, acces
direct la memorie
 Potrivit pentru programarea de sistem
 Produce un cod obiect eficient: redus ca dimensiune i
rapid n execuie

Introducere n C
De ce C ?
Principalul dezavantaj
Limbajul nu este foarte strict n ceea ce privete tipurile de
date (conversii implicite ntre tipuri) => puine verificri i
multe erori nesemnalate.

Concluzii
C este destinat specialitilor din toate domeniile de
activitate, interesai nu doar de algoritmi dar i de accesul la
sistemul de operare i interfaa hardware.
Programarea n C presupune c programatorii tiu ce fac,
ceea ce este, desigur, valabil dup o anumit experien.


Introducere n C
Primul program
Un program C, indiferent de mrime, este format din
funcii i variabile.
 O funcie grupeaz instruciuni care precizeaz ce calcule s
se efectueze atunci cnd se apeleaz funcia.
 Variabilele stocheaz valorile folosite n timpul efecturii
calculelor. Ele sunt nume simbolice ale unor locaii de
memorie.
 Fiecare program trebuie s conin o funcie principal
numit main. Executarea programului C const, de fapt, n
execuia instruciunilor acestei funcii.
 main va apela de obicei alte funcii, unele scrise de
programator, altele din bibliotecile care sunt la dispoziie.


Introducere n C
Primul program
#include <stdio.h>

se include o bibliotec standard

main()

definete funcia main, fr


argumente
nceputul corpului funciei

printf(salut, lume\n); se apeleaz funcia printf din


biblioteca standard pentru a
tipri(afia) irul de caractere
sfritul corpului funciei
}

Introducere n C
Primul program
Programul s-ar putea scrie i astfel:
#include <stdio.h>
main() {
printf(salut, );
printf(lume);
printf(\n);
}
 \n este notaia C pentru caracterul rnd nou. \n reprezint un
singur caracter; o astfel de notaie se numete secven escape.
 Alte secvene escape sunt: \t pentru tab, \b pentru backspace,
\ pentru ghilimele i \\ pentru backslash.


Introducere n C
Variabile i expresii aritmetice
Program care afieaz un tabel de temperaturi exprimate n
grade Fahrenheit (0-300) i grade Celsius, folosind formula:
0C=(5/9)(0F-32).
#include<stdio.h>
/*afiseaza tab. Fahrenheit-Celsius pt. fahr=0,20,,300*/


main() {
int fahr, celsius;
int prim, ultim, pas;
prim=0; /* limita inferioara a temperaturii */
ultim=300; /* limita superioara */
pas=20; /* marimea pasului */

Introducere n C
Variabile i expresii aritmetice
fahr = prim;
while (fahr <= ultim) {
celsius = 5 * (fahr-32) / 9;
printf(%d\t%d\n, fahr, celsius);
fahr = fahr + pas;
}
}
/* .. */ constituie un comentariu. Toate caracterele
aflate ntre /* i */ sunt ignorate de compilator.
 Comentariile pot fi plasate n program oriunde poate fi
plasat un spaiu, un tabulator sau un caracter rnd nou.


Introducere n C
Variabile i expresii aritmetice
n C toate variabilele trebuie s fie declarate nainte de a fi
folosite; declararea se face de obicei la nceputul funciei,
naintea oricror instruciuni executabile.
 O declaraie enun proprietile variabilelor. Declaraia
const dintr-un nume de tip i o list de variabile.
int fahr, celsius;
int prim, ultim, pas;
 Tipul int arat c variabilele enumerate sunt de tip ntreg
reprezentate n binar.
 Tipul float desemneaz numere raionale n reprezentarea
numit virgul mobil, adic numere ce pot avea i o parte
fracionar.


Introducere n C
Variabile i expresii aritmetice


Limbajul C furnizeaz i alte cteva tipuri de date, printre care:

char
short
long
double

caracter un singur octet


ntreg scurt
ntreg lung
numr raional n reprezentare virgul mobil n
dubl precizie.

Exist structuri de date: tablouri, structuri i uniuni formate


cu componente de aceste tipuri de baz, pointeri ctre acestea i
funcii care returneaz valori de aceste tipuri.
 n program exist cteva instruciuni de atribuire care atribuie
variabilelor valori iniiale: ex. prim=0; sau rezultate din calcul.


Instruciunile individuale se termin prin ;

Introducere n C
Variabile i expresii aritmetice
Ciclul while produce cte o linie a tabelului la fiecare
repetiie. Cnd rezultatul testului devine fals, ciclul ia
sfrit.
 Corpul unei instruciuni while poate consta dintr-una sau
mai multe instruciuni cuprinse ntre acolade sau dintr-o
singur instruciune fr acolade.
 Se recomand s se indenteze instruciunile din corpul
ciclului. Indentarea i spaierea corespunztoare au o
importan major n a face programele lizibile - uor de
citit.
 Se recomand de asemenea, scrierea unei singure
instruciuni pe o linie.


Introducere n C
Variabile i expresii aritmetice
n instruciunea de atribuire
celsius = 5 * (fahr-32) / 9;
dac s-ar fi nmulit cu 5/9, toate temperaturile calculate ar fi
fost 0 pentru c, n C, ca i n multe alte limbaje, mprirea
ntreag trunchiaz rezultatul (orice parte fracionar este
nlturat).
 printf este o funcie pentru formatarea datelor de ieire, cu
dou sau mai multe argumente:
printf(%d\t%d\n, fahr, celsius);
Fiecare construcie cu % din primul argument numit
specificator de format, are corespondent, n ordine, n celelalte
argumente. Acetia trebuie s concorde ca numr i tip, altfel
se obin rezultate eronate.


Introducere n C
Variabile i expresii aritmetice
Pentru a obine o aliniere la dreapta a celor dou
temperaturi, adugm fiecrui %d o anumit dimensiune:
printf(%3d %6d\n, fahr, celsius);
 Pentru a obne rezultate mai precise ar trebui s folosim
aritmetica numerelor raionale n reprezentare virgul
mobil n locul celei a ntregilor.
#include<stdio.h>
/*afiseaza tabelul Fahrenheit-Celsius
pt. fahr=0,20, , 300; versiunea in virgula mobila*/
main() {
float fahr, celsius;
float prim, ultim, pas;


Introducere n C
Variabile i expresii aritmetice
prim=0.0; /* limita inferioara a temperaturii */
ultim=300.0; /* limita superioara */
pas=20.0; /* marimea pasului */
fahr = prim;
while (fahr <= ultim) {
celsius = (5.0/9.0) * (fahr-32.0);
printf(%3.0f %6.2f\n, fahr, celsius);
fahr = fahr + pas;
}
}

Introducere n C
Variabile i expresii aritmetice
Dac un operator aritmetic are operanzi ntregi, se execut o
operaie cu ntregi.
 Dac un operator aritmetic are un operand n reprezentare
virgul mobil i un operand ntreg, nainte ca operaia s fie
executat, ntregul va fi convertit n numr n reprezentare
virgul mobil.
 Specificatorii din printf au urmtoarea semnificaie:
%3.0f - se tiprete un numr n reprezentare virgul mobil
ntr-un cmp de cel puin 3 caractere, fr cifre zecimale.
%6.2f - se tiprete un numr n reprezentare virgul mobil
ntr-un cmp de cel puin 6 caractere dintre care 2
caractere dup punctul zecimal.


Introducere n C
Instruciunea for
#include<stdio.h>
/*afiseaza tabelul Fahrenheit-Celsius
pentru fahr=0,20, , 300 */
main()
{
int fahr;
for (fahr = 0; fahr <= 300; fahr = fahr + 20)
printf(%3d %6.2f\n, fahr, (5.0/9.0) * (fahr-32));
}

Introducere n C
Instruciunea for
Au fost eliminate majoritatea variabilelor. A rmas doar
fahr.
 Limitele inferioar i superioar precum i dimensiunea
pasului apar ca i constante n instruciunea for.
 Expresia care calculeaz valoarea temperaturii n grade
Celsius apare ca al treilea argument al lui printf: n orice
context n care este permis folosirea valorii unei variabile de
un anumit tip, se poate folosi o expresie orict de complicat,
de acel tip.
 Instruciunea for, ca i instruciunea while anterioar, este,
de asemenea, un ciclu. ntre paranteze exist trei pri separate
prin punct i virgul: iniializarea, condiia de continuare i
incrementarea (reiniializarea). Ciclul se ncheie n cazul n
care condiia a devenit fals. Iniializarea, condiia i
incrementarea pot fi orice expresii.


Introducere n C
Constante simbolice
Inserarea numerelor 0, 20 i 300 n program nu constituie o
metod bun. Sunt greu de modificat ntr-o manier
sistematic. O soluie este s se dea nume, acestor numere.
Definim astfel constante simbolice sau nume simbolice:
#define nume text de nlocuire
Din acest moment, orice apariie a lui nume va fi nlocuit cu
text-ul de nlocuire corespunztor. Numele constantelor
simbolice se scriu n mod convenional cu majuscule.
#include<stdio.h>
#define PRIM 0
#define ULTIM 300
#define PAS 20


Introducere n C
Constante simbolice
/*tipareste tabelul Fahrenheit-Celsius */
main()
{
int fahr;
for (fahr = PRIM; fahr <=ULTIM; fahr=fahr+PAS)
printf(%3d %6.2f\n, fahr, (5.0/9.0)* (fahr-32));
}


Obs. La sfritul unei linii define nu apare ;

Introducere n C
Citirea i scrierea caracterelor
Datele de intrare sau de ieire sub form de text , indiferent
de originea sau destinaia lor sunt tratate ca fluxuri de
caractere.
 Un flux de text este o secven de caractere mprit n linii;
fiecare linie este format din zero sau mai multe caractere
urmate de un caracter rnd nou.
 Biblioteca standard pune la dispoziie funcii pentru citirea
sau scrierea caracterelor unul cte unul. Cele mai simple sunt:
getchar i putchar.
 Funcia getchar citete urmtorul caracter dintr-un flux de
text aflat la intrare( de ex. la tastatur) i l returneaz ca
valoare a sa.
c = getchar();
variabila c conine urmtorul caracter al datelor de intrare.


Introducere n C
Citirea i scrierea caracterelor - copiere
Funcia putchar tiprete (afieaz) un caracter de fiecare
dat cnd este apelat:
putchar(c);
Tiprete coninutul variabile ntregi c sub forma unui
caracter, de obicei pe ecran.
 Program care copiaz intrarea la ieire, caracter cu caracter.
 Rezolvarea n pseudocod:
citeste un caracter
while (caracterul nu este indicatorul de sfarsit de fisier)
scrie caracterul care tocmai a fost citit
citeste un caracter


Introducere n C
Citirea i scrierea caracterelor - copiere
#include<stdio.h>
/* copiaza intrarea la iesire; prima versiune */
main() {
int c;
c = getchar();
while (c != EOF) {
putchar(c);
c = getchar();
}
}


Operatorul relaional != nseamn diferit de.

Introducere n C
Citirea i scrierea caracterelor - copiere
 Problema

este s distingem sfritul fiierului de intrare.


Atunci cnd nu mai exist date de intrare, getchar returneaz
o valoare special care nu poate fi confundat cu nici un
caracter autentic. Valoarea se numete EOF (End Of File).
 Trebuie s-l declarm pe c ca aparinnd unui tip suficient de
mare pentru a stoca orice valoare pe care o returneaz
getchar, inclusiv EOF. De aceea am folosit int.
 EOF este un ntreg definit ca i o constant simbolic n
<stdio.h>.
 n C, orice atribuire, precum c = getchar() este o expresie
i are o valoare, care este chiar valoarea, de dup atribuire, a
membrului stng al expresiei. n concluzie, programul poate fi
simplificat astfel:

Introducere n C
Citirea i scrierea caracterelor - copiere
#include<stdio.h>
/* copiaza intrarea la iesire; a doua versiune */
main(){
int c;
while ( (c = getchar() ) != EOF)
putchar(c);
}
 Programul rezultat este mai compact. n C Se va ntlni
frecvent acest stil.
 Prezena parantezelor este necesar deoarece precedena
operatorului != este mai mare dect a operatorului =.

Introducere n C
Citirea i scrierea caracterelor numrare caractere
#include<stdio.h>
/* numara caracterele din fisierul de intrare; prima
versiune */
main(){
long nc;
nc=0;
while (getchar() != EOF)
++nc;
printf(%ld\n, nc);
}
 Operatorul ++ nseamn incrementare cu unu. Operatorii ++
i --(decrementare cu unu) pot fi folosii prefixai (++nc)
sau postfixai (nc++).

Introducere n C
Citirea i scrierea caracterelor numrare caractere
Se poate lucra cu numere i mai mari, folosind o variabil de
tip double (float n dubl precizie). De asemenea, se va folosi
o instruciune for n loc de while:
#include<stdio.h>
/* numara caracterele din fisierul de intrare; a doua
versiune */
main() {
double nc;
for (nc=0.0; getchar() != EOF; ++nc)
;
printf(%.0f\n, nc);
}


Introducere n C
Citirea i scrierea caracterelor numrare caractere


; de dup for desemneaz o instruciune vid.

Dac fiierul de intrare nu conine nici un caracter,


condiia de continuare a lui while sau for devine fals chiar
la primul apel al lui getchar.


Att while ct i for evalueaz condiia de continuare la


nceputul ciclului, nainte de a trece la execuia corpului. n
consecin, programele vor aciona corect i cnd datele de
intrare au lungimea zero, caz n care astfel de cicluri nu se
parcurg niciodat.

Introducere n C
Citirea i scrierea caracterelor-numrare linii
Programul numr liniile din fiierul de intrare.
#include<stdio.h>
/* numara liniile din fisierul de intrare */
main(){
int c, nl;

nl = 0;
while ( (c = getchar() ) != EOF)
if (c == \n)
++nl;
printf(%d\n, nl);
}

Introducere n C
Citirea i scrierea caracterelor-numrare linii
Instruciunea if evalueaz condiia nchis ntre paranteze i,
dac acea condiie este adevrat, execut instruciunea urmt.
 Semnul dublu egal == este notaia C pentru este egal cu.
Atenie: nceptorii n C scriu uneori = cnd se refer la ==.
 Un caracter scris ntre dou semne apostrof reprezint o
valoare ntreag egal cu valoarea numeric a caracterului
respectiv, n setul de caractere al mainii. Acesta se numete
constant caracter, dei reprezint doar o alt modalitate de a
scrie, n C, un ntreg mic ( ex. A este o constant caracter; n
setul de caractere ASCII valoarea sa este 65).
 Secvenele escape folosite n constantele ir de caractere
sunt acceptate i n constantele caracter (\n este valoarea
caracterului rnd nou, care n ASCII are valoarea 10).


Introducere n C
Citirea i scrierea caracterelor-numrare cuvinte
Programul numr linii, cuvinte i caractere. Se consider
cuvnt orice secven de caractere care nu conine un spaiu,
un tabulator sau un caracter rnd nou.
#include <stdio.h>
#define INTERIOR 1 /* in interiorul unui cuvant */
#define EXTERIOR 0 /* in afara unui cuvant */
/* numara liniile, cuvintele si caracterele din fisierul de
intrare */
main()
{
int c, nl, ncuv, nc, stare;
stare = EXTERIOR;

Introducere n C
Citirea i scrierea caracterelor-numrare cuvinte
nl = ncuv = nc = 0;
while ((c = getchar()) != EOF) {
++nc;
if (c == \n)
++nl;
if(c == || c == \n || c == \t)
stare = EXTERIOR;
else if (stare == EXTERIOR) {
stare = INTERIOR;
++ncuv;
}
}

Introducere n C
Citirea i scrierea caracterelor-numrare cuvinte
printf(%d %d %d\n, nl, ncuv, nc);
}
S-au folosit constantele simbolice INTERIOR i
EXTERIOR n locul valorilor exacte 1 i 0 deoarece fac
programul mai lizibil.
 Linia nl = ncuv = nc = 0; seteaz toate cele trei variabile la
zero, o consecin a faptului c atribuirea este o expresie care
are o valoare. Atribuirile realizeaz asocierea de la dreapta la
stnga.
 Operatorul || nseamn SAU logic. Expresiile conectate prin
&& (SI logic) sau prin || se evalueaz de la stnga la dreapta i
evaluarea se oprete imediat ce este stabilit adevrul sau
falsitatea expresiei.


Introducere n C
Tablouri
Program care parcurge un text i contorizeaz numrul de
apariii ale fiecrei cifre (ntr-un tablou), ale caracterelor tip
spaiu alb (spaiu, tabulator, rnd nou) i ale tuturor celorlalte
caractere.
#include <stdio.h>
/* numara cifre, spatii albe, altele */
main()
{
int c, i, nalbe, naltele;
int ncifre[10];
nalbe = naltele = 0;

Introducere n C
Tablouri
for (i = 0; i < 10; ++i)
ncifre[i] = 0;
while ((c = getchar()) != EOF)
if (c >= 0 && c <= 9)
++ncifre[c - 0];
else if (c == || c == \n || c == \t)
++nalbe;
else
++naltele;

Introducere n C
Tablouri
printf(cifre=);
for (i = 0; i < 10; ++i)
printf(%d, ncifre[i]);
printf(, spatii albe = %d, altele = %d\n, nalbe,
naltele);
}
 Declaraia int ncifre[10]; declar variabila ncifre ca fiind
un tablou de 10 ntregi. n C, indicii tablourilor ncep
ntotdeauna de la 0, deci elementele sunt ncifre[0], ncifre[1],
..., ncifre[9].
 Un indice poate fi orice expresie cu valoare ntreag.

Introducere n C
Tablouri
ablonul
if (conditie1)
instructiune1
else if (conditie2)
instructiune2
....
....
else
instructiunen


apare frecvent n programe ca o modalitate de a exprima


decizia multipl.

Introducere n C
Funcii
O funcie furnizeaz o modalitate convenabil de a ncapsula
anumite calcule care pot fi utilizate(apelate) ulterior fr a ne
preocupa, n momentul apelului, de modul lor de implementare.
 Limbajul C face folosirea funciilor uoar, convenabil i
eficient.
 Definiia unei funcii are urmtoarea form:
tipul-rezultatului numele-functiei (declaratiileparametrilor)
{
declaratii
instructiuni
}


Introducere n C
Funcii
#include <stdio.h>
int putere(int m, int n);
/* utilizarea functiei putere */
int main()
{
int i;
for (i = 0; i < 10; ++i)
printf(%d %d %d\n, i, putere(2,i), putere(-3, i));
return 0;
}

Introducere n C
Funcii
/* putere: ridica baza la puterea n; n>=0 */
int putere(int baza, int n)
{
int i, p;
p = 1;
for (i = 1; i<= n; ++i)
p = p * baza;
return p;
}

Introducere n C
Funcii
Prima linie a funciei
int putere(int baza, int n)
declar tipurile i numele parametrilor i tipul rezultatului
returnat de funcie.
 n general, vom folosi denumirea de parametru pentru o
variabil enumerat n lista nchis ntre paranteze din definiia
unei funcii i cea de argument pentru valoarea folosit ntr-un
apel de funcie.
 Valoarea calculat n funcia putere este returnat ctre main
de instruciunea return. Dup return poate urma orice
expresie. Nu este necesar ca o funcie s returneze o valoare.


Introducere n C
Funcii
Declaraia
int putere(int m, int n);
aflat naintea lui main se numete prototip de funcie i
trebuie s concorde cu definiia i apelurile funciei putere.
 Nu este necesar ca numele parametrilor s corespund. Un
prototip poate fi scris :
int putere(int, int);
 Numele folosite n definiia efectiv a funciei putere
pentru parametrii si sunt locale funciei putere i nu sunt
vizibile pentru nici o alt funcie. Acest lucru este valabil i
pentru variabilele locale i i p. Aceste variabile se numesc, n
C, variabile automatice.


Introducere n C
Transmiterea argumentelor prin valoare
n C, toate argumentele funciilor sunt transmise prin
valoare. Acest lucru nseamn c funcia apelat primete
valorile argumentelor sale prin stocare n variabile temporare
create n stiv special n acest scop. n acest fel, funcia nu
are acces la locaiile de memorie ale variabilelor originale.
 n C, funcia apelat nu poate modifica direct variabila
corespunztoare argumentului transmis din funcia apelant;
ea nu poate modifica dect copia temporar.
 Apelul prin valoare conduce la programe mai compacte, cu
mai puine variabile neeseniale, deoarece parametrii pot fi
tratai n rutina apelat ca variabile locale, convenabil
iniializate ca urmare a apelului.


Introducere n C
Simularea transmiterii prin adres
Cnd este necesar, se poate face ca o funcie s modifice o
variabil din funcia apelant. Funcia apelant trebuie s
furnizeze adresa variabilei ce va fi accesat (un pointer
ctre acea variabil), iar funcia apelat trebuie s declare
parametrul ca fiind pointer i s acceseze variabila indirect,
prin intermediul acestuia(vezi capitolul despre pointeri).
 O alt excepie este n cazul tablourilor: cnd numele unui
tablou este folosit ca argument,valoarea transmis funciei
este adresa locaiei primului element al tabloului. Folosind
aceast valoare ca pe o variabil cu indici, funcia poate
accesa i poate modifica direct orice element al tabloului.


Introducere n C
Tablouri de caractere
Este tipul de tablou cel mai des folosit n C.
 Program care citete un set de linii de text i o tiprete pe
cea mai lung.
 Pseudocod:
while (exista o alta linie)
if (este mai lunga decat precedenta)
(salveaz-o)
(salveaza-i lungimea)
tipareste cea mai lunga linie
 Programul se mparte n mod natural n mai multe fragmente
care vor fi organizate ca funcii: preluarea liniei, testarea liniei,
salvarea liniei.


Introducere n C
Tablouri de caractere
#include <stdio.h>
#define MAXLINIE 1000 /* dimensiunea maxima a liniei
de intrare*/
int preialinie(char linie[ ], int maxlinie);
void copiaza(char in[ ], char din[ ]);
/* tipareste cea mai lunga linie de intrare */
int main()
{
int lung; /* lungimea liniei curente */
int max; /* lungimea maxima intalnita pana acum */

Introducere n C
Tablouri de caractere
char linie[MAXLINIE]; /* linia de intrare curenta */
char cea_mai_lunga[MAXLINIE]; /* pentru salvarea
liniei celei mai lungi */
max = 0;
while ((lung = preialinie(linie, MAXLINIE)) > 0)
if (lung > max) {
max = lung;
copiaza(cea_mai_lunga, linie);
}

Introducere n C
Tablouri de caractere
if (max > 0) /* s-a gasit o linie */
printf(%s, cea_mai_lunga);
return 0;
}
/* preialinie: citeste o linie, o stocheaza in s si
returneaza lungimea ei */
int preialinie(char s[ ], int lim)
{
int c, i;

Introducere n C
Tablouri de caractere
for (i= 0;i < lim-1 && (c=getchar())!=EOF && c!=\n;++i)
s[ i ] = c;
if (c == \n) {
s[ i ] = c;
++i;
}
s[ i ] = \0;
return i;
}

Introducere n C
Tablouri de caractere
/* copiaza: copiaza din in in; presupunem ca in
este suficient de mare */
void copiaza(char in[ ], char din[ ])
{
int i;
i=0;
while (( in[ i ] = din[ i ] ) != \0)
++i;
}

Introducere n C
Tablouri de caractere
Lungimea tabloului s[ ] nu este necesar n funcia preialinie,
din moment ce dimensiunea sa este setat n funcia main:
char linie[MAXLINIE].
 Tipul int este tipul returnat implicit. Acesta poate fi omis.
 Unele funcii returneaz o valoare util; altele, precum
copiaza, sunt folosite numai pentru efectul lor.
 Funcia preialinie aeaz caracterul \0 (caracterul nul, a
crui valoare este zero) la sfritul tabloului pe care l creaz,
pentru a marca sfritul irului de caractere.
 Specificatorul de format %s din printf ateapt ca argumentul
corespunztor s fie un ir de caractere terminat cu \0 .


Introducere n C
Variabile automatice i domenii de vizibilitate
Variabilele din funcia main: linie, cea_mai_lunga, sunt private
sau locale funciei main. Nici o alt funcie nu poate avea acces
direct la acestea. Acest lucru este valabil i pentru variabilele din alte
funcii (de ex. variabila i din funcia preialinie nu are legtur cu
variabila i din funcia copiaz).
 Fiecare variabil local dintr-o funcie i ncepe existena doar
cnd este apelat funcia respectiv i dispare cnd se iese din
funcie. Astfel de variabile se numesc automatice.
 Se pot defini i variabile externe tuturor funciilor, adic variabile
accesibile din orice funcie. Fiind global accesibile, pot fi folosite n
locul argumentelor pentru a transmite date ntre funcii. Totui,
utilizarea excesiv a acestui mod de comunicare ntre funcii este
considerat duntor i contrar unui bun stil de programare.


S-ar putea să vă placă și