INF1_08.pdf

(215 KB) Pobierz
Politechnika Białostocka
Wydział Elektryczny
Katedra Elektrotechniki Teoretycznej i Metrologii
Spis treści
1. Opis stanowiska ............................................................................................. 3
1.1. Stosowana aparatura ............................................................................... 3
1.2. Oprogramowanie ...................................................................................... 3
2. Wiadomości teoretyczne................................................................................ 3
2.1. Tablica elementów ................................................................................... 3
2.2. Tablica jednowymiarowa (wektor) ............................................................ 4
2.3. Generowanie pseudolosowe elementów tablicy ..................................... 11
2.4. Inicjalizacja elementów tablicy ................................................................ 13
2.5. Łańcuchy znaków ................................................................................... 15
2.6. Inicjalizacja łańcucha znaków ................................................................. 16
2.7. Stała znakowa ........................................................................................ 17
Instrukcja
do pracowni specjalistycznej z przedmiotu
Informatyka 1
Kod przedmiotu:
ES1C200 009
(studia stacjonarne)
JĘZYK C - TABLICE JEDNOWYMIAROWE,
ŁAŃCUCHY ZNAKÓW
2.8. Funkcje do wyprowadzania i wprowadzania znaków .............................. 19
2.9. Funkcje z pliku nagłówkowego string.h................................................... 21
3. Przebieg ćwiczenia ....................................................................................... 23
4. Literatura ....................................................................................................... 26
Numer ćwiczenia
INF08
5. Zagadnienia na zaliczenie ............................................................................ 26
6. Wymagania BHP ........................................................................................... 27
_____________
Materiały dydaktyczne przeznaczone dla studentów Wydziału Elektrycznego PB.
Autor:
dr inż. Jarosław Forenc
Białystok 2013
© Wydział Elektryczny, Politechnika Białostocka, 2013 (wersja 1.4)
Wszelkie prawa zastrzeżone. Żadna część tej publikacji nie może być kopiowana i odtwarzana
w jakiejkolwiek formie i przy użyciu jakichkolwiek środków bez zgody posiadacza praw
autorskich.
Informatyka 1
2 z 28
Instrukcja INF08
2.2. Tablica jednowymiarowa (wektor)
1. Opis stanowiska
1.1. Stosowana aparatura
Podczas zajęć wykorzystywany jest komputer klasy PC z systemem
operacyjnym Microsoft Windows (XP/Vista/7).
Deklarując tablicę jednowymiarową należy podać: typ elementów, nazwę
tablicy i liczbę jej elementów, np.
int
tab[5];
1.2. Oprogramowanie
Na komputerach zainstalowane jest środowisko programistyczne Microsoft
Visual Studio 2008 Standard Edition lub Microsoft Visual Studio 2008 Express
Edition zawierające kompilator Microsoft Visual C++ 2008.
średnik
rozmiar tablicy
nazwa tablicy
typ elementów tablicy
Wyrażenie podane w nawiasach kwadratowych, określające rozmiar tablicy,
musi dawać w wyniku dodatnią stałą całkowitoliczbową. Ponadto musi to być
wartość znana już w fazie kompilacji (nie może to być zmienna). Jako rozmiar
tablicy można podać nazwę stałej zdefiniowanej dyrektywą preprocesora
#define
lub z użyciem słowa kluczowego
const.
int
tab[5];
#define
N 5
int
tab[N];
const int
n = 5;
int
tab[n];
2. Wiadomości teoretyczne
2.1. Tablica elementów
Tablica elementów jest ciągłym obszarem pamięci, w którym te elementy są
umieszczone. W tablicy mogą znajdować się elementy tylko jednego typu.
Wyróżnia się tablice jednowymiarowe (wektory), dwuwymiarowe (macierze)
i tablice o większej liczbie wymiarów (Rys. 1).
Powyższe deklaracje definiują tablicę pięciu elementów typu
int
(Rys. 2). Jest
to tablica jednowymiarowa, czyli tzw.
wektor.
Rys. 2. Wektor 5-elementowy
Rys. 1. Tablice elementów w języku C
Głównym celem stosowania tablic jest zastąpienie wielu zmiennych tego
samego typu jedną tablicą.
Każdy element tablicy ma swój numer zwany
indeksem,
element zerowy
(znajdujący się na początku tablicy) ma indeks
0
(zero), zaś ostatni
N-1,
gdzie
N
- rozmiar tablicy. Wartość indeksu pokazuje o ile elementów jest dany element
odległy od początku tablicy. Nazwa tablicy jest adresem jej zerowego elementu
(o indeksie 0) w pamięci komputera.
Informatyka 1
3 z 28
Instrukcja INF08
Informatyka 1
4 z 28
Instrukcja INF08
Odwołania do elementów tablicy (odczytanie lub zapisanie wartości)
wykonuje się za pomocą dwuargumentowego operatora indeksowania
[ ],
np.
tab[1]
- odwołanie do elementu tablicy o indeksie 1
Kompilator nie zasygnalizuje błędu, tylko w obszarze pamięci za tablicą zapisze
wartość
10.
Operacje na tablicach wykonywane są najczęściej przy wykorzystaniu pętli
for.
Załóżmy, że do wszystkich elementów tablicy
tab
należy zapisać wartość
10.
Kod realizujący taką operację może mieć następującą postać:
int
tab[5];
tab[0]
tab[1]
tab[2]
tab[3]
tab[4]
=
=
=
=
=
10;
10;
10;
10;
10;
indeks elementu (drugi argument operatora indeksowania)
nazwa tablicy (pierwszy argument operatora indeksowania)
Odwołania do kolejnych elementów tablicy
tab
mają postać pokazaną na Rys. 3.
Rys. 3. Odwołania do elementów tablicy
Można to samo zrobić znacznie prościej, stosując pętlę
for:
int
tab[5], i;
for
(i=0; i<5; i++)
tab[i] = 10;
Zapisanie wartości
5
do elementu tablicy
tab
o indeksie
1
oraz odczytanie tego
elementu i przypisanie jego wartości zmiennej o nazwie
x:
tab[1] = 5;
x = tab[1];
Jako indeks może występować:
-
stała liczbowa, np.
0, 1, 5;
-
nazwa zmiennej przechowującej liczbę całkowitą, np.
i, idx;
-
wyrażenie dające w wyniku liczbę całkowitą, np.
i * j + 5;
Przy odwołaniach do elementów tablicy kompilator nie sprawdza, czy zapis
lub odczyt odbywa się poza obszarem pamięci przydzielonym na tablicę, np.
int
tab[5];
tab[5] = 10;
Zmienna
i
przyjmuje wartości od
0
do
4,
czyli takie same jak kolejne indeksy
elementów tablicy.
W poniższym programie przedstawiono najczęściej wykonywane operacje na
tablicy jednowymiarowej (wektorze) przechowującej liczby całkowite.
Program wykonujący wybrane operacje na wektorze liczb całkowitych.
#include
<stdio.h>
#define
N 10
int
main(void)
{
int
tab[N];
int
i, j, min, max, suma = 0, tmp;
float
srednia;
W powyższym fragmencie programu zadeklarowano 5-elementową tablicę
o nazwie
tab.
Odwołanie
tab[5]
jest błędne, gdyż nie istnieje element o indeksie
5.
Informatyka 1
5 z 28
Instrukcja INF08
Informatyka 1
6 z 28
Instrukcja INF08
/* wczytanie elementow tablicy */
for
(i=0; i<N; i++)
{
printf("Podaj
liczbe nr %d: ",i+1);
scanf("%d",&tab[i]);
}
/* wyswietlenie elementow tablicy */
printf("\nElementy
tablicy:\n");
for
(i=0; i<N; i++)
printf("%d
",tab[i]);
printf("\n\n");
/* wyswietlenie tablicy w odwrotnej kolejnosci */
/* sortowanie i wyswietlenie elementow tablicy */
for
(i=0; i<N-1; i++)
for
(j=i+1; j<N; j++)
if
(tab[i] > tab[j])
{
tmp = tab[i];
tab[i] = tab[j];
tab[j] = tmp;
}
printf("Elementy
tablicy po sortowaniu:\n");
for
(i=0; i<N; i++)
printf("%d
",tab[i]);
printf("\n");
return
0;
printf("Tablica
w odwrotnej kolejnosci:\n");
for
(i=N-1; i>=0; i--)
printf("%d
",tab[i]);
printf("\n\n");
/* wyszukanie elementu o najmniejszej wartosci */
min = tab[0];
for
(i=1; i<N; i++)
if
(tab[i]<min)
min = tab[i];
printf("Wartosc
elementu najmniejszego: %d\n",min);
/* indeksy elementow o najmniejszej wartosci */
printf("Indeksy
elementu najmniejszego: ");
for
(i=0; i<N; i++)
if
(tab[i]==min)
printf("%d ",i);
printf("\n\n");
/* suma i srednia arytmetyczna elementow tablicy */
for
(i=0; i<N; i++)
suma = suma + tab[i];
srednia = (float) suma/N;
printf("Suma:
%d, srednia: %f\n\n",suma,srednia);
}
Przykładowy wynik uruchomienia programu:
Podaj
Podaj
Podaj
Podaj
Podaj
Podaj
Podaj
Podaj
Podaj
liczbe
liczbe
liczbe
liczbe
liczbe
liczbe
liczbe
liczbe
liczbe
nr
nr
nr
nr
nr
nr
nr
nr
nr
2: 6
3: 4
4: 2
5: 1
6: 7
7: 4
8: 6
9: 3
10: 5
Elementy tablicy:
3 6 4 2 1 7 4
6
3
5
Tablica w odwrotnej kolejnosci:
5 3 6 4 7 1 2 4 6 3
Wartosc elementu najmniejszego: 1
Indeksy elementu najmniejszego: 4
Suma: 41, srednia: 4.100000
Elementy tablicy po sortowaniu:
1 2 3 3 4 4 5 6 6 7
Informatyka 1
7 z 28
Instrukcja INF08
Informatyka 1
8 z 28
Instrukcja INF08
Rozmiar tablicy określony został przy użyciu dyrektywy preprocesora
#define.
#define
N 10
dotychczasowego najmniejszego (min), to element ten staje się najmniejszym
(min
= tab[i]):
min = tab[0];
for
(i=1; i<N; i++)
if
(tab[i]<min)
min = tab[i];
printf("Wartosc
elementu najmniejszego: %d\n",min);
Dzięki temu zmiana rozmiaru tablicy będzie wymagała tylko zmiany wartości
w dyrektywie
#define,
a nie w każdym innym miejscu programu, gdzie pojawia się
on. Dotyczy to zwłaszcza warunków w pętlach
for.
W programie wykonywane są następujące operacje na tablicy:
-
wczytanie elementów tablicy - w pętli
for
wyświetlamy komunikat „Podaj
liczbę nr …”,
a następnie funkcją
scanf()
wczytujemy liczbę:
for
(i=0; i<N; i++)
{
printf("Podaj
liczbe nr %d: ",i+1);
scanf("%d",&tab[i]);
}
-
wyszukanie indeksów elementu o najmniejszej wartości - przeglądamy tablicę
poszukując elementów równych najmniejszemu (tab[i]==min); po znalezieniu
takiego elementu wyświetlamy jego indeks czyli wartość zmiennej
i:
printf("Indeksy elementu najmniejszego: ");
for
(i=0; i<N; i++)
if
(tab[i]==min)
printf("%d ",i);
printf("\n");
-
wyświetlenie elementów tablicy w jednym wierszu:
printf("Elementy
wektora:\n");
for
(i=0; i<N; i++)
printf("%d
",
tab[i]);
-
wyświetlenie elementów tablicy w odwrotnej kolejności - zmieniamy wyrażenia
w pętli
for,
zmienna
i
będzie przyjmowała wartości od
N-1
(ostatni element
tablicy) do
0
(zerowy element tablicy):
printf("Tablica
w odwrotnej kolejnosci:\n");
for
(i=N-1; i>=0; i--)
printf("%d
",
tab[i]);
-
obliczenie sumy i średniej arytmetycznej elementów tablicy - w pętli
for
dodajemy kolejne elementy tablicy do zmiennej
suma
(przed pętlą zmienna ta
musi być wyzerowana); następnie obliczamy średnią arytmetyczną dzieląc
sumę
przez ilość elementów (N); ponieważ
suma
i
N
są całkowite, to w celu
uniknięcia dzielenia liczb całkowitych, wymuszamy zmianę typu zmiennej
suma
na typ
float: (float) suma:
for
(i=0; i<N; i++)
suma = suma + tab[i];
srednia = (float) suma/N;
printf("Suma: %d, srednia: %f\n",suma,srednia);
-
wyszukanie elementu o najmniejszej wartości - zakładamy, że zerowy
element tablicy jest najmniejszy (min
= tab[0]);
przeglądamy pozostałe
elementy tablicy; jeśli kolejny z elementów tablicy (tab[i]) jest mniejszy od
Informatyka 1
9 z 28
Instrukcja INF08
-
sortowanie elementów tablicy w kolejności od najmniejszego do największego
- pętla zewnętrzna określa indeks elementu (i), którego wartość jest
porównywana z wartościami pozostałych elementów w tablicy (o indeksach
i+1,i+2,…,N-1)
określanych w pętli wewnętrznej; jeśli kolejność elementów
Informatyka 1
10 z 28
Instrukcja INF08
Zgłoś jeśli naruszono regulamin