Håkan Strömberg KTH STH 1 Fråga 1. Följande kod är given: char namn[][7]= {"Adam","Bertil","Cesar","David" int alder[]={23,19,27,20 int skonr[]={40,42,43,46 int a,s; leta(namn,alder,skonr,4,"cesar",&a,&s); printf("%d %d\n",a,s); Den inleds med deklaration av tre arrayer. I den första finns ett antal namn (aldrig längre än sex tecken). För en given person finns motsvarande ålder och skonummer på samma plats i de andra två arrayerna. Du ska skriva funktionen leta, som för ett givet namn, söker upp dennes ålder och skonummer. I main ska det sedan vara möjligt att skriva ut dessa data. Funktionen ska klara av andra storlekar på arrayerna (här 4). Utskriften från rutinen blir här 27 43. Fråga 2. Deklarera först struct folk, som ska innehålla namn, telefonnummer, födelseår, längd och vikt. Du får fritt göra nödvändiga dimensioneringar, men använda de mest naturliga namnen och datatyperna för de olika fälten. Använd sedan denna struct för att deklarera en array by med plats för 100 personer. Fråga 3. Deklarera en struct kallad rektangel som skall innehålla bredd och höjd, båda flyttal. Deklarera sedan en variabel av typen Rektangel, och skriv kod för att beräkna rektangelns area. Fråga 4. Deklarera struct produkt, som ska användas i ett program för lagerhantering. Den ska innehålla namn, pris och antal (data om produkten). Välj lämpliga namn och datatyper för de olika fälten. Använd sedan denna struct för att deklarera en array lager, med plats för 1000 olika produkter. Fråga 5. Vi utgår från posttypen char[10]; Deklarera en variabel p av typen person och tilldela den namnet Kalle och åldern 25. Fråga 6. Deklarera en fil utfil. Öppna sedan textfilen data.dat för skrivning och skriv ut texten Jag fixade det. Avsluta med att stänga filen. Fråga 7. Vad är det man får svar på då man anropar sizeof(struct datatyp)? struct datatyp{ int a,b; char d[10]; Fråga 8. Deklarera, öppna och läs in första heltalet från filen TAL.TXT. Fråga 9. struct storlek{ int skonummer; int hattnummer; Postdeklarationen är given. Man önskar nu en array alla, som rymmer 100 poster. Dessutom vill man att första posten i arrayen ska ha värdet 45 i skonummer och 50 i hattnummer. Skriv den kod som behövs. Fråga 10. På filen tal.txt finns 20 heltal. Skriv ett fullständigt program som skriver ut summan av dessa tal. Fråga 11. Definiera en struktur person som ska innehålla namn (50 tecken), kön (1 tecken), ålder (heltal) och vikt (ska kunna anges med en decimal). Välj lämpliga namn. Fråga 12. Deklarera en struct kallad triangel som skall innehålla bas (namnet bas) och höjd (namnet hojd), båda flyttal. Deklarera sedan en variabel t av typen triangel, tilldela godtyckliga värden till t:s höjd och bas och skriv kod för att beräkna triangelns area som tilldelas variabeln area. Fråga 13. Den binära filen data.dat ska öppnas för läsning. Deklarera och öppna den. Fråga 14. Följande deklaration är given. Nu önskar man ta reda på hur stor plats en post av denna typ tar upp i minnet. Ange ett sätt. char namn[30]; float vikt,langd; Fråga 15. Följande deklarationer är givna char namn[30]; float vikt,langd; struct familj{ struct person medlem[4]; struct familj anderssons; Tilldela någon, vem som helst, hos familjen anderssons åldern 27 år. En sats vi tänker oss på punkternas plats.
Håkan Strömberg KTH STH 2 Fråga 16. Följande deklarationer är givna. struct vara{ int antal; float pris; struct vara lager[200]; int i,tot; Lagret innehåller 200 olika artiklar. Skriv en rutin som ska placeras på punkternas plats, som bestämmer hela lagrets värde. Fråga 17. På textfilen tal.txt finns 1000 heltal. Skriv ett helt program, som bestämmer och skriver ut dessa tals medelvärde. Fråga 18. På filen TAL.TXT finns 100 positiva heltal. Skriv en rutin som öppnar filen, söker igenom den, och skriver ut filens största tal. Fråga 19. Vad är det man får svar på då man anropar sizeof(struct datatyp)? struct datatyp{ int a,b; char d[10]; Fråga 20. Du behöver inte ange s s exakta värde efter satsen nedan, bara tala om vad detta värde står för: struct object{ int a; float b; s=sizeof(struct object); Fråga 21. Vi ska hantera 200 personer för vilka vi ska hålla reda på: namn (< 20 tecken), födelseår(heltal), vikt (heltal) och längd (i meter). Vi vill hålla alla data i minnet samtidigt. Gör lämpliga deklarationer. Fråga 22. Beskriv värdet hos n efter följande rutin int n; fseek(fil,0,seek_end); n=ftell(fil)/sizeof(struct post); Fråga 23. Vi har deklarationen nedan. I en post av struct olycka ingår bland annat int regnr. Skriv en rutin som sorterar de 1000 posterna efter stigande regnr. struct olycka alla[1000],post; int i,j; Fråga 24. På filen klappar.txt finns uppgifter om vikten (heltal) hos de 123 julklappar tomten ska dela ut nu till jul. Skriv ett fullständigt program som bestämmer och skriver ut den totala vikten av alla klapparna. Fråga 25. Här öppnas två filer. Vilken typ av filer är det frågan om och hur ska de användas? fil1=fopen("data1","rt"); fil2=fopen("data2","wb"); Fråga 26. I den här rutinen vill man läsa in ett heltal från filen f. Vad är det som gör att den inte fungerar? FILE *f; int a; f=fopen("fil.dat","rb"); fread(a,sizeof(int),1,f); Fråga 27. Följande två postdeklarationer är givna. Dessutom är variabeln v deklarerad. Tilldela den priset 10 kronor och 50 öre. struct p{ int kr,ore; struct vara{ struct p pris; struct vara v; Fråga 28. På frågetecknens plats i följande sats kan bland andra bokstäverna w, t, b och r förekomma. Ange vilka kombinationer som är meningsfulla och vad de betyder. fil=fopen("data.log","??"); Fråga 29. Binärfilen reg har skapats genom att skriva ut ett antal poster av typen struct post. Vad innehåller p efter följande: fseek(reg,0,seek_end); p=ftell(reg)/sizeof(post);
Håkan Strömberg KTH STH 3 Fråga 30. Följande deklarationer är givna struct spelare{ int prispengar[10]; struct spelare touren[100]; int totalt=0; På förra årets golftour spelade 100 spelare 10 tävlingar. Hur deras resultat är lagrat framgår av deklarationen. Skriv en rutin som tar reda på den totala prissumman som delades ut under året och lagrar resultatet i variabeln totalt Fråga 31. Varför är det viktigt att stänga en fil (med fclose) innan exekveringen avbryts? Speciellt en sådan som programmet just skapat. Fråga 32. Man önskar skriva ut texten Ingen information till filen info.txt. Gör nödvändiga deklarationer och skriv rutinen. Fråga 33. Till vad används standardfunktionen fread? Fråga 34. Följande deklarationer är givna struct V{ int c; int d; struct U{ int a; int b; struct V v; struct U x; Variabeln x, som innehåller fyra heltal, har tidigare tilldelats värden. Skriv ett uttryck som är sant om summan av de två första, a och b är större än summan av de två andra. Fråga 35. Filen tal.txt innehåller 100 rader med ett tal på varje. Man vet att den innehåller talet 123, men inte på vilken rad det finns. Skriv en rutin som öppnar filen och tar reda på talet 123 s radnummer. Fråga 36. Filen data.dat är binär. Skriv nödvändig deklaration och funktionsanrop för att öppna filen för läsning. Fråga 37. Postbeskrivningen song struct song{ char titel[50]; char artist[40]; Deklarera en array med namnet mp3, som rymmer alla mina 1000 låtar. Fråga 38. Textfilen tal.txt innehåller 100 heltal. Den är redan deklarerad som fil och öppnad. Skriv en rutin som skriver ut filens 73:e tal. Fråga 39. Man har två punkter i planet, p 1 = (45,67) och p 2 = (21,34), och vill nu med hjälp av funktionen avstand bestämma avståndet mellan dem. p1 och p2 måste dock tilldelas värden innan funktionen kan anropas. Skriv in satserna som saknas på punkternas plats. struct punkttyp{ int x,y; struct punkttyp p1,p2; a=avstand(p1,p2); getch(); Fråga 40. Adam skulle med sitt program tala om var resultatfilen hamnade. printf("finns i c:\test\ny"); Varför blev det inte som han tänkt sig? Fråga 41. I programmet nedan förekommer en array av poster. Där posternas typ är deklarerad struct record. Tidigare i programmet har fälten a och b tilldelats värden. Nu vill man att fältet sum i varje post ska tilldelas summan av fälten a och b i samma post. Skriv den sats placerad på punkternas plats, som krävs för detta. struct record{ int a,b,sum; struct record p[100]; int i; Fråga 42. På filen tal.txt finns positiva 1000 heltal. Fullfölj rutinen nedan, som i variabeln n lagrar antalet tal på filen som är < 100. int i,n=0,tal; fil= for(i=1;i<=1000;i++){ if printf("%d\n",n);
Håkan Strömberg KTH STH 4 Fråga 43. Till vad används funktionen fseek? Fråga 44. Följande deklarationer är gjorda struct objekt{ int a,b; int sum; struct objekt alla[100]; Fråga 49. Deklarera först struct folk, som ska innehålla namn, telefonnummer, födelseår, längd och vikt. Du får fritt göra nödvändiga dimensioneringar, men använda de mest naturliga namnen och datatyperna för de olika fälten. Använd sedan denna struct för att deklarera en array by med plats för 100 personer. Man vill nu tilldela fältet sum summan av fälten a och b i samtliga 100 poster av typen struct objekt i alla. Skriv en for-loop, som utför jobbet. Fråga 45. I denna rutin vill man läsa in första posten i den binära filen data.dat till variabeln p. Fullfölj fread-satsen struct post{ int a[10]; struct post p; fread(); getch(); Fråga 46. Varför är det viktigare att stänga en fil (med fclose), på vilken programmet skrivit, än en fil programmet endast läst ifrån? Fråga 47. Fullfölj rutinen nedan, som ska skriva ut talen 100 till 200 (inklusive gränser) till filen tal.txt, med ett tal på varje rad. int i; Fråga 48. I en post av typen struct post har bland annat lagrats 10 heltal. Arrayen alla är fylld med poster. Skriv en rutin som i sum lagrar summan av de 1000 heltalen. struct post{ int a[10]; char namn[10]; int sum=0; struct post alla[100];
Håkan Strömberg KTH STH 1 Fråga 1. void leta(char a[][7],int b[],int c[], int d,char e[],int *f,int *g){ int i; for(i=0;i<d;i++) if(strcmp(a[i],e)==0){ *f=b[i]; *g=c[i]; Fråga 2. struct folk{ char namn[40]; char telefonnummer[12]; int far; float langd,vikt; struct folk by[100]; Fråga 3. struct Rektangel{ double bredd; double hojd; area=rek.bredd*rek.hojd; Fråga 4. struct produkt{ int antal; float pris; struct produkt lager[1000]; Fråga 5. struct person p; p.alder=25; strcpy(p.namn,"kalle"); Fråga 6. FILE *utfil; utfil=fopen("data.dat","wt"); fprintf(utfil,"jag fixade det"); fclose(utfil); Fråga 7. Hur mycket plats en variabel av typen struct datatyp tar upp i minnet. Kan variera som till exempel 18 byte i Borland, 20 i DevCPP, för en viss inställning. Fråga 8. fil=fopen("tal.txt","rt"); Fråga 9. struct storlek alla[100]; alla[0].skonummer=45; alla[0].hattnummer=50; Fråga 10. #include <stdio.h> void main(void){ int i,s=0,tal; for(i=1;i<=20;i++){ s=s+tal; printf("%d",s); Fråga 11. char namn[50]; char kon[1]; float vikt; Fråga 12. struct triangel{ float hojd; float bas; struct triangel t; t.hojd=34.3; t.bas=10.8; area=t.hojd*t.bredd/2; Fråga 13. Fråga 14. sizeof(struct person); Det system vi använder anger storleken till 42, men även 44 är tänkbart, eftersom en del system utökar platsen så att 4 blir en delare till storleken. Fråga 15. anderssons.medlem[3].alder=27; 3 kan ersättas med vilket av talen 0 2 som helst. Fråga 16. tot=0; for(i=0;i<200;i++) tot=tot+lager[i].antal*lager[i].pris;
Håkan Strömberg KTH STH 2 Fråga 17. #include <stdio.h> #include <conio.h> int i,t,s=0; for(i=1;i<=1000;i++){ fscanf(fil,"%d",&t); s=s+t; printf("medel= %.2f\n",s/1000.0); getch(); Fråga 18. #include <stdio.h> int i,tal,max=0; fil=fopen("tal.txt","rt"); for(i=1;i<=100;i++){ if(tal>max) max=tal; printf("största talet är: %d",max); Fråga 19. Hur mycket plats en variabel av typen struct datatyp tar upp i minnet. Kan variera som till exempel 18 byte i Borland, 20 i DevCPP, för en viss inställning. Fråga 20. s talar om hur många byte en variabel av typen struct object tar upp i minnet. Fråga 21. int far; int vikt; float langd; struct person reg[200]; Fråga 22. Värdet hos n motsvarar antalet poster av typen struct post det finns på den binära filen data.dat Fråga 23. for(i=0;i<999;i++) for(j=i+1;j<1000;j++) if(alla[i].regnr>alla[j].regnr){ post=alla[i]; alla[i]=alla[j]; alla[j]=post; Fråga 24. #include <stdio.h> int i,tot=0,klapp; fil=fopen("klappar.txt","rt"); for(i=1;i<=123;i++){ fscanf(fil,"%d",&klapp); tot+=klapp; printf("total vikt %d\n",tot); Fråga 25. Filen DATA1 är en textfil, från vilken man ska läsa data. Filen DATA2 är en binärfil, till vilken man ska skriva. Fråga 26. I den sista satsen saknas ett & fread(&a,sizeof(int),1,f); Fråga 27. v.pris.kr=10; v.pris.ore=50; Fråga 28. rt wt rb wb läs textfil skriv textfil läs binärfil skriv binärfil Fråga 29. Antalet poster på filen Fråga 30. for(j=0;j<10;j++) totalt=totalt+touren[i].prispengar[j]; Fråga 31. För att det sista som finns i filbufferten verkligen skrivs ut till filen på hårddisken. Fråga 32. fil=fopen("info.txt","wt"); fprintf(fil,"ingen information\n"); Fråga 33. För att läsa från en binärfil Fråga 34. x.a+x.b>x.v.c+x.v.d Fråga 35. for(i=1;i<=100;i++){ if(tal==123) printf("%d\n",i); Fråga 36. Fråga 37. struct song mp3[1000];
Håkan Strömberg KTH STH 3 Fråga 38. for(i=1;i<=73;i++) fscanf(fil,"%d",&t); printf("%d\n",t); Fråga 39. p1.x=45; p1.y=67; p2.x=21; p2.y=34; Fungerar förstås också om man kastar om värdena för x och y. Fråga 40. Backslash skrivs \\ i strängar. Som det nu blev betecknar \t ett tabulatorsteg och \n ny rad. Fråga 41. p[i].sum=p[i].a+p[i].b; Fråga 42. int i,n=0,tal; for(i=1;i<=1000;i++){ if(tal<100) n++; printf("%d\n",n); Fråga 43. För att på en binärfil ställa in den positionen, från vilken programmet ska skriva eller läsa en post. Fråga 44. alla[i].sum=alla[i].a+alla[i].b; Fråga 45. fread(&p,sizeof(struct post),1,fil); Fråga 46. När fclose utförs sänds det som finns RAM-minnets buffer till hårddisken. Fråga 47. fil=fopen("tal.txt","wt"); for(i=100;i<=200;i++) fprintf(fil,"%d\n",i); Fråga 48. for(j=0;j<10;j++) sum=sum+alla[i].a[j]; Fråga 49. struct folk{ char namn[40]; char telefonnummer[12]; int far; float langd,vikt; struct folk by[100];