In this paper, we describe a system called C-Tutor, an intelligent tut
oring system (ITS) for novice C programmers. A program analyzer is the
most important part of the ITS for programming. Our program analyzer
is a compound of a reverse engineering system and a didactic system. S
ince a novice program usually contains many bugs, information about th
e intentions of the programmer is inevitable to recognize a buggy prog
ram. In our approach, the intentions of a programmer are automatically
extracted as a problem description from a sample program by a reverse
engineering system called GOES (GOal Extraction System). Based on the
problem description, students' programs are recognized by a didactic
system called ExBug (Execution-guided deBugger). As a learning environ
ment, Curriculum Network constructs the knowledge base as genetic grap
hs to teach programming. C-Tutor is a complete ITS which provides both
a program analyzer and a learning environment. Tested with real stude
nts' programs, program analyzer gives acceptable recognition results.
Program analyzer and learning environment are closely related so that
students can learn C language during programming. New problems can be
easily set because GOES automatically generates problem descriptions f
or program analyzers. This makes C-Tutor a more practical tutoring sys
tem for a real C language course. (C) 1997 Elsevier Science Ltd.