07
Metodyka i techniki programowania
Instrukcje sterujące w C
mgr inż. Wojciech Szmuc
2007-11-06
Ćwiczenie 1. Instrukcja
switch
1. Zaimplementuj kod:
/* TODO: wczytanie zmiennych "lArgument", "operator", "pArgument" (%f%c%f) */
switch (operator)
/* okreslenie zmiennej, ktorej wartosc bedzie sprawdzana */
{
case '+':
/* jedna z mozliwych wartosci */
printf("%f+%f=%f\n", lArgument, pArgument, lArgument+pArgument);
break;
/* wyjscie z bloku "switch" */
case '-':
printf("%f-%f=%f\n", lArgument, pArgument, lArgument-pArgument);
break;
case '*':
printf("%f*%f=%f\n", lArgument, pArgument, lArgument*pArgument);
break;
case '/':
printf("%f/%f=%f\n", lArgument, pArgument, lArgument/pArgument);
break;
default:
/* wybierane, gdy inne nie pasuja */
printf("Niepoprawny format.\n");
};
2. Sprawdź co spowoduje wykasowanie instrukcji
break
.
Zadanie
Napisz program wypisujący nazwy pór roku w zależności od numeru wprowadzonego
miesiąca. W przypadku, gdy miesiąc może należeć do różnych pór roku rozstrzyganie na
podstawie pobranego numeru dnia tego miesiąca.
Ćwiczenie 2. Pętle
while
1. Zaimplementuj kod:
srand(time(NULL));
/* inicjalizacja generatora liczb losowych */
short propozycja, wylosowana=rand()%100;
/* losowanie liczby od 0 do 99 */
do
/* poczatek petli */
{
printf("Wpisz liczbe: ");
scanf("%hd", &propozycja);
if (propozycja>wylosowana) printf("Zbyt duza liczba\n");
if (propozycja<wylosowana) printf("Zbyt mala liczba\n");
} while (propozycja!=wylosowana);
/* warunek powtarzania */
printf("Zgadza sie!\n");
2. Przed instrukcjami warunkowymi dopisz:
if (propozycja<0 || propozycja>99)
{
printf("Liczba poza zakresem 0-99.\n");
continue;
/* przejdz do warunku petli */
};
Sprawdź działanie programu po wpisaniu niepoprawnej wartości.
3. Podmień
continue
na
break
. Sprawdź działanie programu.
4. Zmodyfikuj program tak, aby wykorzystywał pętlę
while
zamiast
do/while
.
Ćwiczenie 3. Pętla
for
1. Zaimplementuj kod:
/* TODO: wczytanie poprawnej wartosci zmiennej "n" */
unsigned indeks, silnia=1;
for (indeks=2; indeks<=n; indeks++)
/* zaczyna od "indeks=2", sprawdza czy */
{
/* "indeks<=n", inkrementuje "indeks" */
silnia*=indeks;
};
2. Sprawdź co się zmieni po zastąpieniu
indeks++
przez
++indeks
.
3. Zmodyfikuj program tak, aby obliczał liczbę Eulera przy pomocy wzoru:
e=
∑
n=0
∞
1
n !
.
Maksymalną wartość
n
pobierz z konsoli.
Zadanie
Napisz program, który wyświetli przebieg ustalonej funkcji (na przykład sinus) za pomocą
symboli
*
.
Ćwiczenie 4. Operatory bitowe
1.
Stwórz plik
bitowe.c
zawierający:
/* TODO: wczytanie zmiennej "nieujemna" (unsigned) */
short indeks;
printf("%u w zapisie binarnym: ", nieujemna);
for (indeks=31; indeks>=0; indeks--)
{
printf("%d", (nieujemna>>indeks)%2);
/* przesuniecie o "indeks" bitow */
/* w prawo */
if (indeks%4==0) printf(" ");
if (indeks%8==0) printf(" ");
};
Sprawdź działanie programu oryginalnego oraz po usunięciu nawiasów zawierających
operację przesunięcia bitowego.
2. Używając powyższego programu (lub jego modyfikacji) wypisz więcej bitów niż wynosi
wielkość wypisywanego typu.
Co można wywnioskować z otrzymanego wyniku?
3. Zmodyfikuj program tak, aby wyświetlał również reprezentację bitową liczb ujemnych.
4. Wykorzystując przedstawiony w punkcie 1. algorytm sprawdź działanie pozostałych
operatorów bitowych.
Zadanie
Napisz program, który rozkłada liczbę na bity z wykorzystaniem przesunięcia bitowego
w lewo.