# C Programming

    For technical reasons, "C#" redirects here. For the programming language C#, see C Sharp.

## Introduction

C is one of the most widely used programming languages in the world, whose application are in all fields of computer sciences, telecom and electronics embedded devices, graphic applications,... Therefore, C is a common choice for people wanting to learn how to program. This course assumes no previous programming experience and will guide you through all of the aspects of programming in C.
The course will roughly follow the C Programming book at Wikibooks as well as provide supplementary reading material for each lesson primarily through Wikipedia. Exercises will be given at the end of each course along with possible solutions. It is highly recommended that all of the exercises be worked because programming is learned by doing, not just reading.

## C introduction course

The C introduction course, consists of 14 lessons, plus exercises and answers. No previous knowledge of programming is required. Students just need to be capable of using a computer (edit files in a text editor and know how to run a program).
This course will give student an overview of C, free and open source tools setup to run C program on any available operating systems, as well as giving them knowledge about variables, functions, basic data type and data structure and simple techniques to develop a multi-source files program (with preprocessors and header file). This course gives student knowledge to develop software running at "CLI level", the ability to solve basic data structure and algorithm problem, or providing base knowledge for further investigation on software development with C on embedded devices (micro-controller or Linux embedded single board computer), system programming (Linux, Windows), device driver, desktop application,...
Lesson list:
* Before You Start: Introduction about the course, a brief history of C programming language and overview of tools required to start the course
* Introduction: Fundamental concepts of hardware and software, compiler, how the computer executes software, and start with your very first C program
* Variables: Introduction to variables in C programming, data types and qualifiers, storage class, type conversion (implicit and explicit), typedef and enum
* Operators: Unary and binary operators
* Functions: Functions in C, main function
* Flow control
* Arrays
* Strings
* Structs
* Preprocessors
* Headers
* Basic Output, Input and Output
* Memory Management
* Pointers
In addition to lectures and readings, there are quizzes, homework, analysis, and projects. Quizzes are short series of questions and answers that you can use to check your knowledge. Homework is longer and generally involves a program to be written. Analysis sections actually take a small program apart and show you how it works and why it was written that way. Projects are large programming problems where collaborative effort is encouraged.
A lesson is not meant to cover a single lecture from a real world school. It is meant to cover a single topic. As such, some lessons will be significantly longer than others. Don't force yourself to do every lesson in the same amount of time. Relax and take it at a comfortable pace.
The end-of-course exercise:
* Write a calculator software

## Advanced C programming

* Debug with GDB
* WINAPI programming
* Linux system programming
* The necessities in DSP C Programming
* Game programming with SDL, OpenGL

## Additional resources

* C Source Codes: This page store source codes related to the course
* The C Programming Language - Kernighan and Richie

## Main contributors

This section is for any Wikiversity user who contributes to that course and is ready to support the students
* DamienBlack: Creator of the course
* I8086: Main contributor to introduction lessons
* Dave Braunschweig: Main contributor to introduction lessons
* Guywan: Main contributor to introduction lessons
* Javariel~enwikiversity: Founder of the C introduction course, which is finally merged into the current C programming course.
* Anonymous Agent: Be always available to answer any questions related to this C programming course, as well as other embedded software programming question related to C/CPP programming. Feel free to reach me on my talk page or open a talk on the discussion page then tag me on it.
Introduction to C programming/EnrollmentPage

## Feedback

This content is very much a work in progress. Feedback on the content and how easily understood it is is greatly appreciated. For the C introduction course feedback, please leave those comments on the Forum page or directly reach to Anonymous Agent, the current contributor of the course on his talk page.