1 / 59

Struktura programu dyrektywy preprocesora

Struktura programu dyrektywy preprocesora deklaracje i definicje globalnych danych i struktur danych deklaracje i definicje funkcji definicja funkcji main. Preprocesor # dyrektywa argumenty Dołączanie plików bibliotecznych : #include

janna
Download Presentation

Struktura programu dyrektywy preprocesora

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Struktura programu • dyrektywy preprocesora • deklaracje i definicje globalnych danych i struktur danych • deklaracje i definicje funkcji • definicja funkcji main

  2. Preprocesor # dyrektywa argumenty Dołączanie plików bibliotecznych :#include #include <stdio.h> #include"funkcje.cpp"

  3. .h .h Pliki źródłowe .cpp .obj .cpp .obj .exe .obj Pliki biblioteczne .obj .h .h Pliki tekstowe Pliki półskompilowane Plik binarny

  4. Zastępowanie tekstów : #define #define ROZMIAR 150 #define moje cena_zakupu – cena_sprzedazy #define EPS 3.5E-8 ........ #undef EPS // usunięcie definicji #define EPS 1.5E-8

  5. Makrogeneracja #define Makro1(x) x = sin(x) + 3 * x; .......................... double akr = 2.544; Makro1(akr) // akr = sin(akr) + 3 * akr; // #define Makro2(x, y) x = x + y - 1; .......................... double alfa = -12.74, beta = 0.21; Makro2(alfa, beta) // alfa = alfa + beta - 1

  6. Kompilacja warunkowa #ifwyrażenie_stałe_1 tekst_źródłowy_1 #elifwyrażenie_stałe_2 tekst_ źródłowy_2 ........................... #else tekst_ źródłowy_n #endif

  7. Test zdefiniowania #definedidentyfikator // 1 : gdy identyfikator był już zdefiniowany // 0 : gdy identyfikator jest nie zdefiniowany #if definedidentyfikator /* równoważne */ #ifdefidentyfikator #if ! definedidentyfikator /* równoważne */ #ifndef identyfikator

  8. #define WersjaProbna // #ifdef WersjaProbna . . . . . . . . . . . . . . . . . . . . #else . . . . . . . . . . . . . . . . . . . . #endif

  9. Polecenia dla kompilatora : #pragma #pragma message "WersjaProbna" // podczas kompilacji #pragma once // jednokrotne dołączenie pliku

  10. Funkcja main void main( void) { ... } void main ( ) { ... } int main ( ) { ..... return 0; }

  11. void main ( intliczba_slow, char *tabela_slow [ ] ) { ... } PROG RAZ DWA TRZY liczba_słów : 4 Param, ConvTest

  12. Struktury danych • Struktura danych określa układ powiązań • występujących w pewnym zestawie danych. • tablice • struktury (unie)

  13. Tablice Ciąg elementów tego samego rodzaju.

  14. Tablice jednowymiarowe typidentyfikator [ rozmiar ] ; typ : liczbowy, znakowy, wskaźnikowy lub typ struktury rozmiar : wyrażenie stałe, o wartości większej od zera ( w gcc wyrażenie całkowitoliczbowe )

  15. int TAB[5]; // 0, 1, 2, 3, 4 TAB const int sumy = 50, iloczyny = 120; float WYNIKI[ 2 * (sumy + iloczyny)]; int i; i = TAB[3]; // TAB + 3 * sizeof int 0 1 2 3 4

  16. WYNIKI[i + 2] = WYNIKI[i] + WYNIKI[i + 1]; // double TAB_DANYCH [ 7 ] ; for (int ix = 0; ix < 12; ++ix ) TAB_DANYCH [ ix ] = 48.74 ; // ?

  17. // wartości początkowe typ identyfikator[rozmiar] = {lista_ wartości}; lista_wartości : wyrażenia stałe long MM[3] = { 154835L, 337782L, 0L }; /* MM[0]==154835, MM[1]== 33782,MM[2]==0 */

  18. const float F1 = 3.5E7F, F2 = 33.E8F; float DANE[ ] = { F1 + F2, F1 / (F1 - F2)}; /* tablica DANE ma 2 elementy */ doublePQ[150] = { 1.5, 3.8, 3.8, 2.7 }; /* PQ[0] == 1.5, PQ[1] == 3.8, PQ[2] == 3.8, PQ[3] == 2.7, pozostałe elementy == 0 */ double Empty[1200] = {0}; // zerowanie

  19. char NN[5] = { "alfa" }; // NN[4] == 0 char MM[4] = { "beta" }; // błąd, tablica// zbyt mała int i = 1, j = 2, k; int *WW[3] = { &i, &j }; WW[2] = & k; *WW[2] = *WW[0] + *WW[1]; // k == 3 char *TYDZIEN[ ] = { "pon", "wto", "śro", "czw", "pią", "sob", "nie" };

  20. Zapisy *TAB i TAB [ 0 ] są równoważne. char bufor[8]; char *pp; pp = bufor; /* przypisania pp = & bufor[0];równoważne */ *( TAB + 4 ) i TAB [ 4 ] są równoważne const int ele = 25; shortTS[ele]; int TI[ele]; double TD[ele]; for (int i = 0; i < ele; ++i ) { *(TS + i) = 1; *(TI + i) = 1; *(TD + i) = 1.0; }

  21. //wczytywanie elementów tablicy jednowymiarowej int TabLicz [ 125 ]; for (inti = 0; i < 125; ++i) scanf("%d", &TabLicz[ i ]); double Rzeczywiste [ 12 ]; for (i = 0; i < 12; ++i) scanf("%lf", &Rzeczywiste[ i ]); long A[5]; int obszar, element, elementow; obszar = sizeof A; // == 20 element = sizeof A[0]; // == 4 elementow = sizeof A / sizeof A[0]; // == 5

  22. rozszerzenia gcc • int dl; • scanf("%d", &dl); • double Tab[ dl ]; // nie można inicjować • int T[5] = { 3, [2]=5,[4]=2}; • for (int i=0;i< 5;++i) • printf("\t%d",T[i]); • // 3 0 5 0 2 Z4-9, TabDemol

  23. Tablice wielowymiarowe float MACIERZ[10][20]; /* 10 wierszy, 20 kolumn */ MACIERZ[nw][nk] const int kwa = 30; long KWADRAT[kwa][kwa]; for (int i = 0; i < kwa; i ++) for (int j = 0; j < kwa; j ++) KWADRAT [ i ] [ j ] = i == j ? 0 : 1; /* główna przekątna zostanie wyzerowana, pozostałe elementy == 1 */

  24. int BB[2][3] = { { 1, 2, 3} , {4, 5, 6} }; /* BB[0][0] == 1, BB[0][1] == 2, BB[0][2] == 3 BB[1][0] == 4, BB[1][1] == 5, BB[1][2] == 6 */ float CC[3][2] = { { 8.5 } , { 3.2 } }; /* CC[0][0] == 8.5, CC[0][1] == 0 CC[1][0] == 3.2, CC[1][1] == 0 CC[2][0] == 0 , CC[2][1] == 0 */ long LL[2][3]; sizeof LL; // 24 sizeof LL[0]; // 12 sizeof LL[0][0]; // 4

  25. // wczytywanie macierzy  wierszami const int Wie = 10, Kol = 5; int MM [ Wie ][ Kol ]; for (int i = 0; i < Wie; ++i) for (int j = 0; j < Kol; ++j) scanf("%d", & MM[ i ][ j ]; // int ile = Wie * Kol, k; int *p = &MM[0][0]; k = 0; while (k++ < ile) scanf("%d", p++);

  26. float TTT[5][10][20]; /* tablica trójwymiarowa składająca się z 5-ciu macierzy o 10 wierszach i 20 kolumnach każda */ for (int mac = 0; mac < 5; mac ++) for (int wie = 0; wie < 10; wie ++) for (int kol = 0; kol < 20; kol ++) TTT[mac][wie][kol] = 1.0F; Z0-23,TopBottom, MatMul, CyBuff, Sort

  27. 0x41 0x42 0x43 0x00 Przetwarzanie tekstów Definiowanie tekstów char *Litery = "ABC";

  28. char *Napis = "Waniki.";// tekst stały *(Napis + 1) = 'y'; // błąd char Tekst[16] = { "Pomołka." }; // kopiowanie tekstu stałego do tablicy Tekst[3] = 'y'; // poprawnie *(Tekst + 3) = 'y'; // poprawnie

  29. Przetwarzanie tekstów char Napis [ 16 ] = "Kopytko."; int i = 0; while( Napis[i] != 0 ) { if ( Napis[i] == 'o') Napis[i] = 'a'; ++i; }

  30. // char *ptr = Napis; while( *ptr != 0 ) { if ( *ptr == 'o') *ptr = 'a'; ++ptr; } Szyfr

  31. Bibliotekastring.h char* strcat( char* Destination, const char* Source ); // Dodaje (konkatenuje) łańcuchy Source // i Destination. Wynik: wskaźnik // łańcucha, do którego dołączany jest tekst char* strncat( char* Dest, const char* Source, size_t Count ); // Analogicznie jak strcat lecz kopiuje // nie więcej niż Count znaków

  32. char* strchr( const char* String, int C ); // Wyszukuje pierwsze wystąpienie znaku C // w łańcuchu String . Wynik: wskaźnik // znalezionego znaku bądź NULL// jeśli nie znaleziono char* strrchr( const char* String, int C ); // Analogicznie jak strstr lecz od końca

  33. char* strpbrk( const char* String, const char* CharSet ); • // Wyszukuje pierwsze wystąpienie jednego// ze znaków z łańcucha CharSet// w łańcuchu String • size_t strlen( const char* String ); • // Oblicza długość łańcucha String

  34. int strcmp( const char* String1, const char* String2 ); • // Porównanie dwóch łańcuchów. Wynik funkcji: • < 0 - String1 mniejszy niż String2 • = 0 - String1 i String2 identyczne • > 0 - String1 większy niż String2 • int strncmp( const char* String1, const char* String2, size_t Count ); • // Analogicznie jak strcmp lecz nie więcej// niż Count znaków

  35. char* strcpy( char* Destination, constchar* Source ); // Kopiuje łańcuch Source do Destination // usuwając poprzednią wartość Destination. // Wynik: wskaźnik łańcucha, do którego // kopiowany jest tekst char* strncpy( char* Dest, const char* Source, size_t Count ); // Analogicznie jak strcpy lecz nie więcej// jak Count znaków Z2-12

  36. Struktury struktura : zestaw pól pole : dana lub struktura danych structtyp_struktury { lista_pól } lista_identyfikatorów ; struct { intszerokosc; int dokladnosc; char konwersja; } wzorzec; struct { float re; float im; } z0, z1, z2;

  37. struct osoba { char *imie; char *nazwisko; int rok_urodzenia; }; struct osoba Ala, Ola, Ela; structadres { char miejscowosc[16]; char ulica[32]; int dom; int mieszkanie; }; adres AAla, AOla, AEla;

  38. Ala "Alicja" imie nazwisko rok_ur "Nowak" 1990 AAla miejscowosc ulica nr_domu nr_mieszkania "Koło" 16 32 "Mała" 5 11

  39. struct silnik { float pojemnosc; char *paliwo; }; struct samochod { struct { char *producent; char *model; } marka; silnik naped; };

  40. struct S1 { int i; float f; } es1; struct S2 { int i; long l; } es2; struct S1 *wst1; S2 *wst2;

  41. wst1 = &es1; wst2 = &es2; wst1 = &es2; // błąd, // nieodpowiedni typ struktury wst2 = wst1; // błąd, // nieodpowiedni typ wskaźnika struct AZ { char z1; char z2; int lz; } p1 = { 'a', 'b', 37 }, p2 = { 'x', 'y', 35 }; AZ p3 = { 'k', 'l', 36 };

  42. Dostęp do pól : identyfikator . referencja . wskaźnik -> struct podpis { char *Imie; char Inicjal; char *Nazwisko; }; podpis st, *wst = &st ; st . Imie = "Andrzej" ; wst->Inicjal = 'K' ;

  43. Przypisanie struktur podpis AK = {"Anna", 'M', "Kowalska"}, NN; NN = AK ; // gdy typy równe // NN . Imie = AK . Imie ; // NN . Inicjal = AK . Inicjal ; // NN . Nazwisko = AK . Nazwisko ; // AK.Imie i NN.Imie wskazują // ten sam tekst stały // AK.Nazwisko i NN.Nazwisko wskazują // ten sam tekst stały

  44. char PiekneImie[20] = { "Teofil" }; AK.Imie = PiekneImie; NN = AK; // kopiowanie tablicy AK.Imie[0] = 'M'; printf("%s, %s", AK.Imie, NN.Imie); // Meofil, Teofil

  45. int T1[3], T2[3] = { 1, 2, 3 }; T1 = T2; // błąd // struct TT { int T[3]; }; TT T1, T2 = { { 1 , 2, 3} }; T1 = T2; // poprawnie // ale int a = T1.T[1];

  46. Tablice struktur struct kartoteka { char nazwa [ 16 ] ; int liczba ; } komputery [ 100 ] ; kartoteka drukarki [ 100 ] ;

  47. int ile_k = 0, ile_d = 0; for ( int i = 0 ; i < 100 ; ++i ) { ile_k += komputery [ i ] . liczba ; ile_d += drukarki [ i ] . liczba ; }

  48. structzakres { float poczatek; float koniec; } fm; sizeof fm; // == 8 sizeof(zakres); // == 8 typedef struct { int p1; float p2; } wynik; wynik w1, w2, w3; EwTel

  49. Listy struct lista { char etykieta[8]; struct lista *poprzedni; struct lista *nastepny; } E0 = { "AA", NULL, NULL }; lista E1 = { "BB" }, E2 = { "CC", NULL, NULL }; E0.nastepny = &E1; E1.nastepny = &E2; E2.poprzedni = &E1; E1.poprzedni = &E0; RevList, CyBuff

  50. Unie Wszystkie pola w tym samym obszarze pamięci.

More Related