2BHEL FSST Test (Group A)

2021-12-21

Max. 32 points

Name:

Task Max. Achieved
1 2
2 2
3 10
4 8
5 6
6 4
Sum 32
Benotung: 29-32: 1, 25-28: 2, 21-24: 3, 17-20: 4, <=16: 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
    Ein struct in C ist ein Pointer zu einem Array.
    Der Rückgabewert von main gibt an, ob ein Programm ohne Fehler beendet wurde.
    gcc und clang sind unterschiedliche Bezeichnungen für den gleichen C Compiler.
    Das erste Element in einem Array hat in C den Index `1`.
  2. Das untenstehende Programm soll mittels clang kompiliert werden. Die ausführbare Datei soll den Namen calculation bekommen. Welches Kommando mit welchen Argumenten muss dazu verwendet werden?
    /* \file calculation.c */
    #include <stdio.h>
    
    int main() {
      printf("value: %.2f\n", (22.0/7));
      return 0;
    }
    clang calculation.c -o calculation
  3. 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. Hinweis: sin(0.5) ist ungefähr 0.479426.
      printf("sin(0.5): %.2f\n", sin(0.5));
      sin(0.5): 0.48
    2. typedef struct {
        int x;
        int y;
      } Point;
      Point p = {.x=1, .y=2};
      printf("x=%d, y=%d\n", p.y, p.x);
      x=2, y=1
    3. int j = 0;
      for (int i = 0; i <= 10; ++i) {
        j += i * i;
      }
      -
    4. int j = 10;
      for (; j >= 0; --j) { printf("%d ", j); }
      printf("\nHappy New Year!\n");
      10 9 8 7 6 5 4 3 2 1 0
      Happy New Year!
    5. int n = 10;
      char d = 6;
      bool work = true;
      while (work) {
        if (n / d == 0) {
          printf("%d\n", d);
          work = false;
        }
        d -= 1;
      }
      ERROR
    1. Ergänze das folgende Code Snippet so, dass 5,10,15,20,25,30,35,40,45,50 gefolgt von einem Zeilenumbruch auf standard output geschrieben wird.
      for (int i =      ;           ;         ) {
        printf("%d,", i);
      }
      printf(                   );
      for (int i = 5; i < 50; i += 5) {
        printf("%d,", i);
      }
      printf("50\n");
    2. Schreibe eine while Schleife, welche den gleichen Output wie die obige for Schleife erzeugt.
      1 Punkt für die notwendige Variable; 1 Punkt für die Condition; 1 Punkt für den Loop-Body; 1 Punkt für den korrekten Output (alle printf).
      int k = 5;
      while (k < 50) {
        printf("%d,", k);
        k += 5;
      }
      printf("50\n");
  4. Count Matching Elements
    Schreibe eine Funktion int countNumInArray(int number, int array[], size_t dimension) welche zurück gibt, wie oft number in array vorkommt. Zum Beispiel
    int array[] = {4, 1, 7, 5, 4, 1, 4, 2, 7};
    countNumInArray(5, array, 9);  // returns 1
    countNumInArray(4, array, 9);  // returns 3
    1 Punkt für die Funktionssignatur; 2 Punkte für die Schleifenbedingung inklusive Inkrement; 3 Punkte für den korrekten Rückgabewert.
    int countNumInArray(int num, int array[], size_t dimension) {
      int count = 0;
      for (size_t i = 0; i < dimension; ++i) {
        if (array[i] == num) {
          count += 1;
        }
      }
      return count;
    }
  5. Definiere einen struct, welcher die Dimensionen (length, width und height) einer Schachtel speichert. Erstelle einen neuen Typen Box mit dem Variablen dieses Typs deklariert werden können.
    3 Punkte für die Deklaration des struct; 1 Punkt für das Erstellen des Datentypen.
    typedef struct {
      int length;
      int width;
      int height;
    } Box;