This is an old revision of the document!
…czyli na co zwracać szczególną uwagę podczas pisania programu.
Przykładowo, jeśli polecenie brzmi:
Napisz funkcję, która zwróci wartość (…)
to funkcja powinna zwrócić wartość poprzez instrukcję return
– a nie wypisywać ją na ekran za pomocą funkcji printf()
.
W języku C operator =
oznacza przypisanie, natomiast operator ==
– porównanie dwóch wartości (zobacz: operatory relacyjne):
int a = 5; // przypisanie do zmiennej `a` wartosci 5 if (a == 7) { // porownanie wartosci zmiennej `a` z wartoscia 7 ... }
Operator przypisania przypisuje temu, co stoi po lewej stronie (zazwyczaj zmiennej), wartość stojącą po prawej stronie.
int a; 2 = a; // blad! a = 2; // OK
Funkcja scanf()
jako pierwszy argument przyjmuje łańcuch znaków z odpowiednimi specyfikatorami konwersji; kolejne argumenty to adresy zmiennych, do których mają zostać wstawione dane (stąd ten symbol &
przed nazwą zmiennych).
Obrazowo:
scanf("%d", "%d", &a, &b); // blad! scanf("%d %d", &a, &b); // OK - wczytaj dwie liczby oddzielone spacja
O tym, co dokładnie oznacza &
dowiesz się na laboratorium o wskaźnikach.
No dobrze, mówiąc krótko – &
to w języku C operator służący do uzyskiwania adresu zmiennej. Na laboratoriach zazwyczaj chcesz wypisać wartość zmiennej, a nie wartość jej adresu
int a = 5; printf("%d\n", a); // wypisz wartosc zmiennej `a` jako liczbe calkowita printf("%d\n", &a); // wypisz adres zmiennej `a` jako liczbe calkowita // (chyba nie o to chodzilo...)
W języku C nie ma operatora potęgowania – symbol ^
oznacza operator bitowy XOR. Aby podnieść liczbę do danej potęgi, musisz ją wymnożyć.
int a = 4; int b = a ^ 2; // 4 XOR 2 == 6, nie o to chodzilo... int c = a * a; // OK - `a` do 3. potegi
W języku C ||
oraz &&
to operatory logiczne, natomiast |
oraz &
to operatory bitowe.
Podczas tego przedmiotu prawdopodobnie nie poznasz operatorów bitowych, stąd sądzę, że możesz w ciemno stosować “podwójne” symbole.
Typ zmiennych podajemy tylko w deklaracji funkcji – nie w wywołaniu:
void func(int a) { // OK ... } int main () { int k = 3; func(int k); // blad! func(k); // OK ... }
Zamiast powtarzać ten sam warunek logiczny, tylko w formie zaprzeczenia, możesz skorzystać z konstrukcji if-else
(jeżeli – w przeciwnym razie).
// Dziala, ale trzeba duzo pisac i malo to czytelne... if (a*a + b*b == c*c) { return 1; } if (a*a + b*b != c*c) { return 0; }
// Lepiej! if (a*a + b*b == c*c) { return 1; } else { return 0; }
(Minimalny) nagłówek funkcji main()
wygląda następująco:
int main(void)
Ten int
oznacza, że funkcja main()
zwraca wartość całkowitą (do systemu operacyjnego), a zatem powinna się ona kończyć instrukcją return
(w naszym przypadku return 0;
, bo 0
oznacza poprawne zakończenie programu):
int main(void) { return 0; }