CSC 230 - C and Software Tools

Catalog Description:

In this course, students will develop skills in several important areas. First, we'll get some experience working in C, a language that lets us think like procedural rather than object-oriented developers. Also, being a fairly low-level language, C lets us see and control more of what's going on in the hardware. This can help us think about using the hardware more effectively, whether we're actually programming in C or in a higher-level language. While we learn C, we'll also learn about tools and techniques that help us build, manage, debug and analyze software projects.

Contact Hours: Prerequisites: CSC216 with a C or better
Co-requisites: None
Restrictions: None
Coordinator: Dr. David Sturgill

Course Outcomes:

Upon successful completion of this course, a student will be able to...

  1. Compilation: implement C programs using the C standard library, with separately-compiled modules; explain the steps of compilation; identify and fix errors that happen during compilation and execution.
  2. Language: write, debug, and modify C programs using data types, control structures, operators, library utilities, and variables, including scope in a single function, across multiple functions, and across multiple modules.
  3. Assembly language: describe and explain a small subset of assembly language sufficient to illustrate implementation of C features like the switch and goto statements, accessing parts of the stack frame and accessing fields in a struct.
  4. Numbers: add and subtract unsigned and signed, two's complement binary integers and convert among standard types including bases 2, 10, and 16; describe 16-bit and 32-bit IEEE floating representation and its consequences for rounding error, and convert between these formats and decimal.
  5. Memory and Representation: use functions and basic data structures involving arrays, structs, pointers, and function pointers; allocate and deallocate memory in C programs while avoiding memory leaks and dangling pointers.
  6. Tools: utilize software development tools to implement, test, build, and trace C programs including, build automation, version control, static analysis, and dynamic analysis tools.
  7. Security: describe and demonstrate how to avoid common programming errors that lead to security vulnerabilities, such as buffer overflows and injection attacks; describe security properties provided by cryptographic “primitives” (e.g., symmetric cryptography, asymmetric cryptography, and cryptographic hash functions).


See Course Listings

See Course Coordinators