Változók

A C-ben logikai változó nincs.

Egész típusú változók

A leggyakrabban használt egész típusú változó az int (integer rövidítése).Nincs megkötve, hogy hány bájton kell egy int-et ábrázolni, ezért a különböző C implementációk ebben a tekintetben eltérnek. Ha kisebb értékekkel is kijövünk, akkor elég a számokat short int-el ábrázolni, ha nagyobb éertékekre van szükség, akkor long int-et kell alkalmaznunk. Mindhárom egész típus elé kitehetjük az unsigned módosítót és akkor előjel nélküli számokkal dolgozunk. Ezek segítségével kétszer akkora számokat tudunk ábrázolni azonos helyfoglalás mellett.
Lássunk ezek után egy rövid programot, amelyben szemléltetjük az egészek használatát:

#include <stdio.h>
void main(){
int a, b, c;
printf("Kerek egy szamot: ");
scanf("%d", &a);
printf("Kerek meg egy szamot: ");
scanf("%d", &b);
c = a + b;
printf("A számok osszege: ");
printf("%d", c);
}

az int a, b, c; sor hatására a számítógép memóriájában hely foglalódik le a megfelelő változók számára. Azt nem tudjuk, hogy ott milyen értékek vannak.A scanf("%d", &a); sor hatására beolvas a számítógép egy számot a billentyűzetről és ezt oda helyezi, ahol a helyet lefoglaltuk az a változó számára. Ezért használtuk az &a jelkombinációt. A "%d" azt jelenti, hogy a szám, amit be fogunk olvasi egész típusú lesz.

Lebegőpontos változók

A lebegőpontos változókkal tizedes törteket jelölhetünk. Itt sem mindegy, hogy hány bájton ábrázolunk egy változót. Ha több bájton ábrázoljuk, akkor nagyobb a pontosság, illetve nagyobb számokat ábrázolhatunk. Kétféle lebegőpontos típust használunk, ezek a float és a double.
Nézzünk egy programot, amelyik kiszámolja a beírt szám inverzét! Egyelőre feltételezzük, hogy okos felhasználókkal van dolgunk, aki nem akarja kiszámolni 0 inverzét.

#include <stdio.h>
void main(){
float x; //itt vezetjük be az x lebegőpontos változót (helyet foglalunk számára a memóriában)
printf("Kerek egy szamot");
scanf("%f",&x);
x = 1/x; // Ez a hülyeség azt jelenti, hogy x új értéket kap, mégpedig a régi érték inverzét
/*Mekkora baromság a C! */
printf("A beírt szám inverze: %f",x);
scanf("%f",&x); //ez csak azért kell, hogy megálljon, tetszőleges számot írunk be
}

A // jelektől kezdve a sor végéig megjegyzés van. Ezt kivágja a fordító és egyáltalán nem veszi figyelembe. Ha több soron át húzódik a megjegyzés, akkor a /* megjegyzés */ jeleket használjuk.

Karakteres változók

Minden karakternek van egy kódja, ezek az ún. ASCII kódok. Ez azt jelenti, hogy minden karakternek megfeleltetünk egy számot, ezek közül az első 128 az angol abc-nek, az arab számoknak, a görög betűknek és néhány elterjedtebb nyelv speciális karaktereinek felel meg. A következő 128 különböző nemzeti nyelveknek felel meg, így eltérő karaktertáblák vannak forgalomban (amíg az UNICODE ki nem szoítja ezt az egészet). Számunkra egyelőre csak az lényeges, hogy a karaktereknek számokat feleltetünk meg, így például ezen számok alapján sorba is állíthatjuk őket.
Készítsünk egy olyan programot, amelyik beolvas a billentyűzetről egy karaktert és kiírja a kódját.

#include <stdio.h>
void main(){
char k; //itt vezetjük be a k karakterváltozót
printf("Kerek egy karaktert:\n");
scanf("%c",&k);
printf("A beirt karakter: %c: \n",k);
printf("A beirt karakter: %d kodja: \n",k); // az eltérés lényegében az, hogy itt %d szerepel a %c helyett
scanf("%c",&k); //ez csak azért kell, hogy megálljon, tetszőleges számot írunk be
}

A karaktereket ' jelek közé tesszük. Ha ch egy karakterváltozó, akkor a
ch = 'a';
utasítás hatására a ch felveszi az a értékét.
A karakterekkel azokat a műveleteket végezhetjük, amelyeket egész számokkal is elvégezhetünk. Nézzük ehhez a következő mintaprogramot:

#include <stdio.h>
void main(){
char k; //itt vezetjük be a k karakterváltozót
printf("Kerek egy karaktert:\n");
scanf("%c",&k);
printf("A beirt karakter: %c \n",k);
printf("Az ezt koveto karakter: %c\n",k+1);
scanf("%c",&k); //ez csak azért kell, hogy megálljon, tetszőleges számot írunk be
}