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
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.
wybrane pliki nagłówkowe
Nazwa pliku
Opis
Standard
math.h
funkcje matematyczne
ANSI C
stdio.h
standardowe we/wy
ANSI C
stdlib.h
funkcje matematyczne i konwersji
ANSI C
conio.h
funkcje obsługi ekranu i klawiatury
ANSI C
string.h
działania na łańcuchach znaków
ANSI C
time.h
systemowe funkcje czasu
ANSI C
stddef.h
definicje stałych
ANSI C
ctype.h
działania na znakach
ANSI C
errno.h
definicje kodów błędów
ANSI C
local.h
funkcje związane z krajem
ANSI C
iostream.h
definicje klas umożliwiających realizację
C++
operacji we/wy
iomanip
definicje manipulatorów we/wy
C++
fstream.h
definicje klas umożliwiających realizację
C++
operacji we/wy na plikach
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_formatu, parametr1, 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).
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 %.
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.
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.
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;
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
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);
- x 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
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 x i y
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
C/C++ - funkcje standardowe – matematyczne i konwersji
stdlib.h
int atoi(char * str); - przekształca łańcuch wskazywany przez str w 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().
przykład
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
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().
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ą
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
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)
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);
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;
C/C++ - funkcje standardowe – obsługa łańcuchów znaków - string.h
#include <stdio.h>
#include <string.h>
#include <iostream>
przykład
#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 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;
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.
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.
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);
przykład
fclose(out);
getch();
return 0;
}
// Operacje na plikach tekstowych
#include "losowanie.c"
#include <stdio.h>
przykład
#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;
}