Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migration of unmigrated content due to installation of a new plugin

Yleistä

Muuttujiin talletetaan tiedot, joita ohjelma käsittelee. Tieto voi olla lukuja ja merkkejä, tieto voi olla esitetty yksittäinä arvoina tai taulukkomuodossa.

Muuttujan määritteleminen tapahtuu seuraavasti:

No Format
Wiki Markup
h2. Yleistä

Muuttujiin talletetaan tiedot, joita ohjelma käsittelee. Tieto voi olla lukuja ja merkkejä, tieto voi olla esitetty yksittäinä arvoina tai [taulukkomuodossa|Taulukot].

Muuttujan määritteleminen tapahtuu seuraavasti:
{noformat}tyyppi muuttujan_nimi;{noformat}

,

...

missä

...

tyyppi

...

on

...

tiedon

...

tyyppi

...

ja

...

muuttujan_nimi

...

on

...

muuttujan

...

nimi.

...

Esimerkiksi

...

yhden

...

kokonaislukumuuttujan

...

määritteleminen:

{
Code Block
}int muuttuja1;{code}

h2. Muuttujan tyyppi

Muuttujat ovat siis tietovarastoja, tietovarastot ovat erilaiselle tiedolle erikokoisia.

Siksi C-kielessä tiedolla on aina tyyppi, tyyppi kertoo muuttujan tarvitseman muistin määrän. Tietokoneen muistia kuvataan tavuilla. Tavun pituus on kahdeksan bittiä. Kahdeksalla bitillä voidaan kuvata luvut 

Muuttujan tyyppi

Muuttujat ovat siis tietovarastoja, tietovarastot ovat erilaiselle tiedolle erikokoisia.

Siksi C-kielessä tiedolla on aina tyyppi, tyyppi kertoo muuttujan tarvitseman muistin määrän. Tietokoneen muistia kuvataan tavuilla. Tavun pituus on kahdeksan bittiä. Kahdeksalla bitillä voidaan kuvata luvut 0...255

...

tai

...

-128...+127.

...

Esimerkiksi

...

ASCII-taulukossa

...

,

...

joka

...

sisältää

...

tietokoneen

...

esittämät

...

merkit,

...

jokainen

...

kirjoitettava

...

merkki

...

edustaa

...

lukua

...

0...255.

...

Täten

...

yksi

...

merkki

...

varaa

...

tietokoneelta

...

muistia

...

yhden

...

tavun.

...

(Unicode-merkistössä

...

merkit

...

esitetään

...

kahdella

...

tavulla,

...

jolloin

...

voidaan

...

esittää

...

65535

...

erilaista

...

merkkiä,

...

jolloin

...

miltei

...

kaikki

...

maailman

...

merkit

...

saadaan

...

esitettyä

...

ilman

...

erillisiä

...

kooditaulukoita)

...

C-kielen

...

muuttujien

...

tyypit

...

ja

...

arvoalueet

...

32

...

bittisessä

...

järjestelmässä:

...

tyyppi

merkitys

tavuja

etumerkitön lukualue

etumerkillinen lukualue

char

merkki

1

0...255

...

-128...+127

...

short

lyhyt kokonaisluku

2

0...65536

...

-32767...+32768

...

int

kokonaisluku

4

0...4294967296

...

-2147483647...+2147483648

...

long

pitkä kokonaisluku

8

0...18446744073709551615

...

-9223372036854775808...+9223372036854775807

float

reaaliluku

4

-

?

double

kaksoistarkkuuden reaaliluku

8

-

?

void

tavuosoitin (voidaan ajatella, että tämä ei tarkoita mitään)

-

-

-

Muuttujan tyyppi kertoo sen, millaista tietoa muuttujaan voi tallentaa, esimerkiksi char OmaMuuttuja voi tallettaa yhden merkin.

Eli muuttujaan OmaMuuttuja voidaan sijoittaa yksi merkki, esimerkiksi:

Code Block
 |
| {{float}} | reaaliluku | 4 | \- | ? |
| {{double}} | kaksoistarkkuuden reaaliluku | 8 | \- | ? |
| {{void}} | tavuosoitin (voidaan ajatella, että tämä ei tarkoita mitään) | \- | \- | \- |
Muuttujan tyyppi kertoo sen, millaista tietoa muuttujaan voi tallentaa, esimerkiksi {{char OmaMuuttuja}} voi tallettaa yhden merkin.

Eli muuttujaan {{OmaMuuttuja}} voidaan sijoittaa yksi merkki, esimerkiksi:
{code}
char OmaMuuttuja = 'a'; // huom! yksittäiset merkit laitetaan heittomerkkien väliin.
{code}

Toinen

...

esimerkki:

{
Code Block
}
int Luku = 5; // kokonaislukumuuttuja, joka voi tallettaa etumerkillisen luvun
{code}

Muuttujalle

...

voidaan

...

antaa

...

lisämääreitä:

Määre

Merkitys

Käy seuraaviin tyyppeihin

signed

etumerkillinen

char, int

unsigned

etumerkitön

char, int

long

pitkä

int, double

short

lyhyt

int

Esim.

Code Block

|| Määre || Merkitys || Käy seuraaviin tyyppeihin ||
| {{signed}} | etumerkillinen | {{char, int}} |
| {{unsigned}} | etumerkitön | {{char, int}} |
| {{long}} | pitkä | {{int, double}} |
| {{short}} | lyhyt | {{int}} |
Esim.
{code}
unsigned int Luku = 65535; // Muuttuja voi olla ainoastaan positiivinen kokonaisluku
{code}

h2. Muuttujan nimeäminen

Muuttuja kannattaa nimetä selkeällä nimellä, joka kertoo muuttujan käyttötarkoituksen. Huom\! isot ja pienet kirjaimet tarkoittavat eri asiaa.
Puhdas C-kielen esittelytapa on seuraava:

Muuttujan nimeäminen

Muuttuja kannattaa nimetä selkeällä nimellä, joka kertoo muuttujan käyttötarkoituksen. Huom! isot ja pienet kirjaimet tarkoittavat eri asiaa.
Puhdas C-kielen esittelytapa on seuraava:

Code Block
{code}
int auton_nopeus;
{code}

Muuttujan

...

eri

...

sanat

...

voidaan

...

erotella

...

toisistaan

...

esimerkiksi

...

alaviivalla.

...

C++:ssa

...

käytetään

...

tyypillisesti

...

tapaa,

...

jossa

...

muuttujassa

...

olevat

...

sanat

...

aloitetaan

...

isoilla

...

kirjaimilla

...

seuraavasti:

{
Code Block
}
int AutonNopeus;
{code}

Monet

...

ohjelmoijat

...

liittävät

...

muuttujan

...

eteen

...

kirjaimen

...

kuvaamaan

...

muuttujan

...

tyyppiä

...

seuraavasti:

{
Code Block
}
int iAutonNopeus;
{code}

Tyypistä

...

otetaan

...

yksi

...

kirjain

...

muuttujan

...

eteen

...

muistuttamaan

...

ohjelmoitsijaa

...

muuttujalle

...

annetusta

...

tyypistä.

...

(tätä

...

sanotaan

...

unkarilaiseksi

...

notaatioksi)

...


Edellä

...

mainitut

...

muuttujien

...

nimeystavat

...

eivät

...

vaikuta

...

millään

...

tapaa

...

muuttujan

...

käyttöön

...

tai

...

ohjelman

...

toimintaan.

...

Muuttujan

...

näkyvyysalue

...

Muuttuja

...

voi

...

olla

...

käytettävissä

...

ainoastaan

...

ohjelmalohkossa,

...

yhdessä

...

funktiossa

...

(paikallinen),

...

yhdessä

...

tiedostossa

...

tai

...

koko

...

ohjelmassa.

...

Riippuen

...

siitä

...

missä

...

kohtaa

...

ohjelmaa

...

muuttuja

...

esitellään,

...

sitä

...

voidaan

...

käyttää

...

ohjelmassa

...

eri

...

tavoin.

...

Yhteinen

...

muuttuja

...

(global

...

variable)

...

Yhteinen,

...

tai

...

globaali,

...

muuttuja

...

esitellään

...

kaikkien

...

funktioiden

...

ulkopuolella

...

ja

...

se

...

"näkyy"

...

eli

...

se

...

on

...

käytettävissä

...

kaikissa

...

funktioissa,

...

jotka

...

ovat

...

samassa

...

tiedostossa

...

kuin

...

muuttuja.

...

Yhteistä

...

muuttujaa

...

on

...

hyvin

...

helppo

...

käyttää,

...

koska

...

sen

...

arvoon

...

päästään

...

käsiksi

...

kaikista

...

funktioista.

...

Kun

...

ohjelma

...

kasvaa

...

suureksi,

...

siinä

...

voi

...

olla

...

tuhansia

...

muuttujia,

...

jolloin

...

yhteisten

...

muuttujien

...

käyttö

...

tulee

...

hankalaksi

...

ja

...

ohjelmasta

...

tulee

...

altis

...

virheille.

{
Code Block
}
#include <stdio.h>

int x=0; // Yhteinen (globaali) muuttuja
int y=0; // Yhteinen (globaali) muuttuja

int main()
{
   return 1;
}
{code}

h3. Paikallinen muuttuja 

Paikallinen muuttuja (local

...

variable)

...

Paikallinen

...

muuttuja

...

esitellään

...

ohjelmalohkon

...

(tai

...

funktion)

...

sisällä

...

ja

...

se

...

on

...

käytettävissä

...

ainoastaan

...

siinä

...

lohkossa,

...

jossa

...

se

...

on

...

määritelty.

...

Alkuarvokseen

...

paikallinen

...

muuttuja

...

saa

...

satunnaisarvon,

...

siksi

...

paikalliset

...

muuttujat

...

tulee

...

alustaa

...

johonkin

...

alkuarvoon

...

esittelyn

...

yhteydessä.

...


Paikallinen

...

muuttuja

...

katoaa

...

(ja

...

siten

...

kadottaa

...

arvonsa),

...

kun

...

ohjelmalohko

...

(tai

...

funktio)

...

päättyy.

...

Esimerkki

...

funktion

...

paikallisesta

...

muuttujasta:

{
Code Block
}
float funktio()
{
    float f;                               // Funktion paikallinen muuttuja
    printf("Anna liukuluku: ");
    scanf("%f", &f);
    printf("Annoit luvun %.2f\n", f);
    return f;
}

int main()
{
    int i;
    float a=0.0;                           // Main-funktion paikallinen muuttuja
    for (i=0; i<100; i++) {
        a=funktio();
        printf("a on %f",a);
    }
    return i;
}
{code}

Esimerkki

...

ohjelmalohkon

...

paikallisesta

...

muuttujasta:

{
Code Block
}
int main()
{
    int i;                                 // Main-funktion paikallinen muuttuja

    for (i=0; i<100; i++) {
        float f;                           // For-toistorakenteen sisäinen paikallinen muuttuja
        printf("Anna liukuluku: ");
        scanf("%f", &f);
        printf("Annoit luvun %.2f\n", f);
    }
}
{code}

h3. Samannimiset muuttujat

Ohjelmassa ei saa olla saman nimisiä muuttujia, paitsi jos ne on määritelty eri näkyvyysalueelle. Eli ohjelmassa voi olla globaali muuttuja {{int x}} sekä myös mainissa muuttuja {{int 

Samannimiset muuttujat

Ohjelmassa ei saa olla saman nimisiä muuttujia, paitsi jos ne on määritelty eri näkyvyysalueelle. Eli ohjelmassa voi olla globaali muuttuja int x sekä myös mainissa muuttuja int x. Tämä on sallittua, tosin ei suositeltavaa ilmiselvän sekaannusvaaran takia.

Code Block
x}}. Tämä on sallittua, tosin ei suositeltavaa ilmiselvän sekaannusvaaran takia.

{code}
#include <stdio.h>

int x = 5;                                // Globaali muuttuja

int main()
{
    int x = -100;                         // Main-funktion paikallinen muuttuja

    printf("x = %d\n", x);
}
{code}

Minkä

...

arvon

...

ohjelma

...

tulostaa?

{
No Format
}
Vastaus: x = -100
{noformat}

Jos

...

ohjelmassa

...

on

...

saman

...

nimisiä

...

muuttujia,

...

viitataan

...

aina

...

'lähinnä

...

olevaan'

...

eli

...

rajatuimmalla

...

näkyvyydellä

...

olevaan.

...

Merkkijonot

Merkkijono on vektori eli yksiulotteinen taulukko. C-kielessä

...

ei

...

merkkijonoille

...

ole

...

valmista

...

muuttujaa,

...

vaan

...

merkkijonot

...

on

...

esiteltävä

...

vektoreina

...

seuraavasti:

{
Code Block
}
char Sukunimi[100];
{code}

Merkkijono

...

on

...

tyyppiä

...

char

...

ja

...

merkkijonon

...

perään

...

laitetaan

...

hakasulkuihin

...

merkkien

...

suurin

...

sallittu

...

määrä

...

+1.

...

Viimeinen

...

merkkijonon

...

merkki

...

on

...

varattu

...

lopetusmerkille

...

\0,

...

jonka

...

ascii

...

arvo

...

on

...

nolla,

...

siitä

...

kääntäjä

...

tietää,

...

mihin

...

merkkijono

...

loppuu.

...

Merkkijonon

...

esittelyssä

...

muistista

...

varattu

...

alue

...

ei

...

tyhjene

...

vaan

...

sinne

...

jää

...

aikaisempi

...

sisältö.

...

Merkkijono

...

voidaan

...

alustaa

...

esittelyn

...

yhteydessä:

{
Code Block
}
char Sukunimi[100] = "Jokunen";
{code}

tai

tai

Code Block


{code}
char Sukunimi[] = "Jokunen";
{code}

Viimeisessä

...

vaihtoehdossa

...

merkkijonon

...

suurimmaksi

...

sallituksi

...

pituudeksi

...

tulee

...

8

...

eli

...

kun

...

merkkijono

...

alustetaan

...

esittelyn

...

yhteydessä

...

ilman

...

hakasulkujen

...

välissä

...

olevaa

...

lukua,

...

kääntäjä

...

laskee

...

merkkijonon

...

pituuden

...

automaattisesti.

...

Staattiset muuttujat

Paikallinen staattinen muuttuja

Jos halutaan paikallisen muuttujan muistavan arvonsa siitä, kun funktio suoritettiin edellisen kerran, täytyy muuttuja esitellä staattisena esim. seuraavasti:

Code Block


----
h2. Staattiset muuttujat

h3. Paikallinen staattinen muuttuja

Jos halutaan paikallisen muuttujan muistavan arvonsa siitä, kun funktio suoritettiin edellisen kerran, täytyy muuttuja esitellä staattisena esim. seuraavasti:

{code}
void funktio()
{
    static int Laskuri; // Paikallinen staattinen muuttuja, säilyttää tietonsa funktiokutsujen välillä
}

int main()
{
}
{code}

Staattinen

...

muuttuja

...

saa

...

automaattisesti

...

alkuarvokseen

...

nollan,

...

joten

...

sitä

...

ei

...

alusteta

...

esittelyn

...

yhteydessä.

...

Staatisena

...

esitellyllä

...

muuttujalla

...

voidaan

...

esim.

...

laskea,

...

kuinka

...

monta

...

kertaa

...

ko.

...

funktiossa

...

on

...

käyty.

...

Yhteinen

...

staattinen

...

muuttuja

...

Haluttaessa

...

rajata

...

yhteisen

...

muuttujan

...

näkyvyys

...

ainoastaan

...

siihen

...

tiedostoon,

...

jossa

...

se

...

on

...

esitelty,

...

täytyy

...

yhteinen

...

muuttuja

...

esitellä

...

staattisena

...

esim.

...

seuraavasti:

{
Code Block
}
static long Summa; // Globaali staattinen muuttuja

int main()
{
}
{code}

Edellä

...

oleva

...

määrittely

...

kannatta

...

tehdä

...

esim.

...

silloin

...

kun

...

samaa

...

ohjelmistoprojektia

...

tekee

...

useita

...

henkilöitä

...

ja

...

halutaan

...

estää

...

samanimisten

...

eri

...

tiedostoissa

...

olevien

...

muuttujien

...

vaikutus

...

toisiinsa.

...

Nämäkin

...

muuttujat

...

täytyy

...

tietysti

...

esitellä

...

funktioiden

...

ulkopuolella.