Fragen zur Klausurvorbeitung, 85% beantwortet, 15% fehlen mir noch...
-
Hallo Leute,
schreibe in ca. 2 Wochen eine Klausur in C, dafür hat der Professor einige Fragen zusammengestellt, die wir beantworten können und wovon wohl die ein oder andere Frage auch in der Klausur vorkommt. Ich habe die wo ich wusste durch Folien, Google, Wikipedia und offene C Bücher beantwortet, allerdings konnte ich manche Sachen nicht finden und ausreichend beantworten, deshalb hoffe ich ich finde hier Hilfe zur Vervollständigung der Fragen.
Hier sind die Fragen:
- Es gibt drei Grundprinzipien, die man zur Beschreibung imperativer Programme benötigt. Erklären Sie diese anhand ihrer Darstellung in Flussdiagrammen.
http://www.fsemmler.de/studium/flussdiagramm.gif
- Nennen Sie mindestens drei Phasen, die ein Softwareentwicklungsprojekt durchläuft und erläutern Sie diese Phasen mit einem Satz.
http://www.fsemmler.de/studium/softwareentwicklung.gif
- Was versteht man unter der inkrementellen Entwicklung von Software?
- welcher Teil der Software wann ausgeliefert wird
- ihr liegt ein Entwicklungsprozess zugrunde, der jeweils ganz durchlaufen wird.
- vor jeder Wiederholung wird entschieden, welche Teile der Software als nächstes realisiert bzw. verändert werden sollen
- die Ziele bleiben fest, lediglich die Weise ihrer Erreichung wird vor der Iteration modifiziert.
- in der Regel werden die Wünsche der Anwender in die Entscheidung einbezogen.
4) Erläutern Sie wozu die Variablendeklaration int *x; dient. Wie kann die Variable einen Wert erhalten, was ist zu beachten.- die Variablendeklaration ist ein Zeiger auf die Adresse der Variable x
- die Variable erhält einen Wert durch &x = wert;
- ---- keine Ahnung was zu beachten ist ------
Erläutern Sie an einem einfachen Beispiel den Unterschied von Call-by-Value und Call-by-Reference.
Bei Call-by-Reference handelt es sich um Parameter, die die Übergabe und Rückgabe von Werten ermöglichen. Beim Aufruf des Unterprogramms wird die Adresse im formalen Parameter gespeichert. Jede Operation mit diesem formalen Parameter wirkt sofort auf den aktuellen Parameter und bleibt auch nach Verlassen des Unterprogramms erhalten.
Bei Call-by-Value handelt es sich um Parameter, die die Übergabe, jedoch nicht die Rückgabe von Werten ermöglichen. Übergibt man Parameter via Call-by-Value beispielsweise einer Funktion, wird dieser Funktion lediglich eine Kopie der Parameter übergeben, eine Änderung dieser Parameter in der Funktion hat keinen Einfluss auf die Parameter in einer anderen Funktion.
#include <stdio.h>
void cbv(int a){ a++; }
void cbr(int* b){ b++; }
int main(){
int c=0,b=0;
cbv( c);
cbr( &d);
printf("%d %d",c,d);
return 0;
} -
Welche Gründe kann es geben, in einem C-Programm Programmteile in Funktionen auszugliedern?
- bessere Aufgabenverteilung, mehrere Entwickler arbeiten an Funktion x die andere Entwickler arbeiten an Funktion y
- das Programm wird übersichtlicher und strukturierter
- Teile des Programms lassen sich in anderen Programmen später wieder verwenden
- Wie kann man zeigen, dass man ein Programm, das nur while-Schleifen als Schleifen enthält, durch ein Programm mit gleichem Ein-Ausgabe-Verhalten ersetzen kann, das als Schleifen nur do-Schleifen nutzt?
#include <stdio.h>
void do_schleife(){
int zahl=1, tmp=0;
do{
tmp=tmp+zahl;
printf("%d+",zahl++);
}
while(zahl <= 10);
printf("\b = %d",tmp);
}void while_schleife(){
int zahl=1, tmp=0;
while(zahl <= 10) {
tmp=tmp+zahl;
printf("%d+",zahl++);
}
printf("\b = %d\n",tmp);
}int main(void) {
do_schleife();
printf("\n");
while_schleife();
return 0;
}- Erläutern Sie, wie man einen switch-Befehl durch if-Befehle ersetzen kann.
switch(Ausdruck){
Ausdruck_1: Anweisung_1;
Ausdruck_1: Anweisung_1;
Ausdruck_n: Anweisung_n;
}if(Ausdruck){
if(Ausdruck_1)
Anweisung_1;
if(Ausdruck_2)
Anweisung_2;
if(Ausdruck_n)
Anweisung_n;
}- Wie werden im Standard-C Buchstaben und Boolesche Werte behandelt? Gehen Sie z.B. für eine Variable int x auf die Bedingung if(x) ein.
Die Bedingung bei if kann true oder false sein, ist diese true erfolgt eine Anweisung, ist sie false folgt eine andere Bedingung oder else usw.
- Erklären Sie den Unterschied zwischen int und unsigned int.
Dem Datentyp int kann man eine positive und eine negative Ganzzahl zuweisen (Vorzeichen), bei einem unsigned (vorzeichenlos) int gibt es kein Vorzeichen. Der Vorteil liegt, wenn man weiß man benötigt kein Vorzeichen, nimmt man ein unsigned int, da dies weniger Speicher benötigt.
- Beim Rechnen mit ganzen Zahlen und Fließkommazahlen muss man das Verhalten in Extremsituationen kennen, die man in der allgemeinen Mathematik nicht in dieser Form berücksichtigt. Welche Extremsituationen sind zu beachten, wie verhält sich C in diesen Situationen, welche „besonderen“ Werte können beobachtet werden?
Teil man beispielsweise 2(int) / 3(int) so ergibt dies 0,6… will man diesem einem Double zuweisen, so funktioniert das nicht einwandfrei, da die Zahl hinter dem Komma einfach abgeschnitten wird, der Wert einer Doublevariable hätte dann den Wert 0,000000. Des Weiteren muss man anstelle eines Kommas einen Punkt bei der Eingabe von Kommzahlen eingeben.
---- mehr fällt mir nicht wirklich ein -----
- Erläutern Sie den Zusammenhang zwischen Arrays und Zeigern, gehen Sie darauf ein welche Probleme und Möglichkeiten es gibt, wenn ein Array an eine Funktion übergeben wird bzw. das Resultat einer Funktion sein soll.
---- keine Ahnung ----
- Wozu dient das Schlüsselwort enum in C? Erklären Sie seine Einsatzmöglichkeiten.
Enum (enumeration) in Deutsch Aufzählung, ist ein Datentyp mit einem endlichen Wertebereich. Alle Werte des Aufzählungstyps werden bei der Deklaration des Typs als Name definiert. Dabei wird auch eine Reihenfolge festgelegt, die eine Ordnung der einzelnen Werte bestimmt, die Werte können also sortiert werden.
enum FARBE {BLAU, GRUEN, ROT, GELB}
enum OBST {APFEL, KIRSCHE, PFLAUME}Dies bringt den Vorteil, dass der Compiler automatisch fehlerhafte Zuweisungen verhindern kann.
- Wie kann in C ein Datentyp aussehen, der den Vornamen und Nachnamen einer Person enthalten kann? Wie muss dann eine Funktion aussehen mit der der Nachname geändert wird?
char vorname[..];
char nachmame[..];
---- wie man es ändert keine Ahnung ----- Wozu dient das Schlüsselwort union in C? Erklären Sie anhand eines Beispiels.
Unions sind Möglichkeiten Daten zu strukturieren, genauso wie mit struct und typedef struct. Abgesehen von einem anderen Schlüsselwort, bestehen zwischen Unions und Strukturen keine syntaktischen Unterschiede. Der Unterschied liegt in der Art und Weise, wie mit dem Speicherplatz der Daten umgegangen wird.
union beispiel {
char a;
int b;
double c;
};- Beim Lesen- und Schreiben von Dateien wird der Textmodus und der Binärmodus unterschieden. Erklären Sie den Unterschied, gehen Sie dabei auf die Betriebssysteme Windows und Unix ein.
---- keine Ahnung ----
- Die folgende Funktion wird im Binärmodus genutzt, um Daten in eine Datei zu schreiben. size_t fwrite(const void *pur, size_t size, size_t nmemb, FILE *fp)
Erklären Sie die Funktionsweise und gehen Sie dabei auf die Parameter ein (statt size_t könnte auch unsigned int stehen).
---- keine Ahnung ----
- Das Thema Pufferung ist bei der Bearbeitung von Dateien zu beachten. Was ist mit dieser Aussage gemeint?
---- keine Ahnung ----
- Erläutern Sie, wie rekursive Funktionen grundsätzlich aufgebaut sind.
Kurz gesagt ist eine Rekursion eine Funktion, die sich selbst aufruft und sich selbst immer wieder neu definiert.
#include <stdio.h>
long fakul(long n) {
if(n)
return n * fakul(n-1);
return 1;
}int main(void) {
printf("Fakultät von 5 = %ld\n",fakul(5));
return 0;
}- Größere C-Programme enthalten so genannte Makrobefehle. Welche Befehle gibt es und wozu werden sie eingesetzt.
#include: Text aus Datei einlesen und interpretieren.
#defin: Definition des neuen Makros name
#eval: Auswertung eines arithmetischen Ausdrucks
#ifdef: Bedingte Ausführung
usw.- Erläutern Sie die grundsätzliche Arbeitsweise eines Debuggers. Welche Funktionalität sollte er typischerweise zur Verfügung stellen?
Ein Werkzeug zur Fehlerbereinigung von Software nennt sich Debugger. Der Debugger ermöglicht in der Regel eine Ablaufverfolgung des zu untersuchenden Programmes in einzelnen Schritten oder zwischen definierten Haltepunkten. Ein Debugger ist oft Bestandteil einer Programm-Entwicklungsumgebung (auch integrierte Entwicklungsumgebung (bzw. IDE) genannt).
- Erläutern Sie, wie Bit-Felder in C als eigene Datentypen definiert werden können. Wozu werden Sie eingesetzt.
---- keine Ahnung -----
- Wozu gibt es in C die vier Operatoren & , | , ^ , ~ ?
&: Bitweise AND-Verknüpfung
|: Bitweise OR-Verknüpfung
^: Bitweise XOR
~: Bitweises Komplement- Was versteht man unter der Kurzschlussauswertung bei && und || ?
&&: logisches UND
|| logisches ODER- In C gibt es die Schlüsselworte extern und static. Erklären Sie wozu sie genutzt werden können.
Ist bei der Deklaration einer Funktion die Speicherklasse nicht angeben, ist diese automatisch mit extern gesetzt. Solche Funktionen können sich auch in einer anderen Quelldatei befinden. Dann speziell empfiehlt es sich, dieses Schlüsselwort zu verwenden (auch wenn dies nicht nötig wäre). Dieser Hinweis kann hilfreich für den Programmierer sein, weil er sofort weiß, worum es sich handelt. extern zu setzen dient also nicht der Verbesserung bzw. Optimierung des Quellcodes, sondern ist ein Hinweis für dessen Leser.
Weisen Sie einer Funktion das Schlüsselwort static zu, können Sie diese Funktion nur innerhalb der Datei nutzen, in der sie definiert wurde. Es ist somit das Gegenteil des Schlüsselworts extern.
- Welche Möglichkeiten gibt es in C, Programme zu strukturieren?
Alles in die int main(void) Funktion schreiben oder in einzelne Funktionen unterteilen.
---- oder was soll man da hinschreiben? ----
- Es gibt vier verschiedene Sichtbarkeiten für Variablen. Erläutern Sie diese an einem Beispiel.
Globale Variable:
#include <stdio.h>int i = 333;
int main(void) {……}Lokale Variable:
#include <stdio.h>int main(void) {
int i = 333;
return 0;
}Statische Variable:
#include <stdio.h>void inkrement(void) {
int i = 1;
}
int main(void) {
inkrement();
return 0;
}---- viertes weiß ich ned ----
- Erklären Sie anschaulich, wozu die Funktionen malloc() und free() in C dienen. Was muss bei ihrer Nutzung beachtet werden? (Nennen Sie typische Probleme).
Malloc (memory allocate) belegt Speicher und gibt dessen Adresse zurück.
Problem: Wenn nicht genügend zusammenhängender Speicher verfügbar ist gibt es „NULL“ (0x0) zurück. Außerdem sollte man vermeiden das nicht mehr benötigter Speicher wieder freigegeben wird.Free gibt den vorher belegten Speicher (mit malloc) wieder frei.
- man muss den Speicher auch wirklich belegt sein.
- es darf keine aktive (später genutzte) Referenz darauf geben- In größeren Projekten ist es üblich, mit Coding-Guidelines Vorgaben für den Stil und das Aussehen von Programmen zu machen. Nennen Sie fünf möglichst unterschiedliche Regeln, die in solchen Coding-Guidelines stehen können. Nennen Sie zwei gute Gründe für und einen Grund, der gegen Coding-Guidelines spricht.
Vorgaben:
- Einrückung von untergeordneten Programmelementen
- Reihenfolge der Deklaration von Variablen
- Maximale Länge und Umfang einer Funktion
- Verwendung von Kommentaren, Stil der Kommentare
- Erklärende VariablennamenVorteile:
- Lesbarkeit
- Verständlichkeit
- WartbarkeitNachteile:
- Die Entwickler müssen sich erst an die Regeln gewöhnen und ihren bisherigen Stil ändern
- Die Umstellung kostet Zeit (Zeit = Geld)Wäre nett wenn ihr die beantworteten Fragen auch nochmal durchlesen könntet und eventuell etwas korrigieren könntet, falls ich es falsch habe.
Vielen Dank schonmal im Voraus.
Gruß Felix
-
Ich habe mir nur eben kurz ein zwei Sachen angeschaut und mir ist aufgefallen, dass Antwort 8 total falsch ist.
- Erläutern Sie, wie man einen switch-Befehl durch if-Befehle ersetzen kann.
switch(Ausdruck){
Ausdruck_1: Anweisung_1;
Ausdruck_1: Anweisung_1;
Ausdruck_n: Anweisung_n;
}if(Ausdruck){
if(Ausdruck_1)
Anweisung_1;
if(Ausdruck_2)
Anweisung_2;
if(Ausdruck_n)
Anweisung_n;
}Es ist aber
if(Ausdruck == Ausdruck_1)
Anweisung_1;
else if(Ausdruck == Ausdruck_2)
Anweisung_2;
etc ..Ka, ob ich Zeit habe mir das Ganze weiter anzugucken.
-
nee, es ist
if(a1) { a1(); an(); } else if(an) { an(); }
-
Sorry,
aber es sind beide Vorschläge falsch
Der Ansatz von "Feigling" war korrekt, allerdings ist das else if durch if zu ersetzen.
FALSCH:
if(Ausdruck == Ausdruck_1)
Anweisung_1;
else if(Ausdruck == Ausdruck_2)
Anweisung_2;
etc ..RICHTIG:
if(Ausdruck == Ausdruck_1)
Anweisung_1;
if(Ausdruck == Ausdruck_2)
Anweisung_2;
etc ..Bei dem Ansatz von "DrGreenthumb" muß der Wert von al / an nur einen Wert !=0 haben um true zu sein
-
ja, ich meinte natürlich if(ausdruck==a1).
Deins ist aber nicht richtig, weil in dem switch keine breaks sind. D.h. wenn ausdruck==a1, dann wird a1 und alle nachfolgenden ausgewertet.
-
wenn ich schon am merkern bin:
Die Antwort auf Frage 24:
- Was versteht man unter der Kurzschlussauswertung bei && und || ?
&&: logisches UND
|| logisches ODERDie Antwort beschreibt zwar die Symbole, hat aber mit Kurzschlussauswertung nichts zu tun
Bei der Kurzschlussauswertung wird das Auswerten eines Ausdrucks abgebrochen, wenn das Ergebnis bereits feststeht, z.B.:
A && B -> wenn A false ist wird B nicht mehr ausgwertet
A || B -> wenn A true ist wird B nicht mehr ausgwertet
-
DrGreenthumb schrieb:
ja, ich meinte natürlich if(ausdruck==a1).
Deins ist aber nicht richtig, weil in dem switch keine breaks sind. D.h. wenn ausdruck==a1, dann wird a1 und alle nachfolgenden ausgewertet.Stimmt und genau so verhält sich:
if(Ausdruck == Ausdruck_1)
Anweisung_1;
if(Ausdruck == Ausdruck_2)
Anweisung_2;
etc ..
-
C-Developer schrieb:
Stimmt und genau so verhält sich:
if(Ausdruck == Ausdruck_1)
Anweisung_1;
if(Ausdruck == Ausdruck_2)
Anweisung_2;
etc ..nee, hier wird Anweisung_2 ja nur ausgeführt, wenn Ausdruck==Ausdruck_2. Anweisung_2 muss aber auch ausgeführt werden, wenn Ausdruck==Ausdruck_1
-
if(Ausdruck == Ausdruck_1) { Anweisung_1; if(Ausdruck == Ausdruck_2) { Anweisung_2; */... weitere Verschachtelung*/ } }
-
nein, auch falsch
-
Hi!
Zu 4:
int *x ist ein Zeiger auf einen beliebigen Integer Wert, nich den der Variable x, x ist ja der Zeiger.int y = 10; int *x = &y; // *x zeigt auf y
Zu 8:
C-Developer liegt genau richtig. Die einzelnen Zeige von Switch-Case werden der Reihe nach unten durchlaufen. Falls eine Abfrage zutrifft werden die darunterliegenden aber nicht übrsprungen.switch( xyz ) { case 1: anweisungen; break; // break ignoriert alle darunterliegenden abfragen } Zu 10: unsigned int und signed int belegen (oft) 32 bit. Auf jedenfall sind beide aber immer gleich groß. Der Witz an unsigned int ist, das er im + bereich mehr Werte aufnehmen kann als signed int. [cpp] unsigned int umax = 0xffffffff; signed int smax = 0x7fffffff;
Zu 12:
Zeiger können auf den ersten Eintrag eines arrays zeigen. Durch inkrementieren des Zeigers zeigt der auf den zweiten Eintrag usw...Klasse1 obj1[ 10 ]; Klasse1 *obj2 = obj1; *( obj2++ ) = 10; // obj1[ 0 ] = 10 *( obj2++ ) = 20; // obj1[ 1 ] = 20
!Speicher der vom Heap genommen wurde muss vom Programmierer zurückgegeben werden.!
void foo( Klasse1 *p ) // hier kann ein Zeiger auf ein array übergeben werden { }
void foo( Klasse1 arr[] ) // ist auch möglich, aber nicht wirklich schön { }
Klasse1 *bar() { Klasse1 arr[ 10 ]; return arr; // Vorsicht, sowas NIE machen. Das funktioniert zwar ruft aber ein undefiniertes Verhalten vor, da arr gelöscht wird sobald der Scope verlassen wird }
Klasse1 *bar() { Klasse1 *p = malloc( 3*sizeof( Klasse1 ) ); return p; // Das klappt so, der Speicher muss aber zurückgegeben werden }
Zu 14:
struct Person_t { char *Vorname; char *Nachname; }; void foo( Person_t *p ) { p->Nachname = "Nachname"; } int main() { Person_t person; person.Vorname = "Vorname"; person.Nachname = "Hallo"; foo( &person ); printf( "%s %s\n", person.Vorname, person.Nachname ); }
Zu 15:
Es besteht ein ganz gewaltiger Unterschied. Alles was in Union definiert wird greift auf den selben Speicherbereich zu!union foo { float xyz[ 3 ]; struct { float x, y, z; } };
wenn xyz[ 1 ] geändert wird ändert sich auch "y". Wenn "z" geändert wird ändert sich xyz[ 2 ] usw...
Zu 17:
size_t fwrite(const void *pur, size_t size, size_t nmemb, FILE *fp)pur = puffer der geschrieben werden soll
size = größe des Datenblocks welcher geschrieben werden soll
nmemb = anzahl der Datenblöcke (sizenmemb = tatsächliche Größe)
*fp = DateizeigerZu 22:
struct
{
byte b1 : 1;
byte b2 : 1;
// ...
};b1 erhält den wert von Bit1, b2 den Wert von Bit2 usw...
zu 26:
Daten strukturieren in Strukturen, Prozedurale Programmierung...
-
David_pb schrieb:
Zu 8:
C-Developer liegt genau richtig. Die einzelnen Zeige von Switch-Case werden der Reihe nach unten durchlaufen. Falls eine Abfrage zutrifft werden die darunterliegenden aber nicht übrsprungen.nein. lies nochmal was ich geschrieben habe
-
Stimmt, du hast natürlich recht. Übersehens!
-
was heißt hier "nein auch falsch"
begründung ?
-
linchpin schrieb:
was heißt hier "nein auch falsch"
begründung ?Wenn Ausdruck == Ausdruck1, dann ist ja wohl Ausdruck != Ausdruck2 für Ausdruck1 != Ausdruck2, von daher ist es sinnlos, das zweite if in die erste if-Bedingung reinzunehmen.
-
Anabolika schrieb:
- Es gibt drei Grundprinzipien, die man zur Beschreibung imperativer Programme benötigt. Erklären Sie diese anhand ihrer Darstellung in Flussdiagrammen.
Randfrage: Was genau hat dein Bild mit der Aufgabe zu tun?
- Welche Gründe kann es geben, in einem C-Programm Programmteile in Funktionen auszugliedern?
- bessere Aufgabenverteilung, mehrere Entwickler arbeiten an Funktion x die andere Entwickler arbeiten an Funktion y
- das Programm wird übersichtlicher und strukturierter
- Teile des Programms lassen sich in anderen Programmen später wieder verwenden
Da fehlt noch mehrfache Verwendung einer bestimmten Anweisungsfolge in mehreren Programmteilen (statt an zehn Stellen ein Schleifenkonstrukt einzubauen, das ein Array sortiert, nimmt man lieber EINE Sortierfunktion und ruft sie bei Bedarf auf)
7) Wie kann man zeigen, dass man ein Programm, das nur while-Schleifen als Schleifen enthält, durch ein Programm mit gleichem Ein-Ausgabe-Verhalten ersetzen kann, das als Schleifen nur do-Schleifen nutzt?#include <stdio.h> void do_schleife(){ int zahl=1, tmp=0; do{ tmp=tmp+zahl; printf("%d+",zahl++); } while(zahl <= 10); printf("\b = %d",tmp); } void while_schleife(){ int zahl=1, tmp=0; while(zahl <= 10) { tmp=tmp+zahl; printf("%d+",zahl++); } printf("\b = %d\n",tmp); } int main(void) { do_schleife(); printf("\n"); while_schleife(); return 0; }
[/quote]Das ist zwar für ein Beispiel ausreichend, aber noch lange kein genereller Beweis.
- Wie werden im Standard-C Buchstaben und Boolesche Werte behandelt? Gehen Sie z.B. für eine Variable int x auf die Bedingung if(x) ein.
Buchstaben werden durch ihren jeweiligen ASCII-Wert dargestellt (im Datentyp char), boolesche Werte durch Ganzzahlen (0 = false, andere Werte = true)
- Beim Rechnen mit ganzen Zahlen und Fließkommazahlen muss man das Verhalten in Extremsituationen kennen, die man in der allgemeinen Mathematik nicht in dieser Form berücksichtigt. Welche Extremsituationen sind zu beachten, wie verhält sich C in diesen Situationen, welche „besonderen“ Werte können beobachtet werden?
Teil man beispielsweise 2(int) / 3(int) so ergibt dies 0,6… will man diesem einem Double zuweisen, so funktioniert das nicht einwandfrei, da die Zahl hinter dem Komma einfach abgeschnitten wird, der Wert einer Doublevariable hätte dann den Wert 0,000000. Des Weiteren muss man anstelle eines Kommas einen Punkt bei der Eingabe von Kommzahlen eingeben.
Ich glaube, bei der Frage ging es eher um Über- und Unterlauf (ersterer wird als 1.#INF, letzterer als 0 markiert) und ungültige Eingaben für Gleitkomma-Operationen (z.B. Wurzel(-1))
- Wozu dient das Schlüsselwort enum in C? Erklären Sie seine Einsatzmöglichkeiten.
Enum (enumeration) in Deutsch Aufzählung, ist ein Datentyp mit einem endlichen Wertebereich. Alle Werte des Aufzählungstyps werden bei der Deklaration des Typs als Name definiert. Dabei wird auch eine Reihenfolge festgelegt, die eine Ordnung der einzelnen Werte bestimmt, die Werte können also sortiert werden.
enum FARBE {BLAU, GRUEN, ROT, GELB}
enum OBST {APFEL, KIRSCHE, PFLAUME}Dies bringt den Vorteil, dass der Compiler automatisch fehlerhafte Zuweisungen verhindern kann.
In C++ ja - in C kann jeder int als enum-Wert genutzt werden.
- Wie kann in C ein Datentyp aussehen, der den Vornamen und Nachnamen einer Person enthalten kann? Wie muss dann eine Funktion aussehen mit der der Nachname geändert wird?
char vorname[..];
char nachmame[..];Ich würde die beiden Werte noch in einem struct zusammenfassen, ändern kannst du den Nachnamen dann über "memcpy(p.nachname,"Maier");" oder ähnliches
- Beim Lesen- und Schreiben von Dateien wird der Textmodus und der Binärmodus unterschieden. Erklären Sie den Unterschied, gehen Sie dabei auf die Betriebssysteme Windows und Unix ein.
Binärmodus - jedes Byte wird unverändert übernommen
Textmodus - Zeilenende-Zeichen (\n) werden je nach Betriebssystem anders interpretiert- Erläutern Sie, wie rekursive Funktionen grundsätzlich aufgebaut sind.
Kurz gesagt ist eine Rekursion eine Funktion, die sich selbst aufruft und sich selbst immer wieder neu definiert.
aufruft: ja, definiert: nein
-
Danke für die Antworten, ich werds soweit korrigieren.