C-kielen alkeisopas
Johdanto

Tässä oppaassa tutustutaan C-kielen alkeisiin ja mm. seuraaviin asioihin:

  • Mitä on ohjelmointi
  • C-kielisen ohjelman rakenne
  • Muuttujien käyttö
  • Funktioiden käyttö
  • Ehtorakenteet
  • Toistorakenteet

C-kielisiä ohjelmia kirjoittaessa käyttöjärjestelmänä voi olla Windows, Linux tai MacOs.

Mitä on ohjelmointi?

Ohjelmointi tarkoittaa tietokone-ohjelman kirjoittamista. Tietokone suorittaa vain konekielisiä ohjelmia. Konekieli on ihmiselle vaikeaselkoista, joten ihmiset eivät kirjoita ohjelmia konekielellä vaan jollakin ohjelmointikielellä. Tätä ihmisen kirjoittamaa "tekstiä" kutsutaan lähdekoodiksi (tai koodiksi). Tämän vuoksi ohjelman kirjoittamista kutsutaan myös koodaamiseksi.

Kääntäjä ja tulkki

Kuten sanottu tietokone ei siis osaa suorittaa ihmisen kirjoittamaa lähdekoodia, vaan se on ensin muutettava konekieliseksi. Muuttaminen voi tapahtua joko kääntäjän tai tulkin avulla. Kääntäminen tarkoittaa sitä, että kääntäjäksi kutsuttu tietokone-ohjelma lukee lähdekoodin sisältävän tiedoston ja muodostaa sen perusteella uuden tiedoston, joka on konekielinen. Tämä konekielinen tiedosto voidaan nyt suorittaa tietokoneella, eikä sen suorittamiseksi tarvita enää lähdekoodia, eikä kääntäjää. Kääntäjän muodostama konekielinen tiedosto voidaan siirtää toiseen koneeseen ja suorittaa siinä vaikkei tässä koneessa ole mainittua kääntäjää eikä lähdekoodia.

Tulkitseminen tarkoittaa sitä, että uuttaa erillistä tiedostoa (konekielistä) ei muodosteta, vaan aina kun ohjelma suoritetaan tulkki lukee lähdekoodin ja antaa konekielisen koodin tietokoneen suoritettavaksi ikään kuin lennosta. Tällä tavalla luodun sovelluksen voi suorittaa vain koneessa, jossa on mainittu tulkki.

Osa ohjelmointikielistä on käännettäviä ja osa tulkittavia. Käännettäviä ohjelmointikieliä ovat mm. C, C++, C#, Java. Tulkittavia ovat mm. Python, PHP, JavaScript.

Tietokone ohjelman toiminta

Tietokone ohjelman eli sovelluksen kannalta tietokoneen keskeisimmät osat ovat prosessori, kiintolevy ja keskusmuisti (RAM). Käyttäjän kirjoittama lähdekoodi ja kääntäjän tuottama konekielinen tiedosto tallennetaan kiintolevylle, jossa tiedostot säilyvät myös koneen sammuttamisen jälkeen. Kun ohjelma käynnistetään se (tai osa siitä) ladataan keskusmuistiin. Keskusmuisti on jaettu tavun(8 bittiä) kokoisiin lohkoihin eli muistipaikkoihin. Suoritin suorittaa ohjelmaa lukemalla peräkkäisiä muistipaikkoja alueelta johon ohjelmakoodi on tallennettu, ja tulkitsemalla lukemansa bittijonot konekielisiksi käskyiksi. Kullakin muistipaikalla on osoite, joita tarvitaan kertomaan suorittimelle mistä muistipaikasta sen tulee kulloinkin lukea tietoa.

Oheinen kuva havainnollistaa keskumuistin rakennetta ja muistipaikkojen osoitteita. Kuhunkin muistipaikkaan voi siis tallentaa yhden tavun eli 8 bittiä.

Seuraavassa esimerkissä luodaan merkki tyyppinen muuttuja nimeltään myVariable ja sen arvoksi sijoitetaan a kirjain. Sitten tulostetaan

  • muuttujan arvo
  • muuttujan osoite
  • muuttujan arvo desimaalimuodossa
Alla on esimerkin lähdekoodi
#include <stdio.h>

int main()
{
    char myVariable='a';
    printf("Muuttujan myVariable arvo = %c\n",myVariable);
    printf("Muuttujan myVariable osoite = %p\n",&myVariable);
    printf("Muuttujan myVariable arvo desimaalimuodossa = %d\n",myVariable);

    return 0;
}
Ja ohjelma tulostaa seuraavat rivit
Muuttujan myVariable arvo = a
Muuttujan myVariable osoite = 00000065eb7ff92f
Muuttujan myVariable arvo desimaalimuodossa = 97
Nyt tietokoneen muistissa on seuraavanlainen data

Ja siis tuo binääriluku 0110 0001 on desimaalimuodossa luku 97. Ja ascii merkkikoodauksessa tuo vastaa merkkiä a. Ascii merkit löytyvät esimerkiksi sivulta https://www.asciitable.com/



Toggle Menu