0% found this document useful (0 votes)
637 views54 pages

C Programming Notes

C is a general-purpose programming language created in 1972. It is widely used and associated with UNIX as it was developed to write the UNIX operating system. C is fast and versatile, used for both applications and technologies. Key differences between C and C++ are that C++ supports classes and objects while C does not. The document then provides examples and explanations of basic C syntax, output/printing text, user input, comments, variables, and declaring/assigning variables.

Uploaded by

J
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
Download as pdf or txt
0% found this document useful (0 votes)
637 views54 pages

C Programming Notes

C is a general-purpose programming language created in 1972. It is widely used and associated with UNIX as it was developed to write the UNIX operating system. C is fast and versatile, used for both applications and technologies. Key differences between C and C++ are that C++ supports classes and objects while C does not. The document then provides examples and explanations of basic C syntax, output/printing text, user input, comments, variables, and declaring/assigning variables.

Uploaded by

J
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
Download as pdf or txt
Download as pdf or txt
You are on page 1/ 54

PHOENIX INFOTECH CHIKODI

C PROGRAMMING NOTES

What is C?
C is a general-purpose programming language created by Dennis Ritchie at
the Bell Laboratories in 1972.

It is a very popular language, despite being old.

C is strongly associated with UNIX, as it was developed to write the UNIX


operating system.

Why Learn C?
 It is one of the most popular programming language in the world
 If you know C, you will have no problem learning other popular
programming languages such as Java, Python, C++, C#, etc, as the
syntax is similar
 C is very fast, compared to other programming languages, like
java and Python
 C is very versatile; it can be used in both applications and technologies

Difference between C and C++


 C++ was developed as an extension of C, and both languages have
almost the same syntax
 The main difference between C and C++ is that C++ support classes
and objects, while C does not
PHOENIX INFOTECH CHIKODI

C Syntax
You have already seen the following code a couple of times in the first
chapters. Let's break it down to understand it better:

Example
#include <stdio.h>

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

Example explained
Line 1: #include <stdio.h> is a header file library that lets us work with
input and output functions, such as printf() (used in line 4). Header files add
functionality to C programs.

Don't worry if you don't understand how #include <stdio.h> works. Just think
of it as something that (almost) always appears in your program.

Line 2: A blank line. C ignores white space. But we use it to make the code
more readable.

Line 3: Another thing that always appear in a C program, is main(). This is


called a function. Any code inside its curly brackets {} will be executed.

Line 4: printf() is a function used to output/print text to the screen. In our


example it will output "Hello World".

Note that: Every C statement ends with a semicolon ;

Note: The body of int main() could also been written as:
int main(){printf("Hello World!");return 0;}

Remember: The compiler ignores white spaces. However, multiple lines


makes the code more readable.

Line 5: return 0 ends the main() function.

Line 6: Do not forget to add the closing curly bracket } to actually end the
main function.
PHOENIX INFOTECH CHIKODI

C Output (Print Text)


To output values or print text in C, you can use the printf() function:

Example
#include <stdio.h>
int main() {
printf("Hello World!");
return 0;
}

You can use as many printf() functions as you want. However, note that it
does not insert a new line at the end of the output:

Example
#include <stdio.h>
int main() {
printf("Hello World!");
printf("I am learning C.");
return 0;
}

C New Lines
To insert a new line, you can use the \n character:

Example
#include <stdio.h>

int main() {
printf("Hello World!\n");
printf("I am learning C.");
return 0;
}
PHOENIX INFOTECH CHIKODI

You can also output multiple lines with a single printf() function. However,
be aware that this will make the code harder to read:

Example
#include <stdio.h>
int main() {
printf("Hello World!\nI am learning C.\nAnd it is awesome!");
return 0;
}

Tip: Two \n characters after each other will create a blank line:

Example
#include <stdio.h>

int main() {
printf("Hello World!\n\n");
printf("I am learning C.");
return 0;
}
What is \n exactly?
The newline character (\n) is called an escape sequence, and it forces the
cursor to change its position to the beginning of the next line on the screen.
This results in a new line.

Examples of other valid escape sequences are:

Escape Sequence Description

\t Creates a horizontal tab

\\ Inserts a backslash character (\)

\" Inserts a double quote character


PHOENIX INFOTECH CHIKODI

C User Input
You have already learned that printf() is used to output values in C.
To get user input, you can use the scanf() function:
Example
Output a number entered by the user:
// Create an integer variable that will store the number we get from
the user
int myNum;

// Ask the user to type a number


printf("Type a number: \n");

// Get and save the number the user types


scanf("%d", &myNum);

// Output the number the user typed


printf("Your number is: %d", myNum);

The scanf() function takes two arguments: the format specifier of the
variable (%d in the example above) and the reference operator (&myNum),
which stores the memory address of the variable.
Tip: You will learn more about memory address and functions in the next
chapter.

User Input Strings


You can also get a string entered by the user:
Example
Output the name of a user:
// Create a string
char firstName[30];

// Ask the user to input some text


printf("Enter your first name: \n");

// Get and save the text


scanf("%s", firstName);

// Output the text


printf("Hello %s.", firstName);

Note that you must specify the size of the string/array (we used a very high
number, 30, but atleast then we are certain it will store enough characters
for the first name), and you don't have to specify the reference operator (&)
when working with strings in scanf().
PHOENIX INFOTECH CHIKODI

C Comments
Comments can be used to explain code, and to make it more readable. It can
also be used to prevent execution when testing alternative code.

Comments can be singled-lined or multi-lined.

Single-line Comments
Single-line comments start with two forward slashes (//).

Any text between // and the end of the line is ignored by the compiler (will
not be executed).

This example uses a single-line comment before a line of code:

Example
// This is a comment
printf("Hello World!");

This example uses a single-line comment at the end of a line of code:

Example
printf("Hello World!"); // This is a comment

C Multi-line Comments
Multi-line comments start with /* and ends with */.

Any text between /* and */ will be ignored by the compiler:


Example
/* The code below will print the words Hello World!
to the screen, and it is amazing */
printf("Hello World!");
Single or multi-line comments?
It is up to you which you want to use. Normally, we use // for short
comments, and /* */ for longer.

Good to know: Before version C99 (released in 1999), you could only use
multi-line comments in C.
PHOENIX INFOTECH CHIKODI

C Variables
Variables are containers for storing data values.

In C, there are different types of variables (defined with different keywords),


for example:

 int - stores integers (whole numbers), without decimals, such as 123


or -123
 float - stores floating point numbers, with decimals, such as 19.99 or -
19.99
 char - stores single characters, such as 'a' or 'B'. Char values are
surrounded by single quotes

Declaring (Creating) Variables


To create a variable, specify the type and assign it a value:

Syntax
type variableName = value;

Where type is one of C types (such as int), and variableName is the name of
the variable (such as x or myName). The equal sign is used to assign a
value to the variable.

So, to create a variable that should store a number, look at the following
example:

Example
Create a variable called myNum of type int and assign the value 15 to it:

int myNum = 15;

You can also declare a variable without assigning the value, and assign the
value later:

Example
int myNum;
myNum = 15;

Note: If you assign a new value to an existing variable, it will overwrite the
previous value:
PHOENIX INFOTECH CHIKODI

Example
int myNum = 15; // myNum is 15
myNum = 10; // Now myNum is 10

Output Variables
Example
printf("Hello World!");

In many other programming languages (like Python, Java, and C++), you would
normally use a print function to display the value of a variable. However,
this is not possible in C:

Example
int myNum = 15;
printf(myNum); // Nothing happens

To output variables in C, you must get familiar with something called "format
specifiers".

Format Specifiers
Format specifiers are used together with the printf() function to tell the
compiler what type of data the variable is storing. It is basically a placeholder
for the variable value.

A format specifier starts with a percentage sign %, followed by a character.

For example, to output the value of an int variable, you must use the format
specifier %d or %i surrounded by double quotes, inside the printf() function:

Example
int myNum = 15;
printf("%d", myNum); // Outputs 15

To print other types, use %c for char and %f for float:


PHOENIX INFOTECH CHIKODI

Example
// Create variables
int myNum = 5; // Integer (whole number)
float myFloatNum = 5.99; // Floating point number
char myLetter = 'D'; // Character

// Print variables
printf("%d\n", myNum);
printf("%f\n", myFloatNum);
printf("%c\n", myLetter);

To combine both text and a variable, separate them with a comma inside
the printf() function:

Example
int myNum = 5;
printf("My favorite number is: %d", myNum);

To print different types in a single printf() function, you can use the
following:

Example
int myNum = 5;
char myLetter = 'D';
printf("My number is %d and my letter is %c", myNum, myLetter);

You will learn more about Data Types in the next chapter.

Add Variables Together


To add a variable to another variable, you can use the + operator:

Example
int x = 5;
int y = 6;
int sum = x + y;
printf("%d", sum);
PHOENIX INFOTECH CHIKODI

Declare Multiple Variables


To declare more than one variable of the same type, use a comma-
separated list:

Example
int x = 5, y = 6, z = 50;
printf("%d", x + y + z);

You can also assign the same value to multiple variables of the same type:

Example
int x, y, z;
x = y = z = 50;
printf("%d", x + y + z);

C Variable Names
All C variables must be identified with unique names.

These unique names are called identifiers.

Identifiers can be short names (like x and y) or more descriptive names


(age, sum, totalVolume).

Note: It is recommended to use descriptive names in order to create


understandable and maintainable code:

Example
// Good
int minutesPerHour = 60;
// OK, but not so easy to understand what m actually is
int m = 60;

The general rules for naming variables are:

 Names can contain letters, digits and underscores


 Names must begin with a letter or an underscore (_)
 Names are case sensitive (myVar and myvar are different variables)
 Names cannot contain whitespaces or special characters like !, #, %,
etc.
 Reserved words (such as int) cannot be used as names
PHOENIX INFOTECH CHIKODI

C Data Types
As explained in the Variables chapter, a variable in C must be a
specified data type, and you must use a format specifier inside
the printf() function to display it:

Example
// Create variables
int myNum = 5; // Integer (whole number)
float myFloatNum = 5.99; // Floating point number
char myLetter = 'D'; // Character

// Print variables
printf("%d\n", myNum);
printf("%f\n", myFloatNum);
printf("%c\n", myLetter);

Basic Data Types


The data type specifies the size and type of information the variable will
store.

In this tutorial, we will focus on the most basic ones:

Data Size Description


Type

int 2 or 4 Stores whole numbers, without decimals


bytes

float 4 bytes Stores fractional numbers, containing one or more decimals.


Sufficient for storing 7 decimal digits

double 8 bytes Stores fractional numbers, containing one or more decimals.


Sufficient for storing 15 decimal digits
PHOENIX INFOTECH CHIKODI

char 1 byte Stores a single character/letter/number, or ASCII values

Basic Format Specifiers


There are different format specifiers for each data type. Here are some of
them:

Format Specifier Data Type

%d or %i int

%f float

%lf double

%c char

%s Used for strings (text), which you will learn more about in a later
chapter
PHOENIX INFOTECH CHIKODI

C Constants
When you don't want others (or yourself) to override existing variable
values, use the const keyword (this will declare the variable as "constant",
which means unchangeable and read-only):

Example
const int myNum = 15; // myNum will always be 15
myNum = 10; // error: assignment of read-only variable 'myNum'

You should always declare the variable as constant when you have values
that are unlikely to change:

Example
const int minutesPerHour = 60;
const float PI = 3.14;

Notes On Constants
When you declare a constant variable, it must be assigned with a value:

Example
Like this:

const int minutesPerHour = 60;

This however, will not work:

const int minutesPerHour;


minutesPerHour = 60; // error

Good Practice
Another thing about constant variables, is that it is considered good practice
to declare them with uppercase. It is not required, but useful for code
readability and common for C programmers:

Example
const int BIRTHYEAR = 1980;
PHOENIX INFOTECH CHIKODI

C Operators
Operators are used to perform operations on variables and values.

In the example below, we use the + operator to add together two values:

Example
int myNum = 100 + 50;

Although the + operator is often used to add together two values, like in the
example above, it can also be used to add together a variable and a value, or
a variable and another variable:

Example
int sum1 = 100 + 50; // 150 (100 + 50)
int sum2 = sum1 + 250; // 400 (150 + 250)
int sum3 = sum2 + sum2; // 800 (400 + 400)

C divides the operators into the following groups:

1) Arithmetic operators
2) Assignment operators
3) Comparison operators
4) Logical operators
5) Bitwise operators

1.Arithmetic Operators
Arithmetic operators are used to perform common mathematical operations.

Operator Name Description Example

+ Addition Adds together two values x+y

- Subtraction Subtracts one value from another x-y


PHOENIX INFOTECH CHIKODI

* Multiplication Multiplies two values x*y

/ Division Divides one value by another x/y

% Modulus Returns the division remainder x%y

++ Increment Increases the value of a variable by 1 ++x

-- Decrement Decreases the value of a variable by 1 --x

2.Assignment Operators
Assignment operators are used to assign values to variables.

In the example below, we use the assignment operator (=) to assign the
value 10 to a variable called x:

Example
int x = 10;

The addition assignment operator (+=) adds a value to a variable:

Example
int x = 10;
x += 5;
PHOENIX INFOTECH CHIKODI

A list of all assignment operators:

Operator Example Same As

= x=5 x=5

+= x += 3 x=x+3

-= x -= 3 x=x-3

*= x *= 3 x=x*3

/= x /= 3 x=x/3

%= x %= 3 x=x%3

&= x &= 3 x=x&3

|= x |= 3 x=x|3

^= x ^= 3 x=x^3

>>= x >>= 3 x = x >> 3


PHOENIX INFOTECH CHIKODI

<<= x <<= 3 x = x << 3

3.Comparison Operators
Comparison operators are used to compare two values.

Note: The return value of a comparison is either true (1) or false (0).

In the following example, we use the greater than operator (>) to find out if
5 is greater than 3:

Example
int x = 5;
int y = 3;
printf("%d", x > y); // returns 1 (true) because 5 is greater than 3

A list of all comparison operators:

Operator Name Example

== Equal to x == y

!= Not equal x != y

> Greater than x>y

< Less than x<y


PHOENIX INFOTECH CHIKODI

>= Greater than or equal to x >= y

<= Less than or equal to x <= y

4.Logical Operators
Logical operators are used to determine the logic between variables or
values:

Operator Name Description Example

&& Logical Returns true if both statements are true x < 5 && x < 10
and

|| Logical or Returns true if one of the statements is true x < 5 || x < 4

! Logical Reverse the result, returns false if the result !(x < 5 && x <
not is true 10)
PHOENIX INFOTECH CHIKODI

Sizeof Operator
The memory size (in bytes) of a data type or a variable can be found with
the sizeof operator:

Example
int myInt;
float myFloat;
double myDouble;
char myChar;
printf("%lu\n", sizeof(myInt));
printf("%lu\n", sizeof(myFloat));
printf("%lu\n", sizeof(myDouble));
printf("%lu\n", sizeof(myChar));

Note that we use the %lu format specifer to print the result, instead of %d. It
is because the compiler expects the sizeof operator to return a long
unsigned int (%lu), instead of int (%d). On some computers it might work
with %d, but it is safer to use %lu.
PHOENIX INFOTECH CHIKODI

Condition Statements
Condition statements in C supports the usual logical conditions from
mathematics:

 Less than: a < b


 Less than or equal to: a <= b
 Greater than: a > b
 Greater than or equal to: a >= b
 Equal to a == b
 Not Equal to: a != b

You can use these conditions to perform different actions for different
decisions.

C has the following conditional statements:

1) Use if to specify a block of code to be executed, if a specified condition


is true
2) Use else to specify a block of code to be executed, if the same
condition is false
3) Use else if to specify a new condition to test, if the first condition is
false
4) Use switch to specify many alternative blocks of code to be executed

1. if Statement
Use the if statement to specify a block of C code to be executed if a
condition is true.

Syntax
if (condition) {
// block of code to be executed if the condition is true
}

Note that if is in lowercase letters. Uppercase letters (If or IF) will generate
an error.

In the example below, we test two values to find out if 20 is greater than 18.
If the condition is true, print some text:
PHOENIX INFOTECH CHIKODI

Example
if (20 > 18) {
printf("20 is greater than 18");
}

We can also test variables:

Example
int x = 20;
int y = 18;
if (x > y) {
printf("x is greater than y");
}

Example explained

In the example above we use two variables, x and y, to test whether x is


greater than y (using the > operator). As x is 20, and y is 18, and we know
that 20 is greater than 18, we print to the screen that "x is greater than y".

2. else Statement
Use the else statement to specify a block of code to be executed if the
condition is false.

Syntax
if (condition) {
// block of code to be executed if the condition is true
} else {
// block of code to be executed if the condition is false
}

Example
int time = 20;
if (time < 18) {
printf("Good day.");
} else {
printf("Good evening.");
}
// Outputs "Good evening."
PHOENIX INFOTECH CHIKODI

Example explained
In the example above, time (20) is greater than 18, so the condition is false.
Because of this, we move on to the else condition and print to the screen
"Good evening". If the time was less than 18, the program would print "Good
day".

3. else if Statement
Use the else if statement to specify a new condition if the first condition
is false.

Syntax
if (condition1) {
// block of code to be executed if condition1 is true
} else if (condition2) {
// block of code to be executed if the condition1 is false and
condition2 is true
} else {
// block of code to be executed if the condition1 is false and
condition2 is false
}

Example
int time = 22;
if (time < 10) {
printf("Good morning.");
} else if (time < 20) {
printf("Good day.");
} else {
printf("Good evening.");
}
// Outputs "Good evening."

Example explained

In the example above, time (22) is greater than 10, so the first
condition is false. The next condition, in the else if statement, is also false,
so we move on to the else condition since condition1 and condition2 is
both false - and print to the screen "Good evening".

However, if the time was 14, our program would print "Good day."
PHOENIX INFOTECH CHIKODI

Another Example
This example shows how you can use if..else to find out if a number is
positive or negative:

Example
int myNum = 10; // Is this a positive or negative number?

if (myNum > 0)
printf("The value is a positive number.");
else if (myNum < 0)
printf("The value is a negative number.");
else
printf("The value is 0.");

4. Switch Statement
Instead of writing many if..else statements, you can use
the switch statement.

The switch statement selects one of many code blocks to be executed:

Syntax
switch(expression) {
case x:
// code block
break;
case y:
// code block
break;
default:
// code block
}

This is how it works:

 The switch expression is evaluated once


 The value of the expression is compared with the values of each case
 If there is a match, the associated block of code is executed
 The break statement breaks out of the switch block and stops the
execution
 The default statement is optional, and specifies some code to run if
there is no case match
PHOENIX INFOTECH CHIKODI

The example below uses the weekday number to calculate the weekday
name:

Example
int day = 4;

switch (day) {
case 1:
printf("Monday");
break;
case 2:
printf("Tuesday");
break;
case 3:
printf("Wednesday");
break;
case 4:
printf("Thursday");
break;
case 5:
printf("Friday");
break;
case 6:
printf("Saturday");
break;
case 7:
printf("Sunday");
break;
}

// Outputs "Thursday" (day 4)

The break Keyword


When C reaches a break keyword, it breaks out of the switch block.

This will stop the execution of more code and case testing inside the block.

When a match is found, and the job is done, it's time for a break. There is no
need for more testing.

A break can save a lot of execution time because it "ignores" the execution of
all the rest of the code in the switch block.
PHOENIX INFOTECH CHIKODI

The default Keyword


The default keyword specifies some code to run if there is no case match:

Example
int day = 4;

switch (day) {
case 6:
printf("Today is Saturday");
break;
case 7:
printf("Today is Sunday");
break;
default:
printf("Looking forward to the Weekend");
}

// Outputs "Looking forward to the Weekend"


Note: The default keyword must be used as the last statement in the switch,
and it does not need a break.
PHOENIX INFOTECH CHIKODI

Loops
Loops can execute a block of code as long as a specified condition is reached.

Loops are handy because they save time, reduce errors, and they make code
more readable.

Types of loops

1. While loop
2. Do while loop
3. For loop
1. While Loop
The while loop loops through a block of code as long as a specified condition
is true:

Syntax
while (condition) {
// code block to be executed
}

In the example below, the code in the loop will run, over and over again, as
long as a variable (i) is less than 5:

Example
int i = 0;

while (i < 5) {
printf("%d\n", i);
i++;
}

Note: Do not forget to increase the variable used in the condition (i++),
otherwise the loop will never end!
PHOENIX INFOTECH CHIKODI

2. Do/While Loop
The do/while loop is a variant of the while loop. This loop will execute the code
block once, before checking if the condition is true, then it will repeat the
loop as long as the condition is true.

Syntax
do {
// code block to be executed
}
while (condition);

The example below uses a do/while loop. The loop will always be executed at
least once, even if the condition is false, because the code block is executed
before the condition is tested:

Example
int i = 0;

do {
printf("%d\n", i);
i++;
}
while (i < 5);

Do not forget to increase the variable used in the condition, otherwise the
loop will never end!
PHOENIX INFOTECH CHIKODI

3. For Loop
When you know exactly how many times you want to loop through a block of
code, use the for loop instead of a while loop:

Syntax
for (statement 1; statement 2; statement 3) {
// code block to be executed
}

Statement 1 is executed (one time) before the execution of the code block.

Statement 2 defines the condition for executing the code block.

Statement 3 is executed (every time) after the code block has been
executed.

The example below will print the numbers 0 to 4:

Example
int i;
for (i = 0; i < 5; i++) {
printf("%d\n", i);
}
Example explained
Statement 1 sets a variable before the loop starts (int i = 0).

Statement 2 defines the condition for the loop to run (i must be less than 5).
If the condition is true, the loop will start over again, if it is false, the loop
will end.

Statement 3 increases a value (i++) each time the code block in the loop has
been executed.

Another Example
This example will only print even values between 0 and 10:

Example
for (i = 0; i <= 10; i = i + 2) {
printf("%d\n", i);
}
PHOENIX INFOTECH CHIKODI

Break and Continue


1. Break
You have already seen the break statement used in an earlier chapter of this
tutorial. It was used to "jump out" of a switch statement.

The break statement can also be used to jump out of a loop.

This example jumps out of the loop when i is equal to 4:

Example
int i;

for (i = 0; i < 10; i++) {


if (i == 4) {
break;
}
printf("%d\n", i);
}

2. Continue
The continue statement breaks one iteration (in the loop), if a specified
condition occurs, and continues with the next iteration in the loop.

This example skips the value of 4:

Example
int i;

for (i = 0; i < 10; i++) {


if (i == 4) {
continue;
}
printf("%d\n", i);
}
PHOENIX INFOTECH CHIKODI

Break and Continue in While Loop


You can also use break and continue in while loops:

Break Example
int i = 0;

while (i < 10) {


if (i == 4) {
break;
}
printf("%d\n", i);
i++;
}

Continue Example
int i = 0;

while (i < 10) {


if (i == 4) {
i++;
continue;
}
printf("%d\n", i);
i++;
}
PHOENIX INFOTECH CHIKODI

C Arrays
Arrays are used to store multiple values in a single variable, instead of
declaring separate variables for each value.

To create an array, define the data type (like int) and specify the name of
the array followed by square brackets [].

To insert values to it, use a comma-separated list, inside curly braces:

int myNumbers[] = {25, 50, 75, 100};

We have now created a variable that holds an array of four integers.

Access the Elements of an Array


To access an array element, refer to its index number.

Array indexes start with 0: [0] is the first element. [1] is the second
element, etc.

This statement accesses the value of the first element [0] in myNumbers:

Example
int myNumbers[] = {25, 50, 75, 100};
printf("%d", myNumbers[0]);
// Outputs 25

Change an Array Element


To change the value of a specific element, refer to the index number:

Example
myNumbers[0] = 33;

Example
int myNumbers[] = {25, 50, 75, 100};
myNumbers[0] = 33;

printf("%d", myNumbers[0]);
// Now outputs 33 instead of 25
PHOENIX INFOTECH CHIKODI

Loop Through an Array


You can loop through the array elements with the for loop.

The following example outputs all elements in the myNumbers array:

Example
int myNumbers[] = {25, 50, 75, 100};
int i;

for (i = 0; i < 4; i++) {


printf("%d\n", myNumbers[i]);
}

Set Array Size


Another common way to create arrays, is to specify the size of the array, and
add elements later:

Example
// Declare an array of four integers:
int myNumbers[4];

// Add elements
myNumbers[0] = 25;
myNumbers[1] = 50;
myNumbers[2] = 75;
myNumbers[3] = 100;

Using this method, you should know the size of the array, in order for
the program to store enough memory.

You are not able to change the size of the array after creation.
PHOENIX INFOTECH CHIKODI

C Strings
Strings are used for storing text/characters.

For example, "Hello World" is a string of characters.

Unlike many other programming languages, C does not have a String


type to easily create string variables. Instead, you must use the char type
and create an array of characters to make a string in C:

char greetings[] = "Hello World!";

Note that you have to use double quotes ("").

To output the string, you can use the printf() function together with the
format specifier %s to tell C that we are now working with strings:

Example
char greetings[] = "Hello World!";
printf("%s", greetings);

Access Strings
Since strings are actually arrays in C, you can access a string by referring to
its index number inside square brackets [].

This example prints the first character (0) in greetings:

Example
char greetings[] = "Hello World!";
printf("%c", greetings[0]);

Note that we have to use the %c format specifier to print a single character.

Modify Strings
To change the value of a specific character in a string, refer to the index
number, and use single quotes:
PHOENIX INFOTECH CHIKODI

Example
char greetings[] = "Hello World!";
greetings[0] = 'J';
printf("%s", greetings);
// Outputs Jello World! instead of Hello World!

Another Way Of Creating Strings


In the examples above, we used a "string literal" to create a string variable.
This is the easiest way to create a string in C.

You should also note that you can create a string with a set of characters.
This example will produce the same result as the example in the beginning of
this page:

Example
char greetings[] = {'H', 'e', 'l', 'l', 'o', '
', 'W', 'o', 'r', 'l', 'd', '!', '\0'};
printf("%s", greetings);

Why do we include the \0 character at the end? This is known as the


"null terminating character", and must be included when creating strings
using this method. It tells C that this is the end of the string.

Differences
The difference between the two ways of creating strings, is that the first
method is easier to write, and you do not have to include the \0 character,
as C will do it for you.

You should note that the size of both arrays is the same: They both have 13
characters (space also counts as a character by the way), including
the \0 character:

Example
char greetings[] = {'H', 'e', 'l', 'l', 'o', '
', 'W', 'o', 'r', 'l', 'd', '!', '\0'};
char greetings2[] = "Hello World!";

printf("%lu\n", sizeof(greetings)); // Outputs 13


printf("%lu\n", sizeof(greetings2)); // Outputs 13
PHOENIX INFOTECH CHIKODI

C Memory Address
Memory Address

When a variable is created in C, a memory address is assigned to the


variable.

The memory address is the location of where the variable is stored on the
computer.

When we assign a value to the variable, it is stored in this memory address.

To access it, use the reference operator (&), and the result will represent
where the variable is stored:

Example
int myAge = 43;
printf("%p", &myAge); // Outputs 0x7ffe5367e044

Note: The memory address is in hexadecimal form (0x..). You probably


won't get the same result in your program.

You should also note that &myAge is often called a "pointer". A pointer
basically stores the memory address of a variable as its value. To print
pointer values, we use the %p format specifier.

You will learn much more about pointers in the next chapter.

Why is it useful to know the memory address?


Pointers are important in C, because they give you the ability to manipulate
the data in the computer's memory - this can reduce the code and
improve the performance.

Pointers are one of the things that make C stand out from other
programming languages, like Python and Java.

C Pointers
Creating Pointers
You learned from the previous chapter, that we can get the memory
address of a variable with the reference operator &:
PHOENIX INFOTECH CHIKODI

Example
int myAge = 43; // an int variable

printf("%d", myAge); // Outputs the value of myAge (43)


printf("%p", &myAge); // Outputs the memory address of myAge
(0x7ffe5367e044)

In the example above, &myAge is also known as a pointer.


A pointer is a variable that stores the memory address of another variable
as its value.
A pointer variable points to a data type (like int) of the same type, and
is created with the * operator. The address of the variable you are working
with is assigned to the pointer:
Example
int myAge = 43; // An int variable
int* ptr = &myAge; // A pointer variable, with the name ptr, that
stores the address of myAge

// Output the value of myAge (43)


printf("%d\n", myAge);

// Output the memory address of myAge (0x7ffe5367e044)


printf("%p\n", &myAge);

// Output the memory address of myAge with the pointer (0x7ffe5367e044)


printf("%p\n", ptr);

Example explained
Create a pointer variable with the name ptr, that points to an int variable
(myAge). Note that the type of the pointer has to match the type of the
variable you're working with.
Use the & operator to store the memory address of the myAge variable, and
assign it to the pointer.
Now, ptr holds the value of myAge's memory address.
Dereference
In the example above, we used the pointer variable to get the memory
address of a variable (used together with the & reference operator).
However, you can also get the value of the variable the pointer points to, by
using the * operator (the dereference operator):
Example
int myAge = 43; // Variable declaration
int* ptr = &myAge; // Pointer declaration

// Reference: Output the memory address of myAge with the pointer


(0x7ffe5367e044)
PHOENIX INFOTECH CHIKODI

printf("%p\n", ptr);

// Dereference: Output the value of myAge with the pointer (43)


printf("%d\n", *ptr);

Note that the * sign can be confusing here, as it does two different things in
our code:
 When used in declaration (int* ptr), it creates a pointer variable.
 When not used in declaration, it act as a dereference operator.

Why Should I Learn About Pointers?


Pointers are one of the things that make C stand out from other
programming languages, like Python and Java.
This chapter was just a short introduction to Pointers. They are important in
C, because they give you the ability to manipulate the data in the computer's
memory - this can reduce the code and improve the performance. However,
pointers must be handled with care, since it is possible to damage data
stored in other memory addresses.

Good To Know: There are three ways to declare pointer variables, but the
first way is mostly used:
int* myNum; // Most used
int *myNum;
int * myNum;
PHOENIX INFOTECH CHIKODI

C Functions
A function is a block of code which only runs when it is called.
You can pass data, known as parameters, into a function.
Functions are used to perform certain actions, and they are important for
reusing code: Define the code once, and use it many times.
Predefined Functions
So it turns out you already know what a function is. You have been using it
the whole time while studying this tutorial!
For example, main() is a function, which is used to execute code,
and printf() is a function; used to output/print text to the screen:
Example
int main() {
printf("Hello World!");
return 0;
}
Create a Function
To create (often referred to as declare) your own function, specify the name
of the function, followed by parentheses () and curly brackets {}:
Syntax
void myFunction() {
// code to be executed
}
Example Explained
 myFunction() is the name of the function
 void means that the function does not have a return value. You will
learn more about return values later in the next chapter
 Inside the function (the body), add code that defines what the function
should do
Call a Function
Declared functions are not executed immediately. They are "saved for later
use", and will be executed when they are called.
To call a function, write the function's name followed by two
parentheses () and a semicolon ;
In the following example, myFunction() is used to print a text (the action),
when it is called:
Example
Inside main, call myFunction():
// Create a function
void myFunction() {
printf("I just got executed!");
}

int main() {
PHOENIX INFOTECH CHIKODI

myFunction(); // call the function


return 0;
}

// Outputs "I just got executed!"


A function can be called multiple times:
Example
void myFunction() {
printf("I just got executed!");
}
int main() {
myFunction();
myFunction();
myFunction();
return 0;
}
// I just got executed!
// I just got executed!
// I just got executed!

C Function Parameters
Parameters and Arguments
Information can be passed to functions as a parameter. Parameters act as
variables inside the function.
Parameters are specified after the function name, inside the parentheses.
You can add as many parameters as you want, just separate them with a
comma:
Syntax
returnType functionName(parameter1, parameter2, parameter3) {
// code to be executed
}

The following function that takes a string of characters with name as parameter.
When the function is called, we pass along a name, which is used inside the
function to print "Hello" and the name of each person.
Example
void myFunction(char name[]) {
printf("Hello %s\n", name);
}

int main() {
myFunction("Liam");
myFunction("Jenny");
myFunction("Anja");
return 0;
}
PHOENIX INFOTECH CHIKODI

// Hello Liam
// Hello Jenny
// Hello Anja

When a parameter is passed to the function, it is called an argument. So,


from the example above: name is a parameter,
while Liam, Jenny and Anja are arguments.
Multiple Parameters
Inside the function, you can add as many parameters as you want:
Example
void myFunction(char name[], int age) {
printf("Hello %s. You are %d years old.\n", name, age);
}

int main() {
myFunction("Liam", 3);
myFunction("Jenny", 14);
myFunction("Anja", 30);
return 0;
}

// Hello Liam. You are 3 years old.


// Hello Jenny. You are 14 years old.
// Hello Anja. You are 30 years old.

Note that when you are working with multiple parameters, the function call
must have the same number of arguments as there are parameters, and the
arguments must be passed in the same order.
Return Values
The void keyword, used in the previous examples, indicates that the function
should not return a value. If you want the function to return a value, you can
use a data type (such as int or float, etc.) instead of void, and use
the return keyword inside the function:
Example
int myFunction(int x) {
return 5 + x;
}

int main() {
printf("Result is: %d", myFunction(3));

return 0;
}
// Outputs 8 (5 + 3)
PHOENIX INFOTECH CHIKODI

This example returns the sum of a function with two parameters:

Example
int myFunction(int x, int y) {
return x + y;
}

int main() {
printf("Result is: %d", myFunction(5, 3));

return 0;
}

// Outputs 8 (5 + 3)

You can also store the result in a variable:


Example
int myFunction(int x, int y) {
return x + y;
}

int main() {
int result = myFunction(5, 3);
printf("Result is = %d", result);

return 0;
}
// Outputs 8 (5 + 3)

Function Declaration and Definition


You just learned from the previous chapters that you can create and call a
function in the following way:
Example
// Create a function
void myFunction() {
printf("I just got executed!");
}

int main() {
myFunction(); // call the function
return 0;
}

A function consist of two parts:


 Declaration: the function's name, return type, and parameters (if
any)
 Definition: the body of the function (code to be executed)
PHOENIX INFOTECH CHIKODI

void myFunction() { // declaration


// the body of the function (definition)
}

For code optimization, it is recommended to separate the declaration and the


definition of the function.
You will often see C programs that have function declaration above main(),
and function definition below main(). This will make the code better
organized and easier to read:
Example
// Function declaration
void myFunction();

// The main method


int main() {
myFunction(); // call the function
return 0;
}

// Function definition
void myFunction() {
printf("I just got executed!");
}

Another Example
If we use the example from the previous chapter regarding function
parameters and return values:
Example
int myFunction(int x, int y) {
return x + y;
}

int main() {
int result = myFunction(5, 3);
printf("Result is = %d", result);

return 0;
}
// Outputs 8 (5 + 3)

It is considered good practice to write it like this instead:


Example
// Function declaration
int myFunction(int, int);

// The main method


PHOENIX INFOTECH CHIKODI

int main() {
int result = myFunction(5, 3); // call the function
printf("Result is = %d", result);

return 0;
}

// Function definition
int myFunction(int x, int y) {
return x + y;
}

Recursion
Recursion is the technique of making a function call itself. This technique
provides a way to break complicated problems down into simple problems
which are easier to solve.
Recursion may be a bit difficult to understand. The best way to figure out
how it works is to experiment with it.

Recursion Example
Adding two numbers together is easy to do, but adding a range of numbers is
more complicated. In the following example, recursion is used to add a range
of numbers together by breaking it down into the simple task of adding two
numbers:
Example
int sum(int k);

int main() {
int result = sum(10);
printf("%d", result);
return 0;
}

int sum(int k) {
if (k > 0) {
return k + sum(k - 1);
} else {
return 0;
}
}
PHOENIX INFOTECH CHIKODI

Example Explained
When the sum() function is called, it adds parameter k to the sum of all
numbers smaller than k and returns the result. When k becomes 0, the
function just returns 0. When running, the program follows these steps:
10 + sum(9)
10 + ( 9 + sum(8) )
10 + ( 9 + ( 8 + sum(7) ) )
...
10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 + sum(0)
10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 + 0
Since the function does not call itself when k is 0, the program stops there
and returns the result.
The developer should be very careful with recursion as it can be quite easy to
slip into writing a function which never terminates, or one that uses excess
amounts of memory or processor power. However, when written correctly
recursion can be a very efficient and mathematically-elegant approach to
programming.
PHOENIX INFOTECH CHIKODI

C Math Functions
Math Functions
There is also a list of math functions available, that allows you to
perform mathematical tasks on numbers.
To use them, you must include the math.h header file in your
program:
#include <math.h>
Square Root
To find the square root of a number, use the sqrt() function:
Example
printf("%f", sqrt(16));

Round a Number
The ceil() function rounds a number upwards to its nearest integer,
and the floor() method rounds a number downwards to its nearest
integer, and returns the result:
Example
printf("%f", ceil(1.4));
printf("%f", floor(1.4));

Power
The pow() function returns the value of x to the power of y (xy):
Example
printf("%f", pow(4, 3));

Other Math Functions


A list of other popular math functions (from the <math.h> library) can
be found in the table below:
Function Description

abs(x) Returns the absolute value of x

acos(x) Returns the arccosine of x

asin(x) Returns the arcsine of x

atan(x) Returns the arctangent of x

cbrt(x) Returns the cube root of x

cos(x) Returns the cosine of x


PHOENIX INFOTECH CHIKODI

exp(x) Returns the value of Ex

sin(x) Returns the sine of x (x is in radians)

tan(x) Returns the tangent of an angle


PHOENIX INFOTECH CHIKODI

C Structures (structs)
Structures (also called structs) are a way to group several related variables
into one place. Each variable in the structure is known as a member of the
structure.
Unlike an array, a structure can contain many different data types (int, float,
char, etc.).

Create a Structure
You can create a structure by using the struct keyword and declare each of
its members inside curly braces:
struct MyStructure { // Structure declaration
int myNum; // Member (int variable)
char myLetter; // Member (char variable)
}; // End the structure with a semicolon
To access the structure, you must create a variable of it.
Use the struct keyword inside the main() method, followed by the name of the
structure and then the name of the structure variable:
Create a struct variable with the name "s1":
struct myStructure {
int myNum;
char myLetter;
};

int main() {
struct myStructure s1;
return 0;
}

Access Structure Members


To access members of a structure, use the dot syntax (.):
Example
// Create a structure called myStructure
struct myStructure {
int myNum;
char myLetter;
};

int main() {
// Create a structure variable of myStructure called s1
struct myStructure s1;

// Assign values to members of s1


s1.myNum = 13;
s1.myLetter = 'B';
PHOENIX INFOTECH CHIKODI

// Print values
printf("My number: %d\n", s1.myNum);
printf("My letter: %c\n", s1.myLetter);

return 0;
}

Now you can easily create multiple structure variables with different values,
using just one structure:
Example
// Create different struct variables
struct myStructure s1;
struct myStructure s2;

// Assign values to different struct variables


s1.myNum = 13;
s1.myLetter = 'B';

s2.myNum = 20;
s2.myLetter = 'C';

What About Strings in Structures?


Remember that strings in C are actually an array of characters, and
unfortunately, you can't assign a value to an array like this:
Example
struct myStructure {
int myNum;
char myLetter;
char myString[30]; // String
};

int main() {
struct myStructure s1;

// Trying to assign a value to the string


s1.myString = "Some text";

// Trying to print the value


printf("My string: %s", s1.myString);

return 0;
}
An error will occur:
prog.c:12:15: error: assignment to expression with array type
However, there is a solution for this! You can use the strcpy() function and
assign the value to s1.myString, like this:
PHOENIX INFOTECH CHIKODI

Example
struct myStructure {
int myNum;
char myLetter;
char myString[30]; // String
};

int main() {
struct myStructure s1;

// Assign a value to the string using the strcpy function


strcpy(s1.myString, "Some text");

// Print the value


printf("My string: %s", s1.myString);

return 0;
}
Result:
My string: Some text

Simpler Syntax
You can also assign values to members of a structure variable at declaration
time, in a single line.
Just insert the values in a comma-separated list inside curly braces {}. Note
that you don't have to use the strcpy() function for string values with this
technique:
Example
// Create a structure
struct myStructure {
int myNum;
char myLetter;
char myString[30];
};

int main() {
// Create a structure variable and assign values to it
struct myStructure s1 = {13, 'B', "Some text"};

// Print values
printf("%d %c %s", s1.myNum, s1.myLetter, s1.myString);

return 0;
}
Note: The order of the inserted values must match the order of the variable
types declared in the structure (13 for int, 'B' for char, etc).
PHOENIX INFOTECH CHIKODI

Copy Structures
You can also assign one structure to another.
In the following example, the values of s1 are copied to s2:
Example
struct myStructure s1 = {13, 'B', "Some text"};
struct myStructure s2;

s2 = s1;

Modify Values
If you want to change/modify a value, you can use the dot syntax (.).
And to modify a string value, the strcpy() function is useful again:
Example
struct myStructure {
int myNum;
char myLetter;
char myString[30];
};

int main() {
// Create a structure variable and assign values to it
struct myStructure s1 = {13, 'B', "Some text"};

// Modify values
s1.myNum = 30;
s1.myLetter = 'C';
strcpy(s1.myString, "Something else");

// Print values
printf("%d %c %s", s1.myNum, s1.myLetter, s1.myString);

return 0;
}

Modifying values are especially useful when you copy structure values:
Example
// Create a structure variable and assign values to it
struct myStructure s1 = {13, 'B', "Some text"};

// Create another structure variable


struct myStructure s2;

// Copy s1 values to s2
s2 = s1;
PHOENIX INFOTECH CHIKODI

// Change s2 values
s2.myNum = 30;
s2.myLetter = 'C';
strcpy(s2.myString, "Something else");

// Print values
printf("%d %c %s\n", s1.myNum, s1.myLetter, s1.myString);
printf("%d %c %s\n", s2.myNum, s2.myLetter, s2.myString);

Ok, so, how are structures useful?


Imagine you have to write a program to store different information about
Cars, such as brand, model, and year. What's great about structures is that
you can create a single "Car template" and use it for every cars you make.
See below for a real life example.

Real Life Example


Use a structure to store different information about Cars:
Example
struct Car {
char brand[50];
char model[50];
int year;
};

int main() {
struct Car car1 = {"BMW", "X5", 1999};
struct Car car2 = {"Ford", "Mustang", 1969};
struct Car car3 = {"Toyota", "Corolla", 2011};

printf("%s %s %d\n", car1.brand, car1.model, car1.year);


printf("%s %s %d\n", car2.brand, car2.model, car2.year);
printf("%s %s %d\n", car3.brand, car3.model, car3.year);

return 0;
}

Unions
Union is a user-defined data type in C, which stores a collection of different kinds of
data, just like a structure. However, with unions, you can only store information in
one field at once. This tutorial guides you on how to use Union in C
ProgrammingUnion is a user-defined data type in C, which stores a collection of
different kinds of data, just like a structure. However, with unions, you can only store
information in one field at once. This tutorial guides you on how to use Union in C
Programming
PHOENIX INFOTECH CHIKODI

 Union is like struct, except it uses less memory.


 The keyword union is used to declare the union in C.
 Variables inside the union are called members of the union.

How define a unions in c


Syntax
union unionName
{
//member definitions
};
Examples
#include<stdio.h>
#include<string.h>

union Courses
{
char WebSite[50];
char Subject[50];
int Price;
};

void main( )
{
union Courses C;

strcpy( C.WebSite, "w3schools.in");


printf( "WebSite : %s\n", C.WebSite);

strcpy( C.Subject, "The C Programming Language");


printf( "Book Author : %s\n", C.Subject);

C.Price = 0;
printf( "Book Price : %d\n", C.Price);
}
PHOENIX INFOTECH CHIKODI

File Handling
C files I/O functions handle data on a secondary storage device, such as a hard disk
Five significant operations can be performed on files:

C File Operation

 Creation of a new file.


 Opening an existing file.
 Reading data from a file.
 Writing data in a file.
 Closing a file

Steps for Processing a file

 Declare a file pointer variable.


 Open a file using fopen() function.
 Process the file using the suitable function.
 Close the file using fclose() function.

To handle files in C, file input/output functions available in the stdio library are:

How to create a File


C fopen is a C library function used to open an existing file or create a new file. This tutorial
guides you on how to use the fopen() function in the C program.

Syntax
FILE *fopen( const char * filePath, const char * mode );

Parameters
 filePath: The first argument is a pointer to a string containing the name of the
file to be opened.
 mode: The second argument is an access mode.

Example
#include<stdio.h>

int main()
{
FILE *fp;
fp = fopen("fileName.txt","w");
return 0;
}
PHOENIX INFOTECH CHIKODI

C fprintf() function passes arguments according to the specified format to the file indicated by the
stream. This function is implemented in file-related programs for writing formatted data in any file.
This tutorial guides you on how to use the fprintf() function in the C program

Syntax
int fprintf(FILE *stream, const char *format, ...)

Example

int main (void)


{
FILE *fileName;
fileName = fopen("anything.txt","r");
fprintf(fileName, "%s %s %d", "Welcome", "to", 2018);
fclose(fileName);
return(0);
}

You might also like