Programowanie I C / C++ laboratorium 03 arytmetyka, operatory Jarosław Piersa Wydział Matematyki i Informatyki, Uniwersytet Mikołaja Kopernika 2013-02-19
Typ znakowy Typ znakowy Typ wyliczeniowy # include < stdio.h> int main (){ char a = a ; printf ("%c\n", a); printf ("%d\n", a); return 0; } // main
Typ znakowy Typ znakowy Typ wyliczeniowy # include < stdio.h> int main (){ char a = a ; for (a = A ; a <= Z ; a ++){ printf ("%d %c\n", a, a); } return 0; } // main
Typ wyliczeniowy Typ znakowy Typ wyliczeniowy # include < stdio.h> int main (){ enum dni {Pn, Wt, Sr, Cz, Pt, So, Ni }; enum dni dzien = Sr; } printf (" Mamy dzis Poniedzialek \n") if ( dzien == Pn ){ } return 0;
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
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 błąd kompilacji, drugi argument jest float
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
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
int a; switch (a) { case 1: printf ("1\n"); case 2: case 3: printf ("2 lub 3\n"); break ; case 4: break ; case 5: { int b = a +1; printf ("5 %d\n", b); break ; } // case 5 default : printf (" cos innego \n"); break ; }; // switch
Tablice Tablice int Tablice char int n =10; int a[n]; a [0] = 2; a [1] = 3; printf ("%d\n", a [2]); tablice w C są indeksowane od zera
Tablice - alokacja w miejscu Tablice int Tablice char int a[] = { 9, 3, 4, 8, 1}; printf ("%d %d \n", a[0], a [4]); odwołanie się do elementu poza tablicą daje się skompilować ale może powodować błędy pisanie do elementu poza tablicą powoduje segmentation fault
Tablice znaków Tablice int Tablice char char a[] = " Ala ma kota "; printf ("%c%c%c%c\n", a [10], a[9], a[8], a [7] ); printf (" **% c\n**", a [11]); napis w C jest tablicą znaków
Tablice znaków Tablice int Tablice char char a [10]; a [0] = a [2] = a ; a [1] = l ; printf ("%s\n", a ); a [3] = \0 ; printf ("%s\n", a); napis jest terminowany za pomocą znaku '\0'
Jak sprawdzić długość napisu? Tablice int Tablice char # include < stdio.h> # include < string.h> int main (){ char a [10]; gets (a); printf ("%d\n", strlen (a )); return 0; } // main