Nie sądzę, że ktokolwiek to przeczyta, ale sprawdzanie waszych prac, to prawdziwa mordęga.
- Jak przepisujecie od kolegi — przetwarzajcie tekst. Żeby się trochę różnił. Chyba, że nie rozumiecie co przepisujecie (obawiam się, że w większości przypadków tak właśnie było).
- Przepisujcie tylko od tych, którzy coś wiedzą.
- Sprawdźcie treść zadania. Bo czasami przepisywana treść zupełnie do zadania nie przystaje. Ale czytanie ze zrozumieniem, nie musi być łatwe.
- Nie jest prawdą, że po każdym poleceniu
if
alboelse
powinny wystąpić nawiasy klamrowe (dotyczy to równieżfor
iwhile
). Jeżeli wykonywane jest tylko jedno polecenie — nawiasów może nie być! - Nie jest prawdą, że
void f(int x)
nie jest funkcją tylko procedurą. W terminologii języka C jest funkcją, którą czasami (przez analogię do innych języków programowania) nazywa sięprocedurą. - Po raz kolejny zwracam uwagę na operatory (dwuargumentowe)
&
oraz&&
i parę|
oraz||
. Pierwszy (&
to operator logiczny I (AND po angielsku) działający na bitach. Drugi (&&
) I (AND po angielsku) działające na całych wartościach. Zatem ’1 & 3
’ należy interpretować jako 00000001 & 00000011; wynik ostatniej operacji to 00000001 (operator „wynajduje” bity 1 występujące na tych samych pozycjach w obu liczbach. W przypadku operatora&&
wartości nie są rozbijane na poszczególne bity tylko interpretowane jako całość: wartość równa zeru to fałsz (False) a różna od zera — prawda (True). I tak przeprowadzane są obliczenia. Gdyi
zmienia się od 0 do 9 to1 & i
przyjmuje wartości 0, 1, 0, 1 i tak dalej (zero dla liczb parzystych i 1 dla nieparzystych). W przypadku wyrażenia1 && i
— gdy i jest równe zero — wynik całego wyrażenia jest fałsz (bo prawda (1) AND fałsz (0)), dla pozostałych wartościi
będzie prawda ANDprawda czyli prawda. W przypadku operatorów LUB (OR) jest bardzo podobnie. - Jeżeli gdzieś Państwo zobaczą coś takiego
cards[2] = cards[3];
to nie interpretujcie tego jako „do tablicy dwuelementowej wpisz tablicę trójelementową” tylko jako „trzeci (choć numerowany od zera) element tablicycards
wstaw w miejsce drugiego (też numerowanego od zera)”. - To:
"abcdef"
to stała tekstowa. Charakter (typ) tej stałej to „tablica znakowa”."abcdef"[5]
to piąty (licząc od zera) element tej tablicy. Tablica ta zawiera sześć znaków (liter), a jej siódmym elementem jest znak o kodzie ASCII 0. W żadnym wypadku"abcdef"[5]
nie jest pytaniem o długość napisu. Choć istotnie,"abcdef"[i]
, gdyi
zmienia się od zera do 5 będzie różne od zera, a"abcdef"[6]
będzie równe 0, natomiast ile wyniesie"abcdef"[7]
nie bardzo wiadomo. Może być, na przykład tak:
1 2 3 4 5 6 7 8 9 10 11 |
"abcdef"[0] = 97 "abcdef"[1] = 98 "abcdef"[2] = 99 "abcdef"[3] = 100 "abcdef"[4] = 101 "abcdef"[5] = 102 "abcdef"[6] = 0 "abcdef"[7] = 0 "abcdef"[8] = 0 "abcdef"[9] = 1 "abcdef"[10] = 27 |
(Jest to wynik działania programu:
1 2 3 4 5 6 7 8 |
#include <stdio.h> int main(int argc, char **argv) { int i; for(i=0;i<11;i++) printf("\"abcdef\"[%d] = %d\n", i, "abcdef"[i]); return 0; } |