C Programming Essentials: Operators, Functions, and Core Concepts

C Operators Explained

Working of Increment and Decrement Operators

The increment (++) and decrement (--) operators are unary operators used to increase or decrease the value of a variable by one. They can be used in two forms: prefix and postfix.

Program Example:

#include <stdio.h>

int main() {
    int a = 10;
    printf("%d\n", a++); // Prints 10 (postfix increment: 'a' is used, then incremented to 11)
    printf("%d\n", a--); // Prints 11 (postfix decrement: 'a' is used, then decremented to 10)

    int count = 5;
    printf("%d\n", ++count); // Prints 6 (prefix increment: 'count' is incremented to 6, then used)
    printf("%d\n", count--); // Prints 6 (postfix decrement: 'count' is used, then decremented to 5)
    return 0;
}

Working of Logical Operators

Logical operators are used to combine or evaluate boolean expressions. In C, non-zero values are considered true, and zero is considered false.

Program Example:

#include <stdio.h>

int main() {
    int a = 1, b = 0;
    printf("a && b: %d\n", a && b); // Logical AND: 1 (true) && 0 (false) = 0 (false)
    printf("a || b: %d\n", a || b); // Logical OR: 1 (true) || 0 (false) = 1 (true)
    printf("!a: %d\n", !a);         // Logical NOT: !1 (true) = 0 (false)
    return 0;
}

Working of Relational Operators

Relational operators are used to compare two operands and return a boolean result (1 for true, 0 for false).

Program Example:

#include <stdio.h>

int main() {
    int a = 10, b = 3;
    printf("a == b: %d\n", a == b); // Equal to: 0 (false)
    printf("a != b: %d\n", a != b); // Not equal to: 1 (true)
    printf("a > b: %d\n", a > b);   // Greater than: 1 (true)
    printf("a < b: %d\n", a < b);   // Less than: 0 (false)
    printf("a >= b: %d\n", a >= b); // Greater than or equal to: 1 (true)
    printf("a <= b: %d\n", a <= b); // Less than or equal to: 0 (false)
    return 0;
}

Working of Arithmetic Operators

Arithmetic operators perform mathematical calculations like addition, subtraction, multiplication, division, and modulus.

Program Example:

#include <stdio.h>

int main() {
    int a = 10, b = 3;
    printf("Addition: %d\n", a + b);       // 10 + 3 = 13
    printf("Subtraction: %d\n", a - b);    // 10 - 3 = 7
    printf("Multiplication: %d\n", a * b); // 10 * 3 = 30
    printf("Division: %d\n", a / b);       // 10 / 3 = 3 (integer division)
    printf("Modulus: %d\n", a % b);        // 10 % 3 = 1 (remainder)
    return 0;
}

Types of Operators in C

C language supports a rich set of operators to perform various operations. Here are the main categories:

  • Arithmetic Operators: Perform mathematical operations.
    • + : Addition
    • - : Subtraction
    • * : Multiplication
    • / : Division
    • % : Modulus (remainder)
  • Relational (Comparison) Operators: Compare two operands.
    • == : Equal to
    • != : Not equal to
    • > : Greater than
    • < : Less than
    • >= : Greater than or equal to
    • <= : Less than or equal to
  • Logical Operators: Combine or evaluate boolean expressions.
    • && : Logical AND
    • || : Logical OR
    • ! : Logical NOT
  • Bitwise Operators: Perform operations on individual bits.
    • & : Bitwise AND
    • | : Bitwise OR
    • ^ : Bitwise XOR
    • ~ : Bitwise NOT (one’s complement)
    • << : Left shift
    • >> : Right shift

Data Types in C

A data type specifies the type of data that a variable can store, such as integers, characters, floating-point numbers, etc.

  • Primary (Built-in) Data Types:
    • int: For integers (e.g., 10, -5)
    • char: For single characters (e.g., 'A', 'b')
    • float: For single-precision floating-point numbers (e.g., 3.14f)
    • double: For double-precision floating-point numbers (e.g., 3.14159)
  • Secondary (Derived) Data Types:
    • Arrays
    • Pointers
  • User-Defined Data Types:
    • Structures (struct)
    • Unions (union)
    • Enumerations (enum)

C Tokens: Building Blocks of Code

A token is the smallest individual unit of meaning in a C programming language program. The compiler breaks down a program into these tokens.

Examples of Tokens:

  1. int → Keyword
  2. x → Identifier
  3. = → Operator
  4. 5 → Constant
  5. + → Operator
  6. 2 → Constant
  7. ; → Separator

Constants in C

A constant is a value that remains fixed and cannot be changed throughout the program execution.

  • Primary Constants:
    • Integer Constants (e.g., 10, -5)
    • Real (Floating-Point) Constants (e.g., 3.14, -0.5)
    • Character Constants (e.g., 'A', '9')
  • Secondary Constants:
    • Array Constants
    • Pointer Constants
    • Structure Constants
    • Union Constants
    • Enum Constants

C Functions: Concepts and Examples

Function with Arguments and Return Value

Functions can accept input values (arguments) and return a result. This promotes modularity and reusability.

Program Example:

#include <stdio.h>

int add(int x, int y) {
    return x + y;
}

int main() {
    int result = add(5, 3);
    printf("%d\n", result); // Prints 8
    return 0;
}

Simple Function to Add Two Numbers

This example demonstrates a basic function that takes two integers as input and returns their sum.

Program Example:

#include <stdio.h>

// Function declaration (prototype)
int add(int a, int b);

int main() {
    int num1, num2, result;
    printf("Enter two numbers: ");
    scanf("%d %d", &num1, &num2);

    // Function call
    result = add(num1, num2);
    printf("The sum is: %d\n", result);
    return 0;
}

// Function definition
int add(int a, int b) {
    return a + b;
}

Function to Check if a Number is Even or Odd

This function takes an integer and determines whether it is even or odd, printing the result.

Program Example:

#include <stdio.h>

// Function declaration
void checkEvenOdd(int num);

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

    // Function call
    checkEvenOdd(number);
    return 0;
}

// Function definition
void checkEvenOdd(int num) {
    if (num % 2 == 0)
        printf("%d is Even\n", num);
    else
        printf("%d is Odd\n", num);
}

Recursive Function for Factorial

A recursive function is one that calls itself. This example calculates the factorial of a number using recursion.

Program Example:

#include <stdio.h>

// Function declaration
int factorial(int n);

int main() {
    int num;
    printf("Enter a number: ");
    scanf("%d", &num);

    // Function call
    printf("Factorial of %d is: %d\n", num, factorial(num));
    return 0;
}

// Recursive function definition
int factorial(int n) {
    if (n == 0)
        return 1;
    else
        return n * factorial(n - 1);
}

Function with No Arguments and No Return Value

This type of function performs a task without needing any input and does not return any value to the calling function.

Program Example:

#include <stdio.h>

// Function declaration
void display();

// Main function
int main() {
    display(); // Function call
    return 0;
}

// Function definition
void display() {
    printf("Hello! This is a function with no arguments and no return value.\n");
}

Essential C Programming Examples

Program to Check Positive, Negative, or Zero Number

This program uses conditional statements (if-else if-else) to determine if an entered number is positive, negative, or zero.

Program Example:

#include <stdio.h>

void main() { // Note: 'main' should ideally return 'int'
    int num;
    printf("Enter the number: ");
    scanf("%d", &num);

    if (num > 0) {
        printf("The entered number is Positive\n");
    } else if (num < 0) { // Corrected 'n' to 'num'
        printf("The entered number is Negative\n");
    } else {
        printf("The entered number is Zero\n");
    }
}

Program to Find the Sum of Digits (While Loop)

This program calculates the sum of the digits of a given integer using a while loop.

Program Example:

#include <stdio.h>

void main() { // Note: 'main' should ideally return 'int'
    int n, num, rem, sum = 0;
    printf("Enter the number: ");
    scanf("%d", &num);
    n = num; // Store original number

    while (num > 0) {
        rem = num % 10; // Get the last digit
        sum = sum + rem; // Add to sum
        num = num / 10; // Remove the last digit
    }
    printf("The sum of the digits of %d is = %d\n", n, sum);
}

C Program to Check Whether a Number is Even or Odd

This program determines if an integer is even or odd using the modulus operator.

Program Example:

#include <stdio.h>

int main() {
    int num;
    printf("Enter an integer: ");
    scanf("%d", &num);

    // True if num is perfectly divisible by 2
    if (num % 2 == 0)
        printf("%d is even.\n", num);
    else
        printf("%d is odd.\n", num);
    return 0;
}

Program to Find the Largest Element in an Array of Integers

This program iterates through an array to find and print its largest element.

Program Example:

#include <stdio.h>

int main() {
    int arr[] = { 10, 324, 45, 90, 9807 };
    int i;
    int max = arr[0]; // Assume first element is max
    int n = sizeof(arr) / sizeof(arr[0]); // Calculate array size

    for (i = 1; i < n; i++) {
        if (arr[i] > max) {
            max = arr[i]; // Update max if current element is larger
        }
    }
    printf("The largest element is: %d\n", max);
    return 0;
}

Program to Compare Two Strings Using strcmp()

This program demonstrates the use of the strcmp() function from string.h to compare two strings lexicographically.

Program Example:

#include <stdio.h>
#include <string.h> // Required for strcmp()

int main() {
    char s1[6] = "Geeks"; // Increased size to accommodate null terminator
    char s2[6] = "Geeks"; // Increased size

    // strcmp returns 0 if strings are equal,
    // a negative value if s1 < s2, and a positive value if s1 > s2.
    printf("Comparison result: %d\n", strcmp(s1, s2)); // Will print 0
    return 0;
}

Importance of C Language

C is a foundational programming language with significant importance in various domains due to its efficiency and low-level capabilities.

  1. Basic Building Block: Serves as a fundamental language for learning and understanding many other programming languages.
  2. Fast and Efficient Performance: Provides direct memory access and efficient execution, making it suitable for performance-critical applications.
  3. Direct Memory Access: Utilizes pointers for direct memory manipulation, offering fine-grained control over hardware.
  4. Embedded Systems and Device Drivers: Widely used in developing software for embedded systems, microcontrollers, and device drivers.
  5. Operating Systems Development: Instrumental in developing operating systems (e.g., Linux kernel, parts of Windows).
  6. Highly Portable: C programs can be compiled and run on various hardware platforms with minimal changes.
  7. Teaches Core Programming Concepts: Helps in understanding fundamental concepts like memory management, data structures, and algorithms.
  8. Automation and Industrial Control: Applied in industrial automation, robotics, and control systems.
  9. Supports System-Level Programming: Ideal for system-level programming tasks where direct hardware interaction is required.
  10. Strong Foundation for Engineering Students: Provides a robust foundation for students pursuing computer science and engineering disciplines.