Structura unui program si a unei functii in C

Limbajul C este un limbaj de programare procedural, operaţiile fiind grupate în blocuri de instrucţiuni delimitate de o pereche de acolade { }. La rândul lor, blocurile sunt grupate în una sau mai multe funcţii. O funcţie C este un modul care grupează în interiorul unei perechi de acolade un set desperaţii codificate sub forma unor instrucţiuni.

Deci conceptul de bază în C este cel de funcţie. Fiecare funcţie poate accepta parametri de intrare la apel şi poate returna o valoare la revenire. Fiecare funcţie are un nume precedat de un cuvânt cheie care desemnează tipul funcţiei (tipul valorii returnate de funcţie). Numele funcţiei este urmat de o pereche de paranteze rotunde între care se specifică tipul şi numele parametrilor funcţiei. Parantezele sunt necesare chiar dacă nu există parametri.

în limbajul C nu este permisă definirea unei funcţii în interiorul altei funcţii, lucru care este permis în limbajul Pascal. în limbajul C, toate funcţiile trebuie definite în mod independent.

Un program C se compune din una sau mai multe funcţii, dintre care una este funcţia principală. Fiecare funcţie are un nume propriu, cu excepţia funcţiei principale care se numeşte main. Orice program trebuie să aibă o funcţie main iar execuţia programului începe cu prima instrucţiune din această funcţie.

Structura generală a unei funcţii C este următoarea:
tip nume(lista_parametrii_formali)
  declarare parametri
{
  instrucţiuni specifice funcţiei: declarare variabile locale,
  instrucţiuni executabile
}

Apelul unei funcţii transferă controlul de la funcţia apelantă la funcţia apelată. Apelul se face utilizând numele funcţiei, având între paranteze lista parametrilor actuali. Apelul, fiind o instrucţiune, se termină cu caracterul V (punct şi virgulă). Argumentele actuale, dacă există, sunt transmise funcţiei apelate prin valoare sau prin adresă.

În C sunt permise funcţii recursive. O funcţie este recursivă dacă se poate apela pe ea însăşi, fie direct, fie indirect.

în C++ precum şi în unele variante de C se pot folosi şi parametri de tip referinţă, care simplifică mult definirea şi utilizarea de funcţii cu parametri modificabili. Un parametru formal referinţă se declară folosind caracterul & între tipul şi numele parametrului. Se folosesc parametri de tip referinţă pentru funcţiile care trebuie să modifice valorile acestor parametri.

Limbajul C ignoră spaţiile albe de tipul linie nouă, spaţiu, tabulator, cu excepţia cazului în care acestea sunt părţi ale unui şir de caractere încadrat între ghilimele. Astfel programul de mai sus poate fi scris şi astfel:
#include "stdio.h"
void main(void){printf("Salut!");}

Reprezentarea numărului în binar
Se consideră o valoare întreagă. Să se scrie program C care afişează reprezentarea numărului în binar, urmată de decalarea la dreapta cu o poziţie şi afişarea din nou a numărului în binar.
#include "stdio.h"
{
  //declarăm prototipul funcției bin care va fi explicitată mai jos
  void bin(int);
  int a=10;
  //apelăm funcția bin pentru a vedea reprezentarea în binar
  bin(a);
  //declarăm la dreapta cu o poziție
  a>>=1;
  //apelăm din nou funcția bin pentru a vedea cum s-a făcut
  //declararea
  bin(a);
}

void bin(int i)
{
  int j;
  //folosim decalarea pe rând cu 15 poziţii, apoi cu 14 până la 0
  for(j=8*sizeof(i)-1;j >= 0;j--) printf("%d",i >> j&1);
//poziţii urmată de şi logic cu valoarea 1 pentru a obţine
//valoarea ultimului bit (0 sau 1)
}

Transmiterea parametrilor în cadrul unei funcţii

În C, la apelul unei funcţii datele se transmit prin stivă. Este acceptată transmiterea parametrilor atât prin valoare cât şi prin adresă. La transmiterea prin valoare, se creează copii temporare ale parametrilor care se transmit. Funcţia apelată lucrează cu aceste copii iar la revenire valorile variabilelor parametru vor fi nemodificate. Deci este imposibil ca funcţia apelată să modifice unul din argumentele reale din apelant.

Exemplu:
#include "stdio.h"
//se vor crea copii ale variabilelor x şi y
void schimbare(int x, int y)
{
  int tmp;
  tmp=x;
  x=y;
  //în cadrul copiilor variabilelor se face inversarea
  y=tmp;
}

//la revenire copiile variabilelor x şi y se distrug
void main(void)
{
  int x=5, y=7;
  //transmitere prin valoare
  schimbare(x,y);
  //valorile rămân nemodificate adică se va afişa 5 7
  printf("%d %d\n",x,y);
}

Leave a Reply

Your email address will not be published. Required fields are marked *

seven + 14 =

Time limit is exhausted. Please reload CAPTCHA.