• Kurs języka C - część 7

20.02.2005 14:03, autor artykułu: Grzegorz "Y-Greg" Tarka
odsłon: 6149, powiększ obrazki, wersja do wydruku,

W dzisiejszym odcinku przyjrzymy się bliżej operatorom logicznym oraz arytmetycznym. Poznamy też niektóre sposoby przekształcania danych.

OPERATORY LOGICZNE I ARYTMETYCZNE

Operatory arytmetyczne, które składają się z dwóch argumentów to: +, -, *, /, %. Ostatni z nich to modulo, czyli operator dzielenia:

x % y


Wynikiem takiego działania będzie reszta z dzielenia x przez y. Wynik będzie więc równy 0, jeżeli y jest podzielnikiem x. Operatora & nie można stosować do zmiennych typu float i double. Napiszmy zatem program, który będzie sprawdzał podzielność dwóch liczb. Do tego celu użyjemy funkcji pobierz(), którą zajmowaliśmy się w poprzednim odcinku kursu.

#include <stdio.h>

int pobierz(void);


main()
{

   int x = 0;
   int y = 0;
   int wynik = 0;


   printf("Program bada podzielność dwóch liczb\n");
   printf("Podaj dzielną: ");
   x = pobierz();
   printf("\nPodaj dzielnik: ");
   y = pobierz();

   if(x % y == 0){
      printf("\nLiczba %d jest dzielnikiem liczby %d\n",y,x);
      wynik = x / y;
      printf("Wynik dzielenia wynosi: %d\n",wynik);
      return(0);
   }
   else if(x % y != 0){
      printf("\nLiczba %d nie jest dzielnikiem liczby %d\n",y,x);
      wynik = x % y;
      printf("Reszta z dzielenia: %d\n",wynik);
      return(0);
   }


}

int pobierz(void)
{
   char s[100];
   int c,wynik;
   int i = 0;

       while((c = getchar()) != 'n') {
          if(isdigit(c) == 0 ) {
             printf("\nTo nie jest cyfra\n");
             return(0);
        }
          s[i++] = c;
       }

       s[i] = '\0';

       wynik = atoi(s);
       return wynik;
}


Kurs C Na początku programu następuje deklaracja zmiennych x, y, wynik oraz przypisanie im wartości 0. Następnie funkcja printf wypisuje na ekranie informacje o programie i prosi o podanie dzielnej. Tutaj zmiennej x poprzez funkcję pobierz, zostaje przypisana wartość pobrana z klawiatury. Dalej znów printf (tym razem z zapytaniem o dzielnik) i przypisanie y wartości z funkcji pobierz. Następnie jest już instrukcja if, która sprawdza modulo (%), czyli resztę z dzielenia liczb x i y. Teraz jeżeli reszta równa jest 0 (czyli x jest podzielna przez y), to printf wypisuje na ekranie napis i wartości x i y, a następnie zmiennej wynik zostaje przypisany wynik z dzielenia x przez y. Potem funkcja printf wypisuje na ekranie wynik z dzielenia, aby przejść następnie do funkcji exit(0), która zakończy działanie programu.

Ale gdyby warunek x % y == 0 nie został spełniony, to przechodzimy do funkcji else if, która sprawdza czy x % y nie jest różne (!=) od zera. Następnie funkcja printf wypisuje na ekranie informacje z y i nie jest dzielnikiem x, a następnie zmiennej wynik zostaje przypisana reszta z dzielenia x i y. Dalej funkcja printf wypisuje tę wartość na ekranie i następuje koniec programu (funkcja return). Nie będziemy omawiali funkcji pobierz gdyż zostało to już zrobione w poprzednim odcinku kursu. Warto do tego programu dodać jeszcze ochronę przed dzieleniem przez 0, np poprzez dodanie przed instrukcją if wyrażenia:

if(y == 0){
   printf("BŁĄD: wystąpiło dzielenie przez 0\n");
   return(0);
}


Ważne żeby ten fragment umiejscowić dopiero po tym jak nastąpi pobieranie znaków z klawiatury, gdyż zmienna y od "nowości" ma wartość 0, a dopiero funkcja pobierz przyporządkowuje jej jakąś inną wartość.

Operatorami relacji są: >, >=, <, <=, ==, !=

Popatrzmy na wyrażenie:

a > b - 5

którego kolejność będzie następująca:

a > (b - 5)

Operatory relacji są wykonywane póżniej (mają niższy priorytet) niż operatory arytmetyczne.

Operatory logiczne && i || są obliczane od strony lewej do prawej. Koniec obliczania następuje w momencie kiedy zostanie określony wynik (prawda lub fałsz).

W języku C występuje jednoargumentowy operator negacji ! (wykrzyknik). Najczęściej stosowany jest w takiej sytuacji jak ta:

if(!zmienna)

zamiast

if(zmienna == 0)

PRZEKSZTAŁCENIA TYPÓW

Jak dotąd poznaliśmy już jeden sposób przekształcania typów. Była to instrukcja atoi, która przekształcała tekst zawarty w tablicy na wartość numeryczną. Czasem przekształcanie typów jest konieczne (jak w przypadku naszej funkcji pobierz), np. nie można używać typów float do indeksowania tablicy. Istnieje jeszcze jednoargumentowy operator zwany rzutem (ang. cast). Zakładając, że funkcja liczenie(double) oczekuje argumentu o typie double, a zmienna a jest typu int, możemy zapisać:

liczenie((double)a);


Sam argument a nie ulega zmianie, zmieniana jest tylko wartość odczytywana przez funkcję liczenie.

CONST

Kurs C W języku C istnieje jeszcze kwalifikator const (stały), który używany jest do deklaracji zmiennych, których wartości nie chcemy zmieniać podczas dalszej pracy programu. Wyrażenie:

const int t = 5;

mówi że wartość zmiennej t będzie stała i nie będzie się zmieniać przez dalszy okres pracy programu. Próba przypisania czegoś do takiej zmiennej jest nieprawidłowa i w kompilatorze VBCC wywołuje błąd: "assignment to constant type", czyli przypisanie dla typu const. Kiedy użyjemy operatora const do deklaracji tablicy:

const char tekst[] = "Tekst";

to każdy z jej elementów nie ulegnie zmianie. A gdy np użyjemy go do parametrów funkcji:

int zmienna(const int);

to funkcja nie będzie mogła zmienić tej zmiennej.

I to by bylo na tyle w dzisiejszym odcinku kursu.

 głosów: 1   
dodaj komentarz
Na stronie www.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem