Wykład 7.

Transkrypt

Wykład 7.
Instrukcje sterujące: pętle
Elwira Wachowicz
[email protected]
11 kwietnia 2013
Elwira Wachowicz ([email protected])
Instrukcje sterujące: pętle
11 kwietnia 2013
1 / 24
Operator inkrementacji: ++
Operator inkrementacji zwiększa wartość operandu o 1. Może znajdować
się przed operandem: tryb przedrostkowy (++a) lub za
operandem: tryb przyrostkowy (a++).
but = 23 .0;
while (++but < 45)
{
stopa = MNOZNIK * but + KOREKTA;
printf("%8.1f %15.2f cm\n", but, stopa)
}
Elwira Wachowicz ([email protected])
Instrukcje sterujące: pętle
11 kwietnia 2013
2 / 24
Operator inkrementacji: ++
but = 23.0;
while (++but < 45)
{
stopa = MNOZNIK * but + KOREKTA;
printf("%8.1f %15.2f cm\n", but, stopa)
}
Elwira Wachowicz ([email protected])
Instrukcje sterujące: pętle
11 kwietnia 2013
3 / 24
Operator inkrementacji: ++
/* rostki.c -- przedrostek a przyrostek */
#include <stdio.h>
int main(void)
{
int a = 1, b = 1;
int aplus, bplus;
aplus = a++;
/*
bplus = ++b;
/*
printf("a
aplus
printf("%1d %5d %5d
return 0;
przyrostek
*/
przedrostek */
b
bplus \n");
%5d\n", a, aplus, b, bplus);
}
Wynik działania:
a
2
aplus
1
b
2
bplus
2
Elwira Wachowicz ([email protected])
Instrukcje sterujące: pętle
11 kwietnia 2013
4 / 24
Operator inkrementacji: ++
Elwira Wachowicz ([email protected])
Instrukcje sterujące: pętle
11 kwietnia 2013
5 / 24
Operator dekrementacji: ––
--licznik;
licznik--;
/* odmiana przedrostkowa operatora dekrementacji */
/* odmiana przyrostkowa operatora dekrementacji */
/* butelki.c -- odliczanie w dół
#include <stdio.h>
#define MAX 100
*/
int main(void)
{
int licznik = MAX + 1;
while(--licznik >0)
{
printf("%d butelek piwa na stole, "
"%d butelek piwa!\n", licznik, licznik);
printf("Weź jedną i puść ją w krąg,\n");
printf("%d butelek piwa!\n\n", licznik - 1);
}
return 0;
}
Elwira Wachowicz ([email protected])
Instrukcje sterujące: pętle
11 kwietnia 2013
6 / 24
Operator dekrementacji: ––
100 butelek piwa na stole, 100 butelek piwa!
Weź jedną i puść ją w krąg,
99 butelek piwa!
99 butelek piwa na stole, 99 butelek piwa!
Weź jedną i puść ją w krąg,
98 butelek piwa!
I na koniec:
1 butelek piwa na stole, 1 butelek piwa!
Weź jedną i puść ją w krąg,
0 butelek piwa!
Elwira Wachowicz ([email protected])
Instrukcje sterujące: pętle
11 kwietnia 2013
7 / 24
Priorytet
Operatory ++ i –– mają priorytet niższy jedynie od nawiasów.
Priorytetu nie należy mylić z kolejnością wykonywania działań:
y = 2;
n = 3;
liczba = (y + n++) * 6;
Daje:
liczba = (2 + 3) * 6 = 5 * 6 = 30
Zwiększenie n następuje dopiero po jej wykorzystaniu do obliczenia
wartości wyrażenia. Priorytet mówi, że operator odnosi się do n, a nie
do 2 + n
Elwira Wachowicz ([email protected])
Instrukcje sterujące: pętle
11 kwietnia 2013
8 / 24
Zachowaj ostrożność
Nie stosuj operatora inkrementacji lub dekrementacji do zmiennej,
która jest częścią więcej niż jednego argumentu funkcji.
printf("%10d %10d\n", num, num * num++)
Funkcja printf() może obliczyć ostatni argument jako pierwszy i
zwiększyć zmienną num przed przejściem do następnego argumentu.
Nie stosuj operatora inkrementacji lub dekrementacji do zmiennej,
która w wyrażeniu pojawia się więcej niż jeden raz.
n = 3;
y = n++ + n++;
Nie wiadomo jaka będzie wartość y.
Elwira Wachowicz ([email protected])
Instrukcje sterujące: pętle
11 kwietnia 2013
9 / 24
Wyrażenia
Wyrażenie jest kombinacją operatorów i operandów (to, czym posługuje
się operator).
Przykłady:
4
-6
4 + 21
a*(b + c/d)/20
q = 5*2
x = ++q % 3
q > 3
Elwira Wachowicz ([email protected])
Wyrażenie
-4 + 6
c = 3 + 8
5 > 3
6 + (c = 3 + 8)
Instrukcje sterujące: pętle
Wartość
2
11
1
17
11 kwietnia 2013
10 / 24
Instrukcje
Instrukcje główne elementy, z których zbudowany jest program. To
kompletne polecenie wydane komputerowi. W C kończy się
zawsze znakiem średnika.
nogi = 4
to wyrażenie, które może być częścią większego wyrażenia.
nogi = 4;
jest instrukcją.
Elwira Wachowicz ([email protected])
Instrukcje sterujące: pętle
11 kwietnia 2013
11 / 24
/* dodaj.c -- cztery typy instrukcji */
/* oblicza sumę pierwszych dwudziestu liczb całkowitych */
#include <stdio.h>
int main(void)
{
int licznik, suma;
licznik = 0;
suma = 0;
while ( licznik++ < 20)
suma = suma + licznik;
printf("suma = %d\n", suma);
return 0;
/* instrukcja deklaracji
*/
/* instrukcja przypisania
/* jak wyżej
*/
/* instrukcja while
*/
/* instrukcja wywołania funkcji */
}
Elwira Wachowicz ([email protected])
Instrukcje sterujące: pętle
11 kwietnia 2013
12 / 24
Konwersja typów
Zmienne całkowite char i short są przetwarzane na typ int.
Gdy dwa typy w operacji, oba wyrównywane są do typu o wyższej
randze.
Kolejność od typów od najwyższej rangi do najniższej: long double,
double, float, unsigned int, int.
W instrukcji przypisania ostateczny wynik jest przetwarzany na typ
zmiennej, której nadawana jest wartość. Może wystąpić awans do typu
o wyższej randze lub degradacja do typu o niższej randze.
Uwaga: typ o niższej randze może nie być wystarczająco pojemny aby
przechować całą liczbę. (Np. typy zmiennoprzecinkowe przy konwersji
są zawsze obcinane: 23.13 i 23.99 → 23, −23.5 → −23).
Elwira Wachowicz ([email protected])
Instrukcje sterujące: pętle
11 kwietnia 2013
13 / 24
/* konwers.c -- automatyczne konwersje typów
#include<stdio.h>
*/
int main(void)
{
char ch;
int i;
float fl;
fl = i = ch = ’A’;
printf("ch = %c, i = %d, fl = %2.2f\n", ch, i, fl);
ch = ch + 1;
i = fl + 2 * ch;
fl = 2.0 * ch + i;
printf("ch = %c, i = %d, fl = %2.2f\n", ch, i, fl);
ch = 5212205.17;
printf("Teraz ch = %c\n", ch);
return 0;
}
Wynik działania:
ch = A, i = 65, fl = 65.00
ch = B, i = 197, fl = 329.00
Teraz ch =
Elwira Wachowicz ([email protected])
Instrukcje sterujące: pętle
11 kwietnia 2013
14 / 24
Operator rzutowania
Rzutowanie: metoda pozwalająca na wybranie przez programistę typu
zmiennej w trakcie wykonywania operacji. Polega na
poprzedzeniu wartości nazwą żądanego typu podaną w
nawiasie.
Mamy zmienną myszy typu int.
myszy = 1.6 + 1.7;
myszy = (int) 1.6 + (int) 1.7;
Elwira Wachowicz ([email protected])
Instrukcje sterujące: pętle
11 kwietnia 2013
15 / 24
Instrukcja: while
Elwira Wachowicz ([email protected])
Instrukcje sterujące: pętle
11 kwietnia 2013
16 / 24
Instrukcje złożone (bloki)
Instrukcja złożona (blok) to przynajmniej dwie instrukcje scalone ze sobą
przez zawarcie ich w klamrach.
/* fragment 1 */
index = 0;
while (index++ < 10)
sam = 10 * index + 2;
printf("sam = %d\n", sam);
Elwira Wachowicz ([email protected])
/* fragment 2 */
index = 0;
while (index++ < 10)
{
sam = 10 * index + 2;
printf("sam = %d\n", sam);
}
Instrukcje sterujące: pętle
11 kwietnia 2013
17 / 24
Instrukcje złożone (bloki)
Elwira Wachowicz ([email protected])
Instrukcje sterujące: pętle
11 kwietnia 2013
18 / 24
Funkcje z argumentami
/* hash.c -- definiuje funkcje z argumentami
#include<stdio.h>
void hash(int n); /* prototyp funkcji
int main(void)
{
int razy = 5;
char ch = ’!’;
float f = 6.0;
hash(razy);
hash(ch);
hash((int) f);
return 0;
/* kod ASCII wykrzyknika to 33
*/
*/
*/
/* argument typu int
*/
/* char jest automatycznie zmieniany na int */
/* rzutowanie wymusza konwersję f na int
*/
}
void hash(int n)
{
while (n-- > 0)
printf("#");
printf("\n");
}
Elwira Wachowicz ([email protected])
Instrukcje sterujące: pętle
11 kwietnia 2013
19 / 24
Operatory relacji
Operator
<
<=
==
>=
>
!=
Znaczenie
jest mniejszy
jest mniejszy lub równy
jest równy
jest większy lub równy
jest większy
jest różny od
Priorytet operatorów relacji jest niższy niż operatorów arytmetycznych, ale wyższy
niż operatorów przypisania. Czyli x > y + 2 jest równoważne x > (y + 2), a x
= y > 2 jest równoważne x = (y >2).
Elwira Wachowicz ([email protected])
Instrukcje sterujące: pętle
11 kwietnia 2013
20 / 24
/* suma.c -- sumuje liczby calkowite wpisane przez użytkownika */
#include <stdio.h>
int main(void)
{
long num;
long suma = 0L; /* przypisanie zmiennej suma wartości początkowej zero */
int stan;
printf("Podaj liczby calkowite do zsumowania. ");
printf("Wpisz q, aby zakonczyc program. \n");
stan = scanf("%ld",&num);
while (stan == 1)
{
suma = suma + num;
printf("Podaj nastepna liczbe calkowita do zsumowania. ");
printf("Wpisz q, aby zakonczyc program. \n");
stan = scanf("%ld",&num);
}
printf("Suma podanych liczb wynosi %ld.\n", suma);
return 0;
}
Elwira Wachowicz ([email protected])
Instrukcje sterujące: pętle
11 kwietnia 2013
21 / 24
Przykładowy wynik działania programu suma.c:
Podaj liczby calkowite do zsumowania. Wpisz q,
1
Podaj nastepna liczbe calkowita do zsumowania.
2
Podaj nastepna liczbe calkowita do zsumowania.
4
Podaj nastepna liczbe calkowita do zsumowania.
5
Podaj nastepna liczbe calkowita do zsumowania.
q
Suma podanych liczb wynosi 12.
Elwira Wachowicz ([email protected])
aby zakonczyc program.
Wpisz q, aby zakonczyc program.
Wpisz q, aby zakonczyc program.
Wpisz q, aby zakonczyc program.
Wpisz q, aby zakonczyc program.
Instrukcje sterujące: pętle
11 kwietnia 2013
22 / 24
Czym jest prawda?
/* p_i_f.c -- wartosci prawdziwe i falszywe w C */
#include <stdio.h>
int main(void)
{
int prawda, falsz;
prawda = (10 > 2); /* wartosc prawdziwej relacji */
falsz = (10 == 2); /* wartosc falszywej relacji */
printf("prawda = %d; falsz = %d \n", prawda, falsz);
return 0;
}
Wynik działania programu:
prawda = 1; falsz = 0
Elwira Wachowicz ([email protected])
Instrukcje sterujące: pętle
11 kwietnia 2013
23 / 24
/* prawda.c -- ktore wartosci sa prawdziwe? */
#include <stdio.h>
int main(void)
{
int n = 3;
while(n)
printf("%d\n", n--);
n = -3;
while(n)
printf("%d\n", n++);
return 0;
}
Wynik działania programu:
3
2
1
-3
-2
-1
Elwira Wachowicz ([email protected])
Instrukcje sterujące: pętle
11 kwietnia 2013
24 / 24

Podobne dokumenty