• Keine Ergebnisse gefunden

Zeiger(Pointer)inC Serie4

N/A
N/A
Protected

Academic year: 2021

Aktie "Zeiger(Pointer)inC Serie4"

Copied!
2
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Ubungen zur Vorlesung¨

”Grundlagen der Informatik 1“

Studiengang E-Technik WS 2001/02

AG Betriebssysteme, FB 3 Jan Bredereke ausgegeben: 30.11.2001 Abgabe und Besprechung:

in der ¨Ubung am 6.12.2001

Serie 4

Zeiger (Pointer) in C

Diese Aufgabenserie enth¨alt viele Aufgaben, damit viele Teilnehmer vorrechnen k¨onnen. Falls ihr nicht alle Aufgaben l¨osen wollt, dann laßt einige der Aufgaben 1 bis 5 fort, aber nicht 6.

Aufgabe 6 ist besonders interessant, weil sie ein gutes Beispiel daf¨ur ist, wie man Zeiger auf Arrays einsetzen kann.

Aufgabe 1: Eine selbstgemachte strcpy()-Funktion

Es gibt in der C-Bibliothek eine Funktionstrcpy(), mit der man einen String kopieren kann.

Sie ist etwa folgendermaßen deklariert:

char *strcpy(char *dest, char *src);

Die Funktion kopiert die Zeichenkette, auf die der Zeigersrczeigt, inklusive des Endezeichens

”\0“ an die Stelle, auf die dest zeigt. Die Zeichenketten d¨urfen sich nicht ¨uberlappen und dest muß groß genug sein. Die Funktion strcpy()gibt einen Zeiger auf dest zur¨uck.

Programmiert eine Funktion mystrcpy(), die das gleiche tut.

Aufgabe 2: Eine selbstgemachte strcat()-Funktion

In der C-Bibliothek gibt es eine ¨ahnliche Funktionstrcat(). Die Funktionstrcat()h¨angt die Zeichenkettesrcan die Zeichenkettedestan, wobei das Stringendezeichen

”\0“ ¨uberschrieben wird und ein neues ”\0“ am Ende der gesamten Zeichenkette angeh¨angt wird. Die Zeichen- ketten k¨onnen sich nicht ¨uberlappen und dest muß Platz genug f¨ur die gesamte Zeichenkette haben. Die Funktion strcat()liefert einen Zeiger auf die gesamte Zeichenkette destzur¨uck.

Programmiert eine Funktion mystrcat(), die das gleiche tut.

Aufgabe 3: Eine selbstgemachte strchr()-Funktion

Es gibt in der C-Bibliothek eine Funktion strchr(), mit der man einen Buchstaben in einem String suchen kann. Sie ist etwa folgendermaßen deklariert:

char *strchr(char *s, int c);

Die Funktion strchr() gibt den Zeiger auf das erste Vorkommen des Zeichens c in der Zei- chenkette s zur¨uck, ansonsten NULL.

Die Konstante NULLk¨onnt ihr benutzen, wenn ich vorher schreibt:

(2)

#include <string.h>

Programmiert eine Funktion mystrchr(), die das gleiche tut.

Aufgabe 4: Eine selbstgemachte strrchr()-Funktion

In der C-Bibliothek gibt es eine ¨ahnliche Funktion strrchr(). Die Funktionstrrchr() gibt den Zeiger auf das letzte Vorkommen des Zeichens c in der Zeichenkette s zur¨uck, ansonsten NULL.

Programmiert eine Funktion mystrrchr(), die das gleiche tut.

Aufgabe 5: Eine selbstgemachte strstr()-Funktion

Es gibt in der C-Bibliothek eine Funktion strstr(), mit der man einen Teilstring in einem String suchen kann. Sie ist etwa folgendermaßen deklariert:

char *strstr(char *haystack, char *needle);

Die Funktionstrstr()findet die erste Position der Zeichenfolgeneedleim String haystack.

Abschließende

”\0“-Zeichen werden nicht miteinander verglichen. Die Funktion strstr() gibt einen Zeiger auf den Anfang der gefundenen Zeichenkette in haystackzur¨uck oderNULL, wenn die Zeichenkette nicht gefunden wurde.

Programmiert eine Funktion mystrstr(), die das gleiche tut.

Aufgabe 6: Einlesen und Vergleichen von Werten

Schreibt ein Programm, das vom Benutzer nacheinander zehn Integer-Zahlen abfragt. Nach- dem es das getan hat, soll das Programm erneut zehn Zahlen abfragen. Danach soll es ausge- ben, welche Zahlen sich gegen¨uber der vorigen Runde ge¨andert haben. Wenn also beim ersten Mal (7, 9, -3, 5, 5, 42, 0, 1, -100, 2) eingegeben wurden, und beim zweiten Mal (7, 11, -3, 5, 5, -1, 0, 1, -100, 2), dann soll ausgegeben werden, daß sich an der 2. und an der 6. Stelle etwas ge¨andert hat.

Damit das Programm leichter zu schreiben ist, sollen auch nach der ersten Runde bereits die

”Unterschiede“ ausgegeben werden, und zwar im Vergleich zu einer Serie von zehnmal 0. Nach der Ausgabe der Unterschiede soll das Programm fragen, ob noch eine Runde durchgef¨uhrt werden soll. Je nach Antwort des Benutzers sollen beliebig viele Runden m¨oglich sein. Wenn die Antwort

”j“ ist, gilt das als

”Ja“, alles andere als

”Nein“.

Verwendet zum Einlesen der Zahlen und des Antwortbuchstabens die Funktion scanf(), die in der Vorlesung eingef¨uhrt wurde.

L¨ost diese Aufgabe so, daß ihr zwei Arrays von je zehn Integern anlegt, ein Eingabe-Array und ein Vergleichs-Array. Das Vergleichs-Array belegt ihr entsprechend mit Nullen vor. Nach Ende einer Runde tauschen die beiden Arrays ihre Rollen. L¨ost dieses Vertauschen auf folgende Weise: Legt die Eingaben nicht direkt im Eingabe-Array ab und vergleicht nicht direkt mit dem Vergleichs-Array, sondern verwendet jeweils eine Pointer-Variable, die auf eines dieser Arrays zeigt. Dann k¨onnt ihr nach Ende einer Runde einfach die Inhalte der beiden Pointer-Variablen vertauschen (mit Hilfe einer dritten Pointer-Variablen und entsprechenden Zuweisungen), so daß das Array mit den alten Eingaben zum Vergleichs-Array wird, w¨ahrend das bisherige Vergleichs-Array zum neuen Eingabe-Array wird.

2

Referenzen

ÄHNLICHE DOKUMENTE

Entwickle eine Funktion, die als Eingabeparameter zwei Zeiger auf je eine Zeichen- kette erh¨ alt, diese beiden Zeichenketten zu einer neuen Zeichenkette zusammenf¨ ugt und das

Im ¨ Ubrigen gehen wir wieder davon aus, dass alle Zeiger genau vier Bytes im Arbeitsspeicher belegen... Vervollst¨ andige nun

Entwickle eine Funktion, die als Eingabeparameter zwei Zeiger auf je eine Zeichen- kette erh¨ alt, diese beiden Zeichenketten zu einer neuen Zeichenkette zusammenf¨ ugt und das

Am Ende der ¨ Ubung mag sich der eine oder andere fragen, was man denn nun eigentlich von Zeigern hat, denn Zeiger sind erst einmal nur kompliziert.. Die Antwort ist sehr einfach:

läuft durch die array Elemente setzt das erste array Element auf 500 setzt das zweite array Element auf 1000 setzt das dritte array Element auf 3000. setzt das vierte

Ieber l3egriUe. Tstbedto- llowüel; Hendel5Ve.rhbr %Wisdlen dar Bundes:e.publlk und de.r TS&lt;hecboslowaket für die Zelt vom 1. I.. 5.2 Olfentlic:be Bekanntmachung

Sie dienen einer Überwachung und ermöglichen eine qualitative und quantitative, mehr oder weniger spezifische Erfassung von Schadstoffen (z.B. Schadstoffgehalte wie

Lege einen speziellen Speicherbereich für jeden Aufruf einer Funktion an. In sequentiellen Programmiersprachen können diese Speicherbereiche auf dem Keller