Computer Programming for Engineering Applications II
Required for ECE
Catalog Data: 

ECE 275 -- Computer Programming for Engineering Applications II (3 units)

Description: C and C++ programming. Core design and analysis of engineering algorithms and structures including lists, trees, graphs, traversal, and encoding. Fundamentals of C and C++ programming languages including pointers, structures, unions, and introduction to classes. Programming design topics including memory management, abstraction and design of advanced structures, and basics of software engineering.

Grading:  Regular grades are awarded for this course: A B C D E.

Usually offered:  Fall

ECE 175

Mastering Algorithms with C, K. Loudon, O'Rielly

Course Learning Outcomes: 

By the end of this course, the student will be able to

  1. Write, test, and debug large software program using C and C++ programming languages.
  2. Understand the compilation and linking process for software programs.
  3. Utilize commercial integrated-development environment (IDEs) for software development.
  4. Distinguish between statically allocated memory and dynamically allocated memory.
  5. Understand the C program memory organization and differentiate the location in which variables and stored within memory.
  6. Trace the behavior of a function call using the program stack. 
  7. Understand and use C programming constructs including structs, pointers, strings, memory allocation, file IO, and commandline arguments.
  8. Understand the relation between pointers and memory addresses.
  9. Create software programs that heavily utilize pointers and dynamic memory allocation.
  10. Implement data structures and supporting algorithm for common data structures including lists, queues, stacks, trees, and graphs.
  11. Create software program to solve engineering problem using common data structures and algorithms. 
  12. Analyze software code to determine the asymptotic runtime.
  13. Select appropriate data structures and algorithms to solve programing problems considering the asymptotic runtime.
  14. Understand the role of encapsulation, abstraction, and code organization in the software design process.
  15. Understand and use C++ programming constructs including classes, constructors and destructors, streams, references, operator overloading, and dynamic memory allocation.
  16. Have a basic knowledge of the standard template library (STL).
Course Topics: 
  • Review of C Programming
    a. Build process (preprocess, compile, link)
    b. Project management tools (e.g., CMake, IDEs)
    c. Libraries and code re-use across executables
    d. Debugging
  • Memory Concepts
    a. Pointers and memory addresses
    b. Pass by value and reference
    c. Memory allocation and management
    d. Distinction between stack and heap in software programs
  • Core Data Structures and Algorithms
    a. Trees, queues, stacks, heaps, and graphs
    b. Sorting, searching, hashing, traversals, shortest path
    c. Design, analysis, and implementation
    d. Asymptotic analysis of algorithms
  • Introduction to C++ and Classes
    a. Instantiation, object lifecycle (construction, destruction)
    b. Operations
    c. Standard Template Library (STL) Classes
Class/Laboratory Schedule: 

Course meets twice weekly for 75 minute lectures
Five multi-week programming projects. 
Five quizzes
One Midterm Exam and one Final Exam.

Relationship to Student Outcomes: 

a) an ability to apply knowledge of mathematics, science, and engineering (High)

c) an ability to design a system, component, or process to meet desired needs within realistic constraints
    such as economic, environmental, social, political, ethical, health and safety, manufacturability, and
    sustainability (Medium)

f)  an understanding of professional and ethical responsibility

k)  an ability to use the techniques, skills, and modern engineering tools necessary for engineering practice.  (High)

Prepared by: 
Dr. Roman Lysecky
Prepared Date: 

University of Arizona College of Engineering