10 instrukcja switchid 11289 Nieznany (2)

background image

Instrukcja switch

W wielu przypadkach, gdy należy podjąć wielowariantową decyzję zależną od wartości wyrażenia

zamiast zagnieżdżonych instrukcji

if

wygodniej jest zastosować instrukcję

switch.

Ma ona

postać:

switch (wyr)
{

case st_1:

instrukcje_1

case st_2:

instrukcje_2

………….


default:

instrukcje_default

case st_k:

instrukcje_k

………..

}

Instrukcja

switch

oblicza wartość całkowitego wyrażenia

wyr

i porównuje ją ze stałymi

całkowitymi

st_1,….st_k.

Jeżeli wartość wyrażenia jest zgodna ze stałą

st_i

wykonywany

jest ciąg instrukcji

instrukcje_i, instrukcje_i+1,…

aż do wystąpienia słowa

kluczowego

default.

Gdy żaden przypadek nie odpowiada stałe

j wyr

wykonywane są

instrukcje_default

i występujące po nich

instrukcje_k.

Przypadek

default

nie

jest obowiązkowy, jednak jeśli jest, może wystąpić w dowolnym miejscu. Instrukcja

break

powoduje przerwanie wykonywania instrukcji

switch.

Jest ona zwykle stosowana po ostatniej

instrukcji przypadku

default,

a często także na końcu ciągów instrukcji odpowiadającym

pozostałym przypadkom.

Poniższy program ilustruje działanie instrukcji

switch.

Wczytuje do tablicy tekstowej liczbę

zapisaną w systemie szesnastkowym i zamienia ją na liczbę dziesiętną. Instrukcja

case

została

wykorzystana do zamiany liter występujących w zapisie liczby szesnastkowej na odpowiadające im

liczby dziesiętne:

A – 10

B – 11

C – 12

D – 13

E – 14

F – 15

background image

Liczbę szesnastkową zamienia się na dziesiętną mnożąc kolejne cyfry szesnastkowe przez kolejne

potęgi podstawy (czyli liczby 16) i sumując je. Wyjaśnia to przykład:

2AB07C

(16)

= (12 * 16

0

+ 7 * 16

1

+ 11 * 16

3

+ 10 * 16

4

+ 2 * 16

5

)

(10)

Do obliczenia wartości wielomianu można zastosować schemat Hornera.

#include <stdio.h>
#include <stdlib.h>
#define MAX 20

int main()
{
char lx[MAX],d,dd[2];
int i,l;
int s,x;
fgets(lx,10,stdin);
//fgets dodaje do tabl. znak koniec linii (kod 10) i '\0'
printf("liczba szesnastkowo=%s\n",lx);
s=0;
i=0;
while ((d=lx[i])!=10)
{
printf("znak=%c\n",d);
switch (d)
{
case 'A':
x=10;
break;
case 'B':
x=11;
break;
case 'C':
x=12;
break;
case 'D':
x=13;
break;
case 'E':
x=14;
break;
case 'F':
x=15;
break;
default:
dd[0]=d;
dd[1]='\0';

background image

printf("ciag:%s\n",dd);
x=atoi(dd);
};
i++;
printf("x=%d\n",x);
s=s*16.+x;
}
printf("%d\n",s);
}

W instrukcji

case

każdy znak wczytanego tekstu (liczby szesnastkowej) zamieniany jest na liczbę

dziesiętną. Przypadek

default

dotyczy znaków będących cyframi dziesiętnymi (0-9).

Wykorzystano funkcję

atoi,

która zamienia tekst na liczbę dziesiętną. Wymaga ona zbudowania

tablicy tekstowej, czyli dodania symbolu ‘\0’ (tablica dd). Zgodnie ze schematem Hornera kolejne

wyniki mnoży się przez 16 i dodaje się liczby dziesiętne odpowiadające kolejnym pozycjom

zamienianej liczby 16-tkowej.

Wykorzystując kody ASCII znaków występujących w liczbach 16-tkowych instrukcję

switch

można

zastąpić następującym fragmentem kodu.

if(d>=48 && d<=57)
x=d-48;
else
if(d>=65 && d<=70)
x=d-55;
else
{ printf("zla liczba\n");
break;};

Kody 48 – 57 odpowiadają znakom 0-9, natomiast kody 65-70 odpowiadają znakom A-F.


Wyszukiwarka

Podobne podstrony:
cw 10 instrukcja do omomierza Nieznany
cw 10 instrukcja do moska Whe Nieznany
1996 10 26 praid 18571 Nieznany
10 Poslugiwanie sie dokumentacj Nieznany
Cwiczenia nr 10 (z 14) id 98678 Nieznany
instrukcja przeciwpozarowa gene Nieznany
Instruktazstanowiskowy id 21769 Nieznany
kolm instrumenty 3 id 239529 Nieznany
cw3 i 4 instrukcja id 123316 Nieznany
2008 10 06 praid 26459 Nieznany
10 zaburzenia organiczneid 1121 Nieznany
10 Sprawdzenie Konstrukcji Ze W Nieznany (2)
mat bud cwicz 10 11 id 282450 Nieznany
CA 6 instrukcja uzytkownika id Nieznany
Cw 5 10 Analiza tolerancji i od Nieznany

więcej podobnych podstron