Tentamen i Programmering grundkurs och Programmering C



Relevanta dokument
Tentamen i Programmering grundkurs och Programmering C

Tentamen i Programmering grundkurs och Programmering C

Tentamen i Programmering grundkurs och Programmering C

Tentamen i. för D1 m fl, även distanskursen. lördag 19 januari 2013

Tentamen i. Programmering i språket C

Tentamen i Programmering grundkurs och Programmering C

Tentamen i Programmering grundkurs och Programmering C

Programmering C: Tentamen of 5 Prioritet och associativitet hos operatorerna i C De viktigaste operatorerna: Prioritet Kategori Operator

Tentamen i. för D1 m fl, även distanskursen. lördag 26 februari 2011

Tentamen i Programmering grundkurs och Programmering C

Tentamen i. för D1 m fl, även distanskursen. lördag 28 maj 2011

Tentamen i. för D1 m fl, även distanskursen. fredag 13 januari 2012

Tentamen i Programmering grundkurs och Programmering C

Tentamen i. Programmering i språket C

Tentamen i Programmering grundkurs och Programmering C

Kompilatorer och interpretatorer

Strängar. Strängar (forts.)

För alla uppgifter på tentan gäller: Man får använda både standard-c++ (som till exempel har pekare som anges med * och objekt som skapas med new) och

Kompilatorer och interpretatorer

KTH STH TENTAMEN. HI1024:TEN2 - Praktisk tentamen Tid: 8-13, den 18 februari 2012

Skriv i mån av plats dina lösningar direkt i tentamen. Skriv ditt kodnummer längst upp på varje blad.

Tentamen *:58/ID100V Programmering i C Exempel 3

Lösningar till uppgifterna sätts ut på kurssidan på nätet i dag kl Tentamen i Programmering C, Fri, Kväll,

HI1024, Programmering, grundkurs, 8hp KTH STH TENTAMEN. HI1024:TEN2 - Praktisk tentamen Tid: Fredagen den 21 oktober 2011,

HI1024, Programmering, grundkurs, 8hp KTH STH TENTAMEN. HI1024:TEN1 - Teoretisk tentamen Tid: Torsdagen den 20 oktober 2011,

Lösningar till uppgifterna sätts ut på kurssidan på nätet idag kl Omtentamen i Programmering C, 5p, A1, D1, E1, Fri, Pr1, Te/Ek1,

Lösningar till uppgifterna sätts ut på kurssidan på nätet i dag kl Omtentamen i Programmering C, Fri, Kväll,

Lösningar till uppgifterna sätts ut på kurssidan och på WebCT (Gamla Tentor) i dag kl 19. Tentamen i Programmering C, 5p, Distans, övriga,

Johan Karlsson Datavetenskap för teknisk kemi, 10p, moment 1 Datavetenskap Umeå Universitet. Tentamen

Programmering, grundkurs, 8.0 hp HI1024, HI1900 etc., Tentamen TEN1. Måndagen den 10 januari 2011,

Lösningar till tentauppgifterna sätts ut på kurssidan på nätet idag kl 19. Omtentamen i Programmering C, 5p, fristående, kväll,

Programmeringsteknik med C och Matlab

Innehåll. Relationer mellan klasser Operatoröverlagring. Static-medlemmar. Const- och referensmedlemmar. Const medlemsfunktioner

Lämna in en ifylld kursvärdering tillsammans med tentan! Lösningar till uppgifterna sätts ut på kurssidan på nätet i dag kl

Lösningar till uppgifterna sätts ut på kurssidan på nätet i dag kl 13. Omtentamen i Programmering C, 5p, A1, D1, PA1, Fri,

Programmering i C. Vad är C? Målsättning. Litteratur. Jämförelse med Java. Exempel : Ett program som skriver ut texten Hello, world

tentaplugg.nu av studenter för studenter

Föreläsning 2. Variabler, tilldelning och kodblock{} if-satsen Logiska operatorer Andra operatorer Att programmera

Övning från förra gången: readword

Lösningar till tentauppgifterna sätts ut på kurssidan på nätet idag kl

Databasteknik för D1, SDU1 m fl

Dagens föreläsning. Specialtecken. Mer om printf. Formateringssträngar. Mer om scanf. Programmeringsteknik för Ingenjörer VT05

HI1024 Programmering, grundkurs TEN

Planering Programmering grundkurs HI1024 HT data

Programmeringsteknik med C och Matlab

Standardfunktioner i C

Databasteknik för D1, SDU1 m fl

*Pekarvärden *Pekarvariabler & *

Föreläsning 13. In- och utmatning

Funktionspekare, inledning: funktionsanropsmekanismen. Anrop via pekare

Tentamen ges för: Tentamensdatum: Tid:

TDIU01 - Programmering i C++, grundkurs

Tecken & Strängar. Kapitel 7

Agenda. Arrayer deklaration, åtkomst Makron Flerdimensionella arrayer Initiering Strängar Funktioner och arrayer. Övningar nu och då

Variabler använder man sig av för att under programkörningen spara data eller information i primärminnet. En variabel har typ, namn och värde.

Vad har vi lärt oss så här långt Vad är en sträng? Strängkonstanter. Att skriva ut och läsa in strängar. Att arbeta med strängar.

#include <stdio.h> #include <string.h>

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

Programmering Grundkurs (HI1900) Teoridel

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

Planering Programmering grundkurs HI1024 HT TIDAA

C-programmering, föreläsning 2 Jesper Wilhelmsson

Föreläsning 7 Strängar

Dynamiskt minne. Vad är dynamiskt minne Motivering Hur gör man i C Övningar

2 Pekare och dynamiska variabler.

TENTAMEN MOM1 GRUNDLÄGGANDE PROGRAMMERINGSTEKNIK OCH

Innehåll. Rela+oner mellan klasser Operatoröverlagring. Sta+c- medlemmar. Const- och referensmedlemmar. Const medlemsfunk+oner. friend

Programmering, grundkurs, 8.0 hp HI1024, omtentamen, TEN1. Tisdagen den 7 juni 2011,

Systemnära programmering Tentamen. Systemnära programmering, 7.5hp 5 november 2012

Planering Programmering grundkurs HI1024 HT 2014

Poster ( structar ) Postdeklarationer

Innehållsförteckning. Exempel. Åtkomst & användarhandledning

Föreläsning 4. Val, boolska värden, läsbarhet, osv

GU / Chalmers Campus Lindholmen Tentamen Programutveckling LEU 482 / TIG167

Tentamen i Grundläggande programmering STS, åk 1 lördag

Pekare och arrayer. Indexering och avreferering

Operatorer Tilldelning Kodblock { } if satsen Logiska uttryck Att programmera

Föreläsning 11. Strängar

Uppgifter till praktiska tentan, del A. (7 / 27)

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

GU / Chalmers Campus Lindholmen Tentamen Programutveckling LEU 482 / TIG167

HI1024 Programmering, grundkurs TEN

C-programmering. Målsättning Introducera programmering i C för de som inte har någon erfarenhet av C eller C++. Litteratur

Grundläggande programmering med C# 7,5 högskolepoäng

PDA-applikationer med.net

Tentamen i Programmering

Deklarera en struct som kan användas för att representera en rät linje

Användarhandledning Version 1.2

Repetition C-programmering

Parameteröverföring. Exempel. Exempel. Metodkropp

Tentamen, Algoritmer och datastrukturer

Loopar och datatyper. Föreläsning 3

Klassdeklaration. Metoddeklaration. Parameteröverföring

Objektorienterad Programmering (TDDC77)

Transkript:

1 of 8 Örebro universitet Institutionen för naturvetenskap och teknik Thomas Padron-McCarthy (thomas.padron-mccarthy@oru.se) Tentamen i Programmering grundkurs och Programmering C för D1 m fl, även distanskursen torsdag 20 augusti 2015 Gäller som tentamen för: DT1029 Datateknik A, Programmering grundkurs, provkod 0100 DT1030 Datateknik A, Tillämpad datavetenskap, provkod 0410 DT1006 Datateknik A, Programmering C, distans, provkod 0100 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: Återlämning av tentor: Examinator och jourhavande: Meddelas senast torsdag 10 september 2015. Efter att resultatet meddelats kan tentorna hämtas på universitetets centrala tentamensutlämning. Thomas Padron-McCarthy, telefon 070-73 47 013. Skriv tydligt och klart. Lösningar som inte går att läsa kan naturligtvis inte ge några poäng. Oklara och tvetydiga formuleringar kommer att misstolkas. Skriv den personliga tentamenskoden på varje inlämnat blad. Skriv inte namn eller personnummer på bladen. Skriv bara på en sida av papperet. Använd inte röd skrift. Antaganden utöver de som står i uppgifterna måste anges. Skriv gärna förklaringar om hur du tänkt. Även ett svar som är fel kan ge poäng, om det finns med en förklaring som visar att huvudtankarna var rätt. LYCKA TILL!

2 of 8 Prioritet och associativitet hos operatorerna i C De viktigaste operatorerna: 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

3 of 8 Några användbara biblioteksfunktioner stdlib.h stdio.h string.h ctype.h math.h int rand(void); void srand(unsigned int seed); void *malloc(size_t size); void *realloc(void *ptr, size_t size); void free(void *ptr); void exit(int status); void qsort(void *base, size_t nmemb, size_t size, int(*compar)(const void *, const void *)); FILE *fopen(const char *path, const char *mode); int fclose(file *stream); int getc(file *stream); int getchar(void); int ungetc(int c, FILE *stream); char *fgets(char *s, int size, FILE *stream); char *gets(char *s); int putc(int c, FILE *stream); int printf(const char *format,...); int fprintf(file *stream, const char *format,...); int sprintf(char *str, const char *format,...); int snprintf(char *str, size_t size, const char *format,...); int scanf(const char *format,...); int fscanf(file *stream, const char *format,...); int sscanf(const char *str, const char *format,...); size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream); size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream); size_t strlen(const char *s); char *strcpy(char *dest, const char *src); char *strncpy(char *dest, const char *src, size_t n); int strcmp(const char *s1, const char *s2); int strncmp(const char *s1, const char *s2, size_t n); char *strcat(char *dest, const char *src); char *strncat(char *dest, const char *src, size_t n); char *strstr(const char *haystack, const char *needle); void *memmove(void *dest, const void *src, size_t n); int isalnum(int c); int isalpha(int c); int isblank(int c); int isdigit(int c); int islower(int c); int isprint(int c); int ispunct(int c); int isspace(int c); int isupper(int c); double sqrt(double x); double pow(double x, double y);

4 of 8 Uppgift 1 (3 p) Vad skriver det här C-programmet ut? #include <stdio.h> int main(void) { int a, b, c; float x, y, z, t; a = 0; for (b = 0; b < 10; ++b) { ++a; } for (c = 0; c < 100; ++c) { a++; } printf("a = %d\n", a); x = 1.0; y = 2.0; z = 3.0; x = y + z; for (b = 0; b < 3; ++b) { z = z + 1; printf("b = %d, x = %f\n", b, x); } printf("x = %f\n", x); printf("summan = %f\n", x + y); printf("uttrycket = %f\n", x+1 * y); printf("a = %d\n", a); printf("t = %f\n", t); } return 0; En del variabler kan ha ett odefinierat värde ("skräp") när de ska skrivas ut. Ange då detta!

5 of 8 Uppgift 2 (4 p) Vi vill kunna beräkna följande uttryck: Skriv därför ett komplett C-program som först läser in värdena på x, y och R, beräknar uttrycket, och till sist skriver ut uttryckets värde. Beräkningarna ska ske med flyttal. Om nämnaren i divisionen (dvs deluttrycket under divisionsstrecket) är noll, eller om deluttrycket inuti något av rottecknen är mindre än noll, går uttrycket inte att beräkna. I så fall ska programmet inte försöka beräkna uttrycket, utan det ska i stället skriva ut ett informativt och rättvisande felmeddelande om saken. I den här och alla andra uppgifter på tentan gäller: Normalt är felhantering en stor del av ett program. Vad ska till exempel hända om användaren skriver Kalle när hon egentligen borde mata in ett tal? Här behövs dock ingen felhantering, om så inte särskilt efterfrågas i uppgiften. I den här och alla andra uppgifter på tentan gäller: Man kan strunta i detaljer som bara behövs just när man utvecklar konsolprogram i Visual Studio, som konstiga teckenkoder för ÅÄÖ, eller att fönstret med programkörningen försvinner när programmet avslutas. Uppgift 3 (5 p) Skriv en C-funktion som skriver ut en array av heltal. Funktionen ska ta tre argument: en array av heltal, ett heltal som anger antalet element i arrayen, och en öppen textfil (av typen FILE *) som heltalen ska skrivas på. Funktionen ska inte returnera något värde. Talen i arrayen ska skrivas med ett kommatecken och ett mellanslag mellan varje tal. Det ska finnas exakt ett blanktecken före det första talet och efter det sista talet. Runt arrayen ska hakparenteser (dvs [ och ]) skrivas. Utmatningen ska avslutas med ett radslutstecken (\n). Godtyckligt stora arrayer ska kunna hanteras. Exempel på utskrifter: [ 1, 2, 9, 10, 0, 33, -6, 2 ] [ 0, 0, 0, 0 ] [ ]

6 of 8 Uppgift 4 (4 p) Skriv en main-funktion som först frågar efter antalet heltal som ska hanteras, sedan läser in de talen i en array, därefter frågar efter namnet på en fil, och till sist skriver dem på den filen med hjälp av funktionen från uppgiften ovan. Högst 100 tal behöver kunna hanteras. I den här och alla andra uppgifter på tentan gäller: Om du behöver använda något från en tidigare uppgift eller deluppgift, till exempel utnyttja en datatyp eller anropa en funktion som skrevs i den tidigare uppgiften, så behöver du inte skriva samma kod igen. Du får också göra uppgiften även om du inte gjort den tidigare uppgiften. I den här och alla andra uppgifter på tentan gäller: Normalt ska man aldrig använda funktionen gets, utan i stället till exempel fgets. Här kan du dock använda gets. Uppgift 5 (5 p) Skriv en C-funktion som tar en sträng som argument, och returnerar antalet av den siffra ('0'..'9') som förekommer flest gånger i strängen. Om funktionen anropas med strängen "kalle" som argument, returnerar den alltså 0. Om den anropas med "kalle7" som argument, returnerar den 1. Om den anropas med "xx447xxx4" som argument, returnerar den 3. Uppgift 6 (3 p) Vi vill testa funktionen i uppgiften ovan. Skriv därför en main-funktion som anropar funktionen med tre lämpliga testfall, och skriver ut ett meddelande om den ger ett annat svar än det väntade.

7 of 8 Uppgift 7 (16 p) Du har just fått jobb som programmerare på Svenska Flipperspelsfabriken AB, som bygger klassiska flipperspel: I Svenska Flipperspelsfabrikens senaste och mest avancerade flipperspel sitter en liten dator, som styr spelet och som ska programmeras i C. Man har redan skrivit hela programmet, utom administrationen av resultatlistan ("high-score-listan"). Du har nu fått i uppgift att skriva den delen av programmet. Listan ska hålla reda på de tio spelare som fått flest poäng. Förutom hur många poäng de fått, ska deras namn, i form av tre bokstäver, lagras. Exempel på hur en lista kan se ut: Placering Namn Poäng --------- ---- ----- 1 TPM 9182300 2 TPM 8819690 3 KSD 5810200 4 TPM 5628000 5 TJO 3671110 6 TAO 1810990 7 KSD 757890 8 TPM 707620 9 TAO 32450 10 OWL 80 Listans data ska lagras i poster ("struct") i primärminnet (alltså inte på en fil), men i övrigt får du själv avgöra hur datastrukturen ska se ut. Du behöver aldrig lagra mer än tio poster. a) (2p) Definiera den eller de variabler som behövs. Ge dem också lämpliga initialvärden i definitionerna. Glöm inte att definiera datatyperna, om du använder några. b) (2p) Skriv en funktion skriv_listan, som skriver ut listan. (Det här flipperspelet är ovanligt avancerat, så du kan använda vanliga printf-satser.) Det behöver inte se ut exakt som i exemplet. c) (2p) Skriv en funktion ska_lagras, som tar ett poängtal som argument, och som returnerar ett sant värde om detta poängtal är tillräckligt högt för att få plats i listan. I annat fall ska funktionen returnera ett falskt värde. Tänk på att de tio första resultaten alltid ska lagras. d) (5p) Skriv en funktion registrera_resultat, som tar två argument: ett namn (en sträng på tre bokstäver) och ett poängtal (ett heltal). Poängtalet är alltid större än eller lika med noll. Funktionen ska stoppa in detta resultat på lämplig plats i resultatlistan. Om poängtalet var för lågt, så att resultatet inte ska in i listan, ska listan inte ändras. Tänk på att de tio första resultaten, innan listan är full, alltid ska lagras.

8 of 8 e) (2p) Flipperspelet innehåller även en hårddisk. Skriv funktionen spara_resultat, som skriver resultatlistan på en fil. f) (2p) Skriv funktionen hemta_resultat, som läser in resultatlistan igen från filen. g) (1p) Varför ska funktionen heta hemta_resultat, med ett understreck mellan orden, och inte hemta-resultat, med ett minustecken (som även används som bindestreck)?