Opis I quizu
I Quiz sprawdzający wiedzę z programowania w C i C++. Większość wiedzy znajdą Państwo w artykułach na stronie. Tutaj opis z odesłaniami.Pytanie 1:
mamy fragment programu:char *s = "Ala ma kota"; ... s[0] = 'E';Proszę podać, która z odpowiedzi jest niepoprawna:
- Program może się nie skompilować
- Kod w zasadzie jest bez zastrzeżeń
- Program może "wywalić się" przy operacji s[0] = 'E';
- Deklaracja to tak naprawdę const char *s;
odpowiedź: nieprawidłową odpowiedzią jest, że kod jest poprawny. Ten przypadek był omawiany i jest w skrzyni porad.
Pytanie 2:
Który sposób sprawdzania nieparzystości może dać nieprawidłową odpowiedźif((liczba & 1) == 1) puts("liczba nieparzysta");
if((liczba % 2) == 1) puts("liczba nieparzysta");
if((liczba % 2) != 0) puts("liczba nieparzysta");
if(abs(liczba % 2) == 1) puts("liczba nieparzysta");
odpowiedź: nieprawidłowo zadziałać może oczywiście drugi kod, dla liczb ujemnych. Ten przypadek był omawiany i jest w skrzyni porad.
Pytanie 3:
Które ze zdań dotyczących liczb zmiennoprzecinkowych jest błędne:- operacje na liczbach zmiennoprzecinkowych są łączne i rozdzielne
- ilość liczb zmiennoprzecinkowych jednego typu (np float) jest ograniczona
- wśród liczb zmiennoprzecinkowych może występować liczba -0
- według standardu IEEE 754 liczba double ma 64 bity
odpowiedź: nieprawidłowe jest zadnie pierwsze. Problem był omawiany w artykule o liczbach zmiennoprzecinkowych.
Pytanie 4:
Czy w C możemy programować obiektowo?- Tylko jeśli przyjmiemy, że mówimy tak naprawdę o języku Objective-C
- Nie, gdyż nie uda się uzyskać polimorfizmu
- Oczywiście, że możemy, będzie tylko troszkę trudniej, niż w językach do tego przygotowanych
- W języku C programujemy jedynie strukturalnie
odpowiedź: prawidłowa jest odpowiedź 3. Na ten temat był cały cykl artykułów.
Pytanie 5:
mamy funkcję:int foo(unsigned int a) { char s[a]; //... }
- kod jest poprawny w C, a niepoprawny w C++
- kod jest poprawny w C++, a niepoprawny w C
- kod jest poprawny w C i C++
- kod jest poprawny w C, a niepoprawny w C++, choć niektóre kompilatory C++ pozwalają na taką konstrukcję
odpowiedż: tu poprawne są odpowiedzi pierwsza oraz czwarta i obie zaliczają pytanie. Problem ten był omawiany w skrzyni porad.
Pytanie 6:
char tab[5] = "Tomek";
- poprawne jest to zarówno w C jak i C++
- poprawne w C, niepoprawne w C++
- niepoprawne i w C i w C++
- poprawne w C++, niepoprawne w C
odpowiedż: jest to poprawne w C, w C++ nie, gdyż w C++ literał znakowy zakończony jest zawsze zerem, tak więc tablica jest o jeden znak za mała. C pozwala na taka konstrukcję, zostawiając programiście pilnowanie prawidłowej obsługi takiej tablicy. Znajdą Państwo szczegóły w książce Bjarne'a Stroustrupa.
Pytanie 7:
void foo() { int i; printf("%d", i); }wypisane zostanie:
- 0
- 1
- wystąpi błąd i nic nie wypisze
- wypisana wartość będzie przypadkowa
Pytanie 8:
int i = 51; printf ("%d, ", (i+1)); printf ("%d, ", i++)); printf ("%d", ++i);wypisany zostanie ciąg:
- 52, 51, 53
- 51, 52, 53
- 52, 52, 53
- 52, 51, 52
Pytanie 9:
char tab[5]; char *ptab = tab; scanf("%s", &ptab); scanf("%s", ptab); scanf("%4s", ptab);
- poprawne są wszystkie 3 wywołania funkcji scanf
- najlepsze wywołanie 3, potem 2, pierwsze niepoprawne
- poprawne tylko pierwsze
- niepoprawne są wszystkie wywołania
odpowiedź: oczywiście poprawna jest odpowiedź 2. Przypadkowo ze względu na konwersję niejawną tablicy na wskaźnik prawidłowo mogą zadziałać wszystkie 3, ale nie należy tak robić. Informacje na ten temat są w skrzyni porad.
Pytanie 10:
W zależności od języka (standard C++11 i C11) sizeof('a') będzie równe:- w C i w C++ sizeof(char)
- w C sizeof(int) w C++ sizeof(char)
- w C i w C++ sizeof(int)
- w C sizeof(char) w C++ sizeof(int)
odpowiedź: standard mówi jasno, że w C będzie to sizeof(int), natomiast w C++ sizeof(char), na co należy zwrócić uwagę programując. Znajdą Państwo szczegóły w książce Bjarne'a Stroustrupa.
język C C++ C quiz