Med vissa rättelser. 2006-01-14.
Programmering C
för D1, Sdu1 och TDV
lördag 14 januari 2006 kl 14:00 - 19:00 i L003
Hjälpmedel: | Inga hjälpmedel. |
Poängkrav: |
Maximal poäng är 40.
För godkänt betyg (3 respektive G) krävs 20 poäng. |
Resultat och lösningar: | Meddelas på kursens hemsida senast lördag 4 februari 2006. |
Visning och frågestund: |
Tisdag 7 februari 2006 kl 12:00-12:30 i mitt rum (T2220).
Efter visningen kan tentorna hämtas på expeditionen. |
Examinator och jourhavande: | Thomas Padron-McCarthy, telefon 0707-347013. |
a) 2 + 3 * 4 - 5
struct spelare { char namn[10]; // Spelarens namn float vikt; // Spelarens vikt int styrka; // Spelarens styrka };
Definiera en variabel av denna typ och initiera den med namnet Kalle, vikten 95.0 och syrkan 18.
x = 9; while (x >= 0) { if (x == 12 || x == 6 || x == 2) x -= 3; else x--; }
int dagnummer(int datum);
void visa_spelare(struct spelare b);
Skriv en funktion som kontrollerar att alla tecken utom det sjunde i ett personnummer är siffror. Funktionen ska returnera sant (1) eller falskt (0), och ha ett funktionshuvud som ser ut så här:
int is_ok_pnr_siffror(char *pnr);
int is_ok_pnr_tecken(char *pnr);
struct spelare las_spelare();
eller så här:
void las_spelare(struct spelare* p);
Vi arbetar alltså med det engelska alfabetet, och ignorerar de svenska bokstäverna Å, Ä och Ö. Ett tips: Teckenkoderna för de stora bokstäverna kommer i samma ordning som själva bokstäverna, så om A har teckenkoden 76, så har B teckenkoden 77.Ge en stor bokstav : R RSTUVWXYZ Ge en stor bokstav : J JKLMNOPQRSTUVWXYZ
Tal Rot 1.00 1.00 1.10 ... ... ... 2.00 1.41
Upprepningen ska avslutas då man anger ett negativt tal som min.
Kalle 95.0 18 Olle 83.2 15 Hjalmar 75.8 12 Hulda 65.9 9 ...
Alla vikter är angivna med en decimal. Filen kan innehålla tusentals spelare. Den avslutas med att filen helt enkelt tar slut, utan något speciellt avslutningsvärde.
Skriv ett program som läser igenom textfilen, och sen talar om hur många spelare som har vikter i vart och ett av de här fyra olika intervallen:
Så här kan utmatningen från programmet se ut:
0.0 - 39.9: 1982 40.0 - 79.9: 12987 80.0 - 119.9: 4583 120.0 - : 313
Om programmet hittar en spelare med en vikt mindre än noll, ska programmet avbrytas med ett felmeddelande. I övrigt behövs ingen felkontroll.
Skriv tre heltal: 10 10 1 Största talet: 10
Tyvärr har det smugit sig in ganska många fel i programmet. Tala om vilka fel det är, och visa vad det borde stå i stället!
Programmet finns även på sista sidan i tentan. Du kan göra rättelserna på den sidan, och sedan riva loss den och lämna in den tillsammans med dina övriga lösningar, så slipper du skriva av programkoden.
include <stdio.h> int Main(void) { int x, y, max; printf("Skriv tre heltal: "); scanf("%d", x); scanf("%f", &y); scanf("%s", *z); if (x > y && x > z) /* Här räknar vi ut max = x; * vilket av de tre else if (y > x && y > z) * talen x, y och z max = y; * som är störst, else * och lägger det i max. max = z; */ printf("Största talet: \n", max); return 0; } // main
Prioritet | Kategori | Operator | Associativitet |
---|---|---|---|
Högsta | Unära postfixoperatorer | (), [], ->, ., ++, -- | vänster |
Unära prefixoperatorer | !, ++, +, -, *, &, sizeof, (typ) | höger | |
Multiplikation mm | *, /, % | vänster | |
Addition mm | +, - | vänster | |
Jämförelser | <, <=, >=, > | vänster | |
Likhetsjämförelser | ==, != | vänster | |
Logiskt OCH | && | vänster | |
Logiskt ELLER | || | vänster | |
Lägsta | Tilldelning | =, +=, -=, *=, /=, %= | höger |
include <stdio.h> int Main(void) { int x, y, max; printf("Skriv tre heltal: "); scanf("%d", x); scanf("%f", &y); scanf("%s", *z); if (x > y && x > z) /* Här räknar vi ut max = x; * vilket av de tre else if (y > x && y > z) * talen x, y och z max = y; * som är störst, else * och lägger det i max. max = z; */ printf("Största talet: \n", max); return 0; } // main