background image

C/C++

Biblioteki funkcji standardowych

stdio.h – funkcje printf() i scanf()

math.h – funkcje matematyczne
stdlib.h - funkcje matematyczne i konwersji
ctype.h – konwersja znaków
conio.h – obsługa ekranu
string.h – obsługa ła
ńcuchów znaków
stdio.h – obsługa plików

background image

C/C++ - funkcje standardowe

W języku C/C++ dostępne są funkcje standardowe pozwalające na  
realizację operacji: matematycznych, wejścia/wyjścia, na znakach, na 
łańcuchach znaków, obsługi zegara , czasu i daty.

Ponad to w języku C++ dostępne są tzw. klasy standardowe, 
pozwalające na sprawniejsze operowanie na łańcuchach znaków, 
tablicach (zmiana rozmiaru) itp.

W programie moŜna wykorzystać funkcje standardowe po uprzednim 
włączeniu dyrektywą #include pliku nagłówkowego w którym 
znajduje się prototyp funkcji. Pliki nagłówkowe posiadają 
zwyczajowe rozszerzenie .h. Funkcje z poszczególnych grup posiadają 
prototypy w tym samym pliku nagłówkowym.

background image

C/C++ - funkcje standardowe 

wybrane pliki nagłówkowe

ANSI C

funkcje obsługi ekranu i klawiatury

conio.h

C++

definicje klas umoŜliwiających realizację 
operacji we/wy na plikach

fstream.h

C++

definicje manipulatorów we/wy

iomanip

C++

definicje klas umoŜliwiających realizację 
operacji we/wy

iostream.h

ANSI C

funkcje związane z krajem

local.h

ANSI C

definicje kodów błędów

errno.h

ANSI C

działania na znakach

ctype.h

ANSI C

definicje stałych

stddef.h

ANSI C

systemowe funkcje czasu

time.h

ANSI C

działania na łańcuchach znaków

string.h

ANSI C

funkcje matematyczne i konwersji

stdlib.h

ANSI C

standardowe we/wy 

stdio.h

ANSI C

funkcje matematyczne

math.h

Standard

Opis

Nazwa pliku

background image

C/C++ - funkcje standardowe – printf(), scanf()

stdio.h

Funkcje printf() oraz scanf() realizują operacje formatowanego wejścia/ 
wyjścia na wbudowanych typach danych. Termin „formatowane” oznacza, 
Ŝ

e umoŜliwiają wyświetlanie i wczytywanie danych w róŜnych, określonych 

przez programistę formatach.

printf() – wyprowadzanie danych na ekran (standardowe wyjście).

prototyp:
int printf( const char *lan_formatuparametr1,parametr2, ...);

Pierwszy argument funkcji  jest łańcuchem określającym sposób wyświetlania 
pozostałych argumentów (ich typ i format).Funkcja zwraca liczbę wyświetlonych 
znaków.

Przykład

printf(”Znak %c zajmuje %d bajt w pami

ę

ci %s”,’a’,1,”!!!”);

Na ekran zostanie wyprowadzony napis: Znak a zajmuje 1 bajt w pamięci !!!
W łąńcuchu formatującym w miejsce specyfikatorów formatu %c %d %s wstawione
zostaną wartości parametrów z listy ( w kolejności występowania).

background image

C/C++ - funkcje standardowe – printf(), scanf()

stdio.h

Specyfikatory formatu funkcji printf():

%c

- znak;

%s 

- łańcuch znaków;

%d

- liczba całkowita ze znakiem w systemie dziesiętnym;

%u

- liczba całkowita bez znaku w systemie dziesiętnym;

%f

- liczba zmiennoprzecinkowa z kropką;

%Lf

- liczba zmiennoprzecinkowa typu double;

%e

- liczba zmiennoprzecinkowa w zapisie wykładniczym;

%Le

- liczba zmiennoprzecinkowa w zapisie wykładniczym typu long double;

%g

- krótszy z formatów %f i %e;

%o

- liczba w systemie ósemkowym;

%x

- liczba w systemie szesnastkowym;

%%

- znak %.

background image

C/C++ - funkcje standardowe – printf(), scanf()

stdio.h

printf()

Specyfikator minimalnej szerokości pola:
liczba umieszczona pomiędzy znakiem % i literą formatu, oznacza minimalną 
szerokość w znakach jaką będzie zajmować dana. Jeśli dana jest dłuŜsza to zostanie 
wyświetlona w całości.
Przykład

int x=23;

printf(”%6d”,x); 

// wyświetlenie wartości zmiennej x na polu o szerokości 6 znaków

.

Specyfikator dokładności :
w postaci kropki i liczby umieszczonej za specyfikatorem minimalnej szerokości pola 
określa dla liczb zmiennoprzecinkowych liczbę pozycji po kropce dziesiętnej jakie 
mają być wyświetlone.
Przykład

float x=2.2345;

printf(”%6.3f”,x); 

// wyświetlenie wartości zmiennej x na polu o szerokości 6 znaków z precyzją 3 cyfr po 
przecinku.

background image

C/C++ - funkcje standardowe – printf(), scanf()

stdio.h

scanf() – wczytanie danych z klawiatury (standardowe wejście).

prototyp:
int scanf( const char *lan_formatu, &zmienna1,&zmienna2, ...);

Pierwszy argument funkcji  jest łańcuchem określającym sposób wczytywania 
wartości do zmiennych wymienionych w liście argumentów. Do funkcji scanf() 
przekazywane są adresy zmiennych.

Przykład

char ch;

int x;

scanf(”%c%d”,&ch,&x);

Wczytane dane, odseparowane spacjami, zostaną wprowadzone do zmiennych: 
znakowej i zmiennej typu int. 

background image

C/C++ - funkcje standardowe – printf(), scanf()

stdio.h

Specyfikatory formatu funkcji scanf():

%c

- znak;

%s 

- łańcuch znaków;

%d

- liczba całkowita ze znakiem w systemie dziesiętnym;

%u

- liczba całkowita bez znaku w systemie dziesiętnym;

%f

- liczba zmiennoprzecinkowa z kropką;

%Lf

- liczba zmiennoprzecinkowa typu double;

background image

C/C++ - funkcje standardowe – printf(), scanf()

Przykład

#include <stdio.h>

main ()

{     char tch[60];

int i;

float x,y;

printf("podaj liczb

ę

ca

ł

kowit

ą

: ");

scanf("%d",&i);

printf("\npodales %10d ",i);

printf("\npodaj dwie liczby rzeczywiste separator - spacja: ");

scanf("%f%f",&x,&y);

printf("\npodales %5.2f i %5.2f ",x,y);

printf("\npodaj lancuch znakow: ");

scanf("%s",tch);

printf("\npodales %s ",tch);

return 0;

}

przykład

background image

C/C++ - funkcje standardowe - matematyczne

math.h

double sin(double x);

- sinus kąta (w radianach)

double cos(double x);

- cosinus kąta (w radianach)

double tan(double x);

- tangens kąta (w radianach)

double asin(double x);

- arcus sinus

double acos(double x);

- arcus cosinus

double atan(double x) ;

- arcus tangens

double sinh(double x);

- sinus hiperboliczny

double cosh(double x);

- cosinus hiperboliczny

double tanh(double x);

- tangens hiperboliczny

double exp(double x);

- e do potęgi x

double sqrt(double x);

- pierwiastek kwadratowy

double pow(double x, double y);

do potęgi y

double log(double x);

- logarytm naturalny

double log10(double x);

- logarytm dziesietny

double floor(double x);

- największa liczba całkowita mniejsza od x

double ceil(double x);

- najmniejsza liczba całkowita większa od x

background image

C/C++ - funkcje standardowe - matematyczne

math.h

double fabs(double x);

- wartość bezwzględna

double cabs(struct complex  z);

- moduł liczby zespolonej

struktura struct complex jest zdefiniowana następująco:

struct complex {

double x;

double y;

};

double fmod(double x, double y);

- reszta z dzielenia x/y

double modf(double x, double *i);    - rozkład na część całkowitą i 

ułamek , część całkowita jest zwracana przez funkcję, a 
ułamek przez zmienna wskazywaną przez i

double hypot(double x,double y);

- pierwiastek z sumy kwadratów 

liczb 

background image

C/C++ - funkcje standardowe – matematyczne i 

konwersji 

stdlib.h

int abs(int x);

- wartość bezwzględna

div_t div(int licznik, int mianownik);  - wynik i reszta z dzielenia 

całkowitego, wynik w zmiennej typu div_t będącego strukturą 
o polach :

int quot;

int rem;

max(x,y) - makro, zwraca większą z dwóch liczb, typ dowolny
min(x,y) - makro, zwraca mniejszą z dwóch liczb, typ dowolny
int rand(void); – losuje liczbę pseudolosową z przedziału 

0-RAND_MAX (makro)

void randomize(void) – makro, inicjalizacja generatora liczb 

pseudolosowych, korzysta z funkcji time() 
(time.h)

int random(int zakres)  - makro, zwraca liczbę pseudolosową z zakresu 

0-(zakres-1)

void srand(unsigned seed);  - ustala wartość początkową generatora 

liczb pseudolosowych

background image

C/C++ - funkcje standardowe – matematyczne i 

konwersji 

stdlib.h

int atoi(char *str); - przekształca łańcuch wskazywany przez str 

liczbę typu int,  jeśli łańcuch nie zawiera ciągu 

stanowiącego liczbę funkcja zwraca wartość 0, jeśli łańcuch 
zaczyna  się od poprawnego zapisu liczby to pozostałe znaki 
są pomijane w trakcie konwersji,

funkcje pokrewne: strtol(), strtoul().

double atof(char *str); - przekształca łańcuch wskazywany przez str

w liczbę typu double, łańcuch powinien zawierać 
prawidłową notację liczby zmiennoprzecinkowej (z  kropką 
lub z symbolem „e” lub „E”); jeśli łańcuch nie zawiera 
ciągu stanowiącego liczbę funkcja zwraca wartość 0, jeśli 
łańcuch  zaczyna  się od poprawnego zapisu liczby to 
pozostałe znaki  są pomijane w trakcie konwersji,

funkcje pokrewne: strtod(), strtold().

przykład

przykład

background image

C/C++ - funkcje standardowe – matematyczne i 

konwersji 

stdlib.h

char *itoa(int liczba, char *str, int radix); - przekształca liczbę 

całkowitą  w łańcuch i umieszcza go w tablicy wskazywanej 
przez str,  radix jest podstawą systemu liczenia (od 2 do 36), 
maksymalna długość ciągu znaków – 34,

funkcje pokrewne: ultoa.

char *gcvt(double liczba, int lznakow, char *str); - przekształca 

liczbę zmiennoprzecinkową liczba w łańcuch o długości 
lznakow i umieszcza go w  tablicy wskazywanej przez str

funkcje pokrewne: ecvt(), cvt(). 

background image

C/C++ - funkcje standardowe – działanie na znakach

ctype.h   

int isalnum(int c);

- makro, zwraca wartość róŜną od 0 jeśli znak jest 

literą lub cyfrą

int isalpha(int c); 

- makro, zwraca wartość róŜną od 0 jeśli znak jest 

literą

int isascii(int c); 

- makro, zwraca wartość róŜną od 0 jeśli kod 

znaku naleŜy do zakresu 0 – 0x7F

int isctrl(int c);

- makro, zwraca wartość róŜną od 0 jeśli kod 

znaku naleŜy do zakresu 0x00 - 0x1F 
lub jest równy 0x7F (znak sterujący)

int isdigit(int c); 

- makro, zwraca wartość róŜną od 0 jeśli znak jest 

cyfrą

int isgraph(int c); 

- makro, zwraca wartość róŜną od 0 jeśli znak jest 

znakiem drukowalnym (0x21 – 0x7e)

int islower(int c); 

- makro, zwraca wartość róŜną od 0 jeśli znak jest 

małą literą

background image

C/C++ - funkcje standardowe – działanie na znakach

ctype.h   

int islower(int c); 

- makro, zwraca wartość róŜną od 0 jeśli znak jest 

małą literą

int isupper(int c); 

- makro, zwraca wartość róŜną od 0 jeśli znak jest 

wielką literą

int isspace(int c); 

- makro, zwraca wartość róŜną od 0 jeśli znak jest 

spacją , tabulatorem HT, VT, znakiem 
powrotu karetki CR, znakiem nowego wiersza LF

int ispunct(int c); 

- makro, zwraca wartość róŜną od 0 jeśli znak jest 

spacją lub znakiem interpunkcyjnym

int isxdigit(int c);    - makro, zwraca wartość róŜną od 0 jeśli znak jest 

cyfrą szesnastkową

int tolower(int c);    - zwraca małą literę jeśli argument jest wielką 

literą, w innym przypadku zwracana jest wartość 
argumentu

int toupper(int c); - zwraca wielką literę jeśli argument jest małą 

literą, w innym przypadku zwracana jest wartość 
argumentu

background image

C/C++ - funkcje standardowe – obsługa ekranu i 

klawiatury

conio.h   

int getch(void);

- wczytanie znaku z klawiatury (z bufora)

int getche(void) ;

- wczytanie z echem (wczytanie i 

wyświetlenie na ekranie)

int putch(int c);

- wyświetlenie znaku, jeśli działanie funkcji się 

powiodło, zwraca kod wyświetlonego 
znaku, w przeciwnym przypadku wartość EOF

int wherex(void);

- odczytanie współrzędnej x pozycji 

kursora

int wherey(void);

- odczytanie współrzędnej y pozycji 

kursora

void gotoxy(int x, int y);

- ustawienie pozycji kursora w 
punkcie (x,y)

void clrscr(void);

- czyszczenie okna

void clreol(void);

- czyszczenie do końca wiersza

void delline(void); - kasowanie linii (tej z kursorem)

background image

C/C++ - funkcje standardowe – obsługa łańcuchów 

znaków

string.h 

łańcuch znaków – tablica znaków zakończona znakiem null  ( \0)

(null-terminated)

gets(char *s)  - wczytuje ciag znaków ze stdin (klawiatury) i zapisuje pod 

adresem s;

strcpy (char *przeznaczenie, char *zrodlo) – kopiowanie łąńcuchów;

strncpy (char *przeznaczenie, char *zrodlo, int n) - kopiuje n znaków;

char *strchr(char *s, int c) - zwraca miejsce pierwszego wystąpienia znaku c 

w ciągu s (null gdy brak);

char *strrchr(char *s, int c)  - zwraca miejsce ostatniego wystąpienia znaku c 

w ciągu s (null gdy brak);

background image

C/C++ - funkcje standardowe – obsługa łańcuchów 

znaków

string.h 

int strcmp(char *s1,char *s2)  - porównanie łańcuchów (na identyczność),

0 jeśli jednakowe;

int strncmp(char *s1,char *s2, int n) – porównanie n pierwszych znaków 

dwóch łańcuchów (na identyczność), 0 jeśli jednakowe;

strcat(char *s1, char *s2)  - łączenie łańcuchów znaków - konkatenacja, 

wynik w s1;

strncat(char *s1, char *s2, int n) - dołączenie n znaków ciagu s2 do ciagu s1;

int strlen(char *s)  - zwraca  długość łańcucha znaków;

background image

#include <stdio.h>

#include <string.h>

#include <iostream>

#include <conio.h>

#define N 3

using namespace std;

main ()

{       struct uczen{

char nazwisko[20],imie[15];

int mat, fiz, chem;

}klasa[N];

char pom[20];

printf("Podaj nazwiska %d osob\n",N);

for (int i=0;i<N;i++){

gets(pom);

strcpy(klasa[i].nazwisko,pom);

}

cout<<"\n\n";

for (int i=0;i<N;i++) cout<<klasa[i].nazwisko<<"\n";

int i=strlen(klasa[1].nazwisko); 

//dlugosc lancucha

cout<<i;

getch();

return(0);

}

C/C++ - funkcje standardowe – obsługa łańcuchów 

znaków  - string.h

przykład

background image

C/C++ - funkcje standardowe – obsługa plików  - stdio.h

FILE *wsk_do _pliku

- deklaracja wskaźnika do pliku (uchwytu);

FILE *fopen(nazwa pliku, tryb otwarcia) - otwarcie pliku;

int fclose(wsk_pliku)   - zamknięcie pliku
inf fcloseall(void) – zamknięcie wszystkich plików poza standardowymi,

Formatowany zapis/odczyt

int fprintf(FILE *wsk_pliku, format, argument ..) - zapis do pliku 

wskazywanego przez wsk_pliku;

int fscanf(FILE *wsk_pliku, format, argument ..) - odczyt z pliku 

wskazywanego przez wsk_pliku;

background image

C/C++ - funkcje standardowe – obsługa plików  - stdio.h

Podstawowe funkcje zapisu/odczytu

int fgetc(FILE *wsk_pliku)  - odczytuje znak z pliku, 

int fputc(int c, FILE *wsk_pliku) - zapisuje znak do pliku, 

int fgets( char *str, int n FILE *wsk_pliku)  - odczytuje łańcuch n-1 znaków 

z pliku,

int fputs(const char *str, FILE *wsk_pliku) - zapisuje łańcuch znaków do 

pliku, 

int getw(int w, FILE *wsk_pliku)  - odczytuje liczbę typu int  z pliku, 

int putw(FILE *wsk_pliku) - zapisuje liczbę typu int do pliku. 

background image

C/C++ - funkcje standardowe – obsługa plików  - stdio.h

Tryby otwarcia plików

b  - plik binarny ,    t  - plik tekstowy

r – otwarcie w trybie tylko do odczytu,
w - otwarcie w trybie tylko do zapisu, jeśli plik istniał to zostanie 

nadpisany,

a - otwarcie w trybie dopisywania (na końcu) , jeśli plik nie istniał to 

zostanie utworzony,

r+ – otwarcie w trybie do modyfikacji (odczyt i zapis),
w+ – otwarcie w trybie do modyfikacji (odczyt i zapis), jeśli plik

istniał zostanie nadpisany,

a+ – otwarcie w trybie do modyfikacji (odczyt i zapis), ustawienie 

wskaźnika na końcu pliku, jeśli plik

nie istniał zostanie 

utworzony.

background image

C/C++ - funkcje standardowe – obsługa plików  - stdio.h

// Operacje na plikach tekstowych

#include <conio.h>

#include <stdio.h>

int main(void)

{

FILE *in, *out;    //deklaracje wska

ź

ników do plików

char ch;

in = fopen("d:\\appl.dos\\TC\\programy\\for.cpp", "rt");

out = fopen("d:\\appl.dos\\TC\\programy\\for1.cpp", "wt");

while (!feof(in)){

// feof() 1-kiedy koniec pliku

ch=fgetc(in);

putch(ch);

fputc(ch,out);

}

fclose(in);

fclose(out);

getch();

return 0;

}

przykład

background image

// Operacje na plikach tekstowych

#include "losowanie.c"

#include <stdio.h>

#include <math.h>

#include <stdlib.h>

#include <conio.h>

int main(void)

{

const int N=20;

FILE  *out;

int wek[N],wek1[N],x;

randomize;

for(int i=0;i<N;i++) wek[i]=random(N);

out = fopen("d:\\appl.dos\\TC\\programy\\dane", "wb");

for(int i=0;i<N;i++) fprintf(out,"%d\n",wek[i]);

fclose(out);

out= fopen("d:\\appl.dos\\TC\\programy\\dane", "rb");

for(int i=0;i<N;i++){

fscanf(out,"%d",&x);

wek1[i]=x;

}

fclose(out);

for(int i=0;i<N;i++) printf("%d ",wek1[i]);

getch();

return 0;

}

przykład