Podstawy programowania. Wykład Funkcje raz jeszcze. Biblioteka standardowa. Krzysztof Banaś Podstawy programowania 1

Podobne dokumenty
Pliki. Informacje ogólne. Obsługa plików w języku C

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 12. Karol Tarnowski A-1 p.

Biblioteka standardowa - operacje wejścia/wyjścia

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Programowanie proceduralne INP001210WL rok akademicki 2015/16 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

Pliki. Informacje ogólne. Obsługa plików w języku C

Funkcje zawarte w bibliotece < io.h >

Funkcje zawarte w bibliotece < io.h >

Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

Operacje na plikach. Informatyka. Standardowe strumienie wejścia i wyjścia

Wskaźniki do funkcji. Wykład 11. Podstawy programowania ( język C ) Wskaźniki do funkcji (1) Wskaźniki do funkcji (2)

Funkcja (podprogram) void

Programowanie w językach wysokiego poziomu

INFORMATYKA Studia Niestacjonarne Elektrotechnika

Podstawy programowania. Wykład 6 Wskaźniki. Krzysztof Banaś Podstawy programowania 1

Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1. Kraków 2013

Ćwiczenie 4. Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1.

Wstęp do Programowania, laboratorium 02

Programowanie Proceduralne

۰ Elementem jednostkowym takiego pliku jest bajt. ۰ Format pliku binarnego: [bajty pliku][eof]

Laboratorium Systemów Operacyjnych. Ćwiczenie 4. Operacje na plikach

Języki i metodyka programowania. Typy, operatory, wyrażenia. Wejście i wyjście.

Języki programowania. Karolina Mikulska-Rumińska Pokój 573, tel Konsultacje wtorek 9-10.

PROGRAMOWANIE w C prolog

Formatowane (tekstowe) wejście/wyjście. Binarne wejście/wyjście.

Wykład VI. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

5 Przygotował: mgr inż. Maciej Lasota

7 Przygotował: mgr inż. Maciej Lasota

Ghost in the machine

utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy,

Obsługa plików. Systemy Operacyjne 2 laboratorium. Mateusz Hołenko. 25 września 2011

Stałe i zmienne znakowe. Stała znakowa: znak

3 Przygotował: mgr inż. Maciej Lasota

Podstawy Programowania. Specyfikacja funkcji, operacje wejścia i wyjścia na plikach, rekurencja, tablice i wskaźniki

Strumienie i pliki. Programowanie Proceduralne 1

ISO/ANSI C dostęp do plików ISO/ANSI C. ISO/ANSI C dostęp do plików. ISO/ANSI C dostęp do plików. ISO/ANSI C dostęp do plików

ISO/ANSI C - funkcje. Funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 26 marca kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40

Podstawy programowania. Wykład 3 Konstrukcje sterujące. Krzysztof Banaś Podstawy programowania 1

2 Przygotował: mgr inż. Maciej Lasota

Podstawy programowania. Wykład Pętle. Tablice. Krzysztof Banaś Podstawy programowania 1

Ćwiczenie nr 6. Poprawne deklaracje takich zmiennych tekstowych mogą wyglądać tak:

1. Wprowadzanie danych z klawiatury funkcja scanf

Funkcje. czyli jak programować proceduralne. Programowanie Proceduralne 1

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

ISO/ANSI C dostęp do plików ISO/ANSI C. ISO/ANSI C dostęp do plików. ISO/ANSI C dostęp do plików. ISO/ANSI C dostęp do plików

Program wykonujący operację na plikach powinien zachować schemat działania zapewniający poprawną pracę:

Łącza nienazwane(potoki) Łącza nienazwane mogą być używane tylko pomiędzy procesami ze sobą powiązanymi.

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 9 - sem.iii. Dr inż. M. Czyżak

Tablice, funkcje - wprowadzenie

MATERIAŁY POMOCNICZE PODSTAWY PROGRAMOWANIA Na podstawie: Programowanie w C - Stworzone na Wikibooks, bibliotece wolny podręczników

wykład II uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - funkcje, tablice i wskaźniki wykład II dr Jarosław Mederski Spis

Laboratorium 6: Ciągi znaków. mgr inż. Leszek Ciopiński dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski

Plik jest reprezentowany przez strumień znaków (bajtów) o zmiennej długości. Koniec strumienia identyfikowany jest znacznikiem końca pliku EOF.

Programowanie Procedurale. Pliki w języku C++

Podstawy programowania skrót z wykładów:

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 7- sem.iii. M. Czyżak

Podstawy programowania w języku C++

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

PODSTAW PROGRAMOWANIA WYKŁAD 7 ŁAŃCUCHY

Część 4 życie programu

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 12 - sem.iii. M. Czyżak

Funkcje. czyli jak programować proceduralne. Programowanie Proceduralne 1

Lab 10. Funkcje w argumentach funkcji metoda Newtona. Synonimy nazw typów danych. Struktury. Tablice struktur.

Operacje wejścia/wyjścia odsłona pierwsza

OPERACJE WEJŚCIA / WYJŚCIA. wysyła sformatowane dane do standardowego strumienia wyjściowego (stdout)

main( ) main( void ) main( int argc, char argv[ ] ) int MAX ( int liczba_1, liczba_2, liczba_3 ) źle!

wer. 7 z drobnymi modyfikacjami Wojciech Myszka :48:

Struktury. Przykład W8_1

1 Podstawy c++ w pigułce.

Pliki w C/C++ Przykłady na podstawie materiałów dr T. Jeleniewskiego

Podstawy programowania w języku C++

wykład III uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - zarządzanie pamięcią, struktury,

Laboratorium 3: Tablice, tablice znaków i funkcje operujące na ciągach znaków. dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski

Wstęp. #define include include include include include include

PROE wykład 3 klasa string, przeciążanie funkcji, operatory. dr inż. Jacek Naruniec

WYKŁAD 8. Funkcje i algorytmy rekurencyjne Proste przykłady. Programy: c3_1.c..., c3_6.c. Tomasz Zieliński

Języki i metodyka programowania. Wprowadzenie do języka C

ISO/ANSI C - funkcje. Funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje

1 Podstawy c++ w pigułce.

Języki i paradygmaty programowania 1 studia stacjonarne 2018/19

Co nie powinno być umieszczane w plikach nagłówkowych:

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 2. Karol Tarnowski A-1 p.

Programowanie w języku Python. Grażyna Koba

Programowanie Proceduralne

1. Pierwszy program. Kompilator ignoruje komentarze; zadaniem komentarza jest bowiem wyjaśnienie programu człowiekowi.

Wskaźniki w C. Anna Gogolińska

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 3. Karol Tarnowski A-1 p.

4. Tablica dwuwymiarowa to jednowymiarowa tablica wskaźników do jednowymiarowych tablic danego typu.

Wykład 4. Tablice. Pliki

Podstawy programowania. Wykład 7 Tablice wielowymiarowe, SOA, AOS, itp. Krzysztof Banaś Podstawy programowania 1

Argumenty wywołania programu, operacje na plikach

Wstęp do programowania. Wykład 1

Programowanie w C++ Wykład 11. Katarzyna Grzelak. 21 maja K.Grzelak (Wykład 11) Programowanie w C++ 1 / 24

ISO/ANSI C dostęp do plików ISO/ANSI C. ISO/ANSI C dostęp do plików. ISO/ANSI C dostęp do plików. ISO/ANSI C dostęp do plików

Wskaźniki. Przemysław Gawroński D-10, p marca Wykład 2. (Wykład 2) Wskaźniki 8 marca / 17

Języki programowania. Przetwarzanie plików amorficznych Konwencja języka C. Część siódma. Autorzy Tomasz Xięski Roman Simiński

Język C zajęcia nr 11. Funkcje

Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 10 Kurs C++

Transkrypt:

Podstawy programowania. Wykład Funkcje raz jeszcze. Biblioteka standardowa. Krzysztof Banaś Podstawy programowania 1

Rekurencja W języku C funkcja może wywoływać sama siebie int funkcja_rekur(int nr_wyw){ printf("wywołanie %d\n",nr_wyw); if(nr_wyw>1) return(funkcja_rekur (nr_wyw-1)); } wywołanie takie nazywane jest rekurencją (rzadziej rekursją) wywołania nie mogą trwać w nieskończoność kolejne wywołania powinny zmieniać argumenty wywołania mechanizm tych zmian i przetwarzania w funkcji rekurencyjnej powinien gwarantować zakończenie obliczeń po skończonej liczbie wywołań Znaczenie takiego wywołania jest dobrze opisywane poprzez mechanizm funkcjonowania stosu Wywołania rekurencyjne służą realizacji algorytmów rekurencyjnych Krzysztof Banaś Podstawy programowania 2

Algorytmy rekurencyjne Algorytmy rekurencyjne obliczanie ciągu liczb Fibonacciego: F n = F n 1 + F n 2, (F 0 = 0, F 1 = 1) wyszukiwanie binarne w tablicach posortowanych dopóki tablica ma rozmiar większy od jeden podziel tablicę na pół jeśli środkowy wyraz mniejszy od wyszukiwanego wyszukaj w prawej połowie jeśli środkowy wyraz większy od wyszukiwanego wyszukaj w lewej połowie zwróć właściwy wynik w algorytmach rekurencyjnych istotne są zamiana jednego problemu w jeden lub wiele takich samych problemów dla innych danych wejściowych opracowanie wyniku dla przypadków, kiedy dalsza rekurencja nie jest potrzebna/wskazana/możliwa Krzysztof Banaś Podstawy programowania 3

Sortowanie rekurencyjne Rekurencyjne algorytmy sortowania sortowanie szybkie dopóki rozmiar tablicy jest większy od 1 podziel tablicę na dwie części, tak aby wyrazy w lewej części były mniejsze niż wyrazy w prawej części posortuj lewą część posortuj prawą część sortowanie przez scalanie dopóki rozmiar tablicy jest większy od 1 podziel tablicę na dwie połowy posortuj lewą połowę posortuj prawą połowę scal obie połowy, zachowując posortowanie elementów rekurencyjne algorytmy sortowania należą do najszybszych sortowanie szybkie posiada implementację qsort (quick sort) w bibliotece standardowej Krzysztof Banaś Podstawy programowania 4

Rekurencja Często algorytmy (funkcje) rekurencyjne można przekształcić w iteracyjne, zamieniając sekwencję wywołań w sekwencję iteracji funkcje rekurencyjne często ułatwiają zrozumienie istoty implementowanego algorytmu i umożliwiają zwarty, elegancki zapis kodu z punktu widzenia wydajności rekurencja, wymagająca intensywnej obsługi stosu, może prowadzić do nieefektywnych programów przykład kodu obliczania silni: wersja rekurencyjna: int silnia(int n) { if (n==0) return 1; else return n*silnia(n-1); // return n == 0? 1 : n * silnia(n - 1); } wersja iteracyjna: int silnia(int n) { int s=n; while (--n) s*=n; return s; } Krzysztof Banaś Podstawy programowania 5

Wskaźniki do funkcji W maszynie von Neumanna kod i dane są przechowywane w tej samej adresowalnej pamięci Każda funkcja zapisana w kodzie binarnym jest przechowywana w pewnym obszarze pamięci o określonym adresie W programach C można posługiwać się wskaźnikami do funkcji, zawierającymi adres początku funkcji najczęściej wskaźniki do funkcji wykorzystuje się w roli argumentów przesyłanych do funkcji przykład wywołania: funkcja rysująca wykresy funkcji matematycznych w przedziale (a,b): rysuj_wykres( sinus, a, b); wywołanie zawierające wskaźnik do funkcji jako argument jest proste rolę wskaźnika pełni nazwa funkcji w podanym przykładzie sinus jest gdzieś zdefiniowaną funkcją Krzysztof Banaś Podstawy programowania 6

Wskaźniki do funkcji Deklaracje wskaźników do funkcji: w deklaracji wskaźnika musi zostać zawarta cała informacja o typie funkcji, obejmująca typy argumentów i typ zwracanego wyniku w przykładzie rysowania wykresów deklaracja funkcji rysuj_wykres powinna mieć postać: void rysuj_wykres(double (*funkcja)(double), double a, double b); deklaracją funkcji sinus, wykorzystanej w przykładzie wywołania, zgodną z prototypem funkcji rysuj_wykres jest double sinus (double arg_d); standardowe użycie funkcji sinus ma postać double y = sinus(x); // x jest typu double wewnątrz funkcji rysuj_wykres, która otrzymuje wskaźnik do funkcji, wywołanie przesłanej funkcji ma zawsze tę sama postać double y = (*funkcja)(x); nazwa funkcji sinus (ani żadnej innej) nie pojawia się w funkcji rysuj_wykres (co najwyżej w komentarzach) Krzysztof Banaś Podstawy programowania 7

Wskaźniki do funkcji Deklaracje w C mogą mieć złożony charakter, szczególnie jeśli zawierają wskaźniki do funkcji (przykłady z podręcznika K&R): Krzysztof Banaś Podstawy programowania 8

Argumenty wywołania programu Funkcja main może posiadać argumenty (parametry) wejścia składnia definicji funkcji main jest ściśle określona funkcja main albo nie przyjmuje żadnych argumentów int main(void) { /*... */ } albo przyjmuje je w postaci int main(int argc, char *argv[]) { /*... */ } każdorazowo argv[argc]==null jeśli argc jest większe od zera oznacza to, że środowisko wywołania przekazuje argumenty (parametry) w napisach wskazywanych przez elementy tablicy argv (o długości argc+1)» argv[0] jest zawsze nazwą programu (pliku binarnego) jeśli argc jest większe od jeden oznacza to, że przy wywołaniu podane zostały argumenty wejścia, zamienione następnie przez środowisko wywołania w napisy Krzysztof Banaś Podstawy programowania 9

Argumenty wywołania programu Przykładowy program obsługi parametrów wejścia (argumentów wiersza polecenia wywołania programu) najprostszy wariant wypisanie argumentów (za wyjątkiem nazwy programu): main(int argc, char *argv[]) { int i; for (i = 1; i < argc; i++) printf( " %s", argv[i]); printf ("\n"); return 0; } Obsługa parametrów wejścia jest zależna od programu i polega na wykonywaniu odpowiednich operacji na napisach można do tego wykorzystywać funkcje operujące na napisach zawarte w bibliotece standardowej C Krzysztof Banaś Podstawy programowania 10

Funkcje wplatane (inline) Kompilator napotykając funkcję zdefiniowaną jako inline umieszcza treść tej funkcji tam, gdzie jest ona wywoływana operacja jest nazywana wplataniem lub rozwinięciem w miejscu wywołania oszczędza to w trakcie wykonania narzutu związanego z wywołaniem funkcji (m.in. obsługa stosu) Funkcje wplatane (inline) powinny być stosowane dla funkcji, których treść jest bardzo krótka i które wywoływane są w programie wiele razy Ostateczną decyzję o tym czy funkcja zostanie wpleciona w miejscu wywołania podejmuje kompilator słowo kluczowe inline jest tylko sugestią dla kompilatora Jeśli funkcja jest oznaczona jako inline, to jej definicja musi być dostępna dla kompilatora w trakcie przetwarzania pliku źródłowego naturalnym miejscem na definiowanie funkcji wplatanych wykorzystywanych w wielu plikach źródłowych są pliki nagłówkowe Krzysztof Banaś Podstawy programowania 11

Biblioteka standardowa C Praktycznie każdy język programowania dostarcza zestaw funkcji wspomagających tworzenie kodu zestaw funkcji określany przez specyfikację (standard) języka jest nazywany biblioteką standardową języka niektóre z funkcji są konieczne do pisania programów np. funkcje obsługi wejścia/wyjścia inne ułatwiają pisanie przez rozwiązanie standardowych problemów programistycznych np. funkcje obsługi napisów, funkcje matematyczne Biblioteka standardowa C jest relatywnie mała (w porównaniu z np. rozbudowanymi bibliotekami języków obiektowych) niemniej jednak definiuje kilkaset funkcji, typów danych i makrodefinicji omówienie całej biblioteki standardowej byłoby niezwykle obszerne wiele z definiowanych elementów ma ograniczone zastosowanie Krzysztof Banaś Podstawy programowania 12

Biblioteka standardowa C Pliki nagłówkowe biblioteki standardowej C <assert.h> <complex.h> <ctype.h> <errno.h> <fenv.h> <float.h> <inttypes.h> <iso646.h> <limits.h> <locale.h> <math.h> <setjmp.h> <signal.h> <stdalign.h> <stdarg.h> <stdatomic.h> <stdbool.h> <stddef.h> <stdint.h> <stdio.h> <stdlib.h> <stdnoreturn.h> <string.h> <tgmath.h> <threads.h> <time.h> <uchar.h> <wchar.h> <wctype.h> Krzysztof Banaś Podstawy programowania 13

Biblioteka standardowa C <stdio.h> Najważniejszą grupą funkcji biblioteki standardowej są funkcje obsługi wejścia/wyjścia Urządzeniami wejścia/wyjścia mogą być pliki lub inne elementy traktowane przez język jako strumienie znaków podzielone na linie binarne jako sekwencja znaków (bajtów) końcem strumienia jest zawsze znak końca pliku EOF Standardowa biblioteka wejścia/wyjścia rozróżnia strumienie zawierające standardowe znaki jednobajtowe i znaki z zestawu rozszerzonego (wide characters) do obsługi różnych typów strumieni przeznaczone są różne funkcje omawiamy tylko funkcje obsługi strumieni znaków jednobajtowych większość funkcji posiada swoje odpowiedniki dla strumieni znaków rozszerzonych Krzysztof Banaś Podstawy programowania 14

Biblioteka standardowa C <stdio.h> C posługuje się pojecie standardowego wejścia i standardowego wyjścia (standard input stdin, standard output stdout) najczęściej są nimi klawiatura i ekran terminala wykorzystanie systemowych narzędzi przekierowania strumieni wejścia i wyjścia pozwala na używanie plików w miejsce standardowego wejścia i wyjścia standard definiuje także trzeci domyślny strumień standard error, stderr stderr służy do wypisywania komunikatów diagnostycznych Program w C wiąże strumień wejścia/wyjścia z konkretnym plikiem poprzez operację otwarcia pliku pojedynczy program może jednocześnie posiadać wiele otwartych plików pojedynczy plik może być jednocześnie otwarty przez wiele programów system operacyjny musi zagwarantować sposoby bezpiecznego i poprawnego korzystania z plików w takich sytuacjach połączenie z plikiem ustaje po operacji zamknięcia pliku Krzysztof Banaś Podstawy programowania 15

Biblioteka standardowa C <stdio.h> Podstawowe funkcje obsługi standardowego wejścia i wyjścia: int getchar(void) pobranie pojedynczego znaku z stdin int putchar(int) przesłanie pojedynczego znaku do stdout int printf (char *format, arg1, arg2,...) formatowane wyjście int scanf (char *format, arg1, arg2,... ) formatowane wejście szczegółowe zasady formatowania wejścia/wyjścia za pomocą odpowiedniej składni napisu format można znaleźć w wielu źródłach (standard, podręczniki, źródła internetowe) obie funkcje formatowanego wejścia/wyjścia korzystają z oferowanej przez C możliwości definiowania funkcji o zmiennej liczbie argumentów do obsługi wywołań takich funkcji należy używać makrodefinicji zawartych w pliku nagłówkowym <stdarg.h> istnieją funkcje obsługi pojedynczych linii gets i puts istnieją warianty funkcji printf i scanf do obsługi napisów: sprintf i sscanf napis jest także strumieniem znaków Krzysztof Banaś Podstawy programowania 16

Biblioteka standardowa C <stdio.h> Reprezentacją otwartego pliku w programie C jest wskaźnik do pliku FILE *fp; // makro FILE jest zdefiniowane w <stdio.h> procedury systemowe obsługi plików (open, creat, close, lseek, read, write), które mogą być wykorzystywane w programach C, korzystają z pojęcia deskryptora pliku, reprezentowanego przez liczbę, a nie przez wskaźnik Interfejs obsługi plików: otwarcie i zamknięcie pliku FILE *fopen(const char * restrict name, const char * restrict mode); napis określający tryb interakcji z plikiem może przybierać wartości: "r" otwarcie do odczytu "w" otwarcie do zapisu (utworzenie lub wyzerowanie długości) "a" otwarcie lub utworzenie pliku do zapisu na końcu (append) istnieje szereg innych wariantów (np. dla plików binarnych) int fclose(file *fp) Krzysztof Banaś Podstawy programowania 17

Biblioteka standardowa C <stdio.h> Interfejs obsługi plików: funkcje wejścia/wyjścia dla plików analogiczne jak dla standardowego wejścia i wyjścia int fgetc(file *fp) pobranie znaku z pliku int ungetc(int c, FILE *fp) cofnięcie odczytu znaku z pliku plik nie jest zmieniany, ale kolejne fgetc odczyta zwrócony znak int fputc(int c, FILE *fp) zapis znaku do pliku char *fgets(char *line, int maxline, FILE *fp) odczyt linii z pliku maxline jest rozmiarem tablicy (łącznie z kończącym '\0')» fgets wczytuje co najwyżej maxline 1 znaków int fputs(char *string, FILE *fp) zapis napisu do pliku int fscanf(file *fp, char *format, arg1,...) formatowane wejście int fprintf(file *fp, char *format, arg1,...) formatowane wyjście dla każdej z powyższych funkcji można fp zamienić na stdin, stdout lub stderr Krzysztof Banaś Podstawy programowania 18

Biblioteka standardowa C <stdio.h> Interfejs obsługi plików: wybrane pozostałe funkcje obsługi wejścia/wyjścia dla plików size_t fread(void * ptr, size_t size, size_t nmemb, FILE * stream); odczyt nmemb elementów o rozmiarze size z *stream do *ptr size_t fwrite(const void * ptr, size_t size, size_t nmemb, FILE * stream); zapis nmemb elementów o rozmiarze size z *ptr do *stream int fseek(file *stream, long int offset, int whence); ustawienie pozycji (dla kolejnego odczytu lub zapisu) w pliku *stream w odległości offset od punktu wskazywanego przez whence whence może być określone jako:» SEEK_SET początek pliku» SEEK_CUR aktualna pozycja w pliku» SEEK_END koniec pliku long int ftell(file *stream) dla plików binarnych zwraca liczbę bajtów od początku do obecnej pozycji w pliku Krzysztof Banaś Podstawy programowania 19

Biblioteka standardowa C <stdio.h> Obsługa napisów za pomocą sprintf i sscanf funkcje formatowanego wyjścia i wejścia sprintf i sscanf są analogiczne do funkcji fprintf i fscanf operujących na plikach argumentem zamiast wskaźnika do pliku jest napis int sprintf (char * napis, char *format, arg1, arg2,...) formatowane wyjście funkcji sprintf można użyć do przekształcania danych liczbowych w napisy int sscanf (char * napis, char *format, arg1, arg2,... ) formatowane wejście źródłem danych jest tablica (napis) zwracaną wartością (podobnie jak dla scanf i fscanf) jest liczba wczytanych argumentów argumenty zostają wczytane tylko w przypadku zgodności formatu z danymi wejściowymi (w tablicy dla sscanf, stdin dla scanf i pliku dla fscanf) Krzysztof Banaś Podstawy programowania 20

Biblioteka standardowa C <assert.h> Plik nagłówkowy <assert.h> definiuje makro assert służące do sprawdzania spełnienia warunków w trakcie wykonania programu i podstawowej obsługi błędów Przykład wykorzystania plikowego wejścia/wyjścia i makra assert char napis[100]; FILE *fp = fopen("nazwa_pliku","r"); assert(fp!=null); fgets(napis, 100, fp); printf("przeczytane: %s\n", napis); fclose(fp); W przypadku kiedy plik "nazwa_pliku" nie istnieje w katalogu roboczym, fopen zwraca NULL a makro assert przerywa wykonanie programu (przez wywołanie abort) po wydrukowaniu komunikatu o błędzie, np: zmienne: zmienne.c:192: main: Assertion `fp!=((void *)0)' failed. Sprawdzenie makra assert można wyłączyć przez zdefiniowanie makra NDEBUG (np. przekazując opcję DNDEBUG w trakcie kompilacji) Krzysztof Banaś Podstawy programowania 21

Biblioteka standardowa C <string.h> Podstawowe funkcje obsługi napisów memcpy(void * s1, void * s2, size_t n) - przepisanie n bajtów z s1 do s2 ustalaniu wartości służy funkcja memset(void *s, int c, size_t n); strcat(s,t) dopisanie t na koniec s strncat(s,t,n) to samo dla n pierwszych znaków t strcmp(s,t) porównanie dwóch napisów strncmp(s,t,n) to samo dla n pierwszych znaków strcpy(s,t) skopiowanie t do s strncpy(s,t,n) to samo dla co najwyżej n znaków strlen(s) obliczenie długości napisu (bez \0) funkcje zaznaczone na czerwono mogą być bezpieczne, lepiej używać bezpiecznych wariantów z ograniczeniem liczby znaków na których operuje funkcja niebezpieczeństwo polega na przekroczeniu rozmiaru (przepełnieniu) buforów, w których przechowywane są napisy Krzysztof Banaś Podstawy programowania 22

Biblioteka standardowa C <stdlib.h> Plik nagłówkowy stdlib.h definiuje wiele wspomagających funkcji użytkowych, z których niektóre były już omawiane w trakcie wykładów (i wykorzystywane w trakcie laboratoriów) Przykłady: dynamiczne zarządzanie pamięcią: malloc, calloc, alloc, free (i inne) zamiana napisów na liczby: atoi, atof, strtod, strtof (i inne) generacja liczb losowych: rand, srand funkcja wykonania polecenia systemowego: system (np. system("ls");) sortowanie szybkie i wyszukiwanie binarne: qsort i bsearch wartość bezwzględna dla liczb całkowitych: abs funkcje obsługi przerwania wykonywania programu: abort, exit (i inne) void abort(void) zakończenie "nienormalne" (sygnał SIGABRT) void exit(int status) zakończenie normalne, zwrócenie wartości do środowiska wykonania Krzysztof Banaś Podstawy programowania 23

Biblioteka standardowa C <ctype.h> Operacje na znakach: funkcje sprawdzające znak, zwracające 0 w przypadku odpowiedzi negatywnej: isalpha(c) czy znak jest literą isupper(c) czy znak jest wielką literą islower(c) czy znak jest małą literą isdigit(c) czy znak jest cyfrą isalnum(c) czy znak jest znakiem alfanumerycznym isspace(c) czy znak jest odstępem, znakiem tabulacji, znakiem nowej linii funkcje konwersji znaków: toupper(c) z małej do wielkiej litery tolower(c) z wielkiej do małej litery oraz kilka innych (isblank, iscntrl, isgraph, isprint, ispunct, isxdigit) Krzysztof Banaś Podstawy programowania 24

Biblioteka standardowa C <math.h> Wybrane funkcje matematyczne zawsze argumenty i zwracana wartość są typu double sin(x) sinus cos (x) cosinus atan2(y,x) arcus tangens x/y exp(x) funkcja wykładnicza (exponencjalna) log(x) logarytm naturalny (x> 0) log10(x) funkcja logarytmiczna o podstawie 10 (x> 0) pow(x,y) x y sqrt(x) pierwiastek kwadratowy (x>= 0) fabs(x) wartość bezwzględna funkcje sprawdzania argumentów np isfinite, isnan oraz kilkadziesiąt innych funkcji Krzysztof Banaś Podstawy programowania 25

Biblioteka standardowa C Najważniejsze inne grupy funkcji i makrodefinicji <complex.h> obsługa zmiennych zespolonych <errno.h> obsługa błędów <limits.h> rozmiary zmiennych typu całkowitego <inttypes.h> konwersje miedzy typami całkowitymi <locale.h> funkcje, typy i makra dotyczące lokalizacji <setjmp.h> specjalny powrót z wywołania w przypadku błędu <signal.h> obsługa sygnałów przesyłanych między procesami <stdbool.h> makra do obsługi zmiennych boolowskich <stddef.h> m.in. definicje size_t, ptrdiff_t, NULL <stdint.h> definicje specjalnych typów całkowitych <stdatomic.h>, <threads.h> dla programów wielowątkowych <time.h> obsługa czasu i daty <uchar.h>, <wchar.h> rozszerzone zestawy znaków Krzysztof Banaś Podstawy programowania 26