Język C, © Daniel Pociecha, danpoc@agh.edu.pl
1
Język C – część 1
Literatura
[1] Brian W. Kernighan, Dennis M. Ritchie: Język ANSI C, Wydawnictwa Naukowo –
Techniczne, Warszawa 2003
[2] Anna Strudzioska-Walczak, Krzysztof Walczak, Nakuka programowania dla
początkujących C++, Wydawnictwo W&W, Warszawa 2006
Zanim zaczniesz pisać
– Sformułuj problem
– Zanalizuj go – znajdź metodę rozwiązania (pomocny może byd algorytm)
– Napisz program
– Uruchom i przetestuj czy działa
Język C
Język C został napisany przez D. Ritchie’go. Pierwszy okres rozwoju języka to lata 1969-
1973. Początkowo język ten był przeznaczony do tworzenia oprogramowania
systemowego (przy jego pomocy został napisany system operacyjny UNIX). W miarę
upływu czasu stał się językiem ogólnego przeznaczenia. Język C jest uważany za język
umożliwiający szybkie pisanie efektywnych programów. Łączy on w sobie zalety
języków programowania strukturalnego wysokiego poziomu z zaletami niskiego
poziomu języków asemblerowych.
Struktura programu w C
– Nagłówek funkcji zawiera: typ zwracanego wyniku, nazwę funkcji i listę argumentów
umieszczoną nawiasach okrągłych (argumenty oddziela się przecinkiem).
– Instrukcje składające się na kod funkcji umieszcza się w nawiasach klamrowych
{ i }. Para nawiasów klamrowych może służyd do grupowania instrukcji.
Ciąg instrukcji umieszczony wewnątrz nawiasów klamrowych określany jest mianem
instrukcji złożonej.
– Każda instrukcja musi byd zakooczona średnikiem ;. Średnika nie umieszcza się po
zamykającym nawiasie klamrowym (są wyjątki). To średnik, a nie koniec linii,
decyduje o tym gdzie kooczy się instrukcja. Sam średnik traktowany jest, jako
instrukcja pusta.
– Nie można dzielid (przenosid do nowej linii) nazw zmiennych, funkcji i słów
kluczowych.
– Komentarz w C++, to dowolnej długości tekst ograniczony znakami /* i */
Język C, © Daniel Pociecha, danpoc@agh.edu.pl
2
Przykład 1
#include <stdio.h>
int main()
{
printf("Hello World!\n");
return 0;
}
Preprocesor
Przed uruchomieniem kompilatora zawsze jest wywoływany preprocesor, który
przetwarza wiersze program rozpoczynające się znakiem #. Jest to dyrektywa
preprocesora.
#include
jest to podstawowa dyrektywa preprocesora. Ma ona dwie postacie:
#include <nazwa> plik nagłówkowy dostępny w systemie C
#include “nazwa” plik zdefiniowany przez użytkownika
Inne dyrektywy preprocesora wykorzystywane w plikach nagłówkowych to:
#ifndef dowolna_nazwa
#define dowolna_nazwa
/* Zawartość pliku nagłówkowego dowolna_nazwa.h */
#endif
Biblioteki standardowe
<stdio.h>
Standard Input/Output – standardowe operacje wejścia/wyjścia
<math.h>
operacje matematyczne
<stdlib.h> przydatne, najczęściej używane funkcje
<string.h> operacje na łaocuchach znaków
<time.h>
funkcje obsługi czasu
Funkcja main()
Program w języku C składa się z funkcji, w ten sposób złożony problem, możemy
podzielid na mniejsze, łatwiejsze do zakodowania i czytelniejsze fragmenty. Główną
funkcją, od której rozpoczyna się wykonywanie programu jest funkcja main().
int main()
{
/* kod program */
return 0;
}
Język C, © Daniel Pociecha, danpoc@agh.edu.pl
3
Aby po zakooczeniu działania programu uzyskad informację o tym czy program
wykonał się poprawnie, nadajemy funkcji main() typ int (integer – liczba
całkowita), a funkcję kooczymy poleceniem return 0;. Jeżeli program wykonał się
poprawnie, funkcja main() zwraca wartośd „0‟.
UWAGA! Program powinien byd zapisywany z wykorzystaniem wcięd tak, aby widad
było strukturę poszczególnych instrukcji
UWAGA! System zwraca uwagę na wielkośd liter.
Return – to nie to samo co: return
Podstawowe typy danych
void
typ pusty - brak wartości
char
typ znakowy - jeden z podstawowych typów danych, mający
na celu przechowywanie pojedynczego znaku tekstu.
int
liczba całkowita
zakres: -32768 … 32767
unsigned int liczba całkowita
zakres: 0 … 65535
long
liczba całkowita
zakres: - 2 miliardy … 2 miliardy
unsigned long liczba całkowita
zakres: 0 … 4 miliardy
float
liczba rzeczywista zakres: 3.4 * E-38 … 3.4 * E38
double
liczba rzeczywista zakres: bardzo duży
long double
liczba rzeczywista zakres: olbrzymi
Typ rzeczywisty
L = mantysa * 10
wykładnik
Przykład zapisu:
L = 15.67
L = 83.5E+3
Język C, © Daniel Pociecha, danpoc@agh.edu.pl
4
Zmienne
– Zmienną w języku programowania nazywamy wielkośd, która może przechowywad
wartośd należącą do pewnego zbioru nazywanego typem zmiennej. Zmienna jest
jednoznacznie identyfikowana przez swoją nazwę. Każda zmienna w programie musi
zostad wcześniej zadeklarowana, tzn. należy określid jej nazwę i typ wartości.
– Identyfikatorem (nazwą) nazywamy ciąg liter, cyfr i znaków podkreślenia,
rozpoczynający się od litery lub znaku podkreślenia. Nazwami nie mogą byd słowa
kluczowe, tj. słowa zastrzeżone używane w konstrukcjach języka. W dobrym
zwyczaju jest nadawanie nazw zmiennym, odzwierciedlających ich znaczenie.
Wartośd sumy pewnych elementów powinna nazywad się suma a nie np. 2_wdx.
– Wartośd zmiennej jest tym, co przechowujemy w obszarze pamięci określanym
przez nazwę. W momencie deklaracji wartośd zmiennej lokalnej jest nieokreślona,
zmienne globalne są inicjalizowane na zero.
– Do nadawania wartości zmiennej służy instrukcja przypisania.
Przykłady deklaracji zmiennych i instrukcji przypisania
int a;
int b = 2;
float x, y;
float z = 3.2;
float suma;
a = 10;
x = y = 3.14;
Przykład 2
#include <stdio.h>
int main()
{
float a, b, pole;
printf("Podaj długości boków prostokąta:\n");
printf("a = ");
scanf("%f", &a);
printf("b = ");
scanf("%f", &b);
pole = a * b;
printf("pole = %5.2f\n", pole);
return 0;
}
Język C, © Daniel Pociecha, danpoc@agh.edu.pl
5
Operacje wejścia wyjścia
Komunikację użytkownika z programem zapewniają funkcje wejścia wyjścia.
Umożliwiają one wyświetlanie komunikatów na ekranie komputera oraz wprowadzanie
danych z klawiatury.
printf("Jakiś tekst\n");
Funkcja printf() znajduje się w bibliotece stdio.h. W cudzysłowach ""
umieszczamy tekst, który chcemy wyświetlid na ekranie komputera.
Znak znajdujący się po znaku \ jest traktowany w sposób specjalny, przykładowo:
\n
nowy wiersz
\t
tabulacja
\b
cofanie
\f
nowa strona
\0
znak NUL
scanf("%f", &a);
Funkcja scanf() znajduje się w bibliotece stdio.h. Wyrażenie "%f" oznacza, że
spodziewamy się liczby zmiennoprzecinkowej, a to nazwa zmiennej, natomiast & to
wskaźnik (adres) do zmiennej a
%f – jest to tekst sterujący, narzucający formatowanie wprowadzanego bądź
wyświetlanego tekstu, przykładowo:
%d
liczba dziesiętna
%s
tekst znakowy
%e
liczba zmiennoprzecinkowa – notacja wykładnicza
%f
liczba zmiennoprzecinkowa – notacja dziesiętna
%6.2f co najmniej 6 znaków, z dwoma miejscami po kropce
%3.0f co najmniej 3 znaki, bez części ułamkowej
%.2f z dwoma miejscami po kropce
%3d
liczba dziesiętna zajmująca, co najmniej 3 znaki
ZADANIE 1. Przekształd przykład 2 tak, by program liczył pole dowolnego trójkąta
ZADANIE 2. Napisz program liczący pole i obwód koła (założyd π = 3.14).
ZADANIE 3. Napisz program liczący pole i obwód trójkąta równobocznego, oraz
promieo okręgu opisanego na tym trójkącie (R) i promieo okręgu wpisanego w ten
trójkąt (r).
Język C, © Daniel Pociecha, danpoc@agh.edu.pl
6
Wyrażenia i operatory
Operatory arytmetyczne
*
mnożenie
/
dzielenie
+
dodawanie
-
odejmowanie
%
reszta z dzielenia
Operatory relacyjne
<
mniejszy
<=
mniejszy lub równy
>
większy
>=
większy lub równy
==
równy
!=
nierówny
Operator przypisania
=
Operatory logiczne
!
negacja
&&
koniunkcja
||
alternatywa
Operatory zwiększania i zmniejszania
++
zwiększ wartośd zmiennej o 1
--
zmniejsz wartośd zmiennej o 1
Przykładowo:
x = ++a
zwiększa wartośd a o 1 a następnie przypisuje do x
x = a++
przypisz wartośd a do x a następnie zwiększ o 1
Wieloznakowe operatory przypisania
+=
a += b;
a = a + b;
-=
a -= b;
a = a - b;
*=
a *= b;
a = a * b;
/=
a /= b;
a = a / b;
%=
a %= b;
a = a % b;
Język C, © Daniel Pociecha, danpoc@agh.edu.pl
7
Przykład 3
#include <stdio.h>
int main()
{
int a, b, wynik;
printf("Operatory relacyjne:\n");
a = 10;
b = 2;
wynik = a > b;
printf("wynik a > b = %d\n\n", wynik);
printf("Operatory logiczne:\n");
a = 1;
b = 0;
wynik = a && b;
printf("wynik a && b = %d\n", wynik);
wynik = a || b;
printf("wynik a || b = %d\n\n", wynik);
printf("Operatory zwiększania i zmniejszania:\n");
a = 100;
wynik = a++;
printf("wynik a++ = %d\n", wynik);
wynik = ++a;
printf("wynik ++a = %d\n\n", wynik);
printf("Wieloznakowe operatory przypisania:\n");
a = 10;
a += 5;
printf("wynik a += %d\n", a);
a *= 2;
printf("wynik a *= %d\n", a);
return 0;
}