Documente Academic
Documente Profesional
Documente Cultură
Limbajul C
&
Matrice part. II
I. Aspecte teoretice
1. Software folosit la seminar: Visual Studio 2010.
Alt compilator pentru rularea programelor: Dev C++
http://dev-c.soft32.com/free-download/?lp=dsa&tg=ro&kw=_cat
%3Asoft32.com&mt=b&ad=33378748619&pl=&ds=s
Exemplu de program C:
#include <stdio.h> /* contine declaratiile functiilor de intrare/iesire */
#include <conio.h>
int main()
/* program principal */
{
int i;
printf("Introduceti un nr:");
scanf("%d",&i);
/* citire numar introdus la tastatura */
printf("%d", i); /* afiare numr citit */
getch(); /*asteapta o tasta pentru a inchide fereastra in care au fost afisate
datele*/
return 0;
}
1. Generalitati
1
Tipurile de date n C
Dup modul de alocare a
memoriei
Tipuri existente
ntregi
Reale
Simple
Caracter
Statice
Masiv
Structurate
Articol
Fiier
Pointer
Dinamice
Simple
Referin
Lungime
Domeniu de valori
(octei)
unsigned char
ntreg
Real
Mod de reprezentare
0..255 (0..28-1)
Codul ASCII al caracterului.
Poate fi prelucrat ca un caracter
sau ca un ntreg cu/fr semn.
[signed] char
-128..127 (-27..27-1)
unsigned [int]
0..65535
[signed] [int]
-32768..32767
unsigned long
0..232-1
-231..231-1
float
3.4*10-38..3.4*1038
double
1.7*10-308.. 1.7*10308
long double
10
Expresii
o Operatorii de atribuire
o Operatorii aritmetici
o Operatorii logici i relaionali
o Operatorii la nivel de bit
o Operatorul virgul
o Operatorul de conversie explicit
o Operatorul dimensiune
o Operatorii paranteze
o Operatorul condiional
Semnificaie operaie
Operator
Schimbare semn
--
++
Adunare
Scdere
nmulire
mprire
Semnificaie operaie
Operator
Negare
i logic
&&
Sau logic
Sau exclusiv logic
Semnificaie operaie
||
Nu exist
Operator
Mai mare
>
>=
Mai mic
<
<=
Egal
==
Diferit
!=
/n - linie noua
/t tab
/a bell (sunet de durata si frecventa standard)
3. Directive de precompilare.
a) Ex.: #include <stdio.h>
Liniile care incep cu "#" se numesc directive de preprocesare (precompilare). Acestea comunica cu
preprocesorul. Aceasta directiva "#include" determina preprocesorul sa includa o copie a fisierului
header "stdio.h" in acest punct al codului. Parantezele unghiulare din "<stdio.h>" indica ca acest fisier se
gaseste in biblioteca C. Am inclus acest fisier deoarece acesta contine informatii despre functiile de
citire si scriere (printf(), scanf()).
b) int main(),
(sau void main())
Fiecare program are o functie numita "main", care se executa intai. Parantezele ce urmeaza dupa "main"
indica compilatorului ca aceasta este o functie.
4. Definirea constantelor simbolice.
a) Se pot defini nume pentru constantele care sunt folosite des fara a mai fi nevoie de alocarea repetata a
memoriei ca la variabile. Se foloseste directiva de precompilare # .
Exemplu:
#define constanta valoare
Exemplu de definire de constante:
#define alfa 150
#define NEWLINE '\n'
b) Declararea constantelor folosind cuvantul const
Cu acest prefix se poate declara o constanta de un anumit tip.
Exemplu:
const int latime = 100;
const char tabulator = '\t';
Sunt tratate ca si variabile normale cu exceptia ca valoarea lor nu poate fi schimbata dupa definire.
5. Declarararea variabilelor.
Variabile
- globale - pot fi folosite oriunde in cadrul programului (chiar si in functii)
- locale pot fi folosite doar in cadrul functiei sau blocului in care au fost declarate.
Exemple de declarari:
int a;
float mynumber;
int a, b, c; //echivalent cu
int a;
int b;
int c;
signed int NrLocuri Parcare; //echivalent cu
int NrLocuri Parcare;
6 Initializarea la declarare.
type identifier = initial_value ;
Exemplu
int a = 0;
Siruri (strings)
variabile ce pot stoca valori nenumerice care sunt mai lungi decat un caracter.
Suportul oferit pentru siruri se afla in bliblioteca string
Un sir se initializeaza folosind ghilimele (exp: string sir = abcd)
7. Constante (expresii cu valoare fixa)
Ex: a = 5; // 5 este o constanta literal
Constantele literali se impart in :
a) numerali intregi,
Ex:1776
707
- 273
Ex: 75
// decimal (baza 10)
0113
// octal (baza 8) se pune un zero la in ceputul numarului
0x4b
// hexadecimal (baza 16) se pune un 0x la inceptul numarului
Constantele ca si variabilele au un anumit tip. Tipul implicit este integer. Acesta poate fi ajustat prin urmatoarele
modalitati:
75
// int
75u
// unsigned int
75l
// long
75ul
// unsigned long
b) numerali in virgula mobila (tip implicit: double)
Ex: 3.14159 // 3.14159 = pi
6.02e23 // 6.02 x 10^23 = nr. lui Avogadro
1.6e-19 // 1.6 x 10^-19 - numar foarte mic
3.0
// 3.0
3.14159L // long double
6.02e23f // float
c) caracter i siruri
'z' // caracter
'p' //caracter
"Hello world" // sir de caractere
"How do you do?" //sir de caractere
8. Implementarea structurilor fundamentale de control.
a) IF
if (expresion) statement
Exemplu:
if (x == 100)
printf ( "x este 100");
else
printf ("x nu este 100");
c) DO-WHILE
do statement while (condition);
Exemplu:
do {
------// corp instructiuni
} while (n != 0);
b) WHILE
while (expression) statement
Exemplu:
while (n>0) {
Printf (mesaj);
}
d) FOR
forma general:
for (expresion1; expresion2; expresion3)
statement;
Un caz particular al lui for este:
for (initialization; condition; increase) statement;
e) SWITCH - structura alternativ multipl ce permite alegerea unei instruciuni dintr-un grup, in funcie de valorile
pe care le poate lua un selector
switch (expresie)
{ case c_1:
case c_2:
....
case c_n:
[default:
}
instruciune_1;
instruciune_2;
instruciune_n;
instructiuni;]
Exemplu:
char litera;
printf (Tastati o litera intra a si c);
scanf (%c, &litera);
switch (litera)
{case a:
case A: printf (litera a sau A); break;
case b:
case B: printf (litera b sau B); break;
case c:
case C: printf (litera c sau C); break;
defaul: printf (ati tastat alta litera;
}
9. Descriptori de format
Functiile de intrare / iesire cu format cu urmatoarea structura a parametrilor:
(<sir descriptor>, <lista de intrare/iesire>)
Fiecrui element din lista de intrare/ieire a operaiei de citire/scriere trebuie s-i corespund un
descriptor de format n irul descriptor. Descriptorii de format se pun n coresponden cu elementele
listei de intrare/ieire de la stnga la dreapta.
Exemplu:
.......
int a,b:
printf(nr1 = %i, nr2 = %i, a, b);
.......
Observaii
ntregi
ntregi
ntregi
ntregi
ntregi
ntregi
virgul mobil
virgul mobil
virgul mobil
virgul mobil
virgul mobil
ntregi
iruri
ntregi
%%=>%
2. n=10;
printf (Numarul este: \n %d , n);
...
Se va afisa:
Numarul este:
10
b) funcia scanf
scanf(<sir_descriptor>, <adresa1>, <adresa2>...);
- apelul funciei transfer adrese ale variabilelor ale cror valori se vor citi
- funcia execut citirea datelor de la unitatea standard de intrare (implicit tastatur) si returneaz
campurile corect procesate
- <sir_descriptor> poate conine, n afara codurilor de conversie, caractere care vor trebui introduse ca
atare de la tastatur n cadrul cmpului respectiv (ex: daca sirul descriptor conne x=%d, atunci de la
tastatur trebuie introdus x=<valoare>)
Exemple:
scanf (%i %i, &x, &y) -> numere separate prin spatiu
scanf (%i ,%i, &x, &y) -> numere separate prin virgula
II. Probleme
1. Scrieti programul C care numara cate elemente negative sunt intr-un vector.
Exemplu:
Dati lungimea vectorului:4
p[0]= -1
p[1]= -2
p[2]= 3
p[3]= 4
rezNumarare = 2
Indicatii:
a) se vor include bibliotecile:
#include<stdio.h>
#include<conio.h>
b) in functia main:
- declarari de variabile
int p[10];
int i,n, rezNumarare;
-se citesc datele de intrare
printf("Dati lungimea vectorului:");
scanf ("%d", &n);
for (i=0;i<n;i++){
printf("p[%d]=", i);
scanf("%d", &p[i]);
}
- algoritmul de calcul
rezNumarare=0;
for (i=0;i<n;i++)
if (p[i]<0) rezNumarare=rezNumarare+1;
- afisarea rezultatului
printf("rezNumarare = %d\n", rezNumarare);
- mentinerea rezultatului pe ecran pana la apasarea unei taste
getch();
10
}
e. algoritmul de calcul
for (i=0;i<n; i++)
rez[i]= p[i]* q[i];
f. afisarea rezultatului
for (i=0;i<n;i++)
printf("rez[%d]= %d\n", i,rez[i]);
for (i=0;i<m;i++)
{ for (j=0;j<n;j++)
printf ("mat[%d][%d]=%d\t",i,j, mat[i][j]);
printf ("\n");
}
- algoritm de calcul:
o initializare min si max cu primul element din matrice
o se parcurge matricea si se verifica daca a[i][j] este mai mare/mic decat max/min. Daca da,
atunci max/min ia valoarea mat[i][j]
- se afiseaza valorile finale ale lui max si min
mat1[0][1]=2
mat1[1][1]=4
mat2[0][1]=2
mat2[1][1]=4
matrez[0][0]=2 matrez[0][1]=4
matrez[1][0]=6 matrez[1][1]=8
Indicatii
- biblioteci (stdio.h, conio.h)
- in main:
- declarare variabile intregi: mat1[10][10],mat2[10][10], matrez[10][10], i, j, n , m;
- date de intreare : nr. de linii (m), nr. de coloane (m), matricea 1 si 2.
- algoritmul de calcul pentru matricea rezultat matrez.
- afisare matrice rezultat.
13
mat[0][1]=2
mat[1][1]=4
mat[2][1]=8
mat[0][2]=3
mat[1][2]=4
mat[2][2]=8