Wstęp do Programowania, laboratorium 02 Zadanie 1. Napisać
Transkrypt
Wstęp do Programowania, laboratorium 02 Zadanie 1. Napisać
Wstęp do Programowania, laboratorium 02 Zadanie 1. Napisać program pobierający dwie liczby całkowite i wypisujący na ekran największą z nich. Zadanie 2. Napisać program pobierający trzy liczby całkowite i wypisujący na ekran: 1. największą z nich, 2. ich sumę, 3. ich iloraz, 4. ich średnią wartość. Zadanie 3. Napisać program który wypisuje rozwiązania równania ax^2+bx+c=0 . Użytkownik podaje wartości rzeczywiste a, b i c. Wypisać wartość równania dla znalezionych rozwiązań. Instrukcje gcc kompilator do języka C gcc plik.c kompilacja pliku plik.c. Plik ze skompilowanym programem ma nazwę a.out gcc plik.c -o program.exe kompilacja pliku plik.c. Plik ze skompilowanym programem ma nazwę program.exe gcc plik1.c plik2.c folder/kod.c ../projekt2/main.c kompilacja kilku plików do jednego programu ./a.out uruchomienie programu a.out (plik znajduje się w aktualnie odwiedzanym folderze) /home/user/a.out uruchomienie programu a.out znajdującego się w folderze /home/user/ Jeśli kompilator nic nie wypisze na ekran – kompilacja powiodła się bez problemów. Kompilator może wypisać informacje o ostrzeżeniach (warning) lub błędach (error). Kompilacja nie powiedzie się jeśli wystąpi przynajmniej jeden błąd. Najprostszy program w C: void main() { // } main oznacza punkt wejściowy programu – jest to funkcja która jest wywoływana przy uruchomieniu programu. void jest typem wartości zwracanej przez funkcję main – w tym przypadku oznacza, że main nie zwraca nic. Typy zmiennych w C: 1. void – nic, 2. char – jeden bajt, liczba całkowita (używane do przechowywania tekstu), 3. short – dwa bajty, liczba całkowita, 4. int – cztery bajty, liczba całkowita, 5. float – cztery bajty, liczba zmiennoprzecinkowa (rzeczywista), 6. double – osiem bajtów, liczba zmiennoprzecinkowa podwójnej precyzji (więcej możliwych wartości). Klamry { oraz } oznaczają blok kodu – cały kod opisujący co funkcja main ma robić powinien być pomiędzy nimi. // oznacza komentarz – tekst wpisany po tych dwóch znakach zostanie zignorowany przez kompilator. Program wypisujący tekst na ekran: #include <stdio.h> void main() { printf("dlugi tekst\nktory bedzie na ekranie\n"); } #include oznacza, że w tym miejscu wstwiona zostanie zawartość pliku, do którego ścieżka podana jest dalej. W tym przypadku, dołączony zostanie plik nagłówkowy stdio.h (std I/O, standard input/output, NIE studio.h). Pliki nagłówkowe (.h) przeważnie przechowują deklaracje funkcji – informacje o tym, że dana funkcja istnieje. Pliki źródłowe (.c) zawierają definicje funkcji – co funkcje robią. Aby móc użyć funkcji, musi być ona wcześniej zadeklarowana. Plik stdio.h zawiera deklarację funkcji printf, która służy do wypisania tekstu na ekran. \n jest znakiem specjalnym oznaczającym przejście do nowej linii. Program wypisujący sumę dwóch liczb: #include <stdio.h> void main() { int a, b; int c; a=3; b=4; c=a+b; printf("%d + %d = %d\n", a, b, c); } W C wszystkie zmienne muszą być zadeklarowane na początku bloku kodu. printf w tym programie wypisze „3 + 4 = 7” - w miejsce kolejnego %d wstawi wartość kolejnej zmiennej podanej za tekstem. %d oznacza, że wypisana będzie zmienna całkowita (typu int). Więcej informacji o funkcji printf: http://www.cplusplus.com/reference/cstdio/printf/ Program wypisujący iloraz dwóch liczb: #include <stdio.h> void main() { int a, b; a=3; b=4; printf("%d / %d = %d\n", a/b); } Dzielone są liczby całkowite, dlatego ich wynik też jest liczbą całkowitą – dzielenie 3/4 da wartość 0 (wartość po przecinku zostaje odcięta). Aby uzyskać dobry wynik, trzeba zmienić typ zmiennych przy pomocy rzutowania: #include <stdio.h> void main() { int a, b; a=3; b=4; printf("%d / %d = %f\n", a, b, (float)a/b); } a zamieniane jest w zmienną zmiennoprzecinkową (rzeczywistą). %d służy do wypisania liczb całkowitych, trzeba więc zmienić go na %f – wypisanie liczby zmiennoprzecinkowej. Program pobierający wartości wpisane przez użytkownika #include <stdio.h> int main(int argc, char** argv) { int a; float b; scanf("%d", &a); scanf("%f", &b); printf("a ma wartosc %d; b jest rowne %f\n", a, b); return 0; } Funkcja main zmieniła się – teraz zwraca wartość typu int. Przyjmuje się, że zwrócenie wartości 0 oznacza brak błędu w programie, a dowolna inna kod odpowiedniego błędu (np. 404 – nie znaleziono pliku). Wartość zwracana jest przy pomocy return 0;, który powoduje przerwanie wykonywania aktualnej funkcji (w funkcjach zwracających void używa się samego return;). W nawiasach za main pojawiły się dwie zmienne jakie przyjmuje ta funkcja – pierwsza z nich przechowuje liczbę argumentów programu (pierwszym argumentem zawsze jest nazwa programu), druga trzyma listę argumentów. ./a.out liczba argumentów: 1 ./a.out arg arg2 liczba argumentów: 3 ./a.out "jeden dlugi tekst" liczba argumentów: 2 Funkcja scanf oczekuje na wpisanie przez użytkownika tekstu lub liczby, a następnie wpisuje je do podanej zmiennej. Pierwsze wywołanie oczekuje na wpisanie przez użytkownika liczby całkowitej, której wartość wpisywana jest do zmiennej a, drugie wywołanie robi to samo dla zmiennej zmiennoprzecinkowej. & oznacza, że przesyłany do funkcji jest adres zmiennej – miejsce w pamięci gdzie zmienna jest przechowywana. Bez niego, przesłana zostanie wartość zmiennej. Funkcje modyfikujące wartości zmiennych operują na ich adresach. Instrukcje warunkowe #include <stdio.h> int main(int argc, char** argv) { int a; printf("Podaj liczbe calkowita: "); scanf("%d", &a); if(a<0) { int minus_a=-a; printf("a jest mniejsze od 0\n"); printf("po zmianie znaku: %d\n", minus_a); return 0; // Tutaj program się kończy, jeśli a<0 } else if(a==0) printf("a jest rowne zero\n"); else printf("a jest wieksze od 0\n"); printf("Tekst wypisany tylko jeśli a>=0\n"); return 0; } Powyższy program poprosi użytkownika o wpisanie dowolnej liczby a następnie wypisze pewne informacje o niej. if oznacza, że kod znajdujący się za nim zostanie wykonany tylko wtedy, kiedy warunek w nawiasie zostanie spełniony (w tym przypadku jeśli a będzie mniejsze od 0). else oznaczają co należy zrobić, jeśli warunek poprzedniego if nie został spełniony. Klamry po if/else if/else można pominąć jeśli za nimi znajduje się tylko jedna instrukcja (wywołanie funkcji, modyfikacja zmiennej itp.). Chcąc zrobić więcej operacji, trzeba stworzyć nowy blok. Podpowiedzi Ad. 2 if(a>b) { if(a>c) printf("najwieksza: %d\n", a); else ... } else { ... } Ad. 3 http://pl.wikipedia.org/wiki/R%C3%B3wnanie_kwadratowe#Rozwi.C4.85zania Upewnić się, że a i b nie są zerami. Możliwe są 2, 1 lub brak rozwiązania. Jeśli a jest różne od zera to równanie jest kwadratowe. Jeśli a jest równe zero, ale b jest różne od zera, to równanie jest liniowe. Obliczanie pierwiastka liczby: #include <stdio.h> #include <math.h> // tutaj jest funkcja sqrt void main() { printf("pierwiastek liczby 4: %f\n", sqrt(4)); }