1 / 16

struct

struct. Dagens kluring. #include < stdio.h > #include < string.h > void fun(char s[]) { int i =-1; while(s[++ i ]!=0) { if('a'<=s[ i ]&& s[ i ]<='z') s[ i ]-='a'-'A'; } } int main() { char s[] = " Hej pa dig"; fun(s); printf (s);

tadeo
Download Presentation

struct

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. struct

  2. Dagens kluring #include <stdio.h> #include <string.h> void fun(char s[]) { inti=-1; while(s[++i]!=0) { if('a'<=s[i]&& s[i]<='z') s[i]-='a'-'A'; } } int main() { char s[] = "Hej pa dig"; fun(s); printf(s); return 0; }

  3. struct • Vad är en struct? • Deklarera och använda • Initiera och kopiera • Struct som parameter och returvärde till funktioner • Arrayer av structar • En databas

  4. Vad är en struct? • En struct används för att definiera en ny sammansatt datatyp, en datastruktur. Tidigare har vi sett arrayer som samlar data. Structarskilljer sig på två punkter: • De olika medlemmarna i en struct behöver inte vara av samma datatyp • Medlemmarna får ett namn och man väljer medlem mha namnet • Precis som arrayer samlar data som hör ihop så samlar en struct data som hör ihop. • I ett bilregister representerar vi en bil med en struct som innehåller bilmärke, årsmodell, antal körda mil • I ett grafiskt program representerar vi en punkt med en struct som innehåller x och y koordinater • I samma program representerar vi en cirkel med en struct som innehåller en punkt (mitten) och en radie

  5. Deklarera och använda en struct 1 #include <stdio.h> #include <string.h> #define ORDLANGD 30 structbil{ char marke[ORDLANGD]; int arsmodell; int mil; }; //OBS semikolon glömmer man alltid! Ger svårtolkade fel. intmain(){ struct bil b1; //b1 är variabel av datatypen struct bil strcpy(b1.marke,"Volvo"); b1.arsmodell=1971; b1.mil=21000; printf("Bil: %s, Arsmodell: %d, Mil: %d",b1.marke,b1.arsmodell,b1.mil); return 0; }

  6. Deklarera och använda en struct2 struct bil { char marke[ORDLANGD]; int arsmodell; int mil; }; typedef struct bil Bil;//Definierar Bil att betyda struct bil. Använd stor bokstav int main() { Bil b1;//Snyggare och enklare strcpy(b1.marke,"Volvo"); b1.arsmodell=1971; b1.mil=21000; printf("Bil: %s, Arsmodell: %d, Mil: %d",b1.marke,b1.arsmodell,b1.mil); return 0; }

  7. Initialisering och kopiering #include <stdio.h> #include <string.h> #define ORDLANGD 30 struct bil { char marke[ORDLANGD]; int arsmodell; int mil; }; typedefstruct bil Bil; intmain() { Bil b1={"Volvo",2013,2100},b2={"Saab",1992,23000},b3; b3=b2; //Fungerar! Även arrayen kopieras! == fungerar dock ej på structar b3.mil=b3.mil+1000; printf("Bil: %s, Arsmodell: %d, Mil: %d",b3.marke,b3.arsmodell,b3.mil); return 0; }

  8. Structar som parameter #include <stdio.h> #include <string.h> #define ORDLANGD 30 structbil{ char marke[ORDLANGD]; int arsmodell; int mil; }; typedefstruct bil Bil; voidskrivBil(Bil b){ printf("Bil: %s, Arsmodell: %d, Mil: %d\n",b.marke,b.arsmodell,b.mil); } intmain(){ Bil b1={"Volvo",2013,2100},b2={"Saab",1992,23000},b3; b3=b2; b3.mil=b3.mil+1000; skrivBil(b1); skrivBil(b2); skrivBil(b3); return 0; } Structar kopieras vid funktionsanrop (passed by value) och eftersom de kan vara stora skickar man ofta en pekare även om man inte ska ändra i structen

  9. Pekare till struct som parameter 1 voidokaMil(Bil *b,int mil){ (*b).mil=(*b).mil+mil; //Obs ()-behövs! } intmain() { Bil b1={"Volvo",2013,2100},b2={"Saab",1992,23000},b3; b3=b2; okaMil(&b3,1000); skrivBil(b1); skrivBil(b2); skrivBil(b3); return 0; }

  10. Pekare till struct som parameter 2 voidokaMil(Bil *b,int mil){ b->mil=b->mil+mil; //snabbare skrivsätt } //betyder samma sak intmain() { Bil b1={"Volvo",2013,2100},b2={"Saab",1992,23000},b3; b3=b2; okaMil(&b3,1000); skrivBil(b1); skrivBil(b2); skrivBil(b3); return 0; }

  11. Struct som returvärde Bil skapaBil(char marke[],int arsmodell, int mil){//Observera att vi kan ha samma namn! Bil b; strcpy(b.marke,marke); b.arsmodell=arsmodell; b.mil=mil; return b; //Äntligen kan vi returnera flera värden! } intmain(){ Bil b1,b2; b1=skapaBil("Volvo",2013,2100); b2=skapaBil("Saab",1993,17000); skrivBil(b1); skrivBil(b2); return 0; }

  12. Arrays och structar • Som vi redan sett kan en struct ha en array som en medlem. • Vi kan också ha arrayer där elementen är en struct • Eller en struct som har en annan struct som medlem • Och vi får nästla dem i flera lager. Ex: en array av structar som har en medlem som är en struct som består av arrayer där en av arrayerna består av en annan struct osv • Vi kan till och med (och det används ofta) ha en struct där en av medlemmarna är en pekare till en struct av samma typ (rekursiv def) • Vad vi ska fokusera på är en array av structar

  13. En databas för bilar börjar ta form voidregistreraBilar(Bil reg[],int *antal){ char fortsatt[ORDLANGD] = "ja", marke[ORDLANGD], tmp[ORDLANGD]; intarsmodell,mil; while(strcmp(fortsatt,"ja")==0){ //#include <string.h> printf("Ange marke:"); gets(marke); printf("Ange arsmodell:"); gets(tmp); //scanf lämnar return-tecken som ställer till arsmodell=atoi(tmp); //#include <stdlib.h> printf("Ange mil:"); gets(tmp); mil=atoi(tmp); reg[*antal]=skapaBil(marke,arsmodell,mil); (*antal)++; printf("Vill du fortsatta? (ja/nej)"); gets(fortsatt); } } intmain(){ Bil bilRegister[MAX]; int antal=0; registreraBilar(bilRegister,&antal); skrivBil(bilRegister[0]); //tillfällig test att det verkar funka return 0; }

  14. Skriva ut alla bilar i registret • För att se att det funkar som det ska verkar det vara ett bra läge att skriva en funktion som skriver ut hela registret. • Den kommer senare vara bra när man jobbar vidare med mer funktionalitet • Ni får anrop och funktionshuvud men sedan är det dags att börja jobba!

  15. #include <stdio.h> #include <string.h> #include <stdlib.h> #define ORDLANGD 30 #define MAX 100 struct bil { char marke[ORDLANGD]; int arsmodell; int mil; }; typedefstruct bil Bil; voidskrivBil(Bil b){ printf("Bil: %s, Arsmodell: %d, Mil: %d\n",b.marke,b.arsmodell,b.mil); } Bil skapaBil(char marke[],int arsmodell, int mil) { Bil b; strcpy(b.marke,marke); b.arsmodell=arsmodell; b.mil=mil; return b; } voidregistreraBilar(Bil reg[],int *antal){ char fortsatt[ORDLANGD] = "ja",marke[ORDLANGD],tmp[ORDLANGD]; intarsmodell,mil; while(strcmp(fortsatt,"ja")==0){ printf("Ange marke:"); gets(marke); printf("Ange arsmodell:"); gets(tmp); arsmodell=atoi(tmp); printf("Ange mil:"); gets(tmp); mil=atoi(tmp); reg[*antal]=skapaBil(marke,arsmodell,mil); (*antal)++; printf("Vill du fortsatta? (ja/nej)"); gets(fortsatt); } } voidskrivaUtRegister(Bil reg[],int antal){/*här ska koden in*/} intmain(){ Bil bilRegister[MAX]; int antal=0; registreraBilar(bilRegister,&antal); skrivaUtRegister(bilRegister,antal); return 0; }

  16. Studieanvisningar F9 • Läs igenom föreläsningen och programmera exemplen och experimentera • Lägg till funktionen som skriver ut alla bilar i registret i vårt bilregisterprogram. Utskriften ska se ut enlig nedan:1. Bil: Volvo, Årsmodell: 2011, Mil: 30002. Bil: Saab, Årsmodell: 2000, Mil: 50003. Bil: Fiat, Årsmodell: 1999, Mil: 40000 • Ändra programmet så att det startar med en meny enligt nedan. Beroende vad man väljer anropas rätt funktion. Sedan får användaren en ny chans att välja ända tills han väljer avsluta. • Registrera bilar • Skriv ut alla bilar • Avsluta • Lägg till ett menyalternativ som är Öka mil där man ska kunna välja en bil genom att ange dess plats i registret och sedan kan öka antalet mil den har gått. Så för att öka fiatens mil ovan anger man 3. • Gör K16 E10 • Skumma igenom 16.1Läs 16.2-16.3 tom halva sid389 E-excercises, P-programmingprojects

More Related