2 Übungen | |
→ | 2.7 Übung 6 |
Theorie |
Aufgabe 1: Mittelwert |
Aufgabe 2: Osterei |
Aufgabe 3: Notwendigkeit von Prototypen |
Machen Sie sich mit Feldern und mathematischen Operationen mit Gleitkommazahlen in C vertraut.
Erstellen Sie ein Programm cintro07, das den Mittelwert aus 10
Gleitkommazahlen berechnet.
Verwenden Sie ein Feld, um die Daten zu speichern.
Das Programm soll in einer for-Schleife zehnmal jeweils zur Eingabe
eines Wertes auffordern und anschließend den Wert einlesen und im
Feld abspeichern.
Nach dem Einlesen wird der Mittelwert berechnet und ausgegeben.
Verwenden Sie zum Einlesen der double-Werte die Funktion hsm_et_read_double() aus den Dateien he-read.h und he-read.c. Binden Sie evtl. benötigte weitere Module mit in das Projekt ein.
In allen nachfolgenden Beispielen wird nicht mehr die Funktion scanf() für die Eingabe verwendet, sondern die hsm_et_read_...()-Funktionen. Bei Bedarf weitere Funktionen zu he-read.h und he-read.c hinzufügen.
Ein außen auf dem Fensterbrett verstecktes Osterei gerät durch
einen Windstoß in Bewegung, rollt über die Kante des Fensterbrettes
und fällt herunter.
Erstellen Sie ein Programm, das die Fall-Zeit in Abhängigkeit von
der Höhe des Fensterbrettes über dem Erdboden berechnet und
ausgibt.
Das Programm soll zunächst den Nutzer zur Eingabe der Höhe
auffordern und dann mit der eingelesenen Höhe die Berechnung
vornehmen.
/** @file ex050.c Demo-Programm fuer Prototypen.
*/
/* Copyright (C) 2014-2017 - HS Schmalkalden. All rights reserved. */
#define _USE_MATH_DEFINES 1
#include <stdio.h>
#include <math.h>
/** Hauptprogramm.
@return 0 bei Erfolg.
*/
int
main(void)
{
double d_wurzel_2;
int i_wurzel_2;
#ifdef M_SQRT2
printf("Mit Verwendung von math.h\n");
#else
printf("Ohne Verwendung von math.h\n");
#endif
d_wurzel_2 = sqrt(2.0);
printf("Test 1 (richtiger Aufruf): %lg\n", d_wurzel_2);
d_wurzel_2 = sqrt(2);
printf("Test 2 (falscher Parametertyp): %lg\n", d_wurzel_2);
i_wurzel_2 = sqrt(2.0);
printf("Test 3 (falscher Ergebnistyp): %d\n", i_wurzel_2);
return 0;
}
/* vim: set ai sw=4 ts=4 expandtab : */
double sqrt(double x);aus der Mathematikbibliothek, um Quadratwurzeln zu berechnen.
Konvertierung von 'double' in 'int', möglicher Datenverlustweist uns darauf hin.
Wir entfernen nun die Zeile
#include <math.h>
und erstellen das Programm erneut.
'sqrt' undefiniert; Annahme: extern mit Rückgabetyp intweist uns darauf hin.
Fazit: Stellen Sie sicher, dass dem Compiler die
Prototypen aller aufgerufenen Funktionen bekannt sind.
Falls beim Erstellen von Programmen Warnungen der Form
"Konvertierung von 'double' in 'int', möglicher Datenverlust"
oder
"'...' undefiniert; Annahme: extern mit Rückgabetyp int"
auftreten, sollten Sie die Ursachen der Warnungen beseitigen.