Presentation laddar. Vänta.

Presentation laddar. Vänta.

Anders Sjögren Programmering i ANSI-C Ett första program för att se vart vi ska...

Liknande presentationer


En presentation över ämnet: "Anders Sjögren Programmering i ANSI-C Ett första program för att se vart vi ska..."— Presentationens avskrift:

1 Anders Sjögren Programmering i ANSI-C Ett första program för att se vart vi ska...

2 Anders Sjögren Det första programmet källkoden 1A_PGM.C (en textfil) #include int main ( void ) { printf("Hello world!\n"); return 0; } Windowsprogram 1A_PGM_W.EXE DOS-promptDOS direkt 1A_PGM.EXE Om man kompilerar denna textfil ( hur man gör kommer senare ) så får man en maskinkodsfil, EXE-fil, som kan exekveras. källkod - editera! kompilera! ”EXE”-fil! plattform!

3 Anders Sjögren Ett program växer fram... int main ( void ) { return 0; } stommen till alla C-program!

4 Anders Sjögren Ett program växer fram... /* Beräknar kapitaltillväxt */ #include #define RANTESATS 8.5 int main ( void ) { floatstartKapital, saldo ; printf("Insatt kapital? "); scanf("%f", &startKapital); saldo = startKapital * ( 1 + RANTESATS/100 ); printf("\n År Saldo\n == =====\n"); printf("%3d%11.2f\n", 1, saldo); return 0; } stommen till alla C-program!

5 Anders Sjögren Ett program växer fram... /* Beräknar kapitaltillväxt */ #include #define RANTESATS 8.5 int main ( void ) { floatstartKapital, saldo ; printf("Insatt kapital? "); scanf("%f", &startKapital); saldo = startKapital * ( 1 + RANTESATS/100 ); printf("\n År Saldo\n == =====\n"); printf("%3d%11.2f\n", 1, saldo); return 0; } i stommen anger man med hjälp av satser vad som ska utföras i tur och ordning - sekvens satsav- slutare

6 Anders Sjögren Ett program växer fram... vad satserna gör /* Beräknar kapitaltillväxt */ #include #define RANTESATS 8.5 int main ( void ) { floatstartKapital, saldo ; printf("Insatt kapital? "); scanf("%f", &startKapital); saldo = startKapital * ( 1 + RANTESATS/100 ); printf("\n År Saldo\n == =====\n"); printf("%3d%11.2f\n", 1, saldo); return 0; } här skapas, definieras, 2 st variabler (minnen) av typen float (float är ett reserverat ord ) flyttal

7 Anders Sjögren Ett program växer fram... vad satserna gör /* Beräknar kapitaltillväxt */ #include #define RANTESATS 8.5 int main ( void ) { floatstartKapital, saldo ; printf("Insatt kapital? "); scanf("%f", &startKapital); saldo = startKapital * ( 1 + RANTESATS/100 ); printf("\n År Saldo\n == =====\n"); printf("%3d%11.2f\n", 1, saldo); return 0; } funktionen printf() används för att skriva textsträngen,mellan parenteserna, på bild- skärmen

8 Anders Sjögren Ett program växer fram... vad satserna gör /* Beräknar kapitaltillväxt */ #include #define RANTESATS 8.5 int main ( void ) { floatstartKapital, saldo ; printf("Insatt kapital? "); scanf("%f", &startKapital); saldo = startKapital * ( 1 + RANTESATS/100 ); printf("\n År Saldo\n == =====\n"); printf("%3d%11.2f\n", 1, saldo); return 0; } funktionen printf() används för att skriva textsträngen,mellaan parenteserna, på bild- skärmen för att kunna an- vända funktionen printf() så måste filen stdio.h inklu- deras (en textfil).

9 Anders Sjögren Ett program växer fram... vad satserna gör /* Beräknar kapitaltillväxt */ #include #define RANTESATS 8.5 int main ( void ) { floatstartKapital, saldo ; printf("Insatt kapital? "); scanf("%f", &startKapital); saldo = startKapital * ( 1 + RANTESATS/100 ); printf("\n År Saldo\n == =====\n"); printf("%3d%11.2f\n", 1, saldo); return 0; } funktionen scanf() används för att läsa ASCII- tecken från tangentbordet och konvertera dessa till ett flyttal som lagras i variabel startKapita l.

10 Anders Sjögren Ett program växer fram... vad satserna gör /* Beräknar kapitaltillväxt */ #include #define RANTESATS 8.5 int main ( void ) { floatstartKapital, saldo ; printf("Insatt kapital? "); scanf("%f", &startKapital); saldo = startKapital * ( 1 + RANTESATS/100 ); printf("\n År Saldo\n == =====\n"); printf("%3d%11.2f\n", 1, saldo); return 0; } funktionen scanf() används för att läsa ASCII- tecken från tangentbordet och konvertera dessa till ett flyttal som lagras i variabel startKapita l. även för scanf() måste stdio.h inkluderas

11 Anders Sjögren Ett program växer fram... vad satserna gör /* Beräknar kapitaltillväxt */ #include #define RANTESATS 8.5 int main ( void ) { floatstartKapital, saldo ; printf("Insatt kapital? "); scanf("%f", &startKapital); saldo = startKapital * ( 1 + RANTESATS/100 ); printf("\n År Saldo\n == =====\n"); printf("%3d%11.2f\n", 1, saldo); return 0; } satsen är ett tilldelnings- uttryck. Variabeln saldo tilldelas värdet av högerledet där innehållet i variabel startKapital multipliceras med 1,085.

12 Anders Sjögren Ett program växer fram... vad satserna gör /* Beräknar kapitaltillväxt */ #include #define RANTESATS 8.5 int main ( void ) { floatstartKapital, saldo ; printf("Insatt kapital? "); scanf("%f", &startKapital); saldo = startKapital * ( 1 + RANTESATS/100 ); printf("\n År Saldo\n == =====\n"); printf("%3d%11.2f\n", 1, saldo); return 0; } satsen är ett tilldelnings- uttryck. Variabeln saldo tilldelas värdet av högerledet där innehållet i variabel startKapital multipliceras med 1,085. OBS! Tilldelning ej som i matematiken VL=HL, i C går x=x+1 bra!

13 Anders Sjögren Ett program växer fram... vad satserna gör /* Beräknar kapitaltillväxt */ #include #define RANTESATS 8.5 int main ( void ) { floatstartKapital, saldo ; printf("Insatt kapital? "); scanf("%f", &startKapital); saldo = startKapital * ( 1 + RANTESATS/100 ); printf("\n År Saldo\n == =====\n"); printf("%3d%11.2f\n", 1, saldo); return 0; } satsen är ett tilldelnings- uttryck. Variabeln saldo tilldelas värdet av högerledet där innehållet i variabel startKapital multipliceras med 1,085. RANTESATS är en symbolisk konstant, textsub- stitut för 8.5. Texten RANTESATS byts mot texten 8.5 vid kompilering av preprocessorn..

14 Anders Sjögren Ett program växer fram... vad satserna gör /* Beräknar kapitaltillväxt */ #include #define RANTESATS 8.5 int main ( void ) { floatstartKapital, saldo ; printf("Insatt kapital? "); scanf("%f", &startKapital); saldo = startKapital * ( 1 + RANTESATS/100 ); printf("\n År Saldo\n == =====\n"); printf("%3d%11.2f\n", 1, saldo); return 0; } printf() som tidigare, \n är ett styrtecken som betyder ny rad.

15 Anders Sjögren Ett program växer fram... vad satserna gör /* Beräknar kapitaltillväxt */ #include #define RANTESATS 8.5 int main ( void ) { floatstartKapital, saldo ; printf("Insatt kapital? "); scanf("%f", &startKapital); saldo = startKapital * ( 1 + RANTESATS/100 ); printf("\n År Saldo\n == =====\n"); printf("%3d%11.2f\n", 1, saldo); return 0; } printf()konverterar variabelinnehåll och värden till relevanta ASCII- tecken som skrivs på skärmen.

16 Anders Sjögren Ett program växer fram... vad satserna gör /* Beräknar kapitaltillväxt */ #include #define RANTESATS 8.5 int main ( void ) { floatstartKapital, saldo ; printf("Insatt kapital? "); scanf("%f", &startKapital); saldo = startKapital * ( 1 + RANTESATS/100 ); printf("\n År Saldo\n == =====\n"); printf("%3d%11.2f\n", 1, saldo); return 0; } konvertera innehållet i variabeln saldo från flyttalsrepresentation till relevanta ASCII- tecken i ett fält med 11 positioner och avrundat till 2 decimaler

17 Anders Sjögren Ett program växer fram... vad satserna gör /* Beräknar kapitaltillväxt */ #include #define RANTESATS 8.5 int main ( void ) { floatstartKapital, saldo ; printf("Insatt kapital? "); scanf("%f", &startKapital); saldo = startKapital * ( 1 + RANTESATS/100 ); printf("\n År Saldo\n == =====\n"); printf("%3d%11.2f\n", 1, saldo); return 0; } när programmet avslutas returneras heltalsvärdet ( int ) 0 till operativsystemet. Detta värde kan användas för att kontrollera på vilket sätt programmet av- slutats.

18 Anders Sjögren Ett program växer fram... vad satserna gör /* Beräknar kapitaltillväxt */ #include #define RANTESATS 8.5 int main ( void ) { floatstartKapital, saldo ; printf("Insatt kapital? "); scanf("%f", &startKapital); saldo = startKapital * ( 1 + RANTESATS/100 ); printf("\n År Saldo\n == =====\n"); printf("%3d%11.2f\n", 1, saldo); return 0; } raden är en kommentar och påverkar inte programmets funktion.

19 Anders Sjögren Ett program växer fram... förbättringar /* Beräknar kapitaltillväxt */ #include #define RANTESATS 8.5 int main ( void ) { floatstartKapital, saldo ; printf("Insatt kapital? "); scanf("%f", &startKapital); saldo = startKapital * ( 1 + RANTESATS/100 ); printf("\n År Saldo\n == =====\n"); printf("%3d%11.2f\n", 1, saldo); return 0; } byt plats på raderna!

20 Anders Sjögren Ett program växer fram... förbättringar /* Beräknar kapitaltillväxt */ #include #define RANTESATS 8.5 int main ( void ) { floatstartKapital, saldo ; printf("Insatt kapital? "); scanf("%f", &startKapital); printf("\n År Saldo\n == =====\n"); saldo = startKapital * ( 1 + RANTESATS/100 ); printf("%3d%11.2f\n", 1, saldo); return 0; } OK!

21 Anders Sjögren Ett program växer fram... förbättringar - program med repetition /* Beräknar kapitaltillväxt på 10 år */ #include #define RANTESATS 8.5 #define ANTAL_AR 10 int main ( void ) { floatstartKapital, saldo, kapital ; intar ; printf("Insatt kapital? "); scanf("%f", &kapital); printf("\n År Saldo\n == =====\n"); for ( ar = 1; ar <= ANTAL_AR ; ar++ ) { kapital = kapital * ( 1 + RANTESATS/100 ); printf("%3d%11.2f\n", ar, kapital); } return 0; } lite förändringar och några nya rader ger - iteration !

22 Anders Sjögren Ett program växer fram... förbättringar - program med repetition /* Beräknar kapitaltillväxt på 10 år */ #include #define RANTESATS 8.5 #define ANTAL_AR 10 int main ( void ) { floatkapital ; intar ; printf("Insatt kapital? "); scanf("%f", &kapital); printf("\n År Saldo\n == =====\n"); for ( ar = 1; ar <= ANTAL_AR ; ar++ ) { kapital = kapital * ( 1 + RANTESATS/100 ); printf("%3d%11.2f\n", ar, kapital); } return 0; } startvärde terminering uppräkning

23 Anders Sjögren Ett program växer fram... förbättringar - program med alternativa vägar /* Beräknar kapitaltillväxt på 10 år */ #include #define RANTESATS 8.5 #define ANTAL_AR 10 int main ( void ) { floatkapital ; intar ; printf("Insatt kapital? "); scanf("%f", &kapital); printf("\n År Saldo\n == =====\n"); for ( ar = 1; ar <= ANTAL_AR ; ar++ ) { kapital = kapital * ( 1 + RANTESATS/100 ); printf("%3d%11.2f\n", ar, kapital); } return 0; } observera hur man med indragningar, indenteringar, försöker göra koden lättare att läsa

24 Anders Sjögren Mata in ett negativt kapital så räknas det baklänges! Ett program växer fram... förbättringar - program med alternativa vägar /* Beräknar kapitaltillväxt på 10 år framåt eller bakåt */ #include #define RANTESATS 8.5 #define ANTAL_AR 10 int main ( void ) { floatkapital ; intar ; printf("Insatt kapital? "); scanf("%f", &kapital); printf("\n År Saldo\n == =====\n"); for ( ar = 1; ar <= ANTAL_AR ; ar++ ) { if ( kapital > 0 ) kapital = kapital * ( 1 + RANTESATS/100 ); else kapital = kapital * 1/( 1 + RANTESATS/100 ); printf("%3d%11.2f\n", ar,kapital>0 ? kapital:-kapital); } return 0; } lite förändringar och några nya rader ger - selektion ! sant falskt

25 Anders Sjögren Ett program växer fram... förbättringar - program med funktions-moduler /* Beräknar kapitaltillväxt på 10 år framåt eller bakåt */ #include #define RANTESATS 8.5 #define ANTAL_AR 10 int main ( void ) { floatkapital ; intar ; printf("Insatt kapital? "); scanf("%f", &kapital); printf("\n År Saldo\n == =====\n"); for ( ar = 1; ar <= ANTAL_AR ; ar++ ) { if ( kapital > 0 ) kapital = kapital * ( 1 + RANTESATS/100 ); else kapital = kapital * 1/( 1 + RANTESATS/100 ); printf("%3d%11.2f\n", ar,kapital>0 ? kapital:-kapital); } return 0; } många satser efter varandra gör programmet oöverskådligt - dela upp koden i funktioner

26 Anders Sjögren Ett program växer fram... förbättringar - program med funktions-moduler Funktionskonstruktionen som följer vill visa principer inte detaljer, det kommer senare.

27 Anders Sjögren Ett program växer fram... förbättringar - program med funktions-moduler /* Beräknar kapitaltillväxt på 10 år framåt eller bakåt */ #include #define RANTESATS 8.5 #define ANTAL_AR 10 int main ( void ) { floatkapital ; intar ; printf("Insatt kapital? "); scanf("%f", &kapital); printf("\n År Saldo\n == =====\n"); for ( ar = 1; ar <= ANTAL_AR ; ar++ ) { if ( kapital > 0 ) kapital = kapital * ( 1 + RANTESATS/100 ); else kapital = kapital * 1/( 1 + RANTESATS/100 ); printf("%3d%11.2f\n", ar,kapital>0 ? kapital:-kapital); } return 0; } Klipp ut!

28 Anders Sjögren Ett program växer fram... förbättringar - program med funktions-moduler /* Beräknar kapitaltillväxt på 10 år framåt eller bakåt */ #include #define RANTESATS 8.5 #define ANTAL_AR 10 int main ( void ) { floatkapital ; intar ; printf("Insatt kapital? "); scanf("%f", &kapital); return 0; } OK!

29 Anders Sjögren Ett program växer fram... förbättringar - program med funktions-moduler printf("\n År Saldo\n == =====\n"); for ( ar = 1; ar <= ANTAL_AR ; ar++ ) { if ( kapital > 0 ) kapital = kapital * ( 1 + RANTESATS/100 ); else kapital = kapital * 1/( 1 + RANTESATS/100 ); printf("%3d%11.2f\n", ar,kapital>0 ? kapital:-kapital); } Definiera den nya funktionen! klistra in

30 Anders Sjögren Ett program växer fram... förbättringar - program med funktions-moduler void TabellPaSkarmen( int antalAr, float kapital ) { int ar ; printf("\n År Saldo\n == =====\n"); for ( ar = 1; ar <= antalAr; ar++ ) { if ( kapital > 0 ) kapital = kapital * ( 1 + RANTESATS/100 ); else kapital = kapital * 1/( 1 + RANTESATS/100 ); printf("%3d%11.2f\n", ar,kapital>0 ? kapital:-kapital); } return; } Definiera den nya funktionen! lägg till! ändra!

31 Anders Sjögren Ett program växer fram... förbättringar - program med funktions-moduler /* Beräknar kapitaltillväxt på 10 år framåt eller bakåt */ #include #define RANTESATS 8.5 #define ANTAL_AR 10 void TabellPaSkarmen( int, float ); int main ( void ) { floatkapital ; intar ; printf("Insatt kapital? "); scanf("%f", &kapital); TabellPaSkarmen( ANTAL_AR, kapital ); return 0; } lägg till funktions- deklaration och funktions- anrop här skall funktions- definitionen in i stommen, main() - funktionen

32 Anders Sjögren Ett program växer fram... förbättringar - program med funktions-moduler här skall funktions- definitionen in /* Beräknar kapitaltillväxt på 10 år framåt eller bakåt */ #include #define RANTESATS 8.5 #define ANTAL_AR 10 void TabellPaSkarmen( int, float ); int main ( void ) { floatkapital ; intar, antalAr; printf("Insatt kapital och antal år ?(--> )--> "); scanf("%f%d", &kapital, &antalAr); TabellPaSkarmen( antalAr, kapital ); return 0; } ändra

33 Anders Sjögren Ett program växer fram... förbättringar - program med funktions-moduler en översikts- bild av hela programmet /* Beräknar kapitaltillväxt på 10 år framåt eller bakåt */ #include #define RANTESATS 8.5 void TabellPaSkarmen( int, float ); int main ( void ) { floatkapital ; intantalAr; printf("Insatt kapital och antal år ?(--> )--> "); scanf("%f%d", &kapital, &antalAr); TabellPaSkarmen( antalAr, kapital ); return 0; } void TabellPaSkarmen( int antalAr, float kapital ) { int ar ; printf("\n År Saldo\n == =====\n"); for ( ar = 1; ar <= antalAr; ar++ ) { if ( kapital > 0 ) kapital = kapital * ( 1 + RANTESATS/100 ); else kapital = kapital * 1/( 1 + RANTESATS/100 ); printf("%3d%11.2f\n", ar,kapital>0 ? kapital:-kapital); } return; }

34 Anders Sjögren Ett program växer fram... förbättringar - program med funktions-moduler en översiktsbild av hela programmet /* Beräknar kapitaltillväxt på 10 år framåt eller bakåt */ #include #define RANTESATS 8.5 void TabellPaSkarmen( int, float ); int main ( void ) { floatkapital ; intantalAr; printf("Insatt kapital och antal år ?(--> )--> "); scanf("%f%d", &kapital, &antalAr); TabellPaSkarmen( antalAr, kapital ); return 0; } void TabellPaSkarmen( int antalAr, float kapital ) { int ar ; printf("\n År Saldo\n == =====\n"); for ( ar = 1; ar <= antalAr; ar++ ) { if ( kapital > 0 ) kapital = kapital * ( 1 + RANTESATS/100 ); else kapital = kapital * 1/( 1 + RANTESATS/100 ); printf("%3d%11.2f\n", ar,kapital>0 ? kapital:-kapital); } return; } stommen funktionen

35 Anders Sjögren Ett C-program byggs upp av satser i sekvens styrande satser –iteration –selektion funktioner /* Beräknar kapitaltillväxt på 10 år framåt eller bakåt */ #include #define RANTESATS 8.5 void TabellPaSkarmen( int, float ); int main ( void ) { floatkapital ; intantalAr; printf("Insatt kapital och antal år ?(--> )--> "); scanf("%f%d", &kapital, &antalAr); TabellPaSkarmen( antalAr, kapital ); return 0; } void TabellPaSkarmen( int antalAr, float kapital ) { int ar ; printf("\n År Saldo\n == =====\n"); for ( ar = 1; ar <= antalAr; ar++ ) { if ( kapital > 0 ) kapital = kapital * ( 1 + RANTESATS/100 ); else kapital = kapital * 1/( 1 + RANTESATS/100 ); printf("%3d%11.2f\n", ar,kapital>0 ? kapital:-kapital); } return; }

36 Anders Sjögren Slut Övningsuppgift, se anteckningar


Ladda ner ppt "Anders Sjögren Programmering i ANSI-C Ett första program för att se vart vi ska..."

Liknande presentationer


Google-annonser