2 Übungen | |
→ | 2.5 Übung 4 |
Theorie |
Aufgabe 1: Länge einer Strecke |
Aufgabe 2: Verwendung von union |
Aufgabe 3: Verwendung des sizeof-Operators |
Informieren Sie sich über Datenstrukturen (struct, union), siehe Abschnitt Nutzerdefinierte Datentypen.
/** @file ex051.c Demoprogramm fuer Datenstrukturen.
*/
/* Copyright (C) 2014-2017 - HS Schmalkalden. All rights reserved. */
#include <stdio.h>
#include <math.h>
/** Ein geometrischer Punkt.
*/
struct PUNKT {
double x; /**< X-Koordinate. */
double y; /**< Y-Koordinate. */
};
/** Eine Linie.
*/
struct LINIE {
struct PUNKT P0; /**< Anfangspunkt. */
struct PUNKT P1; /**< Endpunkt. */
};
int
main(void)
{
struct LINIE linie; /* Linie */
double dist; /* Laenge der Strecke */
/* Wertzuweisungen */
linie.P0.x = 0.5; /* x-Wert Anfangspunkt */
??? = 0.25; /* y-Wert Anfangspunkt */
??? = 5.0; /* x-Wert Endpunkt */
??? = 3.0; /* y-Wert Endpunkt */
/* Laengenberechnung */
dist = sqrt( (??? - ???)*(??? - ???) + (??? - ???)*(??? - ???) );
/* Ausgabe */
printf("Streckenlaenge: %lg\n", dist);
return 0;
}
/* vim: set ai sw=4 ts=4 expandtab : */
Vervollständigen/korrigieren Sie den Quelltext, erstellen und testen Sie das Programm.
/** @file ex052.c Demo-Programm zur Verwendung von union.
*/
/* Copyright (C) 2014-2017 - HS Schmalkalden. All rights reserved. */
#include <stdio.h>
/** Union-Typ un.
Nur ein Element des union kann einen gueltigen Wert haben.
Aendern/Setzen eines Elementes zerstoert den Inhalt der anderen
Elemente.
*/
union un {
int i; /**< Ganzzahliger Wert. */
double f; /**< Gleitkomma-Wert. */
long l; /**< Langer ganzzahliger Wert. */
char string[5]; /**< Text. */
};
/** Struct-Typ st.
Alle Elemente des struct haben gleichzeitig gueltige Werte.
Aendern/Setzen eines Elementes beeinflusst die anderen Elemente nicht.
*/
struct st {
int i; /**< Ganzzahliger Wert. */
long l; /**< Langer ganzzahliger Wert. */
double f; /**< Gleitkomma-Wert. */
};
/** Hauptprogramm.
@return 0 bei Erfolg
*/
int
main(void)
{
union un u1; /* Definition der union-Variablen u1 */
struct st s1; /* Definition der struct-Variablen s1 */
printf("\nUnion\n");
u1.i = 17;
printf("%d\n",u1.i); /* 1 */
u1.l = 182;
printf("\n%d\n",u1.i); /* 2 */
printf("%ld\n",u1.l); /* 3 */
u1.f= 15.;
printf("\n%ld\n",u1.i); /* 4 */
printf("%ld\n",u1.l); /* 5 */
printf("%f\n",u1.f); /* 6 */
printf("\nStruktur:\n");
s1.i = 17;
printf("%d\n",s1.i); /* 7 */
s1.l = 182;
printf("\n%d\n",s1.i); /* 8 */
printf("%ld\n",s1.l); /* 9 */
s1.f= 15.;
printf("\n%d\n",s1.i); /* 10 */
printf("%ld\n",s1.l); /* 11 */
printf("%f\n",s1.f); /* 12 */
return 0;
}
/* vim: set ai sw=4 ts=4 expandtab : */
Sagen Sie die Ergebnisse der gekennzeichneten printf()-Ausgaben voraus. Erstellen Sie das Programm, testen Sie es und überprüfen Sie Ihre Vorhersagen.
/** @file ex053.c Demo-Prgramm fuer sizeof-Operator.
*/
/* Copyright (C) 2014-2017 - HS Schmalkalden. All rights reserved. */
#include <stdio.h>
#include <string.h>
/** Union-Typ un.
Nur ein Element des union kann einen gueltigen Wert haben.
Aendern/Setzen eines Elementes zerstoert den Inhalt der anderen
Elemente.
*/
union un {
int i; /**< Ganzzahliger Wert. */
double f; /**< Gleitkomma-Wert. */
long l; /**< Langer ganzzahliger Wert. */
char string[5]; /**< Text. */
} u1;
/** Struct-Typ st.
Alle Elemente des struct haben gleichzeitig gueltige Werte.
Aendern/Setzen eines Elementes beeinflusst die anderen Elemente nicht.
*/
struct st {
int i; /**< Ganzzahliger Wert. */
long l; /**< Langer ganzzahliger Wert. */
double f; /**< Gleitkomma-Wert. */
} s1;
/** Test-Text.
*/
static char const test_text[] = { "Dies ist ein Test." };
/** Hauptprogramm.
@return 0 bei Erfolg.
*/
int
main(void)
{
int i = 1;
/* Groesse des Datentypes union un ausgeben
*/
printf("Groesse union un: %u\n", (unsigned)sizeof(union un));
/* Groesse der Variablen i ausgeben
*/
printf("Groesse Variable i: %u\n", (unsigned)sizeof(i));
/* Groesse des Datentypes struct st ausgeben
*/
printf(???);
/* Groesse der Variable test_text mit sizeof
*/
printf(???);
/* Text-Laenge in test_text
*/
printf("Laenge von test_text: %u\n", (unsigned)strlen(test_text));
return 0;
}
/* vim: set ai sw=4 ts=4 expandtab : */
Vervollständigen/korrigieren Sie den Quelltext, erstellen und testen Sie das Programm.
Wodurch kommt der Unterschied in der Größe der Variable test_text und der Länge des Textes in test_text zustande?