Programmering grundkurs och Programmering C
för D1 m fl, även distanskursen
onsdag 5 juni 2013
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
DT1016 Datateknik A, Programmering grundkurs, provkod 0100
DT1007 Datateknik A, Tillämpad datavetenskap, provkod 0410
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 via e-post eller på kursens hemsida, http://basen.oru.se/kurser/c/2012-2013-p2/, senast onsdag 26 juni 2013. |
Å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) 5 * 2 + 3
b) 5 + 2 * 3
#include <stdio.h> void f(int varv) { int i; for (i = 0; i < varv; i++) printf("*"); } int main(void) { int i; int x; int y = 2; x = y + 1; for (i = 0; i < 3; ++i) { f(i); printf("x = %d, x + %d = %d\n", x, i, x + i); } return 0; }
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. |
a) (1p) Definiera datatypen struct Djur, som beskriver ett djur.
b) (1p) Definiera en variabel av typen struct Djur och initiera den med data om den bengaliska tigern Richard Parker, som väger 221,2 kilo.
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. |
Vi ska bara anropa funktionen en gång, så det finns alltså bara ett enda testfall. Försök göra det testfallet så bra som möjligt!
void visa_djur(struct Djur djuret)
eller så här:
void visa_djur(struct Djur *djuret)
struct Djur las_djur()
eller så här:
void las_djur(struct Djur* p)
Om filen inte går att öppna, ska ett felmeddelande skrivas ut, och programmet ska avslutas.
Välj själv hur användaren ska avsluta inmatningen, dvs hur man anger att man inte vill mata in fler djur, och beskriv vilket sätt du valde.
Glöm inte att beskriva hur inmatningen avslutas, och om du valde en textfil eller en binärfil!
Om filen inte går att öppna, ska ett felmeddelande skrivas ut, och programmet ska avslutas.
Ett körexempel, med användarens inmatning understruken:
Hur många trappsteg? 4 Hur högt är ett trappsteg? 3 Hur brett är ett trappsteg? 10 ********** ********** ********** ******************** ******************** ******************** ****************************** ****************************** ****************************** **************************************** **************************************** ****************************************