2BHEL FSST Test (Group A)

2022-02-01

Max. 30 points

Name:

Task Max. Achieved
1 2
2 10
3 8
4 6
5 4
Sum 30
Benotung: >=27: 1, >=24: 2, >=20: 3, >15: 4, <=15: 5
  1. Markiere, welche der folgenden Aussagen wahr bzw. falsch sind.
    0-2 korrekt: 0 Punkte, 3 korrekt: 1 Punkt, 4 korrekt: 2 Punkte.
    Aussage Wahr Falsch
    Mit fopen(.) können Dateien zum Lesen, Schreiben oder Anfügen geöffnet werden.
    Der Rückgabewert von fopen ist ein Pointer zu FILE.
    Ein Pointer kann nicht auf einen anderen Pointer zeigen.
    Erst mit Hilfe von Pointern können Datenstrukturen wie Linked Lists implementiert werden.
  2. Welcher Text wird durch die folgenden Code Snippets in der C-Programmiersprache auf Standard Output (Terminal) geschrieben? Schreibe den genauen Output des Snippets. Die Snippets werden als Teil von int main() ausgeführt und alle notwendigen #includes sind vorhanden. Wenn das Snippet nicht kompilierbar ist oder zu einem Absturz führen würde, so ist das Wort “ERROR” als Antwort zu geben. Erzeugt das Snippet keinen Output (wenn beispielsweise kein printf oder dergleichen aufgerufen wird), so ist "-" als richtige Antwort zu verwenden.
    1. int a = 5;
      int* ptr = &a;
      *ptr += 5;
      printf("%d\n", a);
      10
    2. int a = 5;
      int* ptr = &a;
      int** p = &ptr;
      **p *= **p;
      printf("%d\n", a);
      25
    3. int array[] = {1, 2, 3, 4};
      int* array_ptr = array;
      int count = sizeof(array) / sizeof(int);
      int value = 0;
      while (count--) {
        value += *array_ptr++;
      }
      printf("%d\n", value);
      10
    4. char name[] = "Chris";
      char* name_ptr = name;
      while (*name_ptr) {  // string ends with the `\0` character
        *name_ptr = toupper(*name_ptr);  // return upper case character
        name_ptr++;
      }
      printf("%s\n", name);
      CHRIS
    5. typedef struct {int year; int month; int day;} IsoDate;
      IsoDate date = {2022, 2, 1};
      printf("%s\n", date);
      ERROR
  3. Schreibe eine Funktion bool has_upper(char* string) welche true zurück gibt, wenn mindestens ein Großbuchstabe darin vorkommt. Verwende dazu die Funktion int isupper(.) welche ein Zeichen als Argument nimmt und 0 zurück gibt, wenn das Argument kein Großbuchstabe ist, sonst wird >0.
    bool has_upper(char* string) {
      while (*string) {
        if (isupper(*string)) {
          return true;
        }
        string++;
      }
      return false;
    }
  4. Schreibe eine Funktion void printDate(IsoDate* d) welche das Übergebene Datum im ISO 8601 Format ('yyyy-mm-dd') auf stdout ausgibt. Die Datenstruktur Date ist definiert als
    typedef struct {int year; int month; int day;} IsoDate;
    1 Punkt für die Funktionssignatur; 2 Punkte für den Format String; 3 Punkte für Lesen der Werte des Structs.
    void print_date(const IsoDate* d) {
      printf("%04d-%02d-%02d\n", d->year, d->month, d->day);
    }
  5. Erstelle einen neuen Typen Node mit dem Variablen eines structs namens node_struct deklariert werden können.
    Definiere danach den struct node_struct, welcher eine Zahl value sowie zwei Node Pointer mit den Namen prev und next speichert. 1 Punkt für das Erstellen des Datentypen; 3 Punkte für die korrekten Deklaration des struct.
    typedef struct node_struct Node;
    
    struct node_struct {
      int value;
      Node* prev;
      Node* next;
    };