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));
}

Podobne dokumenty