C Programming Examples: Learn with Practical Code Snippets


11 min read 07-11-2024
C Programming Examples: Learn with Practical Code Snippets

C is a powerful, general-purpose programming language that has been around for decades. It's often called the "mother of all programming languages" because its influence can be seen in languages like C++, Java, and Python. C's flexibility makes it suitable for various tasks, from embedded systems to operating systems.

Let's dive into some C programming examples that will help you understand its syntax, concepts, and its real-world applications.

Hello World!

The traditional starting point for any programming language is the "Hello World!" program. Let's see how it's done in C:

#include <stdio.h>

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

Explanation:

  • #include <stdio.h>: This line includes the standard input/output library. It provides essential functions like printf() for printing to the console.
  • int main() { ... }: This is the main function, the starting point of your C program. The int indicates that the function returns an integer value.
  • printf("Hello World!\n");: This line uses the printf() function to display "Hello World!" on the screen. The \n at the end adds a newline character, moving the cursor to the next line.
  • return 0;: This line indicates that the program executed successfully.

Variables and Data Types

Variables are like containers that hold data. In C, you need to declare their data type before using them. Some common data types include:

  • int: Stores whole numbers (e.g., 10, -5, 0).
  • float: Stores decimal numbers (e.g., 3.14, -2.5).
  • char: Stores single characters (e.g., 'A', '?', '5').

Here's an example demonstrating variable declaration and assignment:

#include <stdio.h>

int main() {
   int age = 25;  // Declaring an integer variable 'age' and assigning 25
   float height = 1.75; // Declaring a float variable 'height' and assigning 1.75
   char initial = 'J';  // Declaring a char variable 'initial' and assigning 'J'

   printf("Age: %d\n", age); 
   printf("Height: %.2f\n", height); 
   printf("Initial: %c\n", initial); 

   return 0;
}

Explanation:

  • The code declares three variables: age of type int, height of type float, and initial of type char.
  • It assigns values to each variable.
  • printf() is used to display the values of the variables on the console, using format specifiers (%d for integers, %.2f for floats, and %c for characters).

Arithmetic Operators

C provides standard arithmetic operators to perform calculations:

  • + (Addition): Adds two operands.
  • - (Subtraction): Subtracts the second operand from the first.
  • * (Multiplication): Multiplies two operands.
  • / (Division): Divides the first operand by the second.
  • % (Modulo): Gives the remainder after integer division.
#include <stdio.h>

int main() {
   int num1 = 10, num2 = 3;

   int sum = num1 + num2;
   int difference = num1 - num2;
   int product = num1 * num2;
   int quotient = num1 / num2;
   int remainder = num1 % num2;

   printf("Sum: %d\n", sum);
   printf("Difference: %d\n", difference);
   printf("Product: %d\n", product);
   printf("Quotient: %d\n", quotient);
   printf("Remainder: %d\n", remainder);

   return 0;
}

Conditional Statements

Conditional statements control the flow of your program based on certain conditions. The most common conditional statement is the if-else statement:

#include <stdio.h>

int main() {
   int number = 15;

   if (number > 10) {
       printf("Number is greater than 10\n");
   } else {
       printf("Number is not greater than 10\n");
   }

   return 0;
}

Explanation:

  • The code checks if the variable number is greater than 10.
  • If the condition is true, the statement inside the if block executes.
  • If the condition is false, the statement inside the else block executes.

Loops

Loops are used to repeat a block of code multiple times. C supports various loop types:

1. for Loop:

#include <stdio.h>

int main() {
   for (int i = 1; i <= 5; i++) {
       printf("%d\n", i); 
   }

   return 0;
}

Explanation:

  • The for loop initializes a counter variable i to 1.
  • The loop continues as long as i is less than or equal to 5.
  • Inside the loop, the value of i is printed, and then i is incremented by 1.

2. while Loop:

#include <stdio.h>

int main() {
   int count = 1;
   while (count <= 5) {
       printf("%d\n", count); 
       count++; 
   }

   return 0;
}

Explanation:

  • The while loop continues as long as the condition count <= 5 is true.
  • Inside the loop, the value of count is printed, and then count is incremented by 1.

3. do-while Loop:

#include <stdio.h>

int main() {
   int count = 1;
   do {
       printf("%d\n", count); 
       count++; 
   } while (count <= 5);

   return 0;
}

Explanation:

  • The do-while loop executes the code block at least once, even if the condition is initially false.
  • The condition count <= 5 is checked after the code block has executed.

Arrays

Arrays are used to store collections of elements of the same data type. They are indexed, meaning you can access each element by its position in the array (starting from 0).

#include <stdio.h>

int main() {
   int numbers[5] = {10, 20, 30, 40, 50}; // Declaring an array of 5 integers

   for (int i = 0; i < 5; i++) {
       printf("%d\n", numbers[i]); 
   }

   return 0;
}

Explanation:

  • The code declares an integer array named numbers with a size of 5.
  • It initializes the array with the values 10, 20, 30, 40, and 50.
  • The for loop iterates through the array, printing each element using its index.

Strings

Strings are sequences of characters. In C, strings are represented as arrays of characters terminated by a null character (\0).

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

int main() {
   char message[] = "Hello, World!"; 

   printf("Message: %s\n", message);

   int length = strlen(message); 

   printf("Length of message: %d\n", length);

   return 0;
}

Explanation:

  • The code declares a character array named message to store the string "Hello, World!".
  • printf() is used to display the string.
  • The strlen() function from the string.h library is used to calculate the length of the string (excluding the null terminator).

Functions

Functions are blocks of code that perform specific tasks. They help organize your code and make it reusable.

#include <stdio.h>

int sum(int a, int b) {
   return a + b;
}

int main() {
   int result = sum(5, 10);
   printf("Sum of 5 and 10 is: %d\n", result);

   return 0;
}

Explanation:

  • The code defines a function called sum that takes two integers as arguments and returns their sum.
  • In the main function, the sum function is called with the arguments 5 and 10.
  • The returned value is stored in the variable result and printed on the console.

Pointers

Pointers are variables that store memory addresses. They allow you to manipulate data directly in memory and create more efficient algorithms.

#include <stdio.h>

int main() {
   int number = 10;
   int *ptr = &number; // Declaring a pointer 'ptr' and assigning the address of 'number'

   printf("Value of number: %d\n", number); 
   printf("Address of number: %p\n", &number); 
   printf("Value stored by ptr: %d\n", *ptr); 
   printf("Address stored by ptr: %p\n", ptr); 

   return 0;
}

Explanation:

  • The code declares an integer variable number and a pointer variable ptr.
  • The & operator gets the memory address of number, which is assigned to ptr.
  • The * operator dereferences the pointer ptr to access the value stored at the memory address.

Structures

Structures allow you to group data of different data types together under a single name. They are useful for representing real-world entities.

#include <stdio.h>

struct Student {
   char name[50];
   int roll_no;
   float marks;
};

int main() {
   struct Student student1;

   strcpy(student1.name, "John Doe"); // Using strcpy() to copy a string into the 'name' field
   student1.roll_no = 123;
   student1.marks = 85.5;

   printf("Name: %s\n", student1.name);
   printf("Roll No: %d\n", student1.roll_no);
   printf("Marks: %.1f\n", student1.marks);

   return 0;
}

Explanation:

  • The code defines a structure called Student with fields for name, roll_no, and marks.
  • It creates a variable student1 of type struct Student.
  • Values are assigned to the fields of student1, and then the data is printed.

File Handling

C allows you to read and write data to files. You can use functions from the stdio.h library to perform these operations.

#include <stdio.h>

int main() {
   FILE *fp;
   char name[50];

   fp = fopen("data.txt", "w"); // Opening a file named "data.txt" in write mode

   if (fp == NULL) {
       printf("Error opening file.\n");
       return 1;
   }

   printf("Enter your name: ");
   scanf("%s", name);

   fprintf(fp, "Hello, %s!\n", name); // Writing to the file

   fclose(fp); // Closing the file

   printf("Data written to file.\n");

   return 0;
}

Explanation:

  • The code opens a file named "data.txt" in write mode ("w").
  • It then prompts the user to enter their name and writes the greeting message to the file using fprintf().
  • Finally, the file is closed using fclose().

Example: Calculator

This example demonstrates how to create a simple calculator using C:

#include <stdio.h>

int main() {
   int num1, num2, choice;

   printf("Enter first number: ");
   scanf("%d", &num1);

   printf("Enter second number: ");
   scanf("%d", &num2);

   printf("\nChoose operation:\n");
   printf("1. Addition\n");
   printf("2. Subtraction\n");
   printf("3. Multiplication\n");
   printf("4. Division\n");

   printf("Enter your choice: ");
   scanf("%d", &choice);

   switch (choice) {
       case 1:
           printf("Sum: %d\n", num1 + num2);
           break;
       case 2:
           printf("Difference: %d\n", num1 - num2);
           break;
       case 3:
           printf("Product: %d\n", num1 * num2);
           break;
       case 4:
           if (num2 == 0) {
               printf("Error: Division by zero.\n");
           } else {
               printf("Quotient: %.2f\n", (float)num1 / num2); // Typecasting for floating-point division
           }
           break;
       default:
           printf("Invalid choice.\n");
   }

   return 0;
}

Explanation:

  • The program prompts the user to enter two numbers and choose an operation.
  • The switch statement is used to select the appropriate operation based on the user's choice.
  • Each case handles a different operation, performing the calculation and printing the result.
  • The default case handles invalid choices.

Example: Sorting Array

This example demonstrates how to sort an array of integers using the bubble sort algorithm:

#include <stdio.h>

void bubbleSort(int arr[], int n) {
   for (int i = 0; i < n - 1; i++) {
       for (int j = 0; j < n - i - 1; j++) {
           if (arr[j] > arr[j + 1]) {
               // Swap arr[j] and arr[j+1]
               int temp = arr[j];
               arr[j] = arr[j + 1];
               arr[j + 1] = temp;
           }
       }
   }
}

int main() {
   int arr[] = {5, 1, 4, 2, 8};
   int n = sizeof(arr) / sizeof(arr[0]);

   printf("Unsorted array: ");
   for (int i = 0; i < n; i++) {
       printf("%d ", arr[i]);
   }

   bubbleSort(arr, n);

   printf("\nSorted array: ");
   for (int i = 0; i < n; i++) {
       printf("%d ", arr[i]);
   }

   return 0;
}

Explanation:

  • The bubbleSort function implements the bubble sort algorithm. It iterates through the array repeatedly, comparing adjacent elements and swapping them if they are in the wrong order.
  • In the main function, the array is initialized, the bubbleSort function is called to sort it, and then the sorted array is printed.

Example: Prime Number Checker

This example demonstrates how to check if a number is prime:

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

int isPrime(int num) {
   if (num <= 1) {
       return 0; // 0 and 1 are not prime
   }

   for (int i = 2; i <= sqrt(num); i++) {
       if (num % i == 0) {
           return 0; // If divisible by any number other than 1 and itself, not prime
       }
   }

   return 1; // If no divisors found, it's prime
}

int main() {
   int number;

   printf("Enter a number: ");
   scanf("%d", &number);

   if (isPrime(number)) {
       printf("%d is a prime number.\n", number);
   } else {
       printf("%d is not a prime number.\n", number);
   }

   return 0;
}

Explanation:

  • The isPrime function takes an integer as input and checks if it's a prime number.
  • It first handles the cases of 0 and 1, which are not prime.
  • Then, it iterates from 2 to the square root of the number. If any number divides the input number evenly, the function returns 0 (not prime). Otherwise, it returns 1 (prime).
  • In the main function, the user enters a number, the isPrime function is called to check it, and the result is printed.

Why Use C?

Now that you have a taste of C programming, let's explore why it remains a popular and relevant choice for various applications:

  • Efficiency: C is known for its low-level access to hardware, allowing for efficient code that directly interacts with memory and system resources. This makes it a favorite for performance-critical applications like operating systems and game engines.
  • Control: C gives you fine-grained control over system memory, data structures, and hardware interactions. This control is crucial for tasks that demand precise resource management.
  • Portability: C is a highly portable language, meaning your code can be compiled and run on different operating systems and hardware architectures with relatively minor modifications.
  • Legacy: C has been used for decades, so there's a vast amount of existing code and libraries available. This extensive ecosystem makes it easier to build upon existing work and leverage existing solutions.

When to Use C

C is particularly well-suited for these scenarios:

  • Operating Systems: The core of many operating systems, including Unix, Linux, and Windows, is written in C. It's the language of choice when you need low-level control over system resources.
  • Embedded Systems: C is popular in embedded systems, like microcontrollers and IoT devices, due to its efficiency and the ability to work with limited resources.
  • High-Performance Computing: For computationally intensive tasks, like scientific simulations and financial modeling, C's speed and control over hardware make it an ideal choice.
  • Game Development: C is often used for game engines, particularly for performance-critical aspects like physics simulations and graphics rendering.
  • Database Management Systems: Underlying database systems frequently use C for performance and control over memory management and file systems.

Getting Started with C

Here's a guide to help you start your C programming journey:

  1. Choose a Compiler: A compiler is a software tool that translates your C code into machine-readable instructions. Popular compilers include:

    • GCC (GNU Compiler Collection): A free and open-source compiler widely used across different platforms.
    • Clang: Another free and open-source compiler known for its fast compilation times and advanced error reporting.
    • Microsoft Visual Studio: A comprehensive IDE that includes a C compiler for Windows.
  2. Install the Compiler: Download and install the compiler on your operating system (Windows, macOS, Linux). Follow the specific installation instructions for your chosen compiler.

  3. Text Editor or IDE: Choose a text editor or Integrated Development Environment (IDE) that supports C development:

    • VS Code: A popular lightweight code editor with excellent C extensions.
    • Sublime Text: Another flexible and customizable text editor.
    • Code::Blocks: A free and open-source IDE designed specifically for C and C++.
    • Dev-C++: A free IDE for beginners, with a simple interface.
  4. Write your First C Program: Create a new file (e.g., hello.c) in your text editor or IDE, and copy the "Hello World!" code from earlier. Save the file.

  5. Compile and Run: Use the command line or IDE's built-in tools to compile your program:

    • GCC: gcc hello.c -o hello (this creates an executable file named hello)
    • Clang: clang hello.c -o hello
    • Visual Studio: Build your project using the IDE's menus.
  6. Run the Executable: Run the compiled program:

    • Command Line: ./hello
    • IDE: Run the program directly from the IDE.

Learn More

  • Online Courses: Platforms like Coursera, Udemy, and edX offer comprehensive C programming courses.
  • Books: Many excellent C programming books are available, covering all aspects of the language and concepts.
  • Documentation: Refer to the official C documentation for detailed information on functions, data types, and other language features.

Conclusion

C programming is a fundamental skill that can open doors to a wide range of opportunities in software development. By understanding the basic concepts and practicing with practical examples, you can gain a solid foundation in this powerful language. Remember to start small, experiment, and explore different applications to solidify your knowledge and embark on your C programming journey!

FAQs

1. What is the difference between C and C++?

C++ is an extension of C. It builds upon C's features, adding object-oriented programming concepts like classes, inheritance, and polymorphism. C is considered a procedural language, while C++ is an object-oriented language.

2. Is C a good choice for beginners?

C can be challenging for beginners because it requires understanding low-level concepts like memory management and pointers. However, it's a valuable language to learn, as it provides a solid foundation for understanding how programs interact with the computer.

3. Is C still relevant in the modern world?

Yes, C remains relevant in many areas of software development. Its efficiency, control, and wide adoption make it a valuable language for various tasks, from embedded systems to high-performance computing.

4. How can I improve my C programming skills?

Practice is key! Work on small projects, solve programming challenges, and participate in coding competitions. Also, explore different C libraries and learn how to use them effectively.

5. Is it necessary to learn assembly language before learning C?

While knowing assembly language can help you understand C's low-level interactions better, it's not a prerequisite for learning C. You can start with C and delve into assembly language later if you want to gain a deeper understanding of hardware and system architecture.