Programmering i språket C
för D1 m fl, även distanskursen
torsdag 23 augusti 2012
Gäller som tentamen för:
DT1016 Datateknik A, Programmering grundkurs, provkod 0100
DT1007 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 36.
För godkänt betyg (3 respektive G) krävs 18 poäng. |
Resultat och lösningar: | Meddelas via e-post eller på kursens hemsida, http://basen.oru.se/kurser/c/2011-2012-p2/, senast torsdag 13 september 2012. |
Återlämning av tentor: | Efter att resultatet meddelats kan tentorna hämtas på universitetets centrala tentamensutlämning. |
Examinator och jourhavande: | Thomas Padron-McCarthy, telefon 070-73 47 013. |
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 |
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);
a) 1 + 2 - 1 + 2
b) 1 * 2 - 1 * 2
c) 1 < 2 || x < y
x = 1; y = 2; z = 3; z = x + y; if (x > y) { z = x + y; } else if (y < z) { printf("x = 17"); if (z < 4) x = x + y; } else if (x > y) { z = y; } else { x = x - y; }
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 ÅÄÖ, och att fönstret med programkörningen försvinner när programmet avslutas. |
Skriv en funktion, tre_lika, som tar tre flyttal som argument, och som returnerar ett sant värde om alla tre talen är lika. Annars ska funktionen returnera ett falskt värde.
b)
Skriv en annan funktion, tre_olika, som tar tre flyttal som argument, och som returnerar ett sant värde om alla tre talen är olika. Om två eller fler av talen är lika, ska funktionen returnera ett falskt värde.
c)
Vi vill provköra de två funktionerna tre_lika och tre_olika. Skriv därför en main-funktion som läser in tre tal, anropar tre_lika och tre_olika med de talen som argument, och skriver ut resultatet.
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 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. |
Vi ska skriva ett program som hanterar termosar. Skapa därför posttypen Termos. En termos har ett typnamn, som är en textsträng, till exempel Sahara MWS-A500. Den har också en volym, som är ett flyttal, till exempel 0.5. Dessutom har den ett innehåll, som också anges med en textsträng, till exempel kaffe, och en innehållsvolym, som anger hur mycket som faktiskt finns i termosen. Innehållsvolymen är ett flyttal, till exempel 0.3.
Typ: Sahara MWS-A500 Volym: 0.50 Innehåll: kaffe Innehållets volym: 0.30
Den inlästa posten ska returneras som returvärde från funktionen, eller via en pekare.
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. |