C for Absolute Beginners

A guide with detailed explanations and engaging examples

Getting Started

To begin programming in C, you need to set up your development environment. Follow these detailed steps:

  • Install a C Compiler: Windows users may choose MinGW or Microsoft Visual Studio, while macOS and Linux often use gcc. Ensure your chosen compiler is added to your system path.
  • Choose an Editor or IDE: Popular options include:
  • Write Your Code: Create a new file with a .c extension, write your code, and save the file. From the command line, compile the file with a command such as:
    gcc filename.c -o filename
  • Run Your Program: Execute the compiled program in your terminal by typing:
    ./filename (on macOS/Linux) or filename.exe (on Windows).

With your development environment in place, you're ready to learn and experiment with C programming.

What is C?

C is a powerful, low-level programming language known for its efficiency and control over system resources. It serves as the foundation for many modern languages and is commonly used for system programming, embedded systems, and developing operating systems.

Your First Program

The classic "Hello, World!" program is the C programmer's first step. In C, you start by including the standard input/output library, writing the main function, and using printf to print a message.

#include <stdio.h>

int main() {
    printf("Hello, world!\n");
    return 0;
}

Compile and run this program to see Hello, world! on your screen.

Variables & Data Types

In C, you must declare the type of each variable before using it. Common data types include int for integers, float for decimals, and char for characters or strings.

#include <stdio.h>

int main() {
    char name[] = "Alice";  // A string (array of characters)
    int age = 30;           // Integer
    float height = 5.4;     // Float (decimal)
    int isStudent = 1;      // Boolean (using 1 for true, 0 for false)

    printf("Name: %s\n", name);
    printf("Age: %d\n", age);
    printf("Height: %.1f\n", height);
    printf("Is Student: %d\n", isStudent);
    return 0;
}

This example declares and prints variables of different types. Note that C does not have a built-in Boolean type.

Comments

Comments in C let you annotate your code. Use // for single-line comments or enclose multiple lines between /* and */.

// This is a single-line comment

/*
This is a block comment.
It can span multiple lines and is useful for detailed explanations.
*/

Numbers & Math

C supports standard arithmetic operations such as addition, subtraction, multiplication, division, and modulus. The math.h library provides functions for more advanced mathematics.

#include <stdio.h>
#include <math.h>

int main() {
    int a = 10, b = 3;
    
    printf("Addition: %d\n", a + b);
    printf("Subtraction: %d\n", a - b);
    printf("Multiplication: %d\n", a * b);
    // Use type casting to perform floating-point division
    printf("Division: %f\n", (double)a / b);
    printf("Modulus: %d\n", a % b);
    // Exponentiation using the pow function from math.h
    printf("Exponentiation: %f\n", pow(a, b));
    
    return 0;
}

Compile this program (remember to link with -lm when using math functions) to see arithmetic operations in action.

Strings

In C, strings are arrays of characters terminated by a null character (\0). The string.h library offers functions to manipulate strings.

#include <stdio.h>
#include <string.h>

int main() {
    char greeting[50] = "Hello";
    char name[] = "Alice";

    // Concatenate strings (ensure destination array is large enough)
    strcat(greeting, ", ");
    strcat(greeting, name);
    strcat(greeting, "!");
    
    printf("%s\n", greeting);  // Outputs: Hello, Alice!
    return 0;
}

This example demonstrates joining strings using strcat.

Conditional Statements

C uses if, else if, and else constructs to execute different code blocks based on conditions.

#include <stdio.h>

int main() {
    int age = 18;
    if (age >= 18) {
        printf("You are an adult.\n");
    } else if (age >= 13) {
        printf("You are a teenager.\n");
    } else {
        printf("You are a child.\n");
    }
    return 0;
}

This code checks the value of age and prints an appropriate message.

Loops

Loops allow you to execute code repeatedly. Use for loops for a predetermined number of iterations and while loops when continuing until a condition is no longer true.

#include <stdio.h>

int main() {
    int i;
    // For loop: Print numbers 0 through 4
    for (i = 0; i < 5; i++) {
        printf("Number %d\n", i);
    }

    // While loop: Print numbers 0 through 4
    i = 0;
    while (i < 5) {
        printf("Count is %d\n", i);
        i++;
    }
    return 0;
}

Experiment with these loops to understand how repetition is managed in C.

Functions

Functions in C let you encapsulate code into reusable blocks. You must declare (or prototype) functions before you use them and then define them.

#include <stdio.h>

// Function prototype
void greet(const char *name);

int main() {
    greet("Alice");
    greet("Bob");
    return 0;
}

// Function definition
void greet(const char *name) {
    printf("Hello, %s!\n", name);
}

This example demonstrates how to declare, define, and call a function.

Arrays & Structures

Arrays are ordered collections of elements, and structures allow you to group related data together.

#include <stdio.h>

struct Person {
    char name[50];
    int age;
};

int main() {
    // Array of integers
    int numbers[5] = {1, 2, 3, 4, 5};
    printf("First number: %d\n", numbers[0]);
    
    // Using a structure
    struct Person person;
    // Assign values to the structure members
    snprintf(person.name, sizeof(person.name), "Alice");
    person.age = 30;
    printf("Name: %s, Age: %d\n", person.name, person.age);
    
    return 0;
}

This section demonstrates both an array and a structure in C.

Getting Input from Users

In C, you can capture user input using functions like scanf for formatted input.

#include <stdio.h>

int main() {
    char name[50];
    printf("What's your name? ");
    scanf("%s", name);  // Note: This reads until the first whitespace
    printf("Nice to meet you, %s!\n", name);
    return 0;
}

Use this example to practice capturing and using user input.

Working with Files

File handling in C is done through functions in stdio.h. You can open, read, write, and close files using functions like fopen, fprintf, fgets, and fclose.

#include <stdio.h>

int main() {
    FILE *file = fopen("example.txt", "w");
    if (file == NULL) {
        printf("Error opening file for writing!\n");
        return 1;
    }
    fprintf(file, "Hello, file!\n");
    fclose(file);
    
    file = fopen("example.txt", "r");
    if (file == NULL) {
        printf("Error opening file for reading!\n");
        return 1;
    }
    char buffer[100];
    fgets(buffer, sizeof(buffer), file);
    printf("%s", buffer);
    fclose(file);
    return 0;
}

This example writes to a file and then reads from it.

Error Handling

When dividing two integers in C, you must never divide by zero — doing so causes undefined behavior and can crash your program. Always check the divisor first. Here’s a simple example:

#include <stdio.h>

int main() {
    int numerator   = 10;
    int denominator = 0;   // this will cause trouble!

    // Prevent division by zero
    if (denominator == 0) {
        printf("Error: Cannot divide by zero.\\n");
        return 1;   // non-zero return indicates an error
    }

    int result = numerator / denominator;
    printf("%d / %d = %d\\n", numerator, denominator, result);
    return 0;     // zero return indicates success
}

How it works:

  • We test denominator == 0 before doing any division.
  • If it's zero, we print an error message and exit with return 1.
  • Only when the check passes do we perform the division safely.

Importing Libraries

In C, adding extra functionality is done by including libraries using the #include directive. For instance, math.h provides mathematical functions, and you can include others as needed.

#include <stdio.h>
#include <math.h>

int main() {
    // Using the sqrt function from math.h
    printf("Square root of 16 is %f\n", sqrt(16));
    return 0;
}

Ensure you compile programs that use math functions with the -lm flag.

What's Next?

Congratulations on completing this comprehensive guide to C! You now have a solid foundation in C programming. The next step is to build projects, explore advanced topics such as pointers and memory management, and continue your learning journey.

For further exploration, consider these resources: