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.
Ć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.