Środowisko programisty/C - zmienne i funkcje
Typy zmiennych
Typy proste
Język C definiuje następujące typy proste
| Nazwa | Znaczenie | Typowy zakres |
|---|---|---|
| char | znak | |
| unsigned char | mała liczba całkowita | 0-255 |
| short int | liczba całkowita | |
| unsigned short int | liczba dodatnia | |
| int | duża liczba całkowita | |
| float | liczba rzeczywista | |
| double | duża liczba rzeczywista |
Funkcje
Podstawy
W języku C nie występuje, w przeciwieństwie do Pascala, ścisły podział na funkcje i procedury. Występują jedynie funkcje, które niekoniecznie muszą dawać jakikolwiek wynik. Składnia funkcji jest następująca:
typ nazwa_funkcji(lista parametrów)
{
treść funkcji
return wynik_funkcji
}
Napiszmy funkcję obliczającą sumę dwóch parametrów
int dodaj(int a, int b)
{
return a + b;
}
Funkcja main
Funkcja main, której wynikiem jest liczba typu int, jest główną funkcją w C i jest wykonywana automatycznie w momencie uruchomienia programu. Korzystając z funkcji dodaj można napisać następujący program:
int main()
{
printf("%d\n", dodaj(1,1));
return 0;
}
Wynik działania funkcji main jest przekazywany do powłoki i w sytuacji kiedy wykonanie programu zakończy się sukcesem, powinien wynosić 0.
Słowo kluczowe return
Funkcja kończy swoje działanie po napotkaniu instrukcji return. Czyli następujący kod jest poprawny (funkcja liczy sumę):
int dodaj(int a, int b)
{
return a + b;
return a * b; // Ta instrukcja nigdy się nie wykona
}
Procedury
Niekiedy występuje potrzeba utworzenia funkcji, która niczego nie oblicza, czyli znanej z Pascala procedury. W takim przypadku możemy zastosować konstrukcję:
void funkcja()
{
...
return
}
Popatrzmy na następujący przykład:
#include <stdio.h>
int dodaj(int a, int b)
{
return a + b;
};
void wypisz(int i)
{
printf("%d\n", i);
return;
};
int main()
{
wypisz(dodaj(1,1));
return 0;
}
Wybrane funkcje biblioteczne
printf
Do wypisywania informacji służy funkcja printf. Ma ona następującą postać:
printf("format", lista zmiennych)
format to napis, który zostanie wypisany na standardowe wyjście. Napis ten może zawierać znaki formatujące, mówiące o tym jakich zmiennych będzie oczekiwać funkcja w liście zmiennych i w jaki sposób zostaną one wypisane.
Znaki formatujące zawsze mają następującą postać:
%[flagi][szerokość][.precyzja][modyfikatory]typ
Najistotniejszym parametrem jest typ, który decyduje o tym jak zostanie potraktowana zmienna wypisywana przez funkcję printf. Zwróćmy uwagę na to, że jest takie rozwiązanie jest zupełnie inne niż w Pascalu, w którym kompilator po napotkaniu funkcji Write lub Writeln sam domyśla się z jakimi parametrami ma do czynienia.
| Typ | Znaczenie | Przykład |
|---|---|---|
| c | pojedynczy znak | q |
| d lub i | liczba całkowita ze znakiem | -11 |
| e (lub E) | liczba z mantysą i wykładnikiem oddzielona znakiem e (lub E) | 1.2345e3 (lub 1.2345E3) |
| f | liczba rzeczywista | 1.23 |
| g (lub G) | krótsze z pary %f i %e (lub %E) | 1.23 |
| o | liczba ósemkowa ze znakiem | 71 |
| s | napis | przykład ze spacja |
| u | liczba całkowita nieujemna | 11 |
| x | liczba szesnastkowa nieujemna | af1 |
| X | liczba szesnastkowa nieujemna (wielkie litery) | AF1 |
| p | adres w pamięci | A000:00FF |
| n | nic (służy do uzyskania liczby wypisanych dotychczas znaków) | (wskaźnik na int) |