Tablouri unidimensionale
tip_element nume_tablou[număr_elemente];
int k[50];
char c[8];
float a[100];
nume_tablou[index]
dimensiune_tablou = sizeof(tip_element)*număr_elemente
Tablourile unidimensionale sunt liste de informaţii de acelaşi tip care sunt plasate
în zone de memorie contiguă, în ordinea indicilor. De exemplu, dacă tabloul c cu 8
elemente de tip caracter, declarat mai sus, începe cu locaţia de memorie 1100, în
memorie acesta apare astfel:
Aplicaţie
Şiruri de caractere
www.cartiaz.ro – Carti si articole online gratuite de la A la Z
char nume_şir[număr_elemente];
Pentru a se marca sfârşitul şirului, după ultimul caracter din şir, se adaugă un octet
cu valoarea zero, adică caracterul ’\0’. În caz particular, şirul vid are primul element chiar
terminatorul ’\0’.
Dimensiunea indicată la declarare, în cazul unui tablou de tip şir, trebuie să fie cu
o unitate mai mare decăt cel mai lung şir, pentru a încăpea şi terminatorul’\0’. Astfel într-
un tablou cu număr_elemente caractere poate încăpea un şir cu cel mult număr_elemente-
1 caractere.
Terminatorul ’\0’ permite testarea facilă a sfârşitului şirului. De exemplu,
progrmul Lungime sir de caractere citeşte un sir şi îi calculează lungimea.
/* Lungime sir de caractere */
#include <stdio.h>
#include <conio.h>
void main()
{
clrscr();
char i,s[100];
printf("\tIntroduceti un sir de caractere:");
gets(s); /* citeste un sir terminat cu Enter */
for(i=0;s[i];++i);
printf("\tlungimea sirului este=%d",i);
getch();
}
De exemplu, instrucţiunea:
scanf("%10s",s);
#include <stdio.h>
#include <conio.h>
void main()
{
clrscr();
char i,s[50]="CONSTANTA SIR";
printf("Sirul initial este:%s\n",s);
printf("Codurile caracterelor sunt:");
for(i=0;s[i];++i) printf("%x ",s[i]);
printf("\nIntroduceti un sir de caractere:");
gets(s);
printf("Noul sir este:%s",s);
getch();
}
Nr. Efect
Funcţia
Crt.
Citeşte caractere de la tastatură şi le înscrie în şirul s,
1 gets(s); până întâlneşte caracterul ’\n’. Acest caracterul nu este
înscris în s, dar se adaugă terminatorul ’\0’.
2 puts(s); Afişează şirul s pe ecran şi trece la linie nouă.
3 strcpy(s1, s2); Copiază şirul s2 în şirul s1.
Copiază primele n caractere din şirul s2 în şirul s1 (pe
4 strncpy(s1, s2, n);
poziţia n, trebuie adăugat după copiere terminatorul ’\0’.
5 strcat(s1, s2); Adaugă şirul s2 la sfârşitul şirului s1.
Adaugă cel mult n caractere din şirul s2 la sfârşitul
6 strncat(s1, s2, n);
şirului s1.
În şirul s, caracterele litere mici sunt înlocuite cu
7 strupr(s);
caractere litere mari.
În şirul s, caracterele litere mari sunt înlocuite cu
8 strlwr(s);
caractere litere mici.
Inversează toate caracterele şirului s, exceptând
9 strrev(s);
terminatorul’\0’.
10 strset(s,c); În şirul s, toate caracterele sunt înlocuite cu caracterul c.
În şirul s, primele n caracterele sunt înlocuite cu
11 strnset(s,c,n); caracterul c. Operaţia se încheie, dacă este întâlnit
terminatorul’\0’.
12 strlen(s); Returnează lungimea şirului s.
13 strcmp(s1, s2); Compară succesiv codurile ASCII ale celor două şiruri.
www.cartiaz.ro – Carti si articole online gratuite de la A la Z
Programul Extrage majuscule utilizează o parte din funcţiile de mai sus. Astfel,
citeşte un şir de caractere s, realizează o copie a acestuia, converteşte toate caracterele
şirului copie în litere mici şi, comparând şirul iniţial cu copia, caracter cu caracter,
extrage literele mari din şirul s şi le depune în şirul majuscule.
/* Extrage majuscule */
#include <stdio.h>
#include <conio.h>
#include <string.h>
void main()
{
clrscr();
char i,j,s[50],copie[50],majuscule[50];
printf("\nIntroduceti un sir de caractere:");
gets(s);
strcpy(copie,s);
strlwr(copie);
for(i=j=0;s[i];++i)
if (s[i]!=copie[i])
{
majuscule[j]=s[i];
++j;
}
majuscule[j]='\0';
www.cartiaz.ro – Carti si articole online gratuite de la A la Z
printf("Majuscule:%s\n",majuscule);
getch();
}
Tablouri multidimensionale
dimensiune_tablou =
sizeof(tip_element)*dimensiune_1*dimensiune_2*...*dimensiune_n.
De exemplu, în secvenţa:
int p[5][10];
char ch[3][8][20];
De exemplu, pentru tablourile declarate mai sus, primele elemente sunt: p[0][0] şi
ch[0][0][0], iar ultimele elemente sunt: p[4][9] şi ch[2][7][19].
Aplicaţie
int n,p,q,i,j,k;
int a[10][10],b[10][10],c[10][10];
printf("n="); scanf("%d",&n);
printf("p="); scanf("%d",&p);
printf("q="); scanf("%d",&q);
for(i=0;i<n;++i)
for(j=0;j<p;++j)
{
printf("a[%d,%d]=",i,j);
scanf("%d",&a[i][j]);
};
for(i=0;i<p;++i)
for(j=0;j<q;++j)
{
printf("b[%d,%d]=",i,j);
scanf("%d",&b[i][j]);
};
for(i=0;i<n;++i)
for(j=0;j<q;++j)
{
c[i][j]=0;
for(k=0;k<p;++k) c[i][j]=c[i][j]+a[i][k]*b[k]
[j];
};
for(i=0;i<n;++i)
{
for(j=0;j<q-1;++j) printf("%8d ",c[i][j]);
printf("%8d\n",c[i][j]);
;}
getch();
}
Iniţializarea tablourilor
umde lista_valori trebuie să conţină valori pentru toate elementele tabloului, valori
compatibile cu tipul elementelor tabloului. În listă, valorile se separă prin virgulă.
Exemple:
int vector[3]={2,-7,5};
www.cartiaz.ro – Carti si articole online gratuite de la A la Z
int matrice[2][3]={{2,-6,5},{0,7,1}};
char s[8]={’E’,’x’,’e’,’m’,’p’,’l’,’u’,’\0’};
char s[8]=”Exemplu”;
int vector[]={2,-7,5};
int matrice[][3]={2,-6,5,0,7,1};
/* Initializare tablouri */
#include <stdio.h>
#include <conio.h>
#include <string.h>
void main()
{
clrscr();
int i,j,k,n=3,p=3,q=2;
int a[][3][2]={1,2,
www.cartiaz.ro – Carti si articole online gratuite de la A la Z
3,4,
5,6,
7,8,
9,10,
11,12,
13,14,
15,16,
17,18};
char s[4]={'a','b','c','\0'};
char s1[4]="abc";/* Copia lui s */
for(i=0;i<n;++i)
{
printf("\n\tElement %d\n\n",i);
for(j=0;j<p;++j)
{
for(k=0;k<q-1;++k) printf("%8d ",a[i][j]
[k]);
printf("%8d\n",a[i][j][k]);
};
}
printf("\n\t s=");
for(i=0;i<strlen(s);++i) printf("%c",s[i]);
printf("\ncopia lui s=");
for(i=0;i<strlen(s1);++i) printf("%c",s1[i]);
getch();
}