FurryMAG

Nr 10/2000 (20) -- 16.12.2000

Pierwsze kroki w C (cd.)

Oto jak obiecałem kolejna część tutoriala o c. Tym razem zajmę się podstawowymi instrukcjami [for, while, if, etc.], które są nieodzowne przy nauce języka programowania. Zacznę od warunku if.

IF - warunek

Lubię tłumaczyć na przykładzie, więc:

main(){
int a,b,c,z;
	a=20;
	b=30;
	c=0;
// if-else wygląda tak:
	if (a>b) printf("a=%d wieksze od b=%d", a, b);
	else printf("a=%d mniejsze od b=%d", a, b);
// jeżeli więcej niż jedno polecenie dla if lub else to klamrujemy:
	if (a>b){
		printf("a wieksze");
		z=a;
	}
	else {
		printf("b wieksze");
		z=b;
	}
} // klamra zamykająca main()

Jeżeli ktoś nie pamięta co oznacza \n oraz %d odsyłam do poprzedniego numeru. Znów jak widać i podobnie jak printf(), if() jest funkcją. Dlatego używamy go w postaci if(){}. Oczywiście jeżeli mamy jedno polecenie tak jak w przypadku pierwszego if'a w powyższym przykładzie, tylko jedno printf, klamry można opuścić. Z else sprawa wygląda identycznie. Else odnosi się zawsze do ostatniego if'a. Można zrobić coś takiego:

...
if(){}
if(){}
if(){}
else(){}
...

Czyli z tego wniosek, że nie po każdym if'ie musi wystąpić else (jednakże zalecane jest ze względów bezpieczeństwa aby tak było). Następna będzie instrukcja while-do.

WILE-DO - instrukcja

Jak wyżej, więc...

main() {
int a,b,c,z;
	a=0;
	b=5;

	while (a<20) {
		printf("a=%d i nadal mniejsze od 20", a);
		printf(", lecz b rowne %d\n", b);
	b--;
	}
}

Jeżeli dobrze się przyjrzymy kodowi to można bez problemu zauważyć [no prawie bez problemu, ja to zauważyłem po uruchomieniu :)], że program nigdy się nie skończy, ponieważ nigdy a nie osiągnie wartości 20, ponieważ nigdzie nie jest zwiększana. Należy więc do instrukcji while dopisać linijkę a++;

DO-WHILE - instrukcja

Ta instrukcja nie różni się wiele od poprzedniej. Chodzi o to, że najpierw są wykonywane polecenia, a na końcu sprawdzany warunek.

main() {
int a,b,c,z;
	a=0;
	b=5;

        do {
		printf("a=%d i nadal mniejsze od 20", a);
		printf(", lecz b rowne %d\n", b);
		b--;
		a++;
	} while (a<20);
}

FOR - najciekawsza instrukcja

Kiedy robiłem w Pascalu nawet nie marzyłem o takiej pętli. Po prostu nie znałem c. Podajemy pod słowie for w nawiasach kilka parametrów, a następnie otwieramy klamrę i piszemy polecenia na końcu zamykając klamrę [chyba że mamy jedno polecenie].

main() {
int i, a, b=5;
	for(i=0; i<10; i++) {
		a=(b+10)*i;
		printf("wartosc liczby rowna %d\n", a);
	}
}

Myślę, że jest to bardzo wygodna instrukcja i warto jej użyć, gdyż nam to zaoszczędzi często nieczytelności kodu. Tak jak zawsze można użyć tutaj zamiast for'a innej instrukcji [np. while] i to już zależy od gustu.

SWITCH - wygodny case

Switch to po prostu case, a wiadomo kiedy case się przydaje. Wtedy gdy mamy wiele przypadków do rozpatrzenia. Najprościej pokazać na przykładzie.

main() {
int i;
	for(i=0; i<10; i++) {
		switch(i){
			case 1: printf("index rowny 1\n");
				break;
			case 2:
			case 3:
			case 4: printf("index rowny 2, 3, albo 4");
				break;
			case 8: printf("index rowny juz 8");
			default: printf("index jest nie wiadomo ile rowny... :(");
				break;
		} // koniec switcha
	} // koniec petli
} //koniec programu

Jak widać [myślę, że dobrze widać co co robi] switch'a otwieramy klamrami [w nawiasie podajemy jaką wartość ma sprawdzać] i wewnątrz stosujemy case'a. Jeżeli case 2 i case 3 są puste oznacza to, że wywołają te same polecenia co następny case z poleceniami [case 4]. Break jako ostatnie polecenie wychodzi z danego case'a i wraca do switch'a [aby sprawdzać kolejne przypadki]. Case noszący nazwę default wykonuje polecenia dla wszystkich niezdefiniowanych przypadków.

Na tym kończę mój artykuł, w następnym numerze skończy się sama teoria i zacznie się trochę praktyki, powiem również o dość prostych rzeczach jak struktura i unia [nie są wcale takie złe jak się wydaje].

Paweł Kowalak vel viru
viru@cad.pl