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
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.
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
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().
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
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;
#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
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);
fclose(out);
getch();
return 0;
}
przykład
// 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