2BHEL FSST Test (Group B)

2022-03-08

Max. 24 points

Name:

Task Max. Achieved
1 2
2 10
3 6
4 6
Sum 24
Benotung: >=21: 1, >=18: 2, >=15: 3, >=12: 4, <12: 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
    Dynamische Speicherverwaltung in C is notwendig, um den gesamten vorhandenen Hauptspeicher nutzen zu können.
    malloc(.) initialisiert den reservierten Speicher mit Nullen.
    Der Rückgabewert von malloc(.) ist ein void Pointer.
    calloc(.) initialisiert den reservierten Speicher mit Nullen.
  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 = 3;
      int* ptr = &a;
      *ptr += 4;
      printf("%d\n", a);
      7
    2. int a = 3;
      int* ptr = &a;
      int** p = &ptr;
      **p += **p;
      printf("%d\n", a);
      6
    3. int array[] = {3, 3, 3, 3, 3};
      int* array_ptr = array;
      int count = sizeof(array) / sizeof(int);
      int value = 0;
      while (count--) {
        value += *array_ptr++;
      }
      printf("%d\n", value);
      15
    4. char name[] = "Pat";
      char* name_ptr = name;
      while (*name_ptr) {  // string ends with the `\0` character
        printf("%c", *name_ptr);
        name_ptr++;
      }
      printf("\n");
      Pat
    5. Note: die forward declaration von TreeNode in den ersten beiden Zeilen ist gültiges C.
      typedef struct treenode TreeNode;
      struct treenode {int value; TreeNode *left; TreeNode *right;};
      TreeNode *node = malloc(sizeof(TreeNode));
      node->value = 123; node->left=NULL; node->right=NULL;
      printf("%d\n", node->value);
      123
  3. Schreibe eine Funktion int *range(int start, int stop); welche einen Pointer zu einem Array mit aufsteigenden Zahlen zurück gibt. Der erste Wert des Arrays ist start, der letzte stop - 1. Die Anzahl der Elemente ist dementsprechend stop - start. Zum Beispiel gibt der Aufruf range(3, 8) einen Pointer zu folgendem Array zurück: {3, 4, 5, 6, 7}.
    1 Punkt den korrekten Funktionsnamen und die korrekte Signatur
    2 Punkt für das Reservieren des Speichers
    2 Punkt für das Initialisieren der Werte
    1 Punkt für die Rückgabe des Arrays
    int *range(int start, int stop) {
      int *array = malloc((stop - start) * sizeof(int));
      for (int i = 0; i < stop - start; ++i) {
        array[i] = start + i;
      }
      return array;
    }
  4. Erstelle einen Typen Resistor, welcher folgende Eigenschaften speichert: unsigned int resistance, unsigned int max_voltage, float tolerance und char type[50].
    1 Punkt für die Deklaration des Structs
    1 Punkt für den Typedef
    je 1 Punkt für jedes der 4 Felder
    typedef struct resistor Resistor;
    struct resistor {
      char type[50];
      unsigned int resistance;
      float tolerance;
      unsigned int max_voltage;
    };