Pętle w C Proste typy zmiennych w C
Programowanie I C / C++
laboratorium 02 — Składnia pętli, typy zmiennych, operatory
Jarosław Piersa
Wydział Matematyki i Informatyki, Uniwersytet Mikołaja Kopernika
2013-02-19
Pętle w C Proste typy zmiennych w C
Pętla while Pętla for Pętla do
Pętla while
plik.c:
# include< s t d i o . h >
int m a i n (){
u n s i g n e d l o n g a = 15 L , b = 40 L ; w h i l e ( a < b ) {
p r i n t f (" % ld ^2 = %4 ld \ n ", a , a * a );
a = a +1;
} // w h i l e
r e t u r n 0;
} // m a i n
Pętle w C Proste typy zmiennych w C
Pętla while Pętla for Pętla do
Wyjaśnienie
while— obowiązkowe słowo kluczowe, pisane z małych liter (warunek) — warunek pętli, nawiasy są obowiązkowe
%ld— format zmiennej long (long decimal )
Pętle w C Proste typy zmiennych w C
Pętla while Pętla for Pętla do
Pętla for
# include< s t d i o . h >
int m a i n (){
int i =0 , a = 3 0 ;
for ( i =1; i < a ; i = i + 2 ) {
p r i n t f (" 0 x %02 x \ n ", i );
} // for
r e t u r n 0;
} // m a i n
Pętle w C Proste typy zmiennych w C
Pętla while Pętla for Pętla do
Wyjaśnienie
for— obowiązkowe słowo kluczowe (instr1; warunek2; instr3 ):
instr1 — wykonywana przed pierwszym obrotem pętli warunek2 — jeżeli jest spełniony to kontynuujemy pętlę instr3 — wykonywana po każdym obrocie
Pętle w C Proste typy zmiennych w C
Pętla while Pętla for Pętla do
Pętla do
# include< s t d i o . h >
int m a i n (){
int i =200 , b =1;
do {
p r i n t f (" %3 d \ n ", i );
i -= b ; b ++;
} w h i l e ( i > = 0 ) ; r e t u r n 0;
} // m a i n
Pętle w C Proste typy zmiennych w C
Pętla while Pętla for Pętla do
Wyjaśnienie
do— obowiązkowe słowo kluczowe while— obowiązkowe słowo kluczowe
( instrukcja )— warunek kontynuowania pętli
Pętle w C Proste typy zmiennych w C
Typ całkowitoliczbowy Typ zmiennoprzecinkowy Typ znakowy Arytmetyka w C
Typ całkowitoliczbowy
# include< s t d i o . h >
int m a i n (){
int a = -1;
p r i n t f (" % d \ n ", a );
u n s i g n e d int b = 1;
p r i n t f (" % u \ n ", b );
l o n g c = -66000;
p r i n t f (" % ld \ n ", c );
u n s i g n e d l o n g d = 6 6 0 0 0 ; p r i n t f (" % ld \ n ", d );
l o n g l o n g e = 1 0 0 0 0 0 0 0 0 0 0 ; p r i n t f (" % lld \ n ", e );
r e t u r n 0;
} // m a i n
Pętle w C Proste typy zmiennych w C
Typ całkowitoliczbowy Typ zmiennoprzecinkowy Typ znakowy Arytmetyka w C
Typ całkowitoliczbowy
# include< s t d i o . h >
int m a i n (){
int a = 2 5 5 ;
p r i n t f (" % d \ n ", a );
p r i n t f (" % o \ n ", a );
p r i n t f (" % x \ n ", a );
r e t u r n 0;
} // m a i n
Pętle w C Proste typy zmiennych w C
Typ całkowitoliczbowy Typ zmiennoprzecinkowy Typ znakowy Arytmetyka w C
Typ całkowitoliczbowy
# include< s t d i o . h >
# include< l i m i t s . h >
int m a i n (){
int a = -1;
p r i n t f (" % d \ n ", s i z e o f( a ) );
p r i n t f (" % d \ n ", s i z e o f(u n s i g n e d int) );
p r i n t f (" % lld \ n ", I N T _ M A X );
p r i n t f (" % lld \ n ", I N T _ M I N );
p r i n t f (" % lld \ n ", U I N T _ M A X );
r e t u r n 0;
} // m a i n
Pętle w C Proste typy zmiennych w C
Typ całkowitoliczbowy Typ zmiennoprzecinkowy Typ znakowy Arytmetyka w C
Typ całkowitoliczbowy
Zadania do przećwiczenia:
(Linux) przejrzyj zawartość pliku /usr/include/limits.h (Windows) przejrzyj zawartość pliku
katalog z kompilatorem/include/limits.h sprawdź wartości graniczne innych typów
Pętle w C Proste typy zmiennych w C
Typ całkowitoliczbowy Typ zmiennoprzecinkowy Typ znakowy Arytmetyka w C
Typ zmiennoprzecinkowy
# include< s t d i o . h >
int m a i n (){
f l o a t a = 0 . 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 ; d o u b l e b = 0 . 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 ;
l o n g d o u b l e c = 0 . 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 ; p r i n t f (" % . 2 0 f \ n ", a );
p r i n t f (" % . 2 0 lf \ n ", b );
p r i n t f (" % . 2 0 e \ n ", c );
r e t u r n 0;
} // m a i n
Pętle w C Proste typy zmiennych w C
Typ całkowitoliczbowy Typ zmiennoprzecinkowy Typ znakowy Arytmetyka w C
Typ zmiennoprzecinkowy
# include< s t d i o . h >
int m a i n (){
d o u b l e a1 = 0 . 1 ; d o u b l e b1 = 0 . 1 ; d o u b l e c1 = 0 . 0 1 ; if ( c1 == a1 * b1 ){
p r i n t f (" d o u b l e r o w n e \ n ");
} e l s e {
p r i n t f (" d o u b l e nie r o w n e \ n ");
Pętle w C Proste typy zmiennych w C
Typ całkowitoliczbowy Typ zmiennoprzecinkowy Typ znakowy Arytmetyka w C
Typ całkowitoliczbowy
Zadania do przećwiczenia:
sprawdź powyższy przykład dla a = b = 0.125;
Pętle w C Proste typy zmiennych w C
Typ całkowitoliczbowy Typ zmiennoprzecinkowy Typ znakowy Arytmetyka w C
Typ znakowy
# include< s t d i o . h >
int m a i n (){
c h a r a = ’ a ’;
p r i n t f (" % c \ n ", a );
p r i n t f (" % d \ n ", a );
r e t u r n 0;
} // m a i n
Pętle w C Proste typy zmiennych w C
Typ całkowitoliczbowy Typ zmiennoprzecinkowy Typ znakowy Arytmetyka w C
Typ znakowy
# include< s t d i o . h >
int m a i n (){
c h a r a = ’ a ’;
for ( a =’ A ’; a <=’ Z ’; a + + ) {
p r i n t f (" % d % c \ n ", a , a );
}
r e t u r n 0;
} // m a i n
Pętle w C Proste typy zmiennych w C
Typ całkowitoliczbowy Typ zmiennoprzecinkowy Typ znakowy Arytmetyka w C
Arytmetyka
int a , b ; a = 11;
b = 4;
p r i n t f (" % d \ n ", a );
p r i n t f (" % d \ n ", - a );
p r i n t f (" % d \ n ", a + b );
p r i n t f (" % d \ n ", a - b );
p r i n t f (" % d \ n ", a * b );
p r i n t f (" % d \ n ", a / b );
// d z i e l e n i e c a l k o w i t e p r i n t f (" % d \ n ", a % b );
Pętle w C Proste typy zmiennych w C
Typ całkowitoliczbowy Typ zmiennoprzecinkowy Typ znakowy Arytmetyka w C
Zadanie
Jaka jest wartość operacji?
-1 -2 -3 2 + 2 * 2 1 - 4 / 2 * 3 1 / 3
1 / 3.0 1 % 3 1 % 3.0
Pętle w C Proste typy zmiennych w C
Typ całkowitoliczbowy Typ zmiennoprzecinkowy Typ znakowy Arytmetyka w C
Przesunięcia bitowe
int a , b ; a = 3;
b = 2;
s c a n f (" % d % d ", & a , & b );
p r i n t f (" % d \ n ", a < < b );
// p r z e s u n i e c i e b i t o w e w l e w o p r i n t f (" % d \ n ", a > > b );
// p r z e s u n i e c i e b i t o w e w p r a w o
Pętle w C Proste typy zmiennych w C
Typ całkowitoliczbowy Typ zmiennoprzecinkowy Typ znakowy Arytmetyka w C
Zadanie
Jaka jest wartość operacji?
1 << 1 1 << 2 2 << 1 3 << 2 5 << 2 3 >> 1 3 >> 2
Pętle w C Proste typy zmiennych w C
Typ całkowitoliczbowy Typ zmiennoprzecinkowy Typ znakowy Arytmetyka w C
Operacje bitowe
int a , b ;
s c a n f (" % d % d ", & a , & b );
p r i n t f (" % d \ n ", a | b );
// a l t e r n a t y w a b i t o w a p r i n t f (" % d \ n ", a & b );
// k o n i u n k c j a b i t o w a p r i n t f (" % d \ n ", a ^ b );
// xor b i t o w y
Pętle w C Proste typy zmiennych w C
Typ całkowitoliczbowy Typ zmiennoprzecinkowy Typ znakowy Arytmetyka w C
Zadanie
Jaka jest wartość operacji?
2 | 3 2 & 3 2 ^ 3 5 | 8 5 & 8 5 ^ 8
dany jest adres IP = a.b.c.d, a, b, c, d ∈ {0, 255} oraz maska M ∈ {0, 31 oblicz adres sieci i rozgłoszeniowy z wykorzystaniem operacji bitowych
Pętle w C Proste typy zmiennych w C
Typ całkowitoliczbowy Typ zmiennoprzecinkowy Typ znakowy Arytmetyka w C
Przypisania
int a , b ;
s c a n f (" % d % d ", & a , & b );
a = b ; a += b ; a -= b ; a *= b ; a /= b ; a %= b ; a < <= b ; a > >= b ; a |= b ;
Pętle w C Proste typy zmiennych w C
Typ całkowitoliczbowy Typ zmiennoprzecinkowy Typ znakowy Arytmetyka w C
Inkrementacja i dekrementacja
int b , a = b = 3;
p r i n t f (" % d \ n ", ++ a );
p r i n t f (" % d \ n ", b + + ) ; f l o a t c = 30;
p r i n t f (" % e \ n ", - - c );
p r i n t f (" % d % d %.2 e \ n ", a , b , c );
Pętle w C Proste typy zmiennych w C
Typ całkowitoliczbowy Typ zmiennoprzecinkowy Typ znakowy Arytmetyka w C
Zadanie
Co wypisze program?
int a = 0;
int b = a++;
printf(¨ %d ¨, a++ );
int a = 0;
int b = a++;
a += ++b;
printf(¨ %d ¨, ++b + a++ );
Pętle w C Proste typy zmiennych w C
Typ całkowitoliczbowy Typ zmiennoprzecinkowy Typ znakowy Arytmetyka w C
Rzutowanie
f l o a t f = 3 . 1 2 3 4 5 ; int a = 3;
p r i n t f (" % d \ n ", (int)( a + f ) );
l o n g l o n g l = 3 L ;
p r i n t f (" % d \ n ", (int) l );
f l o a t g = . 0 0 0 0 0 0 0 0 1 1 ;
int r = (int) f ^ (int) g ; p r i n t f (" % d \ n ", r );
Zadanie: spróbuj usunąć któreś z rzutowań i skompiluj program z flagą -Wall