

PROGRAMMERING I C

(C)Copyright 1993 Odd-Jarle Kristoffersen
All Rights Reserved.


ADVARSEL
--------

Forfatteren av boken tar ingen ansvar ved kompilering og kjring av
program i dette kurset. Forbehold om skrivefeil.
Alle filene i dette arkivet er kopibeskyttet og er forfatterens
eiendom. Endring av filer, sletting av filer m.m. er ikke tillatt uten
skriftlig tillatelse fra forfatteren.
Forfatterens adresse finnes i filen Les_Meg!.TXT. Videredistribusjon
eller salg av kurset (arkivet) er ikke tillatt i noen form. Kurset kan
heller ikke legges ut offentlig p BBS systemer uten skriftlig tillatelse
fra forfatteren. Oversikt over BBS'er og personer som har ftt slik
tillatelse finnes ogs i Les_Meg!.TXT. Der finnes ogs en oversikt over
filer som m distribueres i arkivet.


----------------------------------------------------------------------------

Kursinnhold

* Introduksjon

* C-program - et eksempel

* Datatyper, operatorer og uttrykk

* Tabeller (arrays) og pekere

* Flyt-kontroll

* Strukturer

* Data IO

* C- og UNIX-systemkall

* Standard bibliotek



(picture 1)



HISTORIKK

C ble utviklet av Dennis Richie ved Bell Labs i 1971.
	- Kombinerer hgniv egenskaper som blokkstruktur,
	  datatyper og funksjoner med lavniv maskinnr
	  programmering

C ble utviklet samtidig med UNIX og er svrt egnet til
systemprogrammering.
	- UNIX kjerne og mange UNIX' hjelpprogrammer er
	  skrevet i C
	- Mestparten av MS Windows og OS/2 er skrevet i C

Utviklet for  vre et generelt programmeringssprk.
	- De fleste UNIX-applikasjoner er skrevet i C
	- Det samme gjelder for svrt mange av programmene
	  for MS-DOS (Ashton-Tate, Borland, Lotus osv.)
	- Dette gjelder ogs for Amiga applikasjoner

C er lite nok og portabelt nok til  kunne g p de fleste maskiner.
	- Kompilatorer finnes p alle typer maskiner, fra PC XT
	  til Cray
	- Vanlig for Amiga, MS-DOS, OS/2, UNIX, VMS osv.



C's ANER OG SLEKTNINGER

(picture 2)

C har hentet forskjellige egenskaper fra en rekke av sine forgjengere.

	- B, skrevet av Ken Thompson i 1970, var basert p BCPL. C er
	  en videreutvikling av B, med f.eks. samme type flytkontroll,
	  men likevel ingen dialekt (B er f.eks et typelst sprk)

	- Fra Algol 68 arvet C datatyper - char, int og float

	- PASCAL og Simula 67 har pvirket dagens standard for C;
	  ANSI C fra 1988


C's EGENSKAPER

Et C-program bestr av deklarasjoner og en eller flere funksjoner.

C tilbyr et ftall fundamentale datatyper.
	- Integer (int) i forskjellige strrelser, tegn (char) og
	  flyttall (float)

C tilbyr tilstrekelig flyt-kontroll for velstrukturerte programmer
	- Valgmuligheter med if
	- Lkkestrukturer med for, while og do
	- Valg av et av flere alternativer (switch)

C tilbyr pekere og adressearitmetikk
	- Peker- og adressearitmetikken gjr C velegnet til
	  maskinr programmering
	- Pekere muliggjr skalt "call by reference".
	  Funksjoner i C vil ellers kopiere verdiene til
	  argumentene og operere p disse ("call by value").

Variabler kan vre lokale til en funksjon - eksterne eller
fullstendig globale.

Funksjoner kan kalles rekursivt, lokale variable til funksjonen er
vanligvis skalt "automatiske".
	- Automatiske variable opprettes p nytt hver gang funksjonen
	  kalles opp.

C er et typesvakt sprk.
	- C tillater en viss konverting av datatyper.
	- ANSI C er mer restriktiv mht. datakonvertering enn opprinnelige
	  versjoner av C-kompilatorene.
	- Dersom sterk typesjekking er nskelig, benytte programmet
	  lint (UNIX).

C har ingen innebygde IO-operasjoner, mekansimer for multiproessering
eller parallelle operasjoner.
	- Sprket er med hensikt gjort enkelt, for  lette "porting" til
	  nye maskinplattformer.
	- Et lite, enkelt sprk er lettere  lre enn et komplekst sprk.
	- Siden sprket ikke tilbyr setninger som read eller write, m
	  kompilatorene suppleres med bibliotek av funksjoner som gir
	  programmene slik og lignende muligheter.

ANSI C fra 1988 sikrer at program som er skrevet for en maskintype enkelt
kan kompileres og kjres p en annen maskin.


UNIX UTVIKLINGSMILJ

I UNIX finnes det et stort antall kommandoer for  manipulere filer og
tekst, noen f tas med her.

Utviklingsmiljet for C bestr av

	- diverse redigeringsverkty, vanligst er editoren vi
	- en C pre-prosessor
	- en kompilator (cc)
	- et program for  typesjekke kildekoden (lint)
	- verkty for  hndtere flere (mange) kildetekstfiler og
	  lenke disse sammen til et program (make)
	- verkty for  holde orden p forskjellige versjoner av
	  programkoden (sccs)
	- diverse bibliotek med forhndsdefinerte funksjoner for
	  forskjellige oppgaver
	- verkty for avlusing av programkode (adb)

Kommandoen ls viser filer og underkataloger i gjeldende katalog:

	$ ls -l

  -l er en opsjon til ls-kommandoen som gir oss en rapport i langt format.

  ls tar som argument navnet p en angitt katalog og viser innholdet
  i katalogen:

	$ ls -l cprog

Bruk kommandoen more for  skrive ut innholdet av en tekstfil p skjermen.
more gir oss sidevis utskrift.

	$ more cprog/kap1/hallo.c

  Bruk ordskiller for  f fram neste side p skjermen.

Kontinuerlig (ikke sidevis) utskrift p skjermen fr vi med cat-kommandoen:

	$ cat cprog/kap1/hallo.c

Finn hvilken katalog du arbeider i (print working directory):

	$ pwd

G til en gitt katalog for  fortsette arbeidet der:

	$ cd cprog/kat1

Kopiering av filer:			cp fra_fil til_fil

	$ cp cprog/kap1/hallo.c hei.c

Flytting av filer (nytt navn):		mv gammelt_navn nytt_navn

	$ cd cprog/kap1
	$ mv hello.c heisan.c

Sletting av filer:			rm filnavn

	$ rm cprog/kap1/hei.c

Retting av skrivefeil p kommandolinjen:

	- Trykk <DEL> for  slette siste tegn
	- Trykk ^U <CTRL-U> for  slette hele linjen

Standard redigeringsverkty for UNIX er editoren vi. vi har en hy
innlringsterskel, men er et godt verkty for den drevne bruker.

Redigering av en fil:			vi tekstfil

vi skiller mellom innsettingsmodus og kommandomodus.

	- I kommandomodus tillater vi navigering i teksten, sletting
	  av tekst, innlesing av filer, skriving til filer, sking,
	  start av tekstinnsetting osv.

	- Innsetting av tekst med
		l	- innsetting p begynnelsen av linjen
		i	- innsetting foran markren
		A	- tilfyelse av tekst p slutten av linjen
		a	- tilfyelse etter markrposisjon
		O	- pne tom linje over markren
		o	- pne tom linje under markren

	- Erstatte tekst med
		R	- overskriv teksten f.o.m. markrposisjon
		r	- erstatt ett tegn

	- R-kommandoen og innsetting av tekst avsluttes med <ESC>.
	  Etter <ESC> er vi i kommandomodus, klar for nye kommandoer.

Kommando for utskrift av tekstfiler under UNIX avhenger av hvilken
UNIX-versjon som benyttes. Under System V er kommandoen:

	$ lpr filnavn

Under AIX er kommandoen:

	$ print filnavn

Kompilatoren til UNIX kalles cc. Men cc er egentlig et sett av programmer
som sammen utfrer full oversettelse fra kildekode til utfrbart program.

(picture 3)

Pre-proessoren cpp behandles senere i kurset (se kapittel 8).



C-PROGRAM : EN INTRODUKSJON

Programmet som skriver teksten

	hello, world

p skjermen er "obligatorisk" som ditt frste C-program.

Nr du utfrer programmet har du vrt gjennom:
	- Redigering av en kildetekst
	- Et par syntaks-regler for C-program
	- Kompilering og lasting
	- Kommando for  utfre programmet



VING 2.3 - Introduksjon til C

1.	Endre programmet som viser tabell over kvadrater osv. slik at
	det fr overskrift som vist nedenfor:

	Heltall	Kvadr.	3.grad	4.grad	5.grad	6.grad	7.grad

	  1       1       1       1       1       1       1
	  2       4       8       16      32      64      128
	  3       9       27      81      243     729     2187
	  4       16      64      256     1024    4096    16384
	  5       25      125     625     3125    15625   78125
	  6       36      216     1296    7776    46656   279936
	  7       49      343     2401    16807   117649  823543


2.	Programmet nedenfor inneholder en kjrefeil. Hvordan hndteres
	denne av kompilator og AmigaDOS (evnt. MS-DOS) ?

	Program:

	/*************
	Run-time error
	*************/

	#include <stdio.h>

	main()
	{
		int	x, y = 0;
		x = 1/y;
		printf("%d\n", x);
	}


3.	Skriv et program som interaktivt spr etter navn og alder.
	Programmet skal svare med:

		Hallo navn, neste r blir du neste_alder

	hvor neste_alder er alder + 1.

	Hint: For  lese inn en tekst fra tastaturet benyttes
	standardfunksjonen getchar(). Bruk eksemplet i lrebokas
	kapittel 1.9 (side 29 i den engelske utgaven) som mal.


4.	Hvilke av flgende ord er lovlige indetifikatorer og hvorfor ?

	3id		_JA		o_no_o_no	00_go		ferdig*
	1_av_flere	en_5._del	en-av-to	XYkoord		int



KAPITTEL 3 - DATATYPER


* Deklarasjon av variabler

* Lagringsklasser

* Fundamentale datatyper

* Konverting av typer og "casts" (omforminger)

* Evalueringsrekkeflge

* Matematiske funksjoner

* Arrays (tabller)

* Pekere



KAPITTEL 4 - Flytkontroll og mer om funksjoner

Lkker og forgrening

	- repitisjon operatorer
	- while og do-lkker
	- for-lkker
	- break, continue (og goto)
	- aksjonsvalg med switch

Opertorer og tilordninger

	- formell gjennomgang av noen nye operatorer

Funksjoner

	- Samspill mellom funksjoner og data
	- C's lagermodell
	- Variablers levetid og synlighet



KAPITTEL 5

Pekere og tabeller


PEKERE OG TABELLER

Tabellnavn er det samme som pekere

Adresse-aritmetikk

Sende og returnere tabeller

Dynamisk minnetildeling

Oppsummering



KAPITTEL 6

Strukturer og grafer



STRUKTURER OG GRAFER

Introduksjon

Strukturer

Grafer

Lenkende datastrukturer

Oppsummering



KAPITTEL 7 : UNIONS, ENUM OG BIT-OPERASJONER


INNHOLDSFORTEGNELSE:

	UNIONER

		- deklarasjon og definisjon
		- adressetilpassing

	OPPRAMSING (ENUM)

		- diskrete verdier
		- #define som alternativ
		- bruk av enum

	BIT-OPERASJONER

		- bitvise binre operasjoner
		- masker
		- pakking av data
		- bit-strukturer


KAPITTEL 8 - PROGRAMORGANISERING OG I/O


INNHOLDSFORTEGNELSE

	PROGRAM BESTENDE AV FLERE MODULER
		- Lokale funksjoner og variabler
		- Typedef
		- Eksempel, FIFO som lenket liste

	ORGANISERING AV STRRE PROGRAMMER
		- Biblioteksfiler
		- Make

	C FORPROSESSOR
		- Direktiver
		- Makroer
		- Betinget kompilering
		- Header-filer

	STANDARD-BIBLIOTEKER
		- stdio (standard I/O)
		- Funksjoner for filbehandling

	LAVNIV I/O
		-Filaksess

	KOMMANDOLINJEARGUMENTER


