• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zadania z quizu świątecznego - C i C++

+8 głosów
775 wizyt
pytanie zadane 19 grudnia 2017 w C i C++ przez Arkadiusz Waluk Ekspert (248,710 p.)
edycja 22 grudnia 2017 przez Arkadiusz Waluk

Zgodnie z zapowiedziami rozpoczynam publikowanie zadań z ostatniego quizu. Uwzględniając jednak propozycje innych nie będę robił tego w całości - tzn. udostępniając listę pytań i odpowiedzi. Co kilka dni opublikuję kilka pytań, na razie bez wskazywania poprawnych odpowiedzi (te pewnie będę dorzucał po kilku dniach). Ma to na celu zachęcenie do wspólnego rozwiązania tych zadań - nawet jeśli podczas quizu komuś się to nie udało można niezobowiązująco spróbować podejść do tego teraz, na spokojnie, a może i ze wskazówkami od innych - mam nadzieję, że sami autorzy pytań również w razie potrzeby pomogą :)

Dziś pytania z języka C i C++. Numery pytań są inne niż były w quizie - dodałem je tutaj dla ułatwienia. W przypadku problemów z danym zadaniem radzę po prostu dyskutować z innymi użytkownikami lub pytań samych autorów. Ja nie będę w stanie wyjaśnić każdego z pytań. W przypadku znalezienia jakiegoś błędu (mam nadzieję, że takowych jednak nie będzie) jak najbardziej warto go zgłosić, lecz nie będzie to już miało wpływu na wyniki quizu. Wszystkich pytań w bazie było nieco ponad 60.

Chciałbym też jeszcze raz podziękować wszystkim układającym pytania i pomagającym przy organizacji quizu oraz sponsorowi - No Fluff Jobs.

Pytania użytkownika shead:

1. [C++] Niech a, b, c - funkcje typu bool. W jakiej kolejności zostaną wykonane funkcje, przy założeniu, że:
a - zawsze zwraca true
b - zawsze zwraca false
c - zawsze zwraca true

Podaj kompletny łańcuch wywołań: [łatwe, 1 punkt]
A. a a c c b
B. a a c a c b
C. c b
D. Żaden z powyższych

2. [C++] Jaką wartość może zwrócić poniższy kod? (kompilujemy z maksymalną optymalizacją kodu) [trudne, 3 punkty]

A. 0
B. 1
C. Kod nie jest poprawny, nawet się nie skompiluje
D. Kod jest poprawny, ale zakończy się wyjątkiem

3. [C++] Jaką wartość może zwrócić poniższy kod? (kompilujemy z maksymalną optymalizacją kodu) [trudne, 3 punkty, wielokrotnego wyboru]

A. 0
B. 1
C. Kod nie jest poprawny, nawet się nie skompiluje
D. Kod jest poprawny, ale zakończy się wyjątkiem

4. [C++] Czy poniższy listing jest poprawnym kodem w sensie "czystego kodu" i dobrych praktyk? [łatwe, 1 punkt]

A. Tak
B. Nie

5. [C++] Dlaczego poniższy kod jest niepoprawny z punktu widzenia dobrych praktyk? [średnie, 2 punkty]

A. Ponieważ zmienna "a" nie ma przypisanej wartości i znajduje się w niej wartość "null"
B. Ponieważ zmienna "a" nie ma przypisanej wartości i znajduje się w niej wartość-śmieć
C. Ponieważ zmienna "a" nie ma przypisanej wartości i znajduje się w niej losowa wartość
D. Powyższy kod jest poprawny, domyślnie w zmiennej "a" znajduje się wartość "0"

Pytania użytkownika Gynvael Coldwind:

6. [C] Po ilu iteracjach poniższa pętla zakończy działanie? [średnie, 2 punkty]

A. Po 8 iteracjach.
B. Po 7 iteracjach.
C. Po 6 iteracjach.
D. Żadne z powyższych.

7. [C++] Jaka będzie wartość zmiennej "x" po wykonaniu poniższego kodu? [łatwe, 1 punkt]
int x = !!42;
A. 42
B. 0
C. 1
D. Powyższy kod nie skompiluje się

8. [C] Jaka będzie wartość zmiennej x po wykonaniu poniższego fragmentu kodu? [średnie, 2 punkty]

A. 262
B. 255
C. 6
D. 17

Pytanie użytkownika Patrycjerz:

9. [C++] Jaka dyrektywa preprocesora służy w językach C i C++ do tworzenia makra? [łatwe, 1 punkt]
A. #endif
B. #define
C. #include
D. #ifndef

Pytania użytkownika Criss:

10. [C++] Co należy podstawić za '/* ??? */' w kodzie, żeby program wypisał "yey"? [średnie, 2 punkty, wielokrotnego wyboru]

A. bez znaczenia
B. 7
C. wszystkie odpowiedzi są poprawne
D. 42
E. 15
F. można nic nie podstawić

11. [C++] Jak w C++ nazywa się mechanizm pozwalający na wykorzystywanie potencjalnych błędów kompilacji przy określaniu parametrów szablonu przez kompilator? (słowa kluczowe: metaprogramming, overload resolution) [średnie, 2 punkty]
A. SCRUM
B. SFINAE
C. AGILE
D. TDD
E. TPMD

12. [C] Do czego służy słowo kluczowe auto w języku C11? [trudne, 3 punkty]
A. Mówi kompilatorowi, żeby sam spróbował określić typ deklarowanej za pomocą auto zmiennej
B. Standard C nie definiuje takiego słowa kluczowego
C. Służy do ustanawiania sposobu przechowywania zmiennej
D. Automatycznie nadaje zadeklarowanej zmiennej wartość domyślną (brak konieczności definicji)

13. [C++] Jaką wartość będzie miała zmienna c - przyjmij, że wszystkie są zmiennymi lokalnymi? [łatwe, 1 punkt]

A. nieokreśloną
B. 1
C. 3
D. 2

14. [C] Co wypisuje poniższa funkcja: [łatwe, 1 punkt]

A. Reprezentacje binarną podanej liczby
B. Odwróconą reprezentacje binarną podanej liczby
C. Reprezentacje binarną liczby przeciwnej do podanej w kodzie U2
D. Parzyste dzielniki podanej liczby

15. [C++] Jakiego typu jest zmienna b i co wypisze program? [średnie, 2 punkty]

A. bool, 1
B. bool, 0
C. bool, false
D. bool, true
E. int, 1
F. int, 3
G. int, 0
H. int, 2

Pytania użytkownika Eryk Andrzejewski:

16. [C++] Poniższy program napisany w języku C++ skompilowano kompilatorem GCC w wersji 7.2.0 na 64 bitowej wersji systemu Linux działającej na procesorze x86.

Podaj zawartość dwóch kolejnych bajtów pamięci znajdujących się pod wypisanym przez program adresem (czyli bajt, który znajduje się bezpośrednio pod tym adresem i bajt następny): [średnie, 2 punkty]
A. 0x30 0x54
B. 0x12 0x34
C. 0x69 0x89
D. 0x96 0x98
E. 0x78 0x56
F. 0x87 0x65

17. [C] Na 64 bitowej wersji systemu NetBSD na procesorze x86 skompilowano bez optymalizacji kompilatora (za pomocą kompilatora GCC 7.2.0) i uruchomiono poniższy program napisany w języku C:

Jaki będzie wynik uruchomienia się powyższego programu, jeżeli na wejściu zostanie podany następujący ciąg znaków? thisisreallysimple [trudne, 3 punkty]
A. A
B. B
C. C
D. D

18. [C++] Od kiedy w języku C++ można stosować zapis, taki jak w warunku pętli while w poniższym kodzie? [średnie, 2 punkty]

A. Od zawsze
B. Od standardu C++98
C. Od standardu C++11
D. Będzie to możliwe od standardu C++20

19. [C++] Poniższy kod napisany w języku C++ skompilowano przy pomocy kompilatora GCC w wersji 7.2.0 z następującymi parametrami: -std=c++11 -O0

Co zostanie wypisane na wyjściu? [trudne, 3 punkty]
A. 0
B. 1
C. 2
D. 3

Zapraszam do wspólnego rozwiązywania, komentowania i dzielenia się uwagami :)

 

Poprawne odpowiedzi: 1. A, 2. A, 3. A,B, 4. B, 5. B, 6. D, 7. C, 8. C, 9. B, 10. D,F, 11. B, 12. C, 13. D, 14. B, 15. A, 16. E, 17. B, 18. A, 19. B.

4 odpowiedzi

+4 głosów
odpowiedź 19 grudnia 2017 przez Eryk Andrzejewski Mędrzec (157,480 p.)

Dzielcie się swoimi wrażeniami laugh

Mam nadzieję, że mnie nikt nie zje za moje dziwne pytania. devil

komentarz 19 grudnia 2017 przez Criss Mędrzec (172,320 p.)
Właściwie to chciałem pogratulować 19. pytania. Dałem się nabrać XD
komentarz 19 grudnia 2017 przez Marcin_N_97 Stary wyjadacz (10,250 p.)
Jak dla mnie to były najsensowniejsze pytania jak na quiz, który ma coś wnieść i sprawdzić.

 

Ogólnie najgorsze pytania to o czyty kod, bo żadne z napisanych powyzej linijek kodu nie są "czyste" oraz zasady czystego języka nie są ogólnie określone. Choćby według Meyersa to nie powinnismy pisać int a = 15 tylko auto a = 15, ponieważ auto broni nas przed tym, że nie przypiszemy wartości.
komentarz 20 grudnia 2017 przez niezalogowany
Cóż, ciężko o dobre praktyki z typami danych gdy zdajesz się na słowo kluczowe auto...
+4 głosów
odpowiedź 19 grudnia 2017 przez Kamil Łydka Stary wyjadacz (10,390 p.)

Jak wymyślić pytania jak najbardziej możliwie dziwne.  ~ Eryk Andrzejewski

Już za 40 zł w Empiku. :)

komentarz 19 grudnia 2017 przez Eryk Andrzejewski Mędrzec (157,480 p.)

Ups, coś poszło nie tak:

Jakiś pomysł czemu?

komentarz 19 grudnia 2017 przez Kamil Łydka Stary wyjadacz (10,390 p.)
Wszystko wykupili w ułamku sekundy. Trzeba polować na nowe egzemplarze.
komentarz 19 grudnia 2017 przez Eryk Andrzejewski Mędrzec (157,480 p.)

Nie, po prostu pomyliłeś daty premiery. Premiera będzie 29 lutego 2018 roku. smiley

komentarz 22 grudnia 2017 przez Noemi Nałogowiec (41,300 p.)

ja od razu będę lecieć po autograf! devil

+1 głos
odpowiedź 20 grudnia 2017 przez obl Nałogowiec (45,940 p.)
Pytanie 1 - liczba nawiasów otwierających i zamykających się nie zgadza
komentarz 20 grudnia 2017 przez niezalogowany
Moim zdaniem się zgadza, szczególnie że był to to copy-paste z wcześniej kompilowanego kodu ;)
komentarz 20 grudnia 2017 przez Dexterim Dyskutant (8,470 p.)
Przy drugiem !a jest o jeden zamykający za dużo
komentarz 20 grudnia 2017 przez niezalogowany
Huh, faktycznie. Niestety review tego nie wyłapało :/
–2 głosów
odpowiedź 20 grudnia 2017 przez monika90 Pasjonat (23,620 p.)
edycja 20 grudnia 2017 przez monika90

Drogie dzieci, przyszłam popsuć wam zabawę. smiley

 

1. Fragment kodu jest błędny, bo nawiasy nie są zrównoważone. Więc chyba odpowiedź D.

2. A co to jest gets? W standardowej bibliotece C++ nie ma niczego o takiej nazwie. Więc może odp. C?

3. Zależy co zostanie podane na standardowe wejście programu i w jakim stanie jest std::cin, możliwe wyniki to:
 - zwrócenie zera
 - rzucenie wyjątku typu std::ios_base::failure
 - niezdefiniowane zachowanie

4. Kod jest błędny, ponieważ std, cin i cout nie zostały zadeklarowane.

5. Jeżeli a to zmienna automatyczna to kod ma niezdefiniowane zachowanie. Kod jest błędny z punktu widzenia C++, dobre praktyki nie mają nic do rzeczy.

6. Nie podano języka. Wynik operacji i >>= 1 zależy od implementacji, więc może pętla zakończy się po 1 iteracji, a może po 8, albo wcale. Jeżeli wcale, to zachowanie jest niezdefiniowane.

7. Odp. C.

8. Wynik zależy od implementacji. (bajty mogą być 32 bitowe na przykład)

9. Nie używajcie makr.

10. Program ma niezdefiniowane zachowanie z powodu tego wyrażenia: *((int*)a + 2)

11. SFINAE.

12. Słowo auto w języku C służy do deklaracji zmiennych automatycznych, które równie dobrze można deklarować bez tego słowa.

14. Dla argumentu równego zero ta funkcja nic nie wypisze, dla różnego od zera ma niezdefiniowane zachowanie, ponieważ argument dla printf jest typu unsigned, a %d wymaga typu int.

15. Odp. A.

16. To zależy od implementacji. Autorowi pytania pewnie chodziło o 0x78, 0x56, ale implementacja nie musi niczego zapisywać w tej zmiennej pod tym adresem, w ogóle nie musi alokować niczego w pamięci, czy w rejestrze procesora.

17. Pomijając że w standardowym C nie ma funkcji gets, to program dla podanych danych wejściowych ma niezdefiniowane zachowanie.

18. Nie od zawsze, tylko od początku.

19. Wynik zależy od implementacji. Dla implementacji używających uzupełnienia do dwóch będzie to odp. B, dla tych co używają uzupełnienia do 1 - odp A, dla znak-moduł - to nawet nie wiem... (Za to w obecnie obowiązującej wersji C++ to będzie odp. D.). I to wszystko oczywiście zależy jeszcze od tego czy po ??/ są jakieś białe znaki, czego na obrazku nie widać, oraz od tego co dana implementacja rozumie przez znak końca linii.

 

komentarz 20 grudnia 2017 przez obl Nałogowiec (45,940 p.)
A psuj, jak lubisz :)
komentarz 20 grudnia 2017 przez Criss Mędrzec (172,320 p.)
10, 14: gdzie tam jest UB?
komentarz 20 grudnia 2017 przez monika90 Pasjonat (23,620 p.)
Dodałam wyjaśnienia dla 10 i 14.
1
komentarz 20 grudnia 2017 przez niezalogowany
edycja 20 grudnia 2017

Małe wyjaśnienie:

  1. Faktycznie wkradł się tzw chochlik drukarski i zabrakło jednego komentarza otwierającego. Zostało to też przeoczone podczas review pytania przez innych :/
  2. Pytania miały dotyczyć C i C++ więc wszystko jest ok, taka funkcja znajduje się wewnątrz stdio.h
  3. A tu akurat z listy dostępnych odpowiedzi należy wybrać te które mogą wystąpić, w tym zadaniu chodzi jedynie o zjawisko przepełnienia bufora ;)
  4. Lubisz się kłócić? To oczywiste że nie masz to kodu copy-paste ready tylko jest to wycinek większej całości.... W dodatku pytanie nie brzmi "czy kod się uruchomi"

BTW nie chce być nie miły ale masz chyba jakiś problem ze sobą, bo dalej czepiasz się o jeszcze bardziej absurdalne rzeczy typu "nie podano języka", a pytania z tej listy dotyczą tylko c i c++...

4
komentarz 20 grudnia 2017 przez Arkadiusz Waluk Ekspert (248,710 p.)

Brak języka w pytaniu 6 i 8 to mój błąd przy przepisywaniu tutaj, przy publikacji, wybaczcie - w obydwu powinien być język C, już dopisałem. W samym quizie zapewniam, że informacja ta była.

Drogie dzieci, przyszłam popsuć wam zabawę.

Bardzo miło, że jest review i ocena pytań, ale powyższego nie rozumiem. Nazywanie nas dziećmi i quizu zabawą pokazuje jakobyś dopiero co przyszła na forum i już pokazała nam wszystkim, że jesteśmy beznadziejni, a najlepsza jesteś ty. Zupełnie to bezcelowe.

komentarz 20 grudnia 2017 przez Criss Mędrzec (172,320 p.)

Dodałam wyjaśnienia dla 10 i 14.

10: szczerze nadal nie widzę tam UB
14: uh, faktycznie. Pośpieszyłem się i tak już zostało

Przepraszam bardzo wszystkich za błąd w 14, ale myślę, że mimo to polecenie było zrozumiałe :P

Podobne pytania

+33 głosów
10 odpowiedzi 2,121 wizyt
0 głosów
2 odpowiedzi 99 wizyt
pytanie zadane 23 października 2015 w C i C++ przez zmiennoimienny Mądrala (5,530 p.)
0 głosów
1 odpowiedź 801 wizyt
Porady nie od parady
Zadając pytanie postaraj się o odpowiedni tytuł, kategorię oraz tagi.Tagi

64,840 zapytań

111,301 odpowiedzi

234,095 komentarzy

46,709 pasjonatów

Przeglądających: 199
Pasjonatów: 6 Gości: 193

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...