C/C++-Übungen für Einsteiger

Den zweitgrößten Wert eines Arrays finden in C und C++

In dieser Lektion findest du in einem einzigen Durchlauf und ohne Sortieren den zweitgrößten unterschiedlichen Wert eines Arrays.

Einführung

Am naheliegendsten ist es, das Array zu sortieren, um den zweitgrößten Wert zu finden, doch das kostet unnötig Zeit. Stattdessen reicht es, in einem Durchlauf die zwei größten Werte zu verfolgen und dabei Werte zu überspringen, die gleich dem größten sind.

Wichtige Punkte

  • Schalte die Compiler-Warnungen (compiler warnings) ein und behebe alle.
  • Verstehe den Datentyp und die Lebensdauer (lifetime) jedes Werts genau.
  • Prüfe immer die Eingabedaten und die Grenzen von Array-Indizes.

Codebeispiele in C und C++

C
Code ausführen →
main.c
#include <limits.h>
#include <stdio.h>
int main(void) {
    int values[] = {7, 23, 12, 23, 9}, first = INT_MIN, second = INT_MIN;
    // Maintain the two largest distinct values.
    for (int i = 0; i < 5; ++i) { int value = values[i]; if (value > first) { second = first; first = value; } else if (value > second && value != first) second = value; }
    printf("second=%d\n", second);
}
Ergebnis der Ausführung
second=12
C++
Code ausführen →
main.cpp
#include <iostream>
#include <limits>
#include <vector>
int main() {
    std::vector values{7, 23, 12, 23, 9}; int first = std::numeric_limits<int>::min(), second = first;
    // Maintain the two largest distinct values.
    for (int value : values) { if (value > first) { second = first; first = value; } else if (value > second && value != first) second = value; }
    std::cout << "second=" << second << '\n';
}
Ergebnis der Ausführung
second=12

C und C++ im Vergleich

Die Variablen first und second beginnen mit INT_MIN, dem kleinsten Wert des Typs int. Taucht ein Wert größer als first auf, rutscht der alte Wert von first nach second. Taucht ein Wert zwischen beiden auf, der sich von first unterscheidet, wird nur second aktualisiert. Deshalb verfälscht die doppelte 23 das Ergebnis nicht, und der zweitgrößte Wert ist 12.

C

C verwendet kleine prozedurale Funktionen und zeigt offen, wie Daten im Speicher dargestellt werden.

C++

C++ erlaubt weiterhin Arbeit auf niedriger Ebene, ergänzt aber Bibliothekstypen und sicherere Abstraktionen.

Übungen zur Vertiefung

Führe beide Versionen aus und ändere dann den Code, um zu beobachten, welche Sicherheit jede Sprache bietet.

  • Teste ungültige Eingaben und Grenzwerte.
  • Kompiliere mit den Flags -Wall -Wextra -Wpedantic, um zusätzliche Warnungen einzuschalten.
  • Lagere gemeinsame Deklarationen in eine Header-Datei und die Implementierung in eine eigene Datei aus.

Mit einer Challenge üben

Nutze den Inhalt dieser Lektion, um ein echtes Problem zu lösen. Jede Challenge läuft im Browser, mit sofortigen Tests und einem KI-Review.

Alle Challenges