Probeklausur Programmieren in C Sommersemester 2007 Dipl. Biol. Franz Schenk 12. April 2007, Uhr Bearbeitungszeit: 105 Minuten

Ähnliche Dokumente
Klausur Programmieren in C Sommersemester 2007 Dipl. Biol. Franz Schenk 13. April 2007, Uhr Bearbeitungszeit: 105 Minuten

Klausur C-Programmierung / / Klingebiel / 60 Minuten / 60 Punkte

Informatik Repetitorium SS Volker Jaedicke

Welche Informatik-Kenntnisse bringen Sie mit?

Es ist für die Lösung der Programmieraufgabe nicht nötig, den mathematischen Hintergrund zu verstehen, es kann aber beim Verständnis helfen.

Einführung in die Programmierung

Probeklausur: BTI2 / Programmieren I Prof. Dr. H. Herold Erlaubte Hilfsmittel: Vorlesungsmitschrift; C-Bücher

Hochschule Ravensburg-Weingarten Schriftliche Prüfung Programmieren Prof. Dr. M. Zeller

Programmierung mit C Zeiger

Deklarationen in C. Prof. Dr. Margarita Esponda

Klausur in Programmieren

HS Ravensburg-Weingarten Schriftlich Prüfung Programmieren

Nachname:... Vorname:... MatrNr.:... Klausur PR2. Erstellen Sie eine Struktur für eine Komplexe Zahl mit den Elementen real und imag vom Typ double.

C allgemein. C wurde unter und für Unix entwickelt. Vorläufer sind BCPL und B.

Pass by Value Pass by Reference Defaults, Overloading, variable Parameteranzahl

Einführung in die C-Programmierung

Dr. Monika Meiler. Inhalt

Klausur in Programmieren

Übung 9. Quellcode Strukturieren Rekursive Datenstrukturen Uebung 9

Die Programmiersprache C99: Zusammenfassung

Vorlesung Objektorientierte Programmierung Probeklausur

Inhalt. 4.7 Funktionen

Advanced Programming in C

1. Typen und Literale (6 Punkte) 2. Zuweisungen (6 = Punkte)

Prüfung Algorithmen und Datenstrukturen, WS 2008/2009 (97 Punkte, 4 Seiten)

Einführung in die Programmierung Vorlesungsprüfung

Übungspaket 29 Dynamische Speicherverwaltung: malloc() und free()

Fakultät Angewandte Informatik Lehrprofessur für Informatik

Programmieren in C. Macros, Funktionen und modulare Programmstruktur. Prof. Dr. Nikolaus Wulff

Lösungsvorschlag zur 9. Übung

Java Einführung Methoden. Kapitel 6

"Einführung in die Programmierung" Krefeld, den 24. September 2013

Wiederholung Wozu Methoden? Methoden Schreiben Methoden Benutzen Rekursion?! Methoden. Javakurs 2012, 3. Vorlesung

Allgemeine Informatik II SS :30-13:30 Uhr

Lösungsvorschläge. zu den Aufgaben im Kapitel 4

1 Vom Problem zum Programm

JavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML.

Präzedenz von Operatoren

Probeklausur: Programmierung WS04/05

CEN1112 Labor Software-Entwicklung

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

Kontrollstrukturen und Funktionen in C

Ingenieurinformatik Diplom-FA (Teil 2, C-Programmierung)

FH München, FB 03 FA WS 06/07. Ingenieurinformatik. Name Vorname Matrikelnummer Sem.Gr.: Hörsaal Platz

1. Grundlegende Konzepte in Java (6 Punkte)

Einführung in die Programmierung Konstanten, dynamische Datenstrukturen. Arvid Terzibaschian

Probeklausur: Einführung in die objektorientierte Programmierung mit Java 15WS

Kompaktkurs C-Programmierung

Übung zur Vorlesung Programmieren in C

Programmierung in C. Grundlagen. Stefan Kallerhoff

Felder, Rückblick Mehrdimensionale Felder. Programmieren in C

Datenstrukturen, Alignment Stack Prozeduraufruf, Parameterübergabe und -rückgabe (Calling Conventions) Leaf procedures

Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme

Übersicht. Einführung in die Programmierung. main. main. main. main. Speicherverwaltung. Definition nach ANSI C:

Microcontroller Praktikum SS2010 Dipl. Ing. R. Reisch

Klausur C++ #1 Jahr: 2001; Dozent: Dipl.Ing. Sorber

Algorithmen & Programmierung. Rekursive Funktionen (1)

Übung 9 - Lösungsvorschlag

Dr. Monika Meiler. Inhalt

Hochschule Augsburg, Fakultät für Informatik Name:... Prüfung "Programmieren 1", IN1bac, WS 10/11 Seite 1 von 6

Übungen zu Programmierung I - Blatt 8

Grundlagen der Programmierung

Informatik B von Adrian Neumann

Probeklausur Informatik 2 Sommersemester 2010

Programmierkurs Java

RO-Tutorien 3 / 6 / 12

Übungspaket 31 Entwicklung eines einfachen Kellerspeiches (Stacks)

Einführung in die Programmierung für Wirtschaftsinformatik

Propädeutikum. Dipl.-Inf. Frank Güttler

C-Probeklausur (Informatik 1; Umfang: C, Teil 1; SS07)

Klausur in Programmieren

Universität Augsburg, Institut für Informatik Sommersemester 2005 Prof. Dr. Werner Kießling 15. Oktober 2005 Dr. Alfons Huhn, Timotheus Preisinger

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 10

2. Programmierung in C

Die Programmiersprache C Eine Einführung

Fallunterscheidung: if-statement

Elementare Datentypen in C++

S. d. I.: Programieren in C Folie 4-1. im Gegensatz zu Pascal gibt es in C kein Schlüsselwort "then"

Programmiersprachen Einführung in C. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm

Objektorientierte Programmierung

M. Graefenhan Übungen zu C. Blatt 3. Musterlösung

Propädeutikum zur Programmierung

Klausur: Grundlagen der Informatik I, am 05. Februar 2008 Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.: Punkte:

Probeklausur: Programmierung WS04/05

Klausur in Programmieren

Die Programmiersprache C

Übersicht. C Funktionen. Funktion main. Funktionen. Funktionsdefinition und und Funktionsaufruf Deklaration von Funktionen

Grundlagen C und C++ Einheit 03: Grundlagen in C++ Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Klausur in Programmieren

II.3.1 Rekursive Algorithmen - 1 -

Programmieren in C. Rekursive Funktionen. Prof. Dr. Nikolaus Wulff

DAP2-Programmierpraktikum Einführung in C++ (Teil 1)

Angewandte Mathematik und Programmierung

Einführung in die Programmiersprache C

PROGRAMMIEREN MIT C. }, wird kompiliert mit dem Befehl. (-o steht für output) und ausgeführt mit dem Befehl

Grundlagen. Die Komponenten eines C Programms. Das erste Programm

Dynamische Speicherverwaltung

Unterprogramme. Funktionen. Bedeutung von Funktionen in C++ Definition einer Funktion. Definition einer Prozedur

Klausur zur Veranstaltung Softwareentwicklung 1. Sommersemester Hessische VWA. Dr. Alexandra Roder, Bernd Ulmann 5.

Transkript:

Probeklausur Programmieren in C Sommersemester 2007 Dipl. Biol. Franz Schenk 12. April 2007, 13.00-14.45 Uhr Bearbeitungszeit: 105 Minuten Schalten Sie ihr Mobiltelefon aus. Bei der Klausur ist als einziges Hilfsmittel eines unserer Skripte erlaubt. Zum Bestehen der Klausur sind 45 Punkte hinreichend. Hinweise zu den Aufgaben: Gültiger Sprachstandard ist wie in der Vorlesung ANSI-C (89). Eine Aufgabe wird gewertet, wenn sie prinzipiell das Richtige tut. Auch richtige Teilabschnitte können Punkte geben. Systematische Syntaxfehler, nicht korrekte Umsetzung der Aufgabe oder Fehler im Algorithmus führen zu Punktabzügen. Falls nicht verlangt, so schreiben Sie keine vollständigen Programme, sondern nur C-Funktionen, wie angegeben! Wenn Sie Funktionen der Standardbibliothek verwenden, schreiben Sie die entsprechende #include-zeile vor die Funktionsdefinition. Wenn nicht verlangt ist, dass eine Funktion Ausgaben produziert, dann dürfen Sie auch keine Ausgabefunktion benutzen! Mit den Aufgaben 1 und 2 sollen Sie Funktionen implementieren. Überlegen Sie erst, wie die Funktion auf eine klare Strukturierung Aufgaben 3, 4, und 5 sind keine Programmieraufgaben. Hier geht es um Ihr Verständnis von C. Gutes Gelingen! Max. Punkte Erwartet für 4 Aufgabe 1 (Listensuche) 20 10 Aufgabe 2 (Stringersetzung) 30 15 Aufgabe 3 (Rekursion) 20 5 Aufgabe 4 (Programmfehler) 10 5 Aufgabe 5 (Ausdrücke) 25 10 Summe 105 45

Aufgabe 1 (Listensuche [20 Punkte]) Gegeben ist als Datenstruktur eine verkettete Liste. struct Knoten int Wert; struct Knoten * Next; ; Schreiben Sie eine Funktion, welcher die Adresse des Anfangselements der Liste übergeben wird sowie ein Suchwert: int SucheWert(struct Knoten * Anfang, int SuchWert) Die Funktion soll folgendes realisieren: Die Funktion soll 1 zurückgeben, falls der Wert gefunden wurde, 0 zurückgeben, falls er nicht gefunden wurde. Falls ein Knoten gefunden wird, welcher den gesuchten Wert trägt, so soll er aus der Liste entfernt werden. Sie müssen sich nicht darum kümmern, dass allozierter Speicher wieder freigegeben wird! Wir gehen der Einfachheit halber davon aus, dass das erste Element der Liste ein leeres Element ist, also bei Vergleich und Löschen nicht beachtet werden muss. Lösung int SucheWert(struct Knoten * Anfang, int SuchWert) struct Knoten * p = Anfang; while (p!= NULL) if (p->next!= NULL && p->next->wert == SuchWert) p->next = p->next->next; /* Suche Fortsetzen, falls ein Element gefunden wurde */ SucheWert(p->Next,SuchWert); return 1; p = p->next; return 0;

Aufgabe 2 (Stringersetzung [30 Punkte]) Schreiben Sie eine Funktion, die drei Strings als Argumente empfängt und im ersten String jedes Vorkommen des zweiten Strings durch den (gleichlangen!) dritten String inplace ersetzt und einen Zeiger auf den ersten String zurückgibt. Ein Aufruf mit("abcdefghijlkm", "def", "123") soll also"abc123ghijklm" als Rückgabe zur Folge haben. const char* diefunktion(char* s, const char* t, const char* u); Implementieren Sie die Funktion gemäss der Beschreibung und dem gegebenen Funktionsprototypen. Aus der Standardbibliothek dürfen Sie nur die Funktion strlen() verwenden. Sind die Strings t und u nicht gleichlang, gibt die Funktion nur einen Zeiger auf s zurück. Lösung #include <string.h> /* f\"ur das strlen() */ const char* diefunktion(char* s, const char* t, const char* u) int i, j, k; if (strlen(t)!= strlen(u)) return s; for (i=0; i<strlen(s); i++) if (s[i] == t[0]) int tunichts = 0; for (j=0; j<strlen(t); j++) if (s[i+j]!= t[j]) tunichts = 1; if (tunichts == 0) for (k=0; k<strlen(u); k++) s[i+k] = u[k]; return s;

Aufgabe 3 (Rekursion [20 Punkte]) Gegeben ist folgendes Programmfragment: float mystery_function(float *a, unsigned int k) if(k == 1) return *a; else return *a + mystery_function(a+1, k-1); Die Funktion aufgerufen, indem ihr ein Feld von Float-Werten sowie eine ganzzahlige Zahl übergeben wird. Welche einfache mathematische Funktion wird mit der Funktion mystery function implementiert? Lösung Die Summe des Feldes wird berechnet. Schreiben Sie eine nicht-rekursive Version dieser Funktion. Lösung int nichtrekursiv(float *a, int n) int i; float summe; for (i = 0; i < n ; i++) summe += a[i]; return summe;

Aufgabe 4 (Programmfehler [10 Punkte]) Das folgende Programm berechnet die Summe aller Zahlen eines Feldes. Die Adresse des Feldes sowie seine Länge werden der Funktion übergeben. Die Funktion gibt aus, dass die Summe aller Zahlen im Feld durch 2 teilbar ist, wenn die Summe aller Zahlen im Feld durch 2 teilbar ist. Die Funktion gibt aus, dass die Summe aller Zahlen im Feld nicht durch 2 teilbar ist, wenn die Summe aller Zahlen im Feld nicht durch 2 teilbar ist. Im Programm stecken zahlreiche Fehler. Acht dieser Fehler bewirken, dass das Programm nicht korrekt compiliert. Markieren und berichtigen Sie diese Fehler. [8 Punkte] Zwei Fehler betreffen die Richtigkeit des Algorithmus (es wird also nicht immer oder gar nicht oben beschriebenes Verhalten auftreten. [2 Punkte] Zeigen Sie diese Fehler und schreiben Sie Korrekturen, so dass ein lauffähiges Programm ohne Warnungen nach dem ANSI-C 89 Standard compiliert wird (mit den üblichen Parametern -Wall -pedantic -ansi). Zeigen Sie auch, welcher Fehler verhindert, dass der Algorithmus korrekt funktioniert. 01 #include <studio.h> 02 03 void myfunction(int* intfield; int length) 04 05 int c; 06 int j; 07 int k = 0; 08 j = 1; 09 while(j < length) 10 11 c += *intfield; 12 intfield++; 13 j = j+1; 14 15 16 if(c % 2 = 0) 17 18 printf(summe durch 2 teilbar!\n); 19 return 1 20 21 else 22 23 printf("summe nicht durch 2 teilbar!\n"); 24 return 0; 25 26 27 Lösung

algorithmische Fehler: Zeile 05: c ist nicht initialisiert, kann zu falscher berechnung fuehren, verbesserung: int c = 0; Zeile 08: j startet bei 1, sollte bei 0 starten, verbesserung: j = 0; syntaktische Fehler: Zeile 01: falsches include Zeile 03: ; statt, Zeile 07: k wird nicht benutzt, erzeugt Warning Zeile 16: c%2 ist kein lvalue, verbesserung: == Zeile 18: " " um den String f\"ur printf fehlen Zeile 19: ; fehlt Zeile 19 und Zeile 25: kein void return, erzeugt Warning Zeile 22: einleitende fehlt f\"ur den else-zweig

Aufgabe 5 (Ausdrücke [25 Punkte]) Gegeben ist ein Programm mit einigen Ausdrücke. Markieren Sie, welche der folgenden Ausdrücke compilieren oder die Compilation des Programms mit einer Fehlermeldung verhindern! [Jede richtige Antwort gibt 2 Punkte, jede Falsche Antwort -1 Punkt.] Code compiliert compiliert nicht int main(void) int i=0, j[2] = 1,0, k; int *p = &i; int printf, * const v = j + 1; putchar("tf"[j[i % 7]]); &*&*&*p = &k; i > 0? k = 1 : k = -1; for( ; ; ) break; return 0; Lösung Code compiliert compiliert nicht int printf, * const v = j + 1; putchar("tf"[j[i % 7]]); X X &*&*&*p = &k; i > 0? k = 1 : k = -1; X X for( ; ; ) break; X Lesen Sie die folgenden Ausdrücke. Welchen Wert nehmen die Variablen nach den

Zuweisungen an? [1 Punkt pro richtigem Variablenwert, 2 Punkte pro richtigem Variablenwert bei Teilaufgabe c] (a) int a = 10; int b = 20; int c = 30; a *= 3; c -= --b + a++; a... b... c... Lösung a = 31 b = 19 c = -19

(b) Felder int feld[2][5] = 1,2,3,4,5,6,7,8,9,10; int *p; p = feld[0]; feld[1][1]... *(p+3)... Lösung feld[1][1] = 7 *(p+3) = 4 (c) Lokale und Gloable Variablen 1 int i,j; 2 int main(void) 3 4 i = 2; 5 i = testfunktion1(); 6 return i; i =... j =... 7 8 int testfunktion1(void) 9 10 int i=0; 11 for (j=0; j<10; j++) i=i+17; 12 testfunktion2(i); 13 return j; i =... j =... 14 15 int testfunktion2(int input) 16 17 i *= input; 18 return i; i =... j =... 19 (d) Lösung main() i=10 j=10 testfunktion1() i=170 j=10 testfunktion2() i=340 j=10 Zeiger int i = 4, j = 2; int *zi, **zzi; zi = &i; *zi = 3; zzi = &zi; *zzi = &j; **zzi = 5; i... j... Lösung i = 3 j = 5