ANSI C 3

ANSI C 3



3 STEROWANIE

while (Iow <= high) { mid = (low+high) / 2; if (x < v[mid]) high = mid - 1; else if (x > v[mid])

Iow = mid + 1; else    /* znaleziono */

return mid;

}

return -1;    /* nie znaleziono */

}

Ćwiczenie 3.1. Nasza funkcja wyszukiwania metodą bisekcji wykonuje dwa sprawdzenia wewnątrz pętli, podczas gdy wystarczyłoby jedno (za cenę zwielokrotnienia testów na zewnątrz). Napisz nową wersję tej funkcji z tylko jednym sprawdzeniem wewnątrz pętli i porównaj czasy wykonania obu wersji.


Instrukcja switch

Instrukcja switch służy do podejmowania decyzji wielowariantowych, w których sprawdza się, czy wartość pewnego wyrażenia pasuje do jednej z kilku całkowitych stałych wartości, i wykonuje odpowiedni skok.

switch (wyrażenie) {    n

case wyraienie-stałe: instrukcje case wyraienie-stałe: instrukcje default: instrukcje

}    M.

Z każdym wariantem jest związana jedna lub kilka całkowitych wartości stałych bądź wyrażeń stałych. Jeśli jeden z przypadków (ang. case) jest zgodny z wartością wyrażenia, to od niego rozpocznie się dalsze wykonywanie programu. Wszystkie wartości wyraień-stałych w przypadkach muszą być różne. Przypadek nazwany default zostanie wykonany wtedy, kiedy żaden inny przypadek nie jest zgodny z wartością wyrażę nia. Przypadek default nie jest obowiązkowy - jeśli nie występuje, a wartość wyrażenia nie pasuje do innych przypadków, to nie podejmuje się żadnej akcji. Przypadki łącznie z default, mogą występować w dowolnej kolejności.    ł

W rozdziale 1 napisaliśmy program, w którym częstości pojawiania się cyfr, białych

••

znaków oraz wszystkich innych znaków obliczono za pomocą ciągu instrukcj1 if... else if ... else. Oto ten sam program używający instrukcji switch:

main() /* zlicz cyfry, białe znaki, inne */

3-

4 INSTRUKCJA SWITCH #include <stdio.h>


_ powered bv

Mi siol


{

int c, i, nwhite, nother, ndigitflOJ;

nwhite = nother = 0; for (i = 0; i < 10; i++) ndigit[i] = 0;

while ((c = getchar()) != EOF) { switch (c) {

case ’0’: case T: case '2': case ’3’: case ’4’: case ’5': case ’6’: case 7’: case ’8’: case ’9’: ndigit[c-’0’]-H-; break; case ’ case ’\n’: case ’\t’: nwhite++; break; default: nother-H-; break;

}

}

printffcyfry = ”); for (i = 0; i < 10; i++) printf(” %d”, ndigitfi]);

printf(”, białe znaki = %d, inne = %d\n”, nwhite, nother); return 0;

Instrukcja break powoduje natychmiastowy wyskok z instrukcji switch. Przypadki znaczą tyle co etykiety, toteż po wykonaniu instrukcji związanych z jednym przypadkiem sterowanie przechodzi do następnego przypadku, jeśli jawnie nie podejmiesz akcji przerywającej. Użycie instrukcji break lub return jest najczęściej stosowanym sposobem opuszczenia instrukcji switch. Za pomocą instrukcji break można także wymusić natychmiastowe wyjście z pętli while, for i do, co będzie opisane dalej w tym rozdziale.

Przechodzenie do następnego przypadku budzi mieszane uczucia. Zaletą jest to, że można definiować wiele różnych przypadków dla jednej akcji, jak w naszym przykładzie z cyframi. Z drugiej strony, każdy „normalny” przypadek musi być zakończony

89


Wyszukiwarka

Podobne podstrony:
ANSI C 0 4 FUNKCJE I STRUKTURA PROGRAMU-------------- zamiast int Iow, high, mid; Iow = 0; high =
ANSI C 3 1 ELEMENTARZ fahr = lower; while (fahr <= upper) { celsius = 5 * (fahr-32) / 9; printf
FUNCTIONFREgUENCY • • • • • • -• ^ • IOW • HIGH EXT - 2 0 d
gdzie Iow i high definiują zakres wartości skalowany do zakresu [0, 1] dla klasy double i skalowanyc
ANSI C 3 1 ELEMENTARZ /* power: podnieś base do potęgi n; n >= 0 */ int power(int base, int n){
ANSI C 3 2 TYPY, OPERATORY I WYRAŻENIA_______ W tablicy 2.1 na końcu tego rozdziału podano prioryt
ANSI C 1 Sterowanie W każdym języku programowania instrukcje sterujące ustalają kolejność wykonywa
ANSI C 2 3 STEROWANIE Dwuznaczność la jest szczególnie szkodliwa w sytuacjach podobnych do tej:
ANSI C 4 3 STEROWANIE instrukcją break dla uniknięcia takiego przejścia. Słabą stroną przechodzeni
ANSI C 5 1 3 STEROWANIE (nieobowiązkowy + albo —). (W rozdziale 4 pokażemy funkcję atof, która wyk
ANSI C 6 3 STEROWANIE --------• Przecinki oddzielające argumenty funkcji, zmienne w deklaracjach i
ANSI C 7 3 STEROWANIE3.7    
ANSI C 8 3 STEROWANIE Dla przykładu rozważmy problem: jak zbadać, czy w dwóch tablicach a i b wyst
ANSI C 3 4 FUNKCJE I STRUKTURA PROGRAMU rozwagą, ponieważ mogą niekorzystnie wpływać na strukturę
ANSI C 3 4 FUNKCJE I STRUKTURA PROGRAMU zostanie rozwinięte w wiersz printf(Mx/yM ” = %g

ANSI C 3 5 WSKAŹNIKI I TABLICE możliwości są zawarte w funkcjach: getline (rozdz. 1 i 4), atoi, it
ANSI C 3 5 WSKAŹNIKI I TABLICE__-— --- konstrukcja *pfa[] zostanie rozpoznana jako deklarator, a z
ANSI C 3 6 STRUKTURY Żaden węzeł nie może mieć więcej niż dwóch potomków; może natomiast mieć jedn
ANSI C 3 7 WEJŚCIE I WYJŚCIE ____ ________ printf(s);    /* ŹLE, jeśli w s występuj

więcej podobnych podstron