Teknillinen korkeakoulu
Tietojenkäsittelyopin laboratorio
Tik-76.002 Tietotekniikka B

TENTTI
21.01.97

Kaikissa ohjelmointitehtävissä on käytettävä ANSI-C-kieltä (C++ ei kelpaa).

1) Määrittele lyhyesti (1-2 riviä) seuraavat C-kielen käsitteet: (6p)
a) tietotyyppi
b) operaattorien presedenssi
c) osoitin
d) struct
e) symbolinen vakio
f) kirjasto

2a) Kirjoita funktio, joka saa argumenttina positiivisen kokonaisluvun ja palauttaa sen numeroiden summan. Esim. jos argumentin arvo on 537, funktio palauttaa arvon 15, koska 5+3+7=15. (2p)
2b) Kirjoita funktio, joka saa argumenttina merkin c ja merkkijonon cs ja joka palauttaa osoittimen ensimmäiseen paikkaan, missä c esiintyy merkkijonossa cs. Jos esiintymää ei löydy, funktio palauttaa arvon NULL. (2p)
2c) Anna esimerkki kummankin funktion käytöstä. Esitä myös tarpeelliset määrittelyt. (2p)

3) Seuraavalla sivulla olevassa ohjelmassa on kolme toiminnallista virhettä (ei siis syntaksivirheitä). Luettele virheelliset kohdat ja selitä, mikä niissä on virheellistä (pelkkä toteamus "C-kielessä asiaa ei tehdä näin" ei riitä selityksenä). (6p)

4) Kirjoita funktio, joka palauttaa arvon True (1), jos argumenttina annettu kokonaisluku löytyy argumenttina annetusta taulukosta. Taulukko on järjestyksessä. Jos aLkiota ei löydy, funktio palauttaa arvon False (0).
Vastauksen arvioinnissa otetaan huomioon paitsi ohjelman oikeellisuus myös ohjelman tehokkuus. (4p)

5) Tässä tehtävässä sinun tulee esittää toteutus abstraktille tietotyypille Jono (queue). Jokainen jonon alkio sisältää kokonaisluvun ja jonon toteutukseen liittyy kolme operaatiota, initialize, add ja remove. Jonon kokoa ei saa rajoittaa ennakolta, vaan sitä rajoittaa vain ohjelman käytettävissä oleva muisti.
a) Esitä otsikkotiedosto (header file), joka sisältää tarpeelliset tietotyyppien ja annettujen kolmen funktion prototyyppien määrittelyt. (3p)
Esitä kooditiedosto, joka sisältää seuraavien funktioiden toteutujien
b) Funktio initialize, joka alustaa tyhjän jonon. (lp)
c) Funktio add, joka lisää alkion jonon loppuun. (2p)
d) Funktio remove, joka palauttaa ja poistaa alkion jonon alusta. (2p)

6) Arvioi kysymyksiin vastaamiseen käyttämäsi yhteisaika puolen tunnin tarkkuudella.

#include 

void swap(int *, int *);
long fac(int);

int main(void)
{
	int i, j;

	printf("Enter two integers:\n");
	scanf("%d%d", &i, &j);
	swap(i, j);
	printf("Swapping: i = %d, j = %d\n", i, j);
	printf("%d! = %ld\n", i, fac(i));
	return 0;
}

/* swap: exchange the values of two integer variables */
void swap(int *pi, int *pj)
{
	int temp;

	temp = *pi;
	*pi = *pj;
	*pj = temp;
}

/* fac: compute the factorial n*(n-1)*...*2*1 */
long fac(int n)
{
	if (n=1)
		return 1;
	else
		return fac(n)*(n-1);
}