• Nie Znaleziono Wyników

2013-02-19 JarosławPiersa ProgramowanieIC/C++laboratorium03—arytmetyka,operatory

N/A
N/A
Protected

Academic year: 2021

Share "2013-02-19 JarosławPiersa ProgramowanieIC/C++laboratorium03—arytmetyka,operatory"

Copied!
21
0
0

Pełen tekst

(1)

Programowanie I C / C++

laboratorium 03 — arytmetyka, operatory

Jarosław Piersa

Wydział Matematyki i Informatyki, Uniwersytet Mikołaja Kopernika

2013-02-19

(2)

Proste typy zmiennych w C (dok.) Arytmetyka w C Switch Tablice w C (wersja nieinwazyjna)

Typ znakowy Typ wyliczeniowy

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

(3)

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

(4)

Proste typy zmiennych w C (dok.) Arytmetyka w C Switch Tablice w C (wersja nieinwazyjna)

Typ znakowy Typ wyliczeniowy

Typ wyliczeniowy

# include< s t d i o . h >

int m a i n (){

e n u m dni { Pn , Wt , Sr , Cz , Pt , So , Ni };

e n u m dni d z i e n = Sr ; if ( d z i e n == Pn ){

p r i n t f (" M a m y d z i s P o n i e d z i a l e k \ n ");

}

r e t u r n 0;

(5)

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 );

// d z i e l e n i e m o d u l o

(6)

Proste typy zmiennych w C (dok.) Arytmetyka w C Switch Tablice w C (wersja nieinwazyjna)

Arytmetyka Przypisania

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

(7)

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

(8)

Proste typy zmiennych w C (dok.) Arytmetyka w C Switch Tablice w C (wersja nieinwazyjna)

Arytmetyka Przypisania

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

(9)

Zadanie

Jaka jest wartość operacji?

1 << 1 1 << 2 2 << 1 3 << 2 5 << 2 3 >> 1 3 >> 2

(10)

Proste typy zmiennych w C (dok.) Arytmetyka w C Switch Tablice w C (wersja nieinwazyjna)

Arytmetyka Przypisania

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

(11)

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

(12)

Proste typy zmiennych w C (dok.) Arytmetyka w C Switch Tablice w C (wersja nieinwazyjna)

Arytmetyka Przypisania

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 ; a &= b ;

(13)

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 );

(14)

Proste typy zmiennych w C (dok.) Arytmetyka w C Switch Tablice w C (wersja nieinwazyjna)

Arytmetyka Przypisania

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++ );

(15)

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

(16)

Proste typy zmiennych w C (dok.) Arytmetyka w C Switch Tablice w C (wersja nieinwazyjna)

Switch

Switch

int a ; s w i t c h ( a ) {

c a s e 1: p r i n t f (" 1\ n ");

c a s e 2:

c a s e 3: p r i n t f (" 2 lub 3\ n ");

b r e a k; c a s e 4: b r e a k; c a s e 5: {

int b = a +1;

p r i n t f (" 5 % d \ n ", b );

b r e a k;

} // c a se 5

d e f a u l t: p r i n t f (" cos i n n e g o \ n ");

b r e a k;

(17)

Tablice

int n = 1 0 ; int a [ n ];

a [0] = 2;

a [1] = 3;

p r i n t f (" % d \ n ", a [ 2 ] ) ;

tablice w C są indeksowane od zera

(18)

Proste typy zmiennych w C (dok.) Arytmetyka w C Switch Tablice w C (wersja nieinwazyjna)

Tablice int Tablice char

Tablice - alokacja w miejscu

int a [] = { 9 , 3 , 4 , 8 , 1};

p r i n t f (" % 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

(19)

Tablice znaków

c h a r a [] = " Ala ma k o t a ";

p r i n t f (" % c % c % c % c \ n ", a [10] , a [9] , a [8] , a [7] );

p r i n t f (" **% c \ n ** ", a [ 1 1 ] ) ; napis w C jest tablicą znaków

(20)

Proste typy zmiennych w C (dok.) Arytmetyka w C Switch Tablice w C (wersja nieinwazyjna)

Tablice int Tablice char

Tablice znaków

c h a r a [ 1 0 ] ;

a [0] = a [2] = ’ a ’; a [1] = ’ l ’;

p r i n t f (" % s \ n ", a );

a [3] = ’ \0 ’;

p r i n t f (" % s \ n ", a );

napis jest terminowany za pomocą znaku'\0'

(21)

Jak sprawdzić długość napisu?

# include< s t d i o . h >

# include< s t r i n g . h >

int m a i n (){

c h a r a [ 1 0 ] ; g e t s ( a );

p r i n t f (" % d \ n ", s t r l e n ( a ));

r e t u r n 0;

} // m a i n

Cytaty

Powiązane dokumenty

Przedstaw sposób kodowania problemu grafowego (dwupodział, kolorowanie, cykl Hammiltona) na konfigurację sieci neuronowej. Zaimplementuj sieć neuronową do rozwiązywania

Organizacja zajęć Zakładanie konta w systemie WMiI System komputerowy WMiI Poczta WMiI Podsumowanie.. Wstęp do systemów wielozadaniowych laboratorium 01 —

utwórz na /tmp podkatalogi: wswz mój login wyedytuj w vi plik tekstowy utworzonym katalogu. zmień uprawnienia katalogu i pliku na wswz mój login

zmień uprawnienia katalogu wswz mój login na rwxr--r-- ponownie spróbuj wylistować zawartość katalogu utworzonego przez osobę siedzącą obok.. Uprawnienia plików

Proste dopasowanie tekstu Dopasowanie dowolnych znaków Dopasowanie na początku / końcu wiersza Zakres znaków..

mieć założone konto w systemie komputerowym lub przynajmniej wypełniony formularz zakładania konta znać obowiązujący regulamin (lub wiedzieć gdzie go

Napisz polecenie AWK, które wyświetli całą zawartość pliku między liniami piątą, a

Napisz skrypt bashowy, który będzie inteligentnym ls / less-em jeżeli zostanie wywołany bez dodatkowych argumentów, to wylistuje bieżący katalog. jeżeli zawiera dodatkowe argumenty