INF1_06.pdf

(139 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. Instrukcja for............................................................................................. 3
2.2. Operatory zwiększania (++) i zmniejszania (--) ......................................... 7
2.3. Dodatkowe uwagi do instrukcji for ............................................................ 8
2.4. Zagnieżdżanie pętli for ........................................................................... 10
2.5. Instrukcja kontynuacji (continue) ............................................................ 12
2.6. Instrukcja break ...................................................................................... 14
2.7. Instrukcja skoku (goto) ........................................................................... 14
3. Przebieg ćwiczenia ....................................................................................... 15
4. Literatura ....................................................................................................... 17
5. Zagadnienia na zaliczenie ............................................................................ 17
Instrukcja
do pracowni specjalistycznej z przedmiotu
Informatyka 1
Kod przedmiotu:
ES1C200 009
(studia stacjonarne)
JĘZYK C - INSTRUKCJA ITERACYJNA FOR,
ZAGNIEŻDŻANIE PĘTLI FOR, INSTRUKCJE
CONTINUE, BREAK, I GOTO
Numer ćwiczenia
INF06
6. Wymagania BHP ........................................................................................... 18
_____________
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 19
Instrukcja INF06
Wynikiem działania programu będzie następujący wydruk:
1. Opis stanowiska
1.1. Stosowana aparatura
Podczas zajęć wykorzystywany jest komputer klasy PC z systemem
operacyjnym Microsoft Windows (XP/Vista/7).
Programowanie
Programowanie
Programowanie
Programowanie
Programowanie
nie
nie
nie
nie
nie
jest
jest
jest
jest
jest
trudne
trudne
trudne
trudne
trudne
Ogólna postać instrukcji
for
jest następująca:
for
(wyr1; wyr2; wyr3)
instrukcja;
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.
Instrukcja
for
tworzy pętlę pracującą w następujący
sposób:
1. Wyliczane jest
wyr1
(jeśli występuje).
2. Wiadomości teoretyczne
2.1. Instrukcja for
W programach komputerowych bardzo często pewien fragment programu
wykonywany jest wielokrotnie lub dla zmiennych przyjmujących kolejne wartości.
W takich przypadkach stosowane są pętle, czyli instrukcje iteracyjne. Podstawową
instrukcją iteracyjną jest pętla
for.
W poniższym programie zastosowano pętlę
for
do pięciokrotnego wyświetlenia tego samego tekstu
Program wyświetlający pięć razy ten sam tekst.
#include
<stdio.h>
int
main(void)
{
int
i;
for
(i = 0; i < 5; i = i + 1)
printf("Programowanie
nie jest trudne\n");
return
0;
}
2. Wyliczane jest
wyr2.
Jeśli jego wartość jest
różna od zera (czyli jest ono prawdziwe), to
następuje przejście do kroku 3. W przeciwnym
przypadku instrukcja
for
kończy działanie.
3. Wykonywana jest
instrukcja.
4. Wyliczana jest wartość
wyr3.
Działanie jest
wznawiane od kroku 2, czyli obliczania
wyr2.
W pierwszym programie zmienna występująca w pętli
for
(i) pełniła tylko rolę
tzw. licznika pętli. W kolejnym programie zmienna taka jest wykorzystywana także
w obliczeniach.
Poniższy program zamienia temperaturę ze skali Fahrenheita na temperaturę
w skali Celsjusza. W jednym programie zamieniane są wartości od 0 F do 50 F co
10 F.
Program przeliczający temperaturę ze skali Fahrenheita na skalę Celsjusza.
#include
<stdio.h>
Informatyka 1
3 z 19
Instrukcja INF06
Informatyka 1
4 z 19
Instrukcja INF06
int
main(void)
{
int
f;
for
(f = 0; f < 60; f = f + 10)
printf("%2d
F to %6.2f C\n",f,5*(f-32.0)/9);
return
0;
}
for
(i = 0; i < 10; i = i + 1)
printf("%d ",i);
0 1 2 3 4 5 6 7 8 9
for
(i = 1; i < 10; i = i + 2)
printf("%d ",i);
1 3 5 7 9
Wynikiem działania programu jest następujący wydruk:
0
10
20
30
40
50
F
F
F
F
F
F
to
to
to
to
to
to
-17.78
-12.22
-6.67
-1.11
4.44
10.00
C
C
C
C
C
C
for
(i = 10; i > 0; i = i - 1)
printf("%d ",i);
10 9 8 7 6 5 4 3 2 1
W nawiasach instrukcji
for
występują trzy części (wyrażenia) oddzielone od siebie
średnikami:
-
pierwsza część inicjalizuje pętlę (f
= 0),
jest ona wykonywana tylko raz,
przed wejściem do pętli;
-
druga część jest warunkiem sterującym powtarzaniem pętli (f
< 60).
Jeśli
jest on prawdziwy to wykonywana jest instrukcja
printf()
znajdująca się za
pętlą;
-
następnie, po wykonaniu instrukcji
printf(),
wykonywana jest trzecia część,
w której zwiększana jest wartość zmiennej wykorzystywanej w pętli
(f
= f + 10)
i ponownie sprawdzany jest warunek sterujący powtarzaniem
pętli (f
< 60).
Zmienne występujące w pętlach nazywane są kolejnymi literami alfabetu:
i, j,
k, l,
..., chyba, że z kontekstu programu wynika użycie zmiennej o innej nazwie (tak
jak w przypadku programu zamieniającego temperatury:
f
- zmienna
przechowująca temperaturę w skali Fahrenheita). Zmienne te mogą przyjmować
dowolne wartości, zależnie od trzech wyrażeń w nawiasach pętli
for.
Poniżej
podano przykładowe pętle, w których instrukcja
printf()
wyświetla kolejne wartości
przyjmowane przez zmienną całkowitą
i.
Informatyka 1
5 z 19
Instrukcja INF06
for
(i = -9; i <= 9; i = i + 3)
printf("%d ",i);
-9 -6 -3 0 3 6 9
Jeśli w każdej iteracji wartość zmiennej sterującej pętli jest zwiększana lub
zmniejszana o
jeden
to zamiast zapisów:
for
(i = 0; i < 10; i = i + 1)
instrukcja;
for
(i = 10; i > 0; i = i - 1)
instrukcja;
stosuje się operatory zwiększania (++) i zmniejszania (--), nazywane także
operatorami inkrementacji i dekrementacji:
Informatyka 1
6 z 19
Instrukcja INF06
for
(i = 0; i < 10; i++)
instrukcja;
for
(i = 10; i > 0; i--)
instrukcja;
Jeśli operator preinkrementacji zastąpimy operatorem postinkrementacji:
int
i = 2, j;
j = 2 * i++;
printf("%d
%d",i,j);
Operatory te zostały opisane w kolejnym rozdziale instrukcji.
2.2. Operatory zwiększania (++) i zmniejszania (--)
Operator
++
służy do zwiększania wartości zmiennej o
1,
zaś operator
--
służy
do zmniejszania wartości zmiennej o
1.
Operatory te są jednoargumentowe. Można
stosować je tylko do zmiennych (nie można ich stosować do wyrażeń). Operatory
mogą występować jako przedrostek lub przyrostek (Tabela 1).
Tabela 1. Operatory ++ i --
Zapis
++i
--i
i++
i--
to najpierw wykonywana jest operacja mnożenia (2
* i = 2 * 2).
Wynik tej operacji
(4) przypisywany jest zmiennej
j.
Następnie zmienna
i
zwiększana jest o jeden (z
2
do
3).
Instrukcja
printf()
wyświetli zatem:
3 4.
Miejsce umieszczenia operatorów inkrementacji i dekrementacji nie ma
znaczenia w przypadku instrukcji typu:
i++;
++i;
i--;
--i;
równoważne:
równoważne:
i = i + 1;
Nazwa
preinkrementacji
predekrementacji
postinkrementacji
postdekrementacji
Znaczenie
Operator występuje przed nazwą zmiennej (i),
wartość zmiennej modyfikowana jest przed
jej użyciem.
Operator występuje po nazwie zmiennej (i),
wartość zmiennej modyfikowana jest po
użyciu jej poprzedniej wartości.
i = i - 1;
gdyż efekt końcowy będzie taki sam (zwiększenie lub zmniejszenie wartości
zmiennej
i
o 1).
Nie jest zalecane stosowanie operatorów
++
i
--
do zmiennej, która pojawia
się w wyrażeniu więcej niż jeden raz. Wynik poniższej instrukcji:
i = i++;
Rozpatrzmy następujący fragment programu:
int
i = 2, j;
j = 2 * ++i;
printf("%d
%d",i,j);
jest według standardu języka C
niezdefiniowany.
2.3. Dodatkowe uwagi do instrukcji for
Każde z trzech wyrażeń w nawiasach pętli
for
jest opcjonalne (może jego nie
być), ale nawiasy i średniki są obowiązkowe.
for
(wyr1; wyr2; wyr3)
instrukcja;
W powyższym programie najpierw wartość zmiennej
i
jest zwiększana o jeden
(z
2
do
3).
Następnie wykonywana jest operacja mnożenia (2
* 3).
Wynik tej
operacji (6) przypisywany jest zmiennej
j.
Zatem instrukcja
printf()
wyświetli
wartości:
3 6.
Informatyka 1
7 z 19
Instrukcja INF06
Informatyka 1
8 z 19
Instrukcja INF06
Jeśli nie jest podane
wyr2,
to przyjmuje się, że jest ono zawsze prawdziwe. Zatem
w prosty sposób można skonstruować pętlę nieskończoną.
for
( ; ; )
instrukcja;
Po nawiasie w instrukcji
for
nie stawia się średnika. Konstrukcja ze
średnikiem na końcu jest poprawna (kompilator nie zasygnalizuje błędu), ale
oznacza wielokrotne wykonanie
instrukcji pustej
(w poniższym przykładzie - 10
razy). Natomiast
instrukcja
zostanie wykonana tylko jeden raz.
for
(i = 0; i < 10; i++);
instrukcja;
Jeśli w pętli
for
ma być wykonana więcej niż jedna instrukcja, to należy
zastosować
instrukcję złożoną,
czyli objąć wszystkie te instrukcje nawiasami
klamrowymi. W poniższym programie w pętli
for
wykonywane są trzy instrukcje.
Program obliczający średnią arytmetyczną 6 liczb całkowitych.
#include
<stdio.h>
int
main(void)
{
int
i, x;
float
suma = 0.0;
for
(i = 0; i < 6; i++)
{
printf("Podaj
liczbe nr %d: ",i+1);
scanf("%d",&x);
suma = suma + x;
}
printf("Srednia:
%.3f\n",suma/6);
return
0;
}
Często popełnianym błędem przez początkujących programistów jest
wprowadzenie przecinków zamiast średników.
for
(i = 0, i < 10, i++)
instrukcja;
W takiej sytuacji kompilator wyświetli błąd:
1>c:\prog.cpp() : error C2143: syntax error : missing ';' before ')'
1>c:\prog.cpp() : error C2143: syntax error : missing ';' before ')'
Jeszcze innym rodzajem błędu jest podanie niewłaściwego warunku
kontynuacji pętli. W poniższym przykładzie funkcja
printf()
nie wykona się ani razu.
for
(i = 0; i > 10; i++)
printf("%d
",i);
W następnym przykładzie otrzymujemy pętlę nieskończoną, gdyż warunek
i > 0
jest zawsze prawdziwy:
1:
2:
3:
4:
5:
6:
3
8
5
7
3
2
for
(i = 1; i > 0; i++)
printf("%d
",i);
Przykładowy wynik działania programu:
Podaj liczbe nr
Podaj liczbe nr
Podaj liczbe nr
Podaj liczbe nr
Podaj liczbe nr
Podaj liczbe nr
Srednia: 4.667
2.4. Zagnieżdżanie pętli for
Zagnieżdżanie pętli
for
polega na tym, że jako instrukcja w pętli występuje
kolejna pętla
for.
Pierwsza pętla nazywana jest pętlą
zewnętrzną,
zaś druga -
9 z 19
Instrukcja INF06
Informatyka 1
10 z 19
Instrukcja INF06
Informatyka 1
Zgłoś jeśli naruszono regulamin