background image

05

Metodyka i techniki programowania
Wprowadzenie do języka C
mgr inż. Wojciech Szmuc

2007-11-05

Uwagi wstępne.

Programy pisane na obecnych oraz późniejszych zajęciach należy formatować zgodnie 

z przedstawionymi niżej przykładami. Komentarze do kodu (znajdujące się pomiędzy znakami 

/*

  oraz  

*/

) należy umieszczać w miarę pisania programu. Powinny one zawierać informacje 

o działaniach opisywanego fragmentu funkcjonalności. Przedstawione niżej przykłady są zbyt 

szczegółowo   komentowane   co   związane   jest   z   faktem,   że   są   to   zajęcia   wprowadzające. 
W praktyce wystarczyłaby informacja umieszczana na samym początku pliku.

Ćwiczenie 1. Pierwszy Program

1.

Utwórz katalog 

zajecia5

 

2.

Stwórz w nim plik 

witaj.c

 

zawierający:

/* Program wypisuje "Witaj!" */

#include <stdio.h>

/* wskazanie pliku naglowkowego biblioteki */

main()

/* glowna funkcja programu */

{

/* poczatek bloku instrukcji */

printf("Witaj!");

/* wypisanie tekstu "Witaj!" */

printf("\n");

/* przejscie do nowej linii */

}

/* koniec bloku instrukcji */

Zwróć   uwagę   na   przesunięcie   (wcięcie)   wywołań   funkcji  

printf()

.  związane 

z umieszczeniem ich wewnątrz bloku ograniczonego znakami 

{

 oraz 

}

.

3.

Spróbuj skompilować program: 

gcc witaj.c

 

4. Wylistuj zawartość katalogu.
5.

Uruchom stworzony program. 

./a.out

 

6.

Skompiluj program w następujący sposób: 

gcc witaj.c -o witaj

.

Sprawdź zawartość katalogu.
Spróbuj uruchomić nowo powstały plik.

7.

Zakomentuj linijkę zawierającą 

stdio.h

.

Spróbuj teraz skompilować program.
Zwróć   uwagę   na   różne   komunikaty   w   zależności   od   zasięgu   komentarza

(

/* ... */ /* ... */

 wobec 

/* ... /* ... */ */

).

8. Spróbuj skompilować program z opcją 

-nodefaultlibs

 

Zadanie

Napisz program wyświetlający:

 __   __   ________
|  | /  / |__    __|
|  |/  /     |  |
|  |\  \     |  |
|__| \__\    |__|

Ćwiczenie 2. Zmienne oraz operatory arytmetyczne

1. Stwórz plik zawierający:

float rzeczywista1=2/3, rzeczywista2=-2.3;

/* definicja oraz inicjalizacja */
/* zmiennych typu rzeczywistego */

printf("rzeczywista1=%f", rzeczywista1);

/* wyswietlenie zmiennej */
/* "rzeczywista1" */

printf("\n");
printf("rzeczywista2=%5.2f", rzeczywista2);

/* 5 pozycji w tym 2 po kropce */

printf("\n");
printf("rzeczywista1+rzeczywista2=%f", rzeczywista1+rzeczywista2);

oraz inne elementy konieczne do prawidłowej kompilacji.

Sprawdź działanie programu.
Co należałoby zmienić aby program działał poprawnie?

2. W analogiczny sposób przetestuj pozostałe operatory arytmetyczne.

background image

Ćwiczenie 3. Adresy

Adres zmiennej jest liczbą określającą indeks pierwszego bajtu zarezerwowanego dla 

danej   zmiennej  w  pamięci.  Nie  można   zmienić   adresu  zmiennej   –  jest  to   w pewnym 
sensie stały (niezmienny w czasie działania programu) atrybut (cecha) zmiennej.

1. Zaimplementuj kod:

short krotka1=12345, krotka2=54321;

/* zmienne calkowite o malym zakresie */

unsigned aKrotka1, aKrotka2;

/* zmienne calkowite, nieujemne */

aKrotka1=(unsigned)&krotka1;

/* operacja rzutowania (uzgodnienie typu) */

aKrotka2=(unsigned)&krotka2;

/* adresu */

printf("Zmienna \"krotka1\" - wartosc: %d, adres: %u", krotka1, aKrotka1);
printf("\n");
printf("Zmienna \"krotka2\" - wartosc: %d, adres: %u", krotka2, aKrotka2);
printf("\n");
printf("Wielkosc typu \"short\": %u", aKrotka1-aKrotka2); 

Sprawdź działanie programu – z czego ono wynika?

2. Dopisz kod, który obliczy rozmiar zajmowany w pamięci przez inne typy danych.
3. Przepisz poniższy kod:

float rzeczywista;

printf("Wpisz liczbe: ");
scanf("%f", &rzeczywista);

/* przekazanie adresu zmiennej jako */
/* argument funkcji wczytujacej */

printf("Kwadrat tej liczby wynosi: %f\n", rzeczywista*rzeczywista);

skompiluj oraz uruchom.

4. Na   podstawie   przykładu   z   punktu   3.   zmodyfikuj   program   wykorzystujący   operatory 

arytmetyczne tak, aby możliwe było wpisanie argumentów działań.

Ćwiczenie 4. Wskaźniki

Wskaźnik   jest   zmienną   przechowującą   adres   pewnego   elementu.   Ponieważ   jest   to 
zmienna można zmienić jej wartość tak aby wskazywała na inny adres (element).

1. W programie podnoszącym do kwadratu dopisz po definicji zmiennej 

rzeczywista

:

float *wRzeczywista=&rzeczywista;

/* definicja wskaznika oraz przypisanie */
/* adresu, ktory jest wskazywany */

Zauważ, że w tym przypadku zapisywany jest adres a nie jego wartość liczbowa (brak 
rzutowania).

Następnie zmodyfikuj linijkę odpowiedzialną za pobranie wartości:

scanf("%f", wRzeczywista);

Sprawdź działanie programu.

2. Zmodyfikuj   program   tak,   aby   operację   mnożenia   (przy   podnoszeniu   do   kwadratu) 

wykonywał przy użyciu wskaźników.

Zadanie

Napisz program, który pobierze czas rozpoczęcia zajęć, czas trwania zajęć oraz obecny 
czas   i   na   tej   podstawie   wyliczy   ilość   czasu   jaka   pozostała   do   końca   zajęć.   Wynik 

powinien   być   przedstawiony   w postaci   procentowej   jak   również   w   postaci   liczby 
pozostałych minut.