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ętla while Pętla while Pętla for Pętla do plik.c: # include < stdio.h> int main (){ unsigned long a = 15 L, b = 40 L; while (a<b) { printf ("%ld ^2 = %4 ld\n", a, a*a); a = a +1; } // while return 0; } // main
Wyjaśnienie Pętla while Pętla for Pętla do 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ętla for Pętla while Pętla for Pętla do # include < stdio.h> int main (){ int i=0, a =30; for (i =1; i<a; i=i +2){ printf ("0x %02 x\n", i); } // for return 0; } // main
Wyjaśnienie Pętla while Pętla for Pętla do for obowiązkowe słowo kluczowe (instr 1 ; warunek 2 ; instr 3 ): instr 1 wykonywana przed pierwszym obrotem pętli warunek 2 jeżeli jest spełniony to kontynuujemy pętlę instr 3 wykonywana po każdym obrocie
Pętla do Pętla while Pętla for Pętla do # include < stdio.h> int main (){ int i =200, b =1; do { printf ("%3d\n", i); i -= b; b ++; } while (i >=0); return 0; } // main
Wyjaśnienie Pętla while Pętla for Pętla do do obowiązkowe słowo kluczowe while obowiązkowe słowo kluczowe ( instrukcja ) warunek kontynuowania pętli
# include < stdio.h> int main (){ int a = -1; printf ("%d\n", a); unsigned int b = 1; printf ("%u\n", b); long c = -66000; printf ("%ld\n", c); unsigned long d = 66000; printf ("%ld\n", d); long long e = 10000000000; printf ("% lld \n", e); return 0; } // main
# include < stdio.h> int main (){ int a = 255; printf ("%d\n", a); printf ("%o\n", a); printf ("%x\n", a); return 0; } // main
# include < stdio.h> # include < limits.h> int main (){ int a = -1; printf ("%d\n", sizeof (a) ); printf ("%d\n", sizeof ( unsigned int ) ); printf ("% lld \n", INT_MAX ); printf ("% lld \n", INT_MIN ); printf ("% lld \n", UINT_MAX ); return 0; } // main
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
# include < stdio.h> int main (){ float a = 0.12345678901234567890; double b = 0.12345678901234567890; long double c = 0.12345678901234567890; printf (" %.20 f\n", a); printf (" %.20 lf\n", b); printf (" %.20 e\n", c); return 0; } // main
# include < stdio.h> int main (){ double a1 = 0. 1; double b1 = 0. 1; double c1 = 0. 01; if (c1 == a1 * b1 ){ printf (" double rowne \n"); } else { printf (" double nie rowne \n"); } return 0; } // main
Zadania do przećwiczenia: sprawdź powyższy przykład dla a = b = 0.125;
# include < stdio.h> int main (){ char a = a ; printf ("%c\n", a); printf ("%d\n", a); return 0; } // main
# include < stdio.h> int main (){ char a = a ; for (a = A ; a <= Z ; a ++){ printf ("%d %c\n", a, a); } return 0; } // main
Arytmetyka int a, b; a = 11; b = 4; printf ("%d\n", a); printf ("%d\n", -a); printf ("%d\n", a + b ); printf ("%d\n", a - b ); printf ("%d\n", a * b ); printf ("%d\n", a / b ); // dzielenie calkowite printf ("%d\n", a % b ); // dzielenie modulo
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
Przesunięcia bitowe int a, b; a = 3; b = 2; scanf ("%d %d", &a, &b); printf ("%d\n", a << b); // przesuniecie bitowe w lewo printf ("%d\n", a >> b); // przesuniecie bitowe w prawo
Zadanie Jaka jest wartość operacji? 1 << 1 1 << 2 2 << 1 3 << 2 5 << 2 3 >> 1 3 >> 2
Operacje bitowe int a, b; scanf ("%d %d", &a, &b); printf ("%d\n", a b); // alternatywa bitowa printf ("%d\n", a & b); // koniunkcja bitowa printf ("%d\n", a ^ b); // xor bitowy
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
Przypisania int a, b; scanf ("%d %d", &a, &b); a = b; a += b; a -= b; a *= b; a /= b; a %= b; a <<= b; a >>= b; a = b; a &= b; a ^= b;
Inkrementacja i dekrementacja int b, a = b = 3; printf ("%d\n", ++a); printf ("%d\n", b ++); float c = 30; printf ("%e\n", --c); printf ("%d %d %.2 e \n", a, b, 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++ );
Rzutowanie float f = 3.12345; int a = 3; printf ("%d\n", ( int )(a + f) ); long long l = 3L; printf ("%d\n", ( int ) l ); float g =.0000000011; int r = ( int ) f ^ ( int ) g; printf ("%d\n", r); Zadanie: spróbuj usunąć któreś z rzutowań i skompiluj program z flagą -Wall