Wykład

Transkrypt

Wykład
Temat 2: Operacje wejścia / wyjścia - funkcje scanf i printf.
Instrukcja bloku, warunkowa i wyboru.
1. Operacje wejścia / wyjścia - funkcje scanf i printf.
a) Funkcja printf
wysyła sformatowane dane (liczby znaki, napisy) na ekran tekstowy
printf ( łańcuch_formatujący , argument_1 , argument_2 , . . . ) ;
łańcuch formatujący
jest to napis zawierający:
− znaki drukowane na ekranie tekstowym,
− kody formatujące kolejnych argumentów:
kody formatujące
%c
%s
%d
%f
−
−
−
−
%e
%g
−
−
%u −
%x −
%o −
l −
l −
L −
pojedynczy znak
napis
liczba całkowita ze znakiem
liczba rzeczywista (notacja dziesiętna), standardowo 6
miejsc po kropce
liczba rzeczywista (notacja wykładnicza)
liczba rzeczywista (krótszy z formatów %f %e), nie są
drukowane nieznaczące zera
liczba całkowita bez znaku
liczba w kodzie szesnastkowym (bez znaku)
liczba w kodzie ósemkowym (bez znaku)
przedrostek (long) stosowany przed: d u x o
przedrostek stosowany przed: f e (double)
przedrostek stosowany przed: f e (long double)
Przykład 1
#include <stdio.h>
int main( )
{
int x = 10;
long y = 20;
double s;
s = x + y;
printf ( ”%s obliczen %d + %ld = %f” , ”Wynik” , x , y , s );
1
return 0;
}
Ekran: Wynik obliczen 10 + 20 = 30.000000
Aby określić liczbę drukowanych cyfr do kodu formatującego należy dodać
kody długości: %Xd %X.Xf
Przykład 2
%4d
− liczba całkowita zajmie 4 pozycje
%10f
− liczba rzeczywista zajmie 10 pozycji
%10.2f
− liczba rzeczywista zajmie 10 pozycji i zostanie
wydrukowana z 2 cyframi po kropce
%.3f
− liczba rzeczywista z dokladnoscią do 3 cyfr po
kropce
Jeżeli ilość znaczących cyfr po kropce jest większa niż ilość cyfr po kropce w
kodzie formatującym, to liczba jest drukowana z zaokrągleniem do ilości cyfr
określone w kodzie. Jeżeli ilość pozcji, na której jest drukowana liczba jest
większa od ilości pozycji w kodzie formatującym, to przed pierwszą cyfrą
drukowane są uzupełniające spacje.
float x=12.456;
printf(“%15.2f”,x);
Ekran:
12.46
a) Funkcja scanf
odczytuje znaki ze standardowego strumienia wejściowego (klawiatury), do
pierwszego wystąpienia białego znaku, zamienia wczytany ciąg znaków na
dane zgodnie z łańcuchem formatującym i zapamiętuje je pod zadanymi
adresami pamięci
scanf ( łańcuch_formatujący , adres_1 , adres_2 , . . . ) ;
łańuch formatujący - jest to napis określający sposób zamiany wczytanego
ciągu znaków na dane okreslonego formatu
kody formatujące:
%c
%s
%d
%f lub %e
%u
−
−
−
−
−
pojedynczy znak
łańcuch znaków
liczba całkowita ze znakiem
liczba rzeczywista
liczba całkowita bez znaku
2
%x
%o
l
l
L
−
−
−
−
−
liczba w kodzie szesnastkowym (bez znaku)
liczba w kodzie ósemkowym (bez znaku)
przedrostek stosowany przed: d u x o (long int)
przedrostek stosowany przed: f e (double)
przedrostek stosowany przed: f e (long double)
& − operator adresowania (zwraca adres zmiennej podanej po operatorze)
Przykład 3
#include <stdio.h>
int main( )
{
int x;
double y;
char znak;
printf( ”Podaj jedna liczbe calkowita: ” );
scanf ( ”%d” , &x );
printf( ”Podaj jedna liczbe rzeczywista i jeden znak: ”);
scanf ( ”%lf %c” , &y , &znak );
return 0;
}
Ekran:
Podaj jedna liczbe calkowita: 123 ↵
Podaj jedna liczbe rzeczywista i jeden znak: 456.789 a ↵
(
x
=
123,
y
=
456.789,
znak
==
’a’
)
3
2. 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.
Przykład 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
3. 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
warunek
≠0
instrukcja
Przykład 5
#include <stdio.h>
int main( )
{ int a;
printf( ”Podaj liczbe dodatnia: ” );
scanf( ”%d” , &a );
if ( a > 0 ) printf(“Liczba jest rzeczywiscie dodatnia”) ;
5
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ść różną od zera, to wykona się instrukcja _1 (blok
instrukcji).
Jeżeli wyrażenie ma wartość równą zero, to wykona się instrukcja_2 (blok
instrukcji).
0
warunek
≠0
instrukcja1
instrukcja2
Przykład 6
#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;
6
}
7
• c) Konstrukcja “else-if”:
if ( wyrażenie_1 ) instrukcja_1;
else
if ( wyrażenie_2 ) instrukcja_2;
else if ( wyrażenie_3 ) instrukcja_3;
else instrukcja_4;
Przykład 7
#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 !!! ” );
return 0;
}
Przykład 8
Rozwiązanie równania Ax+B=C
#include <stdio.h>
#include <conio.h>
int main( )
{
double a, b, c, x;
printf( "Podaj pierwsza liczbe A= " );
scanf( "%lf" , &a );
printf( "Podaj druga liczbe
B= " );
scanf( "%lf" , &b );
printf( "Podaj trzecia liczbe
C= " );
scanf( "%lf" , &c );
if( a!=0) {
x=(c-b)/a;
printf("Rownanie ma dokladnie jedno rozwiazanie:%.2lf",x);
8
}
else
if (b==c)printf("Kazda liczba spelnia rownanie");
else printf("Brak rozwiazan");
getch();
return 0;
}
4. Instrukcja wyboru
switch ( wyrażenie_całkowite)
{
case wartość_1 : instrukcja_1;[break;]
case wartość_2 : instrukcja_2; [break;]
case wartość_3 : instrukcja_3; [break;]
case wartość_4 : instrukcja_4; [break;]
[break;]
..............................................................
[default :
instrukcja_domyslna;
break;]
};
Przykład 9
#include <stdio.h>
int main( )
{
int liczba;
printf( "Podaj liczbe calkowita: " );
scanf( "%d" , &liczba );
switch( liczba )
{
case 0 : printf( ”Podales zero” ); break;
case -5 :printf( ”Podales minus piec” ); break;
case 7 : printf( ”Podales liczbe siedem” );
break;
case 9 : printf( ”Podales liczbe dziewiec” ); break;
default: printf( "Podales inna liczbe niz: 0, -5, 7, 9 " );
break;
}
return 0;
}
9
Przykład 10
Program „Kalkulator”
#include <stdio.h>
#include <conio.h>
int main( )
{
char znak;
double a, b, wynik;
short byla=1;
printf( "Podaj pierwsza liczbe =" );
scanf( "%lf" , &a );
printf( "Podaj druga liczbe =" );
scanf( "%lf" , &b );
printf( "\n\nWybor operacji:" );
printf( "\n + dodawanie" );
printf( "\n - odejmowanie" );
printf( "\n * mnozenie" );
printf( "\n / dzielenie" );
printf( "\nWybierz znak operacji:\n " );
znak = getch( ); // wczytanie znaku do zmiennej znak
switch( znak )
{
case '+' : wynik = a + b; break;
case '-' : wynik = a - b; break;
case '*' : wynik = a * b; break;
case '/' : if (b!=0) wynik = a / b;
else
{
printf("Dzielenie przez zero");
byla=0;
};
break;
default:
byla=0;
printf( "\n Zly znak operacji" );
break;
}
if (byla==1)
printf("\nWynik obliczen: %.1f %c %.1f =%.2f ",a,znak,b,wynik);
getch( ); return 0;
}
10