Wykład C/C++
Zagadnienia kolokwialne i / lub egzaminacyjne
1. Typy danych i zmienne.
2. Operatory i wyrażenia.
3. Instrukcje decyzyjne.
4. Instrukcje iteracyjne.
5. Funkcje.
6. Preprocesor.
7. Tablice i łańcuchy.
8. Wskaźniki, tryby adresowania i arytmetyka wskaźników.
9. Tablice, łańcuchy i wskaźniki.
10. Dynamiczna alokacja pamięci, zmienne i tablice dynamiczne.
11. Wskaźniki tablic i tablice wskaźników.
12. Wskaźniki funkcji, tablice wskaźników na funkcje.
13. Złożone definicje wskaźnikowe.
14. Struktury, unie, tablice struktur, tablice wskaźników na struktury.
15. Operacje wejścia / wyjścia (systemowe, standardowe).
Przykładowe pytania testowe
1. Zdefiniować stałą całkowitą typu int o wartości 65 w postaci:
a) ósemkowej, b) szesnastkowej.
2. Zdefiniować stałą całkowitą typu long int o wartości 100 w postaci:
a) ósemkowej, b) szesnastkowej.
3. Zdefiniować stałą typu char o wartości 65 w postaci:
a) ósemkowej, b) szesnastkowej.
4. Podać wartość dziesiętną stałej const char z = ‘\x20’.
5. Podać wartość dziesiętną stałej całkowitej 041L.
6. Deklaracja unsigned x jest:
a) deklaracją zmiennej typu całkowitego, b) deklaracją zmiennej typu rzeczywistego, c) deklaracją zmiennej typu wskaźnikowego.
7. Podać wartość stałej: 0111.
8. Podać wartość i typ stałej: 1.2E2f.
9. Podać wartości i typy wyrażeń: a) 5.0/2; b) 5/2; c)5%4/2 . 10. Niech int i=2. Oblicz wartości wyrażeń: a) k = i << 5; b) k=i+3>>1.
11. Oblicz wartości wyrażeń: a) 4<=4; b) 7>5<2; c) !-1.0 .
12. Podać wartość dziesiętną oraz wartość szesnastkową zmiennej int k = ~11 . 13. Które z wyrażeń są poprawne jeśli zdefiniowano float x = 1.0f ?
a) ~x+1; b) ++x – 1; c) ++(x+1); d) ~(x+1); e) ++ x++ . 14. Jakie wartości przyjmują wyrażenia w zależności od x i y ?
a) (x>y) + (x<y); b) (x>y) – (x<y) .
15. Uprościć wyrażenia: a) k & (i | ~i); b) k^~0; c) k - k%8 (odp. k & -8) . 16. Obliczyć wartości wyrażeń: a) 5>0 && 3>1 && 4<=4; b) !6 || !0 && 2 + 3 >4 . 17. Zadeklarowano trzy zmienne: const int *x; int * const y=&k; const int* const z=&k.
Które z poniższych zdań są prawdziwe?
a) wartość zmiennej x nie może być zmieniana;
b) wartość zmiennej y może być zmieniana;
c) wartość zmiennej z może być zmieniana;
d) wartość zmiennej wskazywanej przez x może być zmieniana;
e) wartość zmiennej wskazywanej przez y może być zmieniana;
f) wartość zmiennej wskazywanej przez z może być zmieniana.
18. Które z wywołań makrodefinicji #define max(a,b)(a)<(b)?(b):(a) obliczającej max dwóch liczb całkowitych i,j prowadzi do błędnych wyników ?
a) max(i,j);
b) max(i*j, i+j);
c) max(--i,--j);
d) max(i+1, j-2).
19. Podać wartości zmiennych int x=1, y=2 po wykonaniu następującego fragmentu programu:
if (x>1)
if (++y < 3) { x =7; y = 8; } else
{ x = 2; y=3; }
20. Podać formaty umożliwiające wyprowadzenie za pomocą funkcji printf danych typu:
a) unsigned long; b) long double.
21. Podać definicję: a) wskaźnika tablicy 5 wskaźników do zmiennych typu char;
b) tablicy 7 wskaźników funkcji o jednym parametrze typu int i wartości typu double.
22. Nazwać zdefiniowane zmienne: a) void **A; b) int * B[4];
c) int (*C)[2][3]; d) int (* (* D)(int, float) )[3].
23. Zakładając int c, a = 1, b = 2 podać wartość wyrażenia c = (++a)++ + b++
oraz wartości a i b.
24. Podać wartość zmiennej x: a) float x = 4 / 3; b) double x = 5.0 / 4.
25. Jakie wartości zostaną wyprowadzone na ekran przez następujący fragment programu ? void f (int &i)
{ static int k=2; for (i; i<k; i++) printf(”%3d”, i); k++; } void main() { int i = 0; f(i); f(i); }.
26. Zakładając int w, x = 1, y = 2, podać wartości w, x, y po obliczeniu wyrażenia:
w = x++ < y ? x==y ? x++ : y++ : ++x.
27. Zakładając int w, x = 1, y = 2 podać wartości w, x, y po obliczeniu wyrażenia:
w = ( y +=2, x+=1, y = (y++ >x), x << y ).
28. Zakładając double x oraz int k zapisz w języku C++ warunki:
a) x < -10 lub x > 10; b) k jest podzielne przez 2 lub przez 5.
29. Przyjmując const int n=5; int x=1, y; void *v = &x; const int *r , które z podanych wyrażeń są poprawne. a) r = &x; b) v = (++r)++;
c) y = * (int *) v; d) int *const s = &x; e) y = *s++.
30. Podać wartości przypisane identyfikatorom A, B, C, D, E przez definicję enum dat { A=2, B, C, D=-2, E }.
31. Podać zawartości tablic A i B zainicjowanych w sposób następujący:
a) int A[3][3] = { {1}, 2, 3, 4, 5 }; b) int B[][4] = { {1,2}, {3}, {4}, 5, 6 }.
32. Zapisać za pomocą operatora indeksowania [ ] następujące wyrażenia, gdzie x, y są wskaźnikami, natomiast i, j są typu int:
a) *(x + i + j); b) * *(y + i); c) x + i + j.
33. Zakładając double x = -2.5; double *v = &x, podać wartość zmiennej w zdefiniowanej jako: a) int w = *v + 3; b) int w = !(!x + 1) + 1.
34. Zakładając int a = 1, b = 2, c = 3 podać wartości a, b, c po wykonaniu instrukcji:
a) if (b > a && b < c) if (b) c=a+b+1; else c+=a+b; else a=b;
b) if (a++ -b) { c=a+b; b+=a+c; } else if ( !(a-2) ) { b+=a; c=a+b; } else c=a+2.
35. Dla wskaźnika (0xA0E1: 0x4321):
a) wyznaczyć adres fizyczny dla trybu rzeczywistego; b) unormować wskaźnik.
36. W trybie chronionym dokonano alokacji bloku pamięci o rozmiarze 199 KB.
Adres początku bloku zapamiętano we wskaźniku void far * p. Zakładając, że jeden selektor adresuje maksymalnie bloki po 64 KB oraz p = (800 : 0) (selektor =800; offset=0) podać wartości utworzonych selektorów i rozmiary adresowanych przez nie bloków.
37. Podać wartość zmiennej int k, jeśli zdefiniowano int *s, A[8]; long *q; char *v oraz sizeof(long) = 4, sizeof(int) = 2, sizeof(char) = 1:
a) v = (char *) &A[3]; k = v – (char *) A;
b) q = (long *) A + 4; k = (char *) q – (char *) A.
38. Dla programu c:\prog.exe, w którym zdefiniowano void main( int n, char *v[] ) podać zawartości: n, *v[0], *v[1], ...., *v[n-1] dla wywołania prog To-jest-C++.
39. Zakładając, że zdefiniowano: const int N=5;
struct tosoba { char naz[20]; float pensja; long id; }; tosoba Firma[N].
Opracować funkcję obliczającą liczbę osób, których pensja należy do przedziału [ a, b ].
Dany jest prototyp funkcji: int LZ(tosoba *v, int N, float a, float b). Wywołać funkcję.
40. Zakładając, że zdefiniowano: const int N=5;
struct tosoba { char naz[20]; int dzien, mies, rok; long id; };
tosoba Osoby[N]. Opracować funkcję obliczającą liczbę osób, których data urodzenia należy do przedziału [ a, b ], gdzie daty a, b są postaci: 10000L*rok + 100*mies + dzien.
Dany jest prototyp funkcji: int LD(tosoba *v, int N, long a, long b). Wywołać funkcję.
41. Dana jest definicja unii: union H { int x; char y; };
Które z poniższych instrukcji są poprawne w języku C++?
a) H p = {‘A’};
b) union H p = { 1 };
c) H union p = {1};
d) union H p { 1, ‘A’}.