Wykład

Transkrypt

Wykład
J. Koszelew
Temat 2
Wyra enia logiczne. Operatory przypisania. Instrukcja
bloku. Instrukcja warunkowa. Instrukcja iteracji "while", "do while", "for".
1. Wyra enia logiczne
W instrukcjach wyst puj
cz sto wyra enia logiczne, które okre laj
warunki wykonania fragmentów programu. Wyra enia logiczne s
zbudowane przy pomocy operatorów arytmetycznych, relacyjnych i
logicznych. W wyra eniach logicznych mog
okr głe. Wyra enia logiczne maj warto
od zera (prawdy). Warto
te
wyst pi
0 (fałszu) lub warto
nawiasy
ró n
prawdy b dziemy umownie zaznacza przez
1.
operatory relacyjne:
==
!=
<
>
<=
>=
równe
ró ne
mniejsze
wi ksze
mniejsze lub równe
wi ksze lub równe
Przykład 2.1
int a=3,b=4, jest;
jest=a+1>b*(a+4); // jest=?
jest=a!=b/2;
// jest=?
operatory logiczne:
&& koniunkcja (AND)
|| alternatywa (OR)
! negacja (NOT)
1
J. Koszelew
tabelki operatorów logicznych:
&&
1
0
1
1
0
0
0
0
||
1
0
1
1
1
!
1
0
0
1
Przykład 2.2
int a=3,b=4, jest;
jest=a+1>b*(a+4) && b+1!=a; // jest=?
jest=!(a!=b/2 || a>0);
// jest=?
2. Operatory przypisania
operatory przypisania
=
zwykłe przypisanie
x = 2;
+=
przypisanie sumy
x+=2;
// x = x + 2;
−=
przypisanie ró nicy
x−=2;
// x = x − 2;
∗=
przypisanie iloczynu
x∗=2;
// x = x ∗ 2;
/=
przypisanie ilorazu
x /=2;
// x = x / 2;
%=
przypisanie reszty
x%=2; // x = x % 2;
operatory inkrementacji i dekrementacji
zmienna++
inkrementacja zmiennej po wyliczeniu wyra enia
++zmienna
inkrementacja zmiennej przed wyliczeniem wyra enia
zmienna−
−−
dekrementacja zmiennej po wyliczeniu wyra enia
− −zmienna
dekrementacja zmiennej przed wyliczeniem wyra enia
2
J. Koszelew
Przykład 2.3
int x,y=1;
x=++y; // x=2, y=2
x=y++; // x=1,y=2
Priorytety poznanych operatorów
Operator
!
−
++
−−
∗
/
%
+
−
<
<=
>
>=
==
!=
=
∗= /=
−=
Opis
%=
+=
negacja logiczna
zmiana znaku (negacja)
inkrementacja (zwi kszenie o 1)
dekrementacja (zmiejszenie o 1)
mno enie
dzielenie
operacja modulo (reszta z dzielenia)
dodawanie
odejmowanie
mniejszy ni
mniejszy lub równy
wiekszy ni
wiekszy lub równy
równy
nierówny (ró ny od)
przypisanie
przypisania arytmetyczne
3. Instrukcja bloku
• Nawiasy klamrowe s u ywane do grupowania wielu deklaracji i instrukcji
w jedn instrukcj zło on (jeden blok).
• Je eli zmienne programu s deklarowane w zakresie instrukcji bloku (w
nawiasach klamrowych), to „przesłaniaj ” one zmienne o tej samej nazwie
zadeklarowane na zewn trz bloku. Do takich lokalnych zmiennych mo na
si odwoływa wył cznie w zakresie bloku, w którym s zadeklarowane.
3
J. Koszelew
Przykład 2.4
#include <stdio.h>
int main( )
{
int a = 10, b = 20 ;
{
int a = 30 ;
// „przesłoni cie”’ poprzedniej definicji a
printf( ”A = %d, B = %d \n” , a , b );
// Ekran:
A=30, B=20
}
printf( ”A = %d, B = %d \n” , a , b );
// Ekran:
A=10, B=20
return 0;
}
4. Instrukcja warunkowa
a) wariant bez „else”
if ( wyra enie ) instrukcja ;
Je eli wyra enie ma warto ró n od zera, to wykona si instrukcja (blok
instrukcji). Je eli wyra enie ma warto
równ zero, to instrukcja (blok
instrukcji) nie wykona si .
0
wyra enie
≠0
instrukcja
4
J. Koszelew
Przykład 2.5
Program sprawdza czy podana przez u ytkownika liczba jest dodatnia, równa zero
lub ujemna
#include <stdio.h>
int main( )
{ int a;
printf( ”Podaj liczbe dodatnia: ” );
scanf( ”%d” , &a );
if ( a > 0 ) printf(“Liczba jest rzeczywiscie dodatnia”) ;
if ( a = = 0 ) printf( ”Podales zero !!! ” );
if ( a < 0 ) printf( ”Podales liczbe ujemna !!! ” );
return 0;
}
b) wariant z „else”
if ( wyra enie ) instrukcja_1 ; else instrukcja_2;
Je eli wyra enie ma warto
(blok instrukcji).
Je eli wyra enie ma warto
instrukcji).
ró n
od zera, to wykona si
instrukcja _1
równ zero, to wykona si instrukcja_2 (blok
0
wyra enie
≠0
instrukcja1
instrukcja2
5
J. Koszelew
Przykład 2.6
Program sprawdza, czy podana przez u ytkownika liczba jest dodatnia
#include <stdio.h>
int main( )
{ int a;
printf( ”Podaj liczbe dodatnia: ” );
scanf( ”%d” , &a );
if ( a > 0 ) printf(“Liczba jest rzeczywiscie dodatnia”) ;
else printf(“Ta liczba wcale nie jest dodatnia”)
return 0;
}
c) Konstrukcja “else-if”:
Przykład 2.7
if ( wyra enie_1 ) instrukcja_1;
else
if ( wyra enie_2 ) instrukcja_2;
else if ( wyra enie_3 )
instrukcja_3;
else instrukcja_4;
Program sprawdza czy podana przez u ytkownika liczba jest dodatnia, równa zero
lub ujemna
#include <stdio.h>
int main( )
{
int a;
printf( ”Podaj liczbe dodatnia: ” );
scanf( ”%d” , &a );
if ( a > 0 ) printf(“Liczba jest rzeczywiscie dodatnia”) ;
else if ( a = = 0 ) printf( ”Podales zero !!! ” );
else printf( ”Podales liczbe ujemna !!! ” );
6
J. Koszelew
return 0;
}
Przykład 2.8
Program wykonuje mno enie lub dzielenie dwóch liczb. W przypadku dzielenia
sprawdzany jest dzielnik (czy jest ró ny od zera).
#include <stdio.h>
int main( )
{
float a, b, wynik;
printf( "Podaj pierwsza liczbe: " );
scanf( "%f" , &a );
printf( "Podaj druga liczbe: " );
scanf( "%f" , &b );
int odp;
printf („1 – mnozenie, 2- dzielenie: ” );
scanf( "%d" , &odp );
if( odp==1) {
wynik=a*b;
printf("%f * %f = %f\n”,a,b,wynik);
}
else if (odp==2)
if (b!=0) {
wynik=a/b;
7
J. Koszelew
printf("%f / %f = %f\n”,a,b,wynik);
}
else printf („Blad !!! Dzielenie przez zero !!!”)
return 0;
}
5. P tla typu "while"
while (wyra enie) instrukcja;
Dopóki wyra enie ma warto
0
ró n od zera wykonuj instrukcj .
wyra enie
≠0
instrukcja
Przykład 2.9
Program wczytuj cy liczby a do chwili podania warto ci 0 i obliczaj cy sum
wszystkich wprowadzonych liczb – wersja z p tl „while”
#include <stdio.h>
int main( )
{
int x=1,suma=0;
8
J. Koszelew
while (x!=0)
{
printf("Podaj liczbe:");
scanf(„%d”,&x);
suma=suma+x;
};
printf("Suma = %d",suma);
return 0;
}
6. P tla typu „do while”
do instrukcja while (wyra enie);
Wykonuj instrukcj dopóki wyra enie ma warto
ró n od zera.
instrukcja
0
wyra enie
≠0
9
J. Koszelew
Przykład 2.10
Program wczytuj cy liczby a do chwili podania warto ci zero i obliczaj cy sum
wszystkich wprowadzonych liczb – wersja z p tl „do - while”
#include <stdio.h>
int main( )
{
int x,suma=0;
do
{
printf("Podaj liczbe:");
scanf(„%d”,&x);
suma=suma+x;
} while (x!=0);
printf("Suma = %d",suma);
return 0;
}
10
J. Koszelew
7. P tla typu „ for”
for (ustawienia pocz tkowe; warunek kontynuacji; zmiana sterowania)
instrukcja;
ustawienia pocz tkowe
warunek
kontynuacji
0
≠0
instrukcja
zmiana
sterowania
Przykład 2.11
Program wczytuje liczby, a nast pnie sumuje podane liczby. Ilo
u ytkownik
liczb podaje
#include <stdio.h>
int main( )
{
int x, k, suma=0;
printf(”Podaj ilosc liczb:”);
scanf(“%d”,&k);
for (int i=1; i<=k; i++)
{
11
J. Koszelew
printf("Podaj liczbe nr %d : ",i);
scanf(„%d”,&x);
suma=suma+x;
};
printf(”Suma = %d”,suma);
return 0;
}
Przykład 2.12
Program, który „czeka” na klawisz z cyfr , a nast pnie drukuje t cyfr oraz liczb
podanych znaków na ekranie – wersja z p tl „do while”
#include <stdio.h>
int main()
{
int ile=0;
char znak;
do
{
znak=getch();
ile++;
}while (!(znak>='0' && znak<='9'));
printf (”Podany znak : %c\n Uzyto %d znakow”,znak,ile);
return 0;
}
12
J. Koszelew
Przykład 2.13
Program, który „czeka” na klawisz z cyfr , a nast pnie drukuje t cyfr oraz liczb
podanych znaków na ekranie – wersja z p tl „while”
#include <stdio.h>
int main()
{
int ile=0;
char znak=’a’;
while (!(znak>='0' && znak<='9'))
{
znak=getch();
ile++;
};
printf (”Podany znak : %c\nUzyto %d znakow”,znak,ile);
return 0;
}
Przykład 2.14
Program, który „czeka” na klawisz z cyfr , a nast pnie drukuje t cyfr oraz liczb
podanych znaków na ekranie – wersja z p tl „for”
#include <stdio.h>
int main()
{
int ile;
char znak=’a’;
for (ile=0;!(znak>='0' && znak<='9');ile++)
znak=getch();
printf (”Podany znak : %c\nUzyto %d znakow”,znak,ile);
return 0;
}
13