Programowanie
w języku C
Programowanie
w języku C
© 2012
Grzegorz Łukawski & Maciej Lasota & Barbara Łukawska
Politechnika Świętokrzyska w Kielcach
Wykład nr 2:
Podstawowe cechy języka C
Kompilator gcc
Podstawy języka C
Zmienne
Podstawowe operatory
Cechy języka C
Język C jest językiem względnie „niskiego poziomu”, tzn. operuje na danych
na których pracuje bezpośrednio procesor (znakach, liczbach i adresach),
podobnie jak język asemblera.
W języku C istnieje bardzo mało abstrakcyjnych typów danych,
w przeciwieństwie np. do języka Pascal.
Dzięki tym cechom język C zapewnia maksymalną wydajność.
W języku C nie istnieją operacje na złożonych elementach, jak np. ciągi
znaków, listy lub zbiory. Nie ma wbudowanych operacji wejścia/wyjścia (zapis
i odczyt plików)...
Wszystkie te mechanizmy dostępne są poprzez wywoływania odpowiednich
funkcji z bibliotek standardowych.
Biblioteki
standardowe
Elementy składowe kompilatora ANSI C
Język C
preprocesor
kompilator
linker
ANSI C
CURSES
Biblioteki
zewnętrzne
Cechy języka C
Język C jest językiem o szerokim spektrum zastosowań: od programowania
systemów wbudowanych (sterowników), przez programowanie systemowe
(jądro systemu Unix), po różnego rodzaju aplikacje.
Kod źródłowy programu w języku C ma strukturę swobodną – formatowanie
kodu nie jest wymagane, ale zalecane!
Rdzeń języka zawiera bardzo mało słów kluczowych – jest łatwy do
przyswojenia, lecz sprawne korzystanie z niego wymaga praktyki...
Kompilacja
Uruchomienie
Kompilacja
i uruchomienie
Podstawowe elementy języka C
Każdy program w języku C składa się z funkcji i zmiennych.
Funkcja główna main() to główny element programu, obowiązkowy
w każdym programie. Od tego miejsca zaczyna się jego wykonanie.
Identyfikatory (nazwy zmiennych i funkcji) muszą zaczynać się od litery lub
znaku podkreślenia (_), nie mogą być takie same jak słowa kluczowe języka.
Małe i wielkie litery są rozróżniane:
licznik, Licznik
to dwie różne zmienne!
/* Komentarz nr 1 */
// Komentarz nr 2
#include
<stdio.h>
// Biblioteka
int
main() {
puts(”Hello PSk!”);
// Wywołanie funkcji
return
(
0
);
// Koniec programu
}
Drugi program w języku C
Po większości instrukcji języka C należy umieścić średnik;
Instrukcje rozpoczynające się od znaku # to dyrektywy dla
preprocesora.
Wartości stałe w języku C
Stałe liczbowe (liczby):
Liczby bez żadnych dodatkowych znaków traktowane są jako zapisane w kodzie
dziesiętnym.
Liczby szesnastkowe poprzedzone są sekwencją 0x, np:
0x12AB, 0x12aa55ff, 0x0000
Stałe znakowe:
Pojedynczy znak umieszczony w apostrofach zamieniany jest na jego kod
ASCII, np.:
'A', 'b', ' ', '1'
Stałe znakowe traktowane są na równi ze stałymi liczbowymi!
UWAGA!
W języku C nie istnieją specjalne instrukcje operujące na znakach. Znaki
(ich kody ASCII) traktowane są jak liczby całkowite!
Stałe napisowe w języku C
3
'A' 'b' 'c'
Pascal:
0
'A' 'b' 'c'
C:
Stałe napisowe (napisy, ciągi znaków):
Umieszczane są między znakami cudzysłowów ” ”
Każdy ciąg znaków uzupełniany jest niejawnie kodem 0 (zero).
Znaki specjalne:
\n
Nowy wiersz (LF)
\t
Tabulacja
\”
Znak cudzysłowu
\\
Backslash
Przykład:
puts(”Pierwszy wiersz\ndrugi\ntrzeci”);
Typy całkowite w języku C
Nazwa
Opis
int
Liczba 16, 32 lub 64-bitowa ze znakiem*
short int
short
„Krótka” liczba całkowita ze znakiem – 16 bitów
long int
long
„Długa” liczba całkowita ze znakiem – 32 bity
long long
„Bardzo długa” Liczba całkowita ze znakiem – 64 bity
char
ZNAK lub liczba całkowita 8-bitowa (ze znakiem lub
bez)*
signed ...
Wymuszenie typu całkowitego ze znakiem
unsigned ...
Wymuszenie typu całkowitego bez znaku – tylko liczby
dodatnie lub 0
Porównanie zakresów typów ze znakiem i bez znaku:
signed char → od -128 do 127
unsigned char → od 0 do 255
short → od -32768 do 32767
unsigned short → od 0 do 65535
Przybliżony zakres wartości typów float dla komputera PC z procesorem 32
bitowym:
Typy zmiennoprzecinkowe w języku C
Nazwa
Opis
float
Liczba zmiennoprzecinkowa ze znakiem pojedynczej
precyzji
double
Liczba zmiennoprzecinkowa ze znakiem podwójnej
precyzji
●
Wynik operacji na liczbach tego typu może być przybliżony!
●
Liczba podwójnej precyzji przechowuje dokładniejszą wartość (więcej
miejsc po przecinku).
10
-38
0
-10
-38
10
38
-10
38
INT_MIN = -2147483648
INT_MAX = 2147483647
SHRT_MIN = -32768
SHRT_MAX = 32767
USHRT_MAX = 65535
Operator sizeof() zwraca liczbę bajtów które zajmuje typ lub zmienna, np.:
sizeof(long int) → 4
sizeof(char) → 1
Zakres i wielkość zmiennych
#include <limits.h>
Epsilon
– najmniejsza liczba x taka, że
1.0 + x != 1.0
FLT_MIN = 1.175494e-038
FLT_MAX = 3.402823e+038
FLT_EPSILON = 1.192093e-007
DBL_MIN = 2.225074e-308
DBL_MAX = 1.797693e+308
DBL_EPSILON = 2.220446e-016
#include <float.h>
Przykłady:
int x; int y;
int x, y;
int x=0, y=10;
float zmienna;
double suma = 0.01;
x = sizeof(y);
Deklaracja zmiennych
typ nazwa_zmiennej;
Miejsce deklaracji zmiennych
#include <stdio.h>
int zmienna1;
// Zmienne globalne
float suma;
int main() {
int x, y, z;
// Zmienne lokalne
double iloczyn = 0;
… <instrukcje> …
return(0);
}
UWAGA!
Wartością początkową zmiennych globalnych jest zawsze zero. Wartość
początkowa zmiennych lokalnych jest nieokreślona!
scanf(format, zmienne...);
scanf(”%d”,
&
liczba);
Wczytywanie i wyświetlanie wartości zmiennych
Ciąg formatujący
Typ zmiennej
Formatowanie
%d
%hd
%ld
int
short, char
long
Liczba całkowita dziesiętna ze
znakiem
(signed)
%u
%hu
%lu
int
short, char
long
Liczba całkowita dziesiętna bez znaku
(unsigned)
%x, %X
%hx, %hX
%lx, %lX
int
short, char
long
Liczba całkowita w zapisie
szesnastkowym
%f, %e, %E
%lf, %le, %lE
float
double
Liczba zmiennoprzecinkowa
%c
char
Znak ASCII
printf(format, zmienne...);
printf(”%d”, liczba);
#include <stdio.h>
printf(”Liczba = %d\n”, n);
Liczba = 123
printf(”x = %f, y = %f”, zm_x, zm_y);
x = 10.01, y = 33.0
printf(”ZMIENNE:\n%d, %f, %lf\n”, a, suma, iloczyn);
ZMIENNE:
1, 33.4, 10023.001
Wczytywanie i wyświetlanie wartości zmiennych
Przykłady:
Podstawowe operatory języka C
Operatory arytmetyczne:
+ – * / %
Operator przypisania:
=
Operatory jednoargumentowe:
+ –
Nawiasy okrągłe pozwalają zmienić kolejność obliczeń.
x = 2*y+5*3;
y = y-100;
y = x%2;
y = y*2/x*3;
y = y*2/(x*3);
y = -y;
y = +y;
x = y = 0;
Wartość początkowa zmiennej może być wynikiem obliczeń:
int suma = (x*y + 100) / 10;
●
Na
początku
każdego
bloku
można
zadeklarować nowe zmienne lokalne.*
●
Zachowanie porządku w programie zapewnia
stosowanie wcięć (tabulacji).
●
Każda klamerka musi mieć swoją parę!
Bloki instrukcji
*Standard C99 dopuszcza deklarację zmiennych
w dowolnym miejscu w kodzie programu!
int main() {
int x;
{
blok1;
{
blok2;
}
}
{
blok3;
}
return(0);
}
{ instrukcje }
#include <math.h>
Argument i wyniki funkcji typu double. Kąty w radianach!
Wybrane funkcje i stałe:
Biblioteka funkcji matematycznych
sin(x), cos(x), tan(x)
funkcje trygonometryczne
sinh(x), cosh(x), tanh(x)
jw. hiperboliczne
fabs(x)
wartość bezwzględna liczby x
pow(x,y)
x do potęgi y
sqrt(x)
pierwiastek kwadratowy z x
M_PI
wartość stała liczby π