Test zum C-Grundwissen (nicht C++) 1

Werbung
L E H R S T U H L F Ü R R E A L Z E I T - C O M P U T E R S Y S T E M E
T E C H N I S C H E U N I V E R S I T Ä T M Ü N C H E N
U N I V. - P R O F. D R. - I N G. G. F Ä R B E R
Test zum C-Grundwissen (nicht C++)
C-Schlüsselworte
1) Welche Bedeutung haben die Schlüsselwörter
const, extern und static?
2) Wie unterscheidet sich diese abhängig vom
Kontext?
3) Welche Bedeutung hat das Schlüsselwort
volatile?
Variablen
4) An welchen Stellen im Quelltext dürfen
Variablen definiert werden?
5) Wie unterscheiden sich structs von
unions?
6) Wie kann man auf eine bestimmte Adresse im
Speicher zugreifen?
7) Was ist der Unterschied zwischen Variablen vom
Typ char * und int *?
8) Was ist die Bedeutung von folgenden 2
Zeilen Code (i ist vom Typ int *)?
*i = 0;
i = 0;
9) Was wurde hier nicht beachtet?
int char_value = 0;
void char_value(char c)
{
char_value = (int)c - 0x30;
}
10) Was sind die Unterschiede folgender
Definitionen?
const char *str0 = "Hello";
char str1[] = "Hello";
char *const str2 = str1;
1
Dipl.–Ing. Thomas Maier-Komor, 24. April 2007
Fragen zum fortgeschrittenen Wissen sind kursiv gedruckt
Fragen zum erforderlichen Grundwissen sind fett gedruckt
1
Flusskontrolle
11) Was für verschiedene Möglichkeiten gibt
es eine Schleife zu realisieren (4 Varianten)?
12) Welche davon sollte man nicht benutzen?
13) Wie kann eine Schleife vorzeitig
abgebrochen werden?
14) Wie kann ein neuer Schleifendurchlauf
vorzeitig erzwungen werden?
15) Was für ein Fehler wurde hier gemacht?
int transform(char c)
{
int i;
switch(c) {
case ’0’: i = 0;
case ’1’: i = 1;
case ’2’: i = 2;
}
return i;
}
16) Für welche Werte von i wird a bzw. b
aufgerufen?
void xyz(int i)
{
if (i)
a();
else
b();
}
17) Warum gibt folgende Funktion immer 0
zurück?
int checkValue(int i)
{
if (i = 3)
return 0;
else
return 1;
}
L E H R S T U H L F Ü R R E A L Z E I T - C O M P U T E R S Y S T E M E
T E C H N I S C H E U N I V E R S I T Ä T M Ü N C H E N
U N I V. - P R O F. D R. - I N G. G. F Ä R B E R
Operatoren
26) Was für Funktionen gibt es in der C-Bibliothek
für die Stringverarbeitung?
18) Was ist der Unterschied zwischen && und &?
19) Wie kann einfach überprüft werden ob
ein Bit gesetzt ist?
27) Worauf ist bei der Bearbeitung von Strings zu
achten?
20) Wie setzt/löscht/wechselt man ein Bit?
28) Was führt hier möglicherweise zum Absturz?
21) Wie extrahiert man das obere Byte eines 16-bit
Wortes?
#include <stdio.h>
int main(int argc, char **argv)
{
char *p = "hello, world!";
p[0] = ’H’;
printf("%s: %s\n",argv[0],p);
return 0;
}
Speichermanagement
22) Welche Funktionen gibt es für die dynamische
Speicherverwaltung und was ist bei ihrer Benutzung
zu beachten?
23) Gestalten Sie nachfolgenden Code
robust!
struct ST {
int value;
struct ST *next;
};
int successorsValue(struct ST *st)
{
return st->next->value;
}
29) Wie müßte man es richtig machen?
I/O
30) Was versteht man unter I/O-Routinen?
31) Welche grundlegenden I/O-Routinen gibt es in
der C-Bibliothek (min. 4)?
32) Warum liefert der nachfolgende Code höchst
wahrscheinlich falsche Daten oder stürzt ab?
24) Warum ist folgende Definition sinnlos?
void square(int x)
{
x *= x;
}
Strings
25) Korrigieren Sie folgendes Programm!
#include <stdio.h>
int main(void)
{
char *name;
printf("What’s your name?\n");
gets(name);
printf("hello %s\n",name);
return 0;
}
#include <unistd.h>
char * readData(int fd)
{
char buf[256];
read(fd,buf,256);
return buf;
}
Präprozessor
33) Wann empfiehlt sich der Einsatz von
Präprozessor-Makros?
34) Worin besteht der Unterschied zwischen
folgenden Präprozessorkommandos?
#include "xyz.h"
#include <xyz.h>
Zugehörige Unterlagen
Herunterladen