Tablice

Tablica przechowuje ciąg elementów tego samego typu, np. liczb całkowitych typu int.

Tablica posiada swoją nazwę, ma określony typ elementów składowych oraz rozmiar.
Deklaracja tablicy wygląda w następujący sposób:

int t[10];

Powyższa instrukcja tworzy tablicę o nazwie t, która pomieści 10 liczb całkowitych typu int.

Do poszczególnych elementów tablicy odnosimy się poprzez numer elementu, gdzie elementy są numerowane (indeksowane) liczbami: 0, 1, 2, 3, ...

Przykłady posługiwania się tablicami:

float tablica[100]; tablica[0] = 1.23; tablica[99] = 1.0 / 3; tablica[1] = tablica[0] - 1 ;

Ważne: elementy tablicy są numerowane od 0. Wynika z tego, że dla N elementowej tablicy ostatni dozwolony indeks to N-1. Przekroczenie zakresu tablicy może się zakończyć błędem w czasie działania.
Przykład niepoprawnego użycia tablicy:

int x[10]; x[10] = 42;

W typowych zastosowaniach iteruje się po kolejnych elementach tablicy za pomocą pętli while lub for.
Przykład: wyzerowanie wszystkich elementów tablicy:

int i = 0; int tab[100]; while( i < 100) { tab[i] = 0; i = i + 1; }

Pętla for pozwala zrealizować to samo w bardziej zwięzły sposób, np,:

int i; int tab[100]; for (i=0; i<100; i++) tab[i] = 0;

Jeżeli chcemy skopiować zawartość tablicy do innej tablicy wówczas należy przekopiować każdy element osobno.
Przykładowo, dla danych tablic a i b kopiowanie pierwszych 10-ciu elementów może wyglądać tak:

int i = 0; while ( i < 10 ) { a[i] = b[i]; i++; }

Przykładowy program

Poniższy program wyznacza sumę oraz wartość średnią N liczb rzeczywistych podanych przez użytkownika.

#include <stdio.h> int main() { int n, i; float tablica[100]; float suma = 0.0; printf("Ile liczb posumowac: "); scanf("%d",&n); printf("Podaj kolejne liczby:\n"); i=0; while(i<n) { scanf("%f", &tablica[i]); i++; } for(i=0; i<n; i++) suma = suma + tablica[i]; printf("Suma = %f\n", suma); printf("Srednia = %f\n", suma/n); return 0; }

Plik: suma.c

Ćwiczenia:

Dla jakiej ilości liczb wejściowych powyższy program działa poprawnie?

Spróbuj zabezpieczyć działanie programu tak aby nie możliwe było wprowadzenie większej liczby wartości niż wynosi rozmiar tablicy.

Dodaj do programu wypisywanie następujących wartości wyznaczonych dla sekwencji podanych liczb:

wartość maksymalna i minimalna

odchylenie standardowe

ilość wartości dodatnich i ujemnych

Zadanie: Odwracanie kolejności liczb

Napisz program, który wczyta n liczb rzeczywistych a następnie wyświetli je w odwrotnej kolejności.

Dane: liczba n określająca ilość liczb oraz sekwencja n liczb rzeczywistych. Zakładamy, że n < 1000
Wynik: sekwencja n liczb w odwrotnej kolejności niż podana na wejściu.

Przykład:

n=5
1.3
0.0
-2
6
3.14

Wynik:

3.14
6
-2
0.0
1.3

Zadanie: Sortowanie liczb

Napisz program, który posotruje ciąg liczb rzeczywistych w kolejności od najmniejszej do największej.

Dane: liczba całkowita n określająca ilość liczb oraz sekwencja n liczb rzeczywistych (zakładamy, że n<1000)
Wynik: sekwencja n liczb w kolejności rosnącej.

Przykład:

n=5
1.3
0.0
2
6
3.14

Wynik:

0.000000
1.300000
2.000000
3.140000
5.000000
6.000000

Zadanie: Sito Eratostenesa

Napisz program, który wypisze wszystkie liczby pierwsze w zakresie od 2 do n. Zakładamy, że n < 1000000. Do wyznaczenia liczb pierwszych wykorzystaj algorytmu sita Eratostenesa .

Dane: liczba całkowita n (zakładamy, że n<1000000)
Wynik: sekwencja wszystkich liczb pierwszych od 2 do n

Przykład:

n=20
2
3
5
7
11
13
17