We may earn an affiliate commission when you visit our partners.
Daniel Szelogowski, Ph.D.

In this course, students will learn elementary programming concepts with the C language, with an additional section studying C++ and the relation between the two languages. Learning C will allow students to develop the basic skills for procedural programming and the fundamentals of object orientation, as well as a short study of C++. Students can use this knowledge to take on learning higher-level languages such as C#, Java, and Python in an accelerated manner. The class will focus on building programming skills from fundamental keywords to high-level abstraction, in hopes that the student will then continue on to learn a high-level programming language afterward.

Read more

In this course, students will learn elementary programming concepts with the C language, with an additional section studying C++ and the relation between the two languages. Learning C will allow students to develop the basic skills for procedural programming and the fundamentals of object orientation, as well as a short study of C++. Students can use this knowledge to take on learning higher-level languages such as C#, Java, and Python in an accelerated manner. The class will focus on building programming skills from fundamental keywords to high-level abstraction, in hopes that the student will then continue on to learn a high-level programming language afterward.

Students will learn the following aspects of programming using the C language:

Section 1:

-Introduction, how to succeed in the course

-What is C, understanding programming, setup

-Hello World

-Data Types

-Input and Output

-Commenting

-Operators

-Introducing Conditionals

-Conditionals

-Nested Conditionals, Switches

Section 2:

-Logic Operators

-Loops: for, while

-Functions

-Recursion

-Arrays, Matrices

Section 3:

-Strings/String Functions, ASCII

-Pointers

-Function Pointers

-The void Pointer, Static

-Structures

-Unions

Section 4:

-Memory Management

-Memory Functions: malloc, calloc, realloc

-Dynamic Strings and Arrays

-Error Handling

Section 5:

-Working With Files, Binary File I/O, Random Generation

-Preprocessor Directives, Scope, Headers

-Conditional Compilation Directives

-Preprocessor Operators

Section 6 - C++:

-Differences: new data types (strings, boolean), function/argument overloading

-Intro to Classes (constructors, objects)

-Intermediate Classes: class headers, namespaces, member initializer lists

-Advanced Classes: access keywords, 'this', 'friend', inheritance and polymorphism

-Abstract Classes/Interfaces, 'virtual', operator overloading

-Generic Types/Classes (Templates), Exceptions

-Files, Enumerations

Section 7 - Capstone:

-Final exam

-Capstone project

Optional textbooks:

-"C Programming Language, 2nd Edition" by Brian W. Kernighan and Dennis M. Ritchie (Various prices by format and rental); this book is extremely well-known in the programming community for being fundamental to developing one's skills with programming languages.

-"The C++ Standard Library: A Tutorial and Reference, 1st Edition" by Nicolai M. Josuttis (Various prices by format and rental, very cheap on eBay)

Enroll now

What's inside

Learning objectives

  • Programming fundamentals
  • C programming
  • C++ programming
  • Object-oriented programming
  • Introductory software development
  • Computer science
  • Procedural programming
  • Explicit typing
  • Implicit typing
  • Generic typing

Syllabus

Introduction, how to succeed in the course
What is C, understanding programming, setup
Introduction
Hello World
Read more
Data Types
Input and Output
Commenting
Operators
Conditionals
Nested Conditionals, Switches, and the Ternary Operator
Quiz 1
Assignment 1
Assignment 2
Apply new concepts to write more efficient code.
Logic Operators
Loops: for, while, do while
Functions
Recursion
Arrays, Matrices
Quiz 2
Assignment 3
Assignment 4
Strings/String Functions, ASCII
Pointers
Function Pointers
The void Pointer, Static
Structures
Unions
Quiz 3
Assignment 5
Assignment 6 - Milestone Project
Memory Management
Memory Functions: malloc, calloc, realloc
Dynamic Strings and Arrays
Error Handling
Quiz 4
Assignment 7
Assignment 8
File I/O, Random Generation
Preprocessor Directives, Scope, Headers
Conditional Compilation Directives
Preprocessor Operators
Quiz 5
Assignment 9
Assignment 10
Differences: new data types, function/argument overloading
Differences Continued: Intro to Classes (constructors, objects)
Intermediate Classes: class headers, namespaces, member initializer lists
Advanced Classes: access keywords, 'this', 'friend', inheritance & polymorphism
Abstract Classes/Interfaces, 'virtual', operator overloading
Generic Types/Classes (Templates), Exceptions
Files, Enumerations
Quiz 6
Assignment 11
Assignment 12
Demonstrate mastery of course knowledge.
Final Exam (Cumulative)
Capstone Project

Good to know

Know what's good
, what to watch for
, and possible dealbreakers
Provides a strong foundation in procedural programming with C, which is valuable for understanding how software interacts with hardware
Introduces fundamental programming concepts like data types, operators, conditionals, and loops, which are essential for all programming languages
Explores memory management in C, including malloc, calloc, and realloc, which are crucial for optimizing performance and preventing memory leaks
Includes a section on C++, covering classes, inheritance, polymorphism, and templates, which are key concepts in object-oriented programming
Uses the textbook "C Programming Language, 2nd Edition" by Kernighan and Ritchie, a highly regarded resource for learning C programming
Covers file I/O and preprocessor directives, which are essential for building larger and more complex C programs

Save this course

Save Introduction to Programming: C/C++ to your list so you can find it easily later:
Save

Activities

Be better prepared before your course. Deepen your understanding during and after it. Supplement your coursework and achieve mastery of the topics covered in Introduction to Programming: C/C++ with these activities:
Review Data Structures and Algorithms
Reviewing data structures and algorithms will provide a solid foundation for understanding memory management and dynamic data structures in C/C++.
Show steps
  • Review fundamental data structures like arrays, linked lists, and trees.
  • Practice implementing basic algorithms such as sorting and searching.
  • Analyze the time and space complexity of different algorithms.
Read 'C Programming Language, 2nd Edition'
Reading this book will provide a strong foundation in C programming, complementing the course material.
Show steps
  • Read the chapters corresponding to the topics covered in the course.
  • Work through the examples and exercises in the book.
  • Use the book as a reference when working on assignments.
Implement data structures and algorithms in C/C++
Practicing implementing data structures and algorithms in C/C++ will reinforce your understanding of pointers, memory management, and other core concepts.
Show steps
  • Choose a data structure or algorithm to implement.
  • Write the code in C/C++.
  • Test your implementation thoroughly.
  • Debug and refine your code.
Four other activities
Expand to see all activities and additional details
Show all seven activities
Create a blog post explaining pointers in C
Explaining pointers in a blog post will solidify your understanding of this challenging concept and help others learn.
Show steps
  • Research pointers in C and gather relevant information.
  • Write a clear and concise explanation of pointers.
  • Include examples and diagrams to illustrate the concepts.
  • Publish your blog post online.
Build a simple command-line calculator in C++
Building a calculator will provide hands-on experience with C++ syntax, object-oriented programming, and file I/O.
Show steps
  • Design the calculator's functionality and user interface.
  • Implement the calculator's logic using C++ classes and functions.
  • Add error handling and input validation.
  • Test the calculator thoroughly.
Read 'The C++ Standard Library'
Familiarizing yourself with the C++ Standard Library will greatly enhance your programming skills and allow you to leverage existing tools and components.
Show steps
  • Explore the different components of the C++ Standard Library.
  • Study the examples and usage patterns provided in the book.
  • Experiment with using the library in your own projects.
Contribute to an open-source C/C++ project
Contributing to open-source projects will provide valuable experience working with real-world codebases and collaborating with other developers.
Show steps
  • Find an open-source C/C++ project that interests you.
  • Read the project's documentation and contribution guidelines.
  • Identify a bug or feature to work on.
  • Submit a pull request with your changes.

Career center

Learners who complete Introduction to Programming: C/C++ will develop knowledge and skills that may be useful to these careers:
Software Engineer
A software engineer designs, develops, and maintains software applications that power our digital world; this course is a great starting point for a career as a software engineer. The course provides an introduction to programming using C and C++, covering fundamental concepts like data types, control flow, functions, memory management, and object-oriented programming. These skills are essential for building robust and efficient software applications. You will learn to write code, debug, and understand how computers execute instructions, setting you up to contribute to software projects. This course may be useful for those seeking a career in software development, by building a strong foundation in C and C++.
Firmware Engineer
A firmware engineer develops the low-level software, called firmware, that controls the hardware of electronic devices. These systems need the precision and control provided by C and C++. This course helps build a very strong foundation for working in this field. A firmware engineer will find the course modules on memory management, pointers, and hardware interaction very important. This helps them write efficient, robust code to make devices work as intended. This course is a great way to learn C and C++ to begin a career as a firmware engineer.
Operating Systems Developer
Operating systems developers are responsible for creating the core software that manages computer hardware and software resources. They must have a mastery of low-level languages like C and C++ to interact directly with hardware components and implement system functionalities. This course is highly relevant for this field. The in-depth coverage of memory management, pointers, system calls, and file I/O are essential for individuals looking to work on operating systems. An operating systems developer needs these technical skills to build essential software components, making this course particularly valuable.
Embedded Systems Engineer
Embedded systems engineers work on the hardware and software that control devices such as automobiles, appliances, and medical equipment. This role frequently involves programming in C and C++. The control structures, data manipulation, memory management, and hardware interaction taught in this course provide the fundamentals for working with these kinds of systems. Embedded systems engineers will use the concepts taught here to write efficient, low-level code that interfaces directly with hardware components. Learning C and C++ in this course sets up a solid foundation for further specialization in embedded programming.
High-Performance Computing Engineer
High performance computing engineers work on optimizing software for supercomputers and other high-end systems. This role requires a deep understanding of computer architecture and programming languages like C and C++ which can control the finer details of computation. The memory management, low-level programming techniques, and object oriented programming taught in this course are vital. These will help you write highly efficient parallel code, and optimize data processing algorithms. This course is a good start toward a career as a High Performance Computing Engineer.
Systems Programmer
A systems programmer develops and maintains the core software that runs computers and other devices. This typically involves working with the operating system, device drivers, and other fundamental system software. The deep dive into memory management, pointers, and low-level programming using C in this course makes it a great fit. Learning C and C++ can equip a systems programmer with the skills to interact directly with hardware and manage system resources, along with creating customized operating systems.
Robotics Engineer
Robotics engineers create and program robots for various applications, from manufacturing to healthcare. This often involves programming in C or C++. This course provides the vital foundation for programming real-world robotic applications. In particular, the memory management, control structures, and real-time processing are essential for robotics. A robotics engineer can learn how to write code that interacts directly with physical systems by taking this course which focuses on the fundamentals of programming with C and C++.
Compiler Engineer
Compiler engineers design and develop compilers, which are programs that translate source code written in programming languages into machine code that computers can execute. This work usually involves a deep understanding of programming languages, data structures, algorithms, and low-level execution. The content of this course is directly relevant, because it covers the basics of both C and C++. The course's section on memory management, pointers, and data structures in C are useful to individuals in the field. A compiler engineer will find this course a good resource, because it introduces the core concepts that are used in the creation of compilers.
Computer Graphics Programmer
A computer graphics programmer develops algorithms and software for creating visual content, including images, animations, and virtual reality environments. This work often involves using C and C++ due to its high performance capabilities needed for rendering graphics. This course helps build a strong foundation by teaching important concepts that are used in computer graphics, such as data structures, memory management, and object-oriented programming. A computer graphics programmer can leverage this course, especially the C++ portion to write code for advanced graphics engines and applications.
Game Developer
Game developers design and create video games, using programming skills to implement game mechanics, graphics, and user interactions. This course may be useful for those beginning a path toward a job as a game developer. Especially in the realm of computer game development, C and C++ are heavily used for performance-critical tasks like rendering, physics, and AI. Learning fundamental programming concepts first with C helps build a basic understanding of how to code. Learning object oriented concepts through C++ helps build a foundation that can be applied in other game development environments. Game development may be a good career choice for those who are familiar with C and C++, which are both covered in this course.
Database Developer
Database developers design and implement database systems and applications. While they often use languages like SQL, they also use lower-level languages like C and C++ to optimize database performance and develop custom database engines. This course may be useful for a database developer. The course focuses on memory management, and data structures, which are important for building high-performance database systems. Database developers who wish to work on the underlying components of a database will find that this course helps build a strong foundation.
Network Engineer
Network engineers design, implement, and maintain computer networks. They are very often required to implement low-level network protocols. This course may be helpful for network engineers, since certain networking operations require a mastery of C and C++. The course covers the fundamentals of programming, memory management, and file I/O. Network engineers who work with protocols or low-level networking software may find this course helpful toward their goals, because it will help them to understand and implement these technologies.
Quantitative Analyst
Quantitative analysts, often called quants, develop and implement mathematical and statistical models for financial markets. Often, they implement models in C++ due to its performance. This course may be helpful for a quantitative analyst. It will help them understand the performance implications of different programming techniques. The course's coverage of data structures, and algorithms, are also relevant. A quantitative analyst who has a working knowledge of C and C++ is well-positioned to implement models to the fastest degree possible.
Software Architect
Software architects design the high-level structure and organization of software systems. They need a broad understanding of programming paradigms and language characteristics. This course is a good fit, because it provides a solid, fundamental understanding of programming using both procedural and object oriented programming, which can be useful in designing software architecture. The course helps build a foundation for any experienced developer to take on a role as a software architect.
Data Scientist
Data scientists analyze large datasets and extract insights to inform decision-making for businesses. While their work often uses languages like Python or R, understanding lower-level languages such as C and C++ is useful because they can optimize performance in data processing pipelines. This course may be helpful for those interested in a career as a data scientist. The course could help data scientists who need to delve into optimizing underlying algorithms. This is an important skill when performance is critical. In addition, learning C and C++ will help in using libraries written in C and C++ that are common in data science.

Reading list

We've selected two books that we think will supplement your learning. Use these to develop background knowledge, enrich your coursework, and gain a deeper understanding of the topics covered in Introduction to Programming: C/C++.
Classic and considered the definitive guide to the C programming language. It provides a comprehensive overview of the language's features and syntax. Reading this book will give you a deeper understanding of the concepts covered in the course. It is commonly used as a textbook in academic institutions.
Provides a comprehensive guide to the C++ Standard Library. It covers containers, algorithms, iterators, and other essential components. Reading this book will help you write more efficient and maintainable C++ code. It valuable reference for any C++ programmer.

Share

Help others find this course page by sharing it with your friends and followers:

Similar courses

Similar courses are unavailable at this time. Please try again later.
Our mission

OpenCourser helps millions of learners each year. People visit us to learn workspace skills, ace their exams, and nurture their curiosity.

Our extensive catalog contains over 50,000 courses and twice as many books. Browse by search, by topic, or even by career interests. We'll match you to the right resources quickly.

Find this site helpful? Tell a friend about us.

Affiliate disclosure

We're supported by our community of learners. When you purchase or subscribe to courses and programs or purchase books, we may earn a commission from our partners.

Your purchases help us maintain our catalog and keep our servers humming without ads.

Thank you for supporting OpenCourser.

© 2016 - 2025 OpenCourser