Kompilacja, input/output, prosta arytmetyka

Dzisiaj nauczą się Państwo kompilować programy napisane w języku C. Następnie poznają dwie funkcje które pozwalają na zapis i odczyt, czyli printf i scanf oraz będą potrafili wykonywać proste operacje arytmetyczne na liczbach całkowitych i rzeczywistych

Kompilujemy i wywołujemy programy napisane w języku C

Zad 1.

Komendą mkdir wstep_prog utwórz katalog o nazwie wstep_prog a w nim plik o nazwie witaj.c .
Za pomocą dowolnego edytora wpisz do pliku nastepujacy tekst:

#include <stdio.h>
main()
{
printf("ahoj, przygodo");
}

Wykonaj kompilację tego programu tj. wpisz z linii komend gcc -o hello witaj.c
Następnie wpisz ./hello i zobacz jaki jest wynik programu.
Obejrzyj plik o nazwie hello który powstał w Twoim katalogu, otwierając go w dowolnym edytorze. Tak wygląda plik binarny.

Uwaga! bedziesz pisał/a na tych zajęciach programy. Nzywaj je tak jak abyś mogła/mógł je od siebie odróżnić i wiedziec 'co jest w środku' tj. NIE zad1.c, zad2.c, tylko witaj.c, witaj_enter.c itp.
Przypomninie komend w linuxie:
ls wypisywanie zawartosci katalogu
cp nazwa_pliku nowa_nazwa_pliku - kopiuje plik
rm nazwa_pliku - usuwa plik
mv sciezka/do/nazwa_pliku nowa/siezka/do/nazwa_pliku - zmienia miejsce pliku
touch nazwa_pliku - tworzy pusty plik o nazwie nazwa_pliku
less nazwa_pliku - przegląda zawartość pliku

Zad 2.

Zmodyfikuj program tak aby powstał napis
achoj
przygodo
Wsk. dodaj \n pomiędzy ahoj a przygodo .
Zobacz też co stanie się jeśli wpiszesz printf("ahoj, przygodo
");

Zad 3.

Opuść 5 różnych fragmentów programu, skompiluj i przeczytaj komunikaty błędów, aby się z nimi oswoić.

Zad 4. Zmienna typu całkowitego

W katalogu wstep_prog utwórz katalog o nazwie fun_we_wy a w nim plik o nazwie we_wy.c . Za pomocą wybranego przez Ciebie edytora tekstu, skopiuj do pliku tekst następującego programu:

/*
* Ten tekst jest komentarzem, nie jest kompilowany.
* Program powołuje zmienną liczba typu całkowitego (tj. int)
* przypisuje jej wartość liczby 5 oraz wypisuje wartość zmiennej
* liczba na ekranie. tekst który teraz czytasz, jest zakomentowany
* i nie bedzie interpretowany jako kod programu. Jest to tzw.
* komentarz blokowy w odróżnieniu od komentarza w jednej linii
* który uzyskuje się przez wpisanie dwókrotnie znaku slash.
* dalsze informacje dotyczące komentowania otrzymasz w zad. 5.
*/
#include <stdio.h> /*wywolanie biblioteki*/

void main()
{
int liczba; /* deklaracja zmiennej liczba czyli nazwa typu zmiennej oraz jej nazwa*/
liczba = 5; /* nadanie zmiennej liczba wartości 5 */
     printf("To jest pierwszy program\n");
     printf("wypisujacy liczby.\n");
     printf("oto ona: %d",liczba);
}

wykonaj jego kompilację tj. wpisz z linii komend gcc -o licz_wy we_wy.c następnie wywołaj program wpisując ./licz_wy w linii komend.

Wczytywanie liczb za pomocą funkcji scanf

Zad 5.

(Patrz zad 7 dr S. Sokołowskiego, laboratoria 1)

Skopiuj do pliku o wybranej przez Ciebie nazwie, zachowaj treść, skompiluj i wywołaj poniższy program:

#include <stdio.h>  /*wywołanie biblioteki*/
void main() /*glowna funkcja programu */
{
int liczba; /* deklaracja zmiennej i czyli nazwa typu zmiennej oraz jej nazwa*/
int liczba2;
     printf("To jest pierwszy program\n"); 
     printf("wczytujący i wypisujący 2 liczby.\n");
     printf("podaj 2 liczby wciskając enter po pierwszej z nich.\n");

scanf("%d%d",&liczba,&liczba2);
/*
* zwroc uwage na znak ampersant w wywolaniu funkcji scanf 
* jest on niezbedny, gdyż funkcja scanf MODYFIKUJE wartość 
* zmiennej liczba. W tym celu musi mieć do niej dostęp 
* i uzyskuje go przez ampersant. Dla odróżnienia: funkcja 
* printf nie modyfikuje wartości zmiennych więc nie 
* trzeba wpisywać (i nie ma sensu ) ampersanta przed nazwą 
* zmiennej 
*/ 

     printf("wypisuje liczbe ktora podales/las:"); 
     printf("oto pierwsza: %d a to druga: %d",liczba,liczba2); 
}

Teraz dopisz odpowiedni kod do tego programu, tak, aby wypisywał sumę dwóch liczb.
Wskazówki: przed int liczba; dopisz int suma;
po linijce ze scanf dopisz suma = liczba + liczba2;
oprócz dwóch liczb wypisz analogicznie wartość zmiennej suma
Uwaga: aby wypisać 3 liczby piszemy

	printf("%d %d %d",liczba1,liczba2,liczba3);
//lub jeśli chcemy żeby było lepiej na ekranie opisane to np.:
printf("oto liczba 1: %d, liczba2: %d, liczba3: %d",liczba1,liczba2,liczba3);

Wynik działania programu dla liczb 1 i 2 powinien wyglądać tak:
Suma wczytanych liczb to: 3.

Zmienne typu rzeczywistego (float), działania arytmetyczne +,-,/,*

Zad 6. Zmienna typu rzeczywistego

utwórz plik o nazwie float.c za pomocą wybranego przez Ciebie edytora wpisz do pliku nastepujacy tekst:

 /* * Program powołuje zmienną liczba typu 
rzeczywistego (tj. float) * przypisuje jej wartość liczby 0.5 oraz 
wypisuje wartość zmiennej * liczba na ekranie. PRZYPOMINAM ŻE * tekst 
który teraz czytasz, jest zakomentowany * i nie bedzie interpretowany 
jako kod programu. Jest to tzw. * komentarz blokowy w odróżnieniu od 
komentarza w jednej linii * ktory uzyskuje sie przez wpisanie dwókrotnie 
znaku slash. */
#include <stdio.h> /*wywołanie biblioteki*/ 

void main()
{
float liczba; /* deklaracja zmiennej liczba czyli nazwa typu zmiennej oraz jej nazwa*/
liczba = 0.5; /* nadanie zmiennej liczba wartości 0.5 */
     printf("To jest pierwszy program\n");
     printf("wypisujacy liczbe rzeczywista.\n");
     printf("zwróć uwage na to jak sie to robi w funkcji printf!");
     printf("oto ona: %f",liczba);
}

wykonaj jego kompilację tj. wpisz z linii komend
gcc -o float float.c
a następnie wywołaj program wpisując ./float
Odpowiedz na nastepujące pytanie: czym różni się ten program od programu z zad 4, który demonstruje wypisywanie liczb całkowitych ? wypisz 3 różnice.

Zad 7. Zmienna typu rzeczywistego - działania


Przepisz poniższy program do edytora i skompiluj

 #include <stdio.h>
 void main() 
 {
 float x; /* deklaracja zmiennej i czyli nazwa typu zmiennej oraz jej nazwa*/
  x = 6.5;   /*przypisanie, inaczej nadanie wartosci 6 zmiennej x */
  printf("poczatkowa wartosc x: %f\n",x);
   x = x + 1;  /* zwiekszenie, inaczej inkrementacja (o 1) zmiennej x */
  printf("po inkrementacji o 1: %f\n",x);
  x = 2*x; /*mnozenie przez 2 */
  printf("po pomnożeniu przez 2: %f\n",x);
  x = x/3;
  printf("po podzieleniu przez 3: %f\n",x);
}

wykonaj kompilację powyższego kodu. Nastepnie zmodyfikuj ten program deklarując drugą zmienną y,
przypisz jej wartość 17 i wykonaj na niej kolejno działania:
odjęcia liczby 2, podzielenia przez 3, zwiększenia o 1
i pomnożenia przez 2.

Uwaga! Dobry nawyk: Nazywaj zmienne sensownie. Nie za krótko, nie za długo, stosownie do kontekstu tak, żeby kod był przejrzysty.

Zad 8. Dzielenie dla liczb całkowitych i rzeczywistych

Zadeklaruj 2 zmienne: pierwszą o typie całkowitym i nazwie licz_cal a drugą o typie rzeczywistym i nazwie licz_rze. Pierwszej nadaj wartość 20 a drugiej też 20. Wykonaj nastepnie na obu kolejno działanie dzielenia przez 3 jak w zadaniu 7 powyżej i wypisz nowe wartości tych zmiennych.
Jakie są wartości zmiennych po dzieleniu ?

Jeśli są różne, to wykonałaś/łeś zadanie poprawnie, gdyż operacja dzielenia liczb całkowitych w C zaokrągla jego wynik do liczby całkowitej, czego nie robi gdy jest wykonwyana na liczbach rzeczywistych.

Zad 9.

(patrz zad 7 dr S. Sokołowskiego, laboratoria 1)

Wykonaj zadanie 5 dla pozostałych działań arytmetycznych -,*,: z jedną różnicą: zmień typ liczb z całkowitych (int) na rzeczywisty (float) żeby dzielienie było poprawnie wykonane tj. bez zaokrąglenia.