Języki I metody programowania C2



Pobieranie 107,62 Kb.
Data18.03.2018
Rozmiar107,62 Kb.


Wykład 2

Instrukcje if, if-else, switch, operacje wejścia i wyjścia.



Algorytmy wykorzystujące warunki

2.1. Operacje wejścia /wyjścia
printf
Funkcja printf jest zadeklarowana w pliku nagłówkowym . Funkcja wysyła znaki na standardowe wyjście o nazwie stdout.

Podstawowy nagłówek



int printf ( const char *format [, argument, ...]);
format - łańcuch formatujący, zawierający specyfikatory formatu i zwykłe znaki

argument,...- ciąg argumentów


Funkcja wykonuje następujące czynności:

  • otrzymuje wiele argumentów w postaci wyrażeń

  • wykorzystuje do każdego argumentu tzw. specyfikator formatu (pierwszy specyfikator do pierwszego argumentu, drugi do drugiego itd.) np. %i do argumentu typu całkowitego

  • wysyła na wyjście (stdout) np. ekran zawartość łańcucha formatującego

  • w przypadku błędu zwraca znak EOF



Uwagi:

Specyfikator formatu
% [flags] [width] [.prec] [F|N|h|l|L] type_char
type_char obligatoryjny znak konwersji

dla liczb całkowitych i wskaźnika

%d, % i – całkowita dziesiętna liczba ze znakiem

%o całkowita ósemkowa bez znaku

%u - całkowita dziesiętna bez znaku

%x - całkowita heksadecymalna bez znaku z literami (a, b, c, d, e, f)

%X - całkowita heksadecymalna bez znaku z literami (A, B, C, D, E, F)

dla liczb rzeczywistych

%f – rzeczywista: format [-] dddd.dddd

%e, %E – rzeczywista: format z wykładnikiem e[+/-]ddd, E[+/-]ddd

%g, %G – wybrany krótszy format: f lub e/E

dla znaków i łańcuchów

%c – pojedynczy

%s – łańcuch, drukuje znaki do znaku kończącego łańcuch –zero

%% - wyprowadza znak %

dla wskaźników

%nwyprowadza tyle znaków, ile podano pod adresem skojarzonym z n

%p - zależnie od modelu pamięci format: XXXX:YYYY lub YYYY


flags opcjonalne

+ wyprowadzana liczba jako tekst zawsze ze znakiem + lub –

spacja – wyprowadzana liczba jako tekst zawiera albo znak – albo spację

# - używany, gdy konwersja argumentu przebiega wg alternatywnej formy (gdy ósemkowa, znak 0 na początku, gdy heksagonalna to na począku 0x lub 0X)

[width] opcjonalne – minimalna liczba znaków do wyprowadzenia tekstu uzupełniana spacjami lub zerami

n - uzupełnianie spacjami do rozmiaru n znaków

0n - uzupełnianie zerami do rozmiaru n znaków

* - przed argumentem związanym z % umieszcza się wyrażenie określające aktualny rozmiar wyprowadzanego tekstu

[.prec] opcjonalne – maksymalna liczba znaków części dziesiętnej

n – liczba cyfr części dziesiętnej

* - przed argumentem związanym z % umieszcza się wyrażenie określające

aktualny rozmiar części dziesiętnej

[F|N|h|l|L] (opcjonalne) wewnętrzny modyfikator rozmiaru

N = near pointer (za wyjątkiem modelu huge)

h = short int

F = far pointer

l = long int, double

L = long double

scanf

Funkcja scanf jest zadeklarowana w pliku nagłówkowym . Funkcja pobiera znaki ze standardowego wejścia stdin np. z klawiatury


Podstawowy nagłówek

int scanf ( const char *format [, address, ...]);
format - łańcuch formatujący, zawierający specyfikatory formatu i zwykłe znaki

address,...- ciąg adresów argumentów


Funkcja wykonuje następujące czynności:

  • otrzymuje wiele argumentów, które pobiera znak po znaku z wejścia stdin np. z klawiatury

  • wykorzystuje do każdego argumentu tzw. specyfikator formatu (pierwszy specyfikator do pierwszego argumentu, drugi do drugiego itd.) np. %i do adresu argumentu typu całkowitego,

  • wysyła daną po konwersji, zgodną ze specyfikatorem formatu, pod związany z nią adres

  • funkcja zwraca liczbę poprawnie pobranych danych, poddanych konwersji i wysłanych pod wskazany adres – różna liczba specyfikatorów i wynik scanf oznacza błąd

  • zwraca znak EOF, jeśli nie ma danych (naciśnięto np. F6)



Uwagi:

  • musi być tyle adresów argumentów, ile jest specyfikatorów, dopasowanych do typu danej

  • jeśli istnieje więcej argumentów niż specyfikatorów, są one ignorowane

  • ciąg znaków jest czytany do białych znaków (np. spacji)

Specyfikator formatu
% [*] [width] [F|N] [h|l|L] type_char
type_char znak specyfikatora konwersji

%d, %i  liczba dziesiętna ze znakiem

%uliczba dziesiętna bez znaku

%x  liczba w kodzie szesnastkowym (bez znaku)

%o  liczba w kodzie ósemkowym (bez znaku)

%f , %e, %g  liczba zmiennoprzecinkowa

%c  pojedynczy znak

%s  łańcuch znaków


[*] opcjonalne – pomija się wynik konwersji wprowadzonego łańcucha
[with] opcjonalne – ogranicza się liczbę czytanych znaków
[F|N] opcjonalne – modyfikator rozmiaru wskaźnika

F – far , N – near


[h|l|L] opcjonalne – modyfikator typu argumentu

h = short int (d, u, x , o)

l = long int (d, u, x , o)

l = double (f, e, g)

L = long double (f, e, g)
Ograniczniki pól konwersji wejściowych

C – jeden znak

[...] – znak spoza zestawu znaków podanych

[^...] – znak z zestawu

i, d, o, u, x, e, f, g, s, p - znak biały, znak, który nie pasuje do pola

n - nie posiada pola znakowego, lecz przechowa liczbę znaków

wprowadzonych znaków z klawiatury

Przykład –printf i scanf


#include

#include

void main()

{ long double ld;



float f;

long l;

char tab1[80], tab2[80], tab3[80];



int ile, i, j;

clrscr();

scanf("%Lf",&ld);

printf("%Lf\n",ld);

scanf("%li",&l);

printf("%li\n",l);

scanf("%f",&f);

printf("%.2f\n",f);

scanf("%f",&f);

printf("%10.2f\n",f);

scanf("%f%i",&f,&i);

printf("%.*f\n",i,f);

scanf("%f%i%i",&f,&i,&j);

printf("%*.*f\n",j,i,f);

fflush(stdin);

scanf ("%[^\n\r]", tab1);

printf ("%s\n",tab1);

fflush(stdin);

scanf ("%[0123456789]",tab2);

printf ("%s\n",tab2);

fflush(stdin);

scanf("%[^\n\r]%n",tab3,&ile);

printf ("%s %i\n",tab3,ile);

fflush(stdin);


getch();

}


Instrukcje wyboru if, if else
if ( ) ;
if ( ) ;

else ;
#include

#include

void main()

{

char znak;

printf("\nPodaj znak: ");

znak = getch();



if ( znak == 27 )

printf("\nPodałeś ESC.");

}

#include

#include

void main()

{

char znak;

printf("\nPodaj znak: ");

znak = getch();



if ( znak == 27 )

printf("\nPodałeś ESC.");



else

printf("\nNie podałeś ESC.");

}

#include

#include

void main()

{

int a, blad;

blad= scanf("%i",&a);

if (blad !=1)

printf("Blad wprowadzania danych"); //jesli wprowadzono znaki liter



else

printf ("%i\n",a); //jesli wprowadzono znaki cyfr

getch();

}

#include



void main()

{

int wzrost;

printf("\nPodaj wzrost: ");

scanf("%d", &wzrost);



if ( wzrost < 180 )

if ( wzrost > 175 )

printf("Wysoki!\n");



else

printf("Może być niski!\n");

}

#include

void main(void)

{

int wzrost;

printf("\nPodaj wzrost: ");

scanf("%d", &wzrost);



if ( wzrost < 180 )

{

if ( wzrost > 175 )

printf("Wysoki!\n");

}

else

printf("Jest z pewnością wysoki!\n");

}

#include



void main()

{

int wzrost;

printf("\nPodaj wzrost: ");

scanf("%d", &wzrost);



if ( wzrost < 180 )

if ( wzrost > 175 )

printf("Wysoki!\n");



else

printf("Może byc niski!\n");



else

printf("Jest z pewnością wysoki!\n");

}
Instrukcja wyboru
switch ( )

case :

default :

Przykład
switch (operator) {



case ’*’: x *= y; break;

case ’/’: x /= y; break;

case ’+’: x += y; break;

case ’-’: x -= y; break;

case ’p’: ++x;

case ’t’: x++; break;

case ’e’:

case ’r’:

case ’m’: printf("Tych dzialan kalkulator nie wykona\n"); break;

default: printf("Pomyłka!\n");

}

#include



#include

void main()

{

float a=1.0, b=1.0;



char op;

printf("\n\nPodaj argument pierwszy, operator, argument drugi\n");

scanf("%f %c %f", &a, &op, &b);

switch ( op )

{

case '+':

printf(" = %f", a + b); break;

case '-':

printf(" = %f", a - b); break;



case '*':

printf(" = %f", a * b); break;



case '/':

printf(" = %f", a / b); break;



default:

printf(" Zly operator");

} // koniec switch

} // koniec main




Autor: Zofia Kruczkiewicz, Języki i metody programowania C2, wykład 2




©operacji.org 2017
wyślij wiadomość

    Strona główna