W ostatnim odcinku naszego kursu opisany był mały programik wypisujący w kolumnie liczbę i jej kwadrat. Dziś dokończymy opis funkcji "printf" z poprzedniego przykładu i zajmiemy się pętlą "for".
#include <stdio.h> main() { int liczba,kwadrat; /* deklaracja zmiennych liczba i kwadrat */ liczba = 1; /* Przypisanie zmiennej liczba wartości 1 */ /* "Serce" programu,pętla while */ while ( liczba <= 10) { kwadrat = (liczba * liczba); printf("%d %d\n",liczba,kwadrat); liczba = liczba + 1; } return(0); }
W naszym małym programiku,funkcja printf wypisuje dwie kolumny liczb, w jednej kolumnie wartość zmiennej "liczba", a w drugiej wartość zmiennej "kwadrat".
printf("%d %d\n",liczba,kwadrat);
Printf jest funkcją która wypisuje formatowane dane, jej pierwszym argumentem (u nas w przykładzie "%d %d\n", jest ciąg znaków, które trzeba wypisać. Każdy znak % pokazuje nam miejsce na wartość kolejnego argumentu oraz podaje format w jakim ta wartość będzie wypisywana. Specyfikacja %d wskazuje na argument całkowity, czyli w naszym programie, "printf" spowoduje wypisanie dwóch argumentów całkowitych "liczba" i "kwadrat". Natomiast drugi argument ("liczba,kwadrat") to kolejne odpowiadające naszym przekształceniom ("%d %d") argumenty wywołania funkcji. Mówią one jakie wartości mają mieć nasze kolejne przekształcenia. A teraz może małe przykłady, aby bardziej zrozumieć zasadę działania funkcji "printf":
printf("%d %d %d %d\n"jeden,dwa,trzy,cztery);
Kiedy nasze zmienne (jeden,dwa,...) będą miały wartość tak jak odpowiadające im nazwy (tj. jeden = 1, itd.), to nasz wynik działania funkcji będzie wyglądał następująco:
1 2 3 4
Następny przykład:
printf("Amisię mam od %d lat\n",lata);
Jeżeli zadeklarujemy zmienną "lata" i przypiszemy jej wartość 10, to wynik będzie wyglądał tak:
Amisię mam od 10 lat.
Przyszedł czas żeby opisać specyfikacje inne niż %d (liczba całkowita):
%f - liczba zmiennopozycyjna
%o - liczba w postaci ósemkowej
%x - liczba w postaci szesnastkowej
%c - jeden znak
%s - ciągu znaków
%% - wypisanie znaku %.
Istnieje także możliwość podawania szerokości pola poprzez dopisanie wartości przed %, np.
%6d - oznacza liczbę całkowitą zajmującą co najmniej 6 pól. Wypisywane liczby będą wtedy
dosunięte do prawej granicy pola. Można także podawać ilość miejsc po kropce w liczbach
zmienno pozycyjnych (%f), np.
%.2f - liczba zmiennopozycyjna z 2 miejscami po kropce
%5.3f - liczba zmiennopozycyjna z 2 miejscami po kropce, zajmująca co najmniej 5 znaków
W trakcie używania funkcji "printf" ważne jest to aby zachować kolejność argumentów, a także odpowiednie specyfikacje, gdyż inaczej uzyska się błędne wyniki. Zerknijmy na przykład:
printf("%d\n",liczba);
zakładając, że zmienna "liczba" będzie miała wartość 8, uzyskamy na ekranie napis "8", ale także można tutaj zastosować bardziej skomplikowane wyrażenie, np.
printf("%d\n",4+4);
Tutaj także otrzymamy wynik "8" albo zakładając że zmienna "numer" ma wartość 5:
printf("%d\n",numer + 5);
W wyniku otrzymamy na ekranie "10".
Wniosek z tego, że tam gdzie musimy podać wartość zmiennej, możemy podać bardziej skomplikowane wyrażenie tego typu.
Warto także zapamiętać, że w języku C ważne jest czy piszemy wielkimi, czy małymi literami, gdyż np. funkcje printf() i Printf(), będą zinterpretowane jako dwie oddzielne funkcje.
W poprzednim odcinku poznaliśmy pętlę "while", a teraz przyszedł czas na inną pętle, a mianowicie "for". Może mały przykład:
#include <stdio.h> main() { int zmienna1; for(zmienna1 = 1;zmienna1 <= 10;zmienna1 = zmienna1 + 1) { printf("%d\n"zmienna1); } return(0); }
Program wypisuje w słupku liczby od 1 do 10. Sercem jest tutaj właśnie pętla "for". Zamiast pętli "for" moglibyśmy użyć pętli "while", ale program miałby dłuższy kod żródłowy:
... zmienna1 = 1; while(zmienna1 <= 10) { printf("%d\n",zmienna1); zmienna1 = zmienna1 + 1; } ...
Ale na czym polega działanie tej pętli? Otóż składa sie ona z trzech cześci oddzielonych średnikami. Część pierwsza, u nas "zmienna1 = 1" to część, która jest wykonywana tylko raz, przed wejściem do właściwej pętli. U nas w przykładzie zmiennej "zmienna1" przypisywana zostaje wartość 1. Druga część "for" to warunek sterujący, który u nas wygląda tak: "zmienna1 <= 10". Jeżeli warunek zostaje spełniony (jest on prawdziwy), to pętla jest wykonywana dalej. Jeżeli warunek nie zostaje spełniony (jest on fałszywy), to następuje koniec pętli. U nas w przykładzie sprawdzane jest czy "zmienna1" jest mniejsza lub równa 10. Jeżeli nie to następuje koniec pętli, jeżeli tak to zostaje wykonana zostaje trzecia część pętli, u nas "zmienna1 + 1", która zwana jest przyrostem. U nas "zmienna1" zostaje zwiększona o 1. Po trzeciej części znów zostaje sprawdzany warunek zawarty w częsci drugiej, potem znów część trzecia i tak w kółko, aż do czasu kiedy warunek stanie się nieprawdziwy, czyli w naszym przykładzie "zmienna1" przekroczy wartość 10.
Czasem gdy piszemy jakiś skomplikowany program zdarza się, że mamy jakąś liczbę zaszytą gdzieś głęboko w kodzie żródłowym i nie wiemy lub zapomnieliśmy co ona oznacza. W języku C możemy nadać jej nazwę i tutaj z pomocą przyjdą stałe symboliczne. Ich deklaracja wygląda następująco:
#define "nazwa" "zastępująca ją wartość" #define JEDEN 1 #define DWA 2 #define DZIELNA 28 #define NAPIS "Jestem napisem"
I od teraz jeżeli w programie pojawi się napis JEDEN, to będzie on interpretowany jak "1",czyli:
printf("%d\n",1);
będzie równo znaczne z:
printf("%d\n",JEDEN);
To tyle na dzisiaj... W następnym odcinku między innymi pobieranie znaków z klawiatury.