Instrukcja 3
Transkrypt
Instrukcja 3
Język C, Laboratorium nr 3 Instrukcja laboratoryjna nr 3 1/3 Programowanie w języku C Temat: Pętle, liczby pseudolosowe i obsługa Debuggera GDB Przygotował: dr inż. Grzegorz Łukawski 1) Pętle w języku C 1.1) Pętla „while” Podstawowy rodzaj pętli z warunkiem na początku, instrukcja jest wykonywana tak długo, jak długo warunek jest spełniony. Pętla może nie wykonać się ani razu jeżeli warunek był niespełniony przy pierwszym przejściu: while(warunek) instrukcja; Np. szukanie największej wielokrotności liczby 2 mniejszej lub równej podanej wartości: int szukana = 1; while(szukana*2 < wartosc) szukana = szukana * 2; 1.2) Pętla „do ... while” Pętla z warunkiem na końcu, instrukcja jest wykonywana tak długo, jak długo warunek jest spełniony. Pętla zawsze wykona się co najmniej raz, nawet gdy warunek jest niespełniony przy pierwszym przejściu: do instrukcja; while(warunek); Np. wczytywanie zmiennej o określonym zakresie: int punkty; do scanf(”%d”, &punkty); while(punkty < 0 || punkty > 100); 1.3) Pętla „for” Pętla powtarzająca z warunkiem na początku, instrukcja jest wykonywana tak długo, jak długo warunek jest spełniony. for(start;warunek;koniec) instrukcja; gdzie: start – operacja wykonywana raz na początku pętli koniec – operacja wykonywana po każdym przejściu pętli Np. wielokrotne wyświetlenie tekstu: int n; for(n=0;n < 10;n=n+1) puts(”Ten tekst zobaczysz 10 razy!”); Język C, Laboratorium nr 3 2/3 1.4) Pętla (teoretycznie) nieskończona Pętla, której warunek jest zawsze spełniony, np.: while(1) instrukcja; for(;;) instrukcja; Jeżeli dowolna z pętli ma wykonywać więcej niż jedną instrukcję, stosujemy konstrukcję bloku. 1.5) Dodatkowe instrukcje sterujące pętlami • break – przerywa wykonywanie najciaśniej otaczającej pętli (skok do pierwszej instrukcji umieszczonej za pętlą); • continue – wymusza kolejną iterację pętli (skok do początku pętli i rozpoczęcie wykonywania kolejnej iteracji). Np.: sumowanie liczb podawanych przez użytkownika. Ciąg liczb zakończony wartością 0, wartości ujemne ignorowane: int liczba; long suma = 0; for(;;) { scanf(”%d”, &liczba); if(liczba == 0) break; // Koniec pętli if(liczba < 0) continue; // Kolejna iteracja suma = suma + liczba; } printf(”Suma = %ld\n”, suma); 2) Generowanie liczb pseudolosowych • • • • Inicjalizacja generatora liczb pseudolosowych – raz na początku programu: srand(time(NULL)); Funkcja generująca kolejne wartości: rand() Zakres generowanych liczb: 0..RAND_MAX (co najmniej 32767) Najprostszy sposób zawężania zakresu generowanych liczb – wykorzystanie funkcji dzielenia modulo (reszty z dzielenia całkowitego), np.: rand() % 10 -> 0..9 Język C, Laboratorium nr 3 3/3 3) Obsługa debuggera GDB (GNU Debugger) 3.1) Kompilacja programu i uruchomienie Program który chcemy poddać analizie z pomocą debuggera, należy skompilować dodając do polecenia przełącznik „-g”, np.: gcc -g programik.c -o programik Debugger uruchamiamy poleceniem: gdb programik 3.2) Podstawowe komendy GDB • Wykonywanie programu: Komenda run <arg> Wykonanie jednego kroku programu z „wchodzeniem” do funkcji; next n Wykonanie jednego kroku programu, funkcje wykonywane są natychmiastowo (bez „wchodzenia” do ich wnętrza); continue c where Natychmiastowe dokończenie aktualnie wykonywanej funkcji; Kontynuacja wykonywania programu aż do napotkania kolejnej pułapki lub końca programu; Wyświetlenie trasy wywołań funkcji dla bieżącego miejsca programu; Pułapki: break <gdzie> Ustawienie w programie pułapki (breakpoint). Gdy wykonywanie dojdzie do wskazanego miejsca, program zostanie wstrzymany. Miejsce <gdzie> można podać jako nazwę funkcji lub numer linii w kodzie źródłowym; info break delete N delete • Uruchomienie programu z opcjonalnie podanymi argumentami; step s finish • Opis Wyświetla informacje o ustawionych pułapkach; Usunięcie pułapki nr N; Usunięcie wszystkich pułapek; Wyświetlanie: list <gdzie> Wyświetlenie 10 wierszy kodu źródłowego programu. Opcjonalny parametr (numer l <gdzie> wiersza lub nazwa funkcji) wyświetla określony fragment kodu programu; print <zm> p <zm> Jednorazowo wyświetla wartość podanej zmiennej; display <zm> Wyświetla wartość podanej zmiennej na bieżąco aktualizując jej wartość wraz ze disp <zm> zmianami w programie; • Komendy dodatkowe: quit Wyjście; help Lista tematów pomocy; help <nazwa> Wyświetla pomoc na temat komendy o podanej nazwie.