Module 4
Module 4
Module 4
4.1 Array
An array is a fixed-size sequenced collection of elements of the same data type. It is simply a
grouping of like-type data. An array can be used to represent a list of numbers, or a list of names.
An array is a collective name given to a group of homogeneous elements (same data type). These
similar quantities could be percentage marks of 100 students, or salaries of 300 employees or ages
of 25 students.
Declaration of an Array
Arrays must be declared before they can be used in the program.
Standard array declaration is as
type variable_name [size];
The type specifies the type of the elements that will be contained in the array, such as int, float or
char and the size indicates the maximum number of elements that can be stored inside the array. In
C Language, an array starts at position 0.
1. C Programming Arrays is the Collection of Elements
2. C Programming Arrays is collection of the Elements of the same data type.
3. All Elements are stored in the Contiguous memory
4. All elements in the array are accessed using the subscript variable (index).
Pictorial representation of C Programming Arrays
eg: int Age[5];
Age[0]
Age[1]
Age[2]
Age[3]
Age[4]
char name[10];
Here we declare the name as a character array (string) variable that can hold a maximum of 10
characters. Suppose we read the following string constant into the string variable name.
“WELL DONE”
Array will be like this..
‘W’
‘E’
‘L’
‘L’
‘’
‘D’
‘O’
‘N’
‘E’
‘\0’
When compiler sees the character string, it terminates with an additional null character, thus the
element name[10] holds the null character ‘\0’ . When declaring character arrays, we must allow
one extra element space for the null terminator.
What is Contiguous Memory?
1. When Big Block of memory is reserved or allocated then that memory block is called as
Contiguous Memory Block.
2. Alternate meaning of Contiguous Memory is continuous memory.
Array Terminologies:
Type: Refers to data type. It decides which type of element is stored in the array. It is also instructing
the compiler to reserve memory according to the data type.
Base: The address of the first element is a base address. The array name itself stores address of the
first element.
Index: The array name is used to refer to the array element. For example num[x], num is array and
x is index. The value of x begins from 0.The index value is always an integer value.
Range: Value of index of an array varies from lower bound to upper bound. For example in
num[100] the range of index is 0 to 99.
Characteristics of an array:
1. The declaration int a[5] is nothing but creation of five variables of integer types in memory
instead of declaring five variables for five values.
2. All the elements of an array share the same name and they are distinguished from one another
with the help of the element number.
3. The element number in an array plays a major role for calling each element.
4. Any particular element of an array can be modified separately without disturbing the other
elements.
5. Any element of an array a[ ] can be assigned or equated to another ordinary variable or array
variable of its type.
6. Array elements are stored in contiguous memory locations.
Types of Array
1. Single Dimensional Array / One Dimensional Array
2. Multi-Dimensional Array
Single / One Dimensional Array:
• Single or One Dimensional array is used to represent and store data in a linear form.
• Array having only one subscript variable is called One-Dimensional array.
• It is also called as Single Dimensional Array or Linear Array.
Single Dimensional Array Declaration and initialization:
int iarr[3];
char carr[20];
float farr[3];
Initializing 1-D Array is called as compiler time initialization if and only if we assign certain set of
values to array element before executing program. i.e. at compilation time.
Ways of Array Initializing 1-D Array:
In the above example we have specified the size of array as 5 directly in the initialization statement.
Compiler will assign the set of values to particular element of the array.
Explanation:
1. Compiler counts the number of elements written inside pair of braces and determines the size
of an array.
2. After counting the number of elements inside the braces, the size of array is considered as 5
during complete execution.
3. This type of Initialization Scheme is also called as “Compile Time Initialization”.
Example Program
#include <stdio.h>
void main()
int i;
for (i=0;i<5;i++)
getch();
Output:
Accessing Array
1. We all know that array elements are randomly accessed using the subscript variable.
2. Array can be accessed using array-name and subscript variable written inside pair of square
brackets [ ]. Consider the below example of an array
20 30 10 40 70
a [0] = 20; a[1] = 30; a[2] = 10; a[3] = 40; a[4] = 70;
void main()
int a[5];
clrscr();
printf(“Enter a number\n”);
scanf(“%d”,&a[0]);
}
We can read number of elements in single statements by using for loop.
void main()
int i,a[5];
clrscr();
scanf(“%d”,&a[i]);
}
{
scanf("%d", &arr[i]);
}
//Read the location
printf("\nLocation of the element to be deleted :");
scanf("%d", &loc);
/* loop for the deletion */
while (loc < num)
{
arr[loc - 1] = arr[loc];
loc++;
//Print Array
for (i = 0; i < num; i++)
printf("\n %d", arr[i]);
getch();
}
Output:
Enter no of elements: 5
Enter 5 elements: 3 4 1 7 8
Location of the element to be deleted: 3
3 4 7 8
scanf("%d", &arr[i]);
}
scanf("%d", &location);
num++;
arr[location - 1] = element;
//Print out the result of insertion
for (i = 0; i < num; i++)
printf("n %d", arr[i]);
return (0);
}
Output:
Enter no of elements: 5
12345
Enter the element to be inserted: 6
printf("\nEnter no of elements:");
scanf("%d", &num);
printf("\nEnter the values :");
for (i = 0; i < num; i++)
scanf("%d", &a[i]);
}
else
getch();
Output:
Enter no of elements: 5
11 22 33 44 55
Enter the elements to be searched: 44
Number found at the location = 4
C program to merge two arrays in C Programming
#include<stdio.h>
int main()
scanf("%d", &n1);
for (i = 0; i < n1; i++)
scanf("%d", &arr1[i]);
scanf("%d", &n2);
k = 0;
// Merging starts
while (i < n1 && j < n2)
{
res[k] = arr1[i];
i++;
k++;
else
{
res[k] = arr2[j];
k++;
j++;
}
/*Some elements in array 'arr1' are still remaining where as the array 'arr2' is exhausted*/
res[k] = arr1[i];
i++;
k++;
}
/*Some elements in array 'arr2' are still remaining where as the array 'arr1' is exhausted */
while (j < n2)
res[k] = arr2[j];
k++;
j++;
Output
1. Array having more than one subscript variable is called Multi-Dimensional array.
Example:
char name[50][20];
Initialization:
int a[3][3] = { {1, 2, 3}, { 4, 5, 6},{ 7,8, 9} };
Here
a[0][0]=1; a[0][1]=2; a[0][2]=3;
printf("%d",a[i][j]);
}
int i, j, a[3][3];
for (i = 0; i < 3; i++)
printf("%d\t", a[i][j]);
printf("\n");
}
getch();
STRINGS
A string is a sequence of character enclosed with in double quotes (“ ”) but ends with \0. The
compiler puts \0 at the end of string to specify the end of the string. To get a value of string variable
we can use the two different types of formats.
C library supports a large number of string handling functions. Those functions are stored under the
header file string.h in the program.
I. strlen() function
strlen() is used to return the length of the string , that means counts the number of
Syntax
integer variable = strlen (string variable);
Example:
void main()
{
char str[20];
int strlength;
clrscr();
printf(“Enter String:”);
gets(str);
strlength=strlen(str);
printf(“Given String Length Is: %d", strlength);
getch();
}
Output:
Enter String
Welcome
Syntax
Example:
void main()
{
char str1[20],str2[20];
clrscr();
}
Output:
GoodMorning
strcmp() function is used to compare two strings. strcmp() function does a case sensitive comparison
between two strings. The two strings are compared character by character until there is a mismatch
or end of one of the strings is reached (whichever occurs first). If the two strings are identical,
strcmp( ) returns a value zero. If they’re not, it returns the numeric difference between the ASCII
values of the first non-matching pairs of characters.
Syntax
strcmp(StringVariable1, StringVariable2);
Example:
#include<stdio.h>
#include<conio.h>
void main()
{
char str1[20], str2[20];
int res;
clrscr();
printf(“Enter First String:”);
scanf(“%s”,str1);
printf(“Enter Second String:”);
scanf(“%s”,str2);
res = strcmp(str1,str2);
if(res==0)
printf(“strings are equal”);
else
printf(“strings are not equal”);
getch();
}
Output:
Enter First String
Good
Enter Second String
Good
Note:
strcmpi() function
strcmpi() function is used to compare two strings. strcmpi() function is not case
sensitive.
IV. strcpy() function:
strcpy() function is used to copy one string to another. strcpy() function copy the contents of second
string to first string.
Syntax
strcpy(StringVariable1, StringVariable2);
Example:
#include<stdio.h>
#include<conio.h>
void main()
{
char str1[20], str2[20];
int res;
clrscr();
printf(“Enter First String:\n”);
scanf(“%s”,str1);
printf(“Enter Second String:\n”);
scanf(“%s”,str2);
strcpy(str1,str2)
printf(“First String is:%s\n”,str1);
printf(“Second String is:%s”,str2);
getch();
}
Output:
Enter First String:
Hello
Enter Second String:
welcome
First String is: welcome
Second String is: welcom
V. strlwr () function:
This function converts all characters in a given string from uppercase to lowercase letter.
Syntax
strlwr(StringVariable);
Example:
#include<stdio.h>
#include<conio.h>
void main()
{
char str[20];
clrscr();
printf(“Enter String:”);
gets(str);
printf(“Lowercase String : %s”, strlwr(str));
getch();
}
Output:
Enter String
WELCOME
Lowercase String : welcome
Example:
#include<stdio.h>
#include<conio.h>
void main()
{
char str[20];
clrscr();
printf(“Enter String:”);
gets(str);
printf(“Reverse String : %s”, strrev(str));
getch();
}
Output:
Enter String
WELCOME
Reverse String : EMOCLEW
Note:
strupr() function:
Syntax
strupr(Stringvariable);
Pointers
The pointer in C language is a variable which stores the address of another variable. An
integer variable holds (or you can say stores) an integer value, however an integer pointer holds the
Consider the following example to define a pointer which stores the address of an integer.
int n = 10;
Declaring a pointer
The pointer in c language can be declared using * (asterisk symbol). It is also known as
indirection pointer used to dereference a pointer.
By the help of * (indirection operator), we can print the value of pointer variable p
Eg P33:-#include<stdio.h>
int main()
Output
Value of p variable is 50
Eg P34:-Write a program to display the value of variable and its location using pointer
void main()
clrscr();
p=&v;
Output
Address of v=4060
Value of v =10
Address of p=4062
Eg P35:-Write a program to print an element and its address using pointer.
void main ()
int i,*k;
clrscr ();
k=&i;
printf (" \nAddress of i is %u", k) ;
printf (" \nValue of i is %d", *k) ;
}
Output
Enter a number: 15
Address of I is 4065
Value of I is 15
Eg P36:- write a program to add two numbers through variables and their pointers.
void main ( )
int a,b,c,d,*ap,*bp;
clrscr();
ap=&a;
bp=&b;
c=a+b;
d=*ap+*bp;
OUTPUT:
Advantage of pointer
1) Pointer reduces the code and improves the performance; it is used to retrieving strings, trees, etc.
3) It makes you able to access any memory location in the computer's memory.
Usage of pointer
In C language, we can dynamically allocate memory using malloc() and calloc() functions where the
pointer is used.
NULL Pointer
A pointer that is not assigned any value but NULL is known as the NULL pointer. If
you
don't have any address to be specified in the pointer at the time of declaration, you can assign
NULL
int *p=NULL;
#include<stdio.h
> void main()
{
int a=10,b=20,*p1=&a,*p2=&b;
printf("Before swap: *p1=%d
*p2=%d",*p1,*p2); *p1=*p1+*p2;
*p2=*p1-
*p2;
*p1=*p1-
*p2;
Output
explicit type conversion. This is because being void the compiler cannot determine the size of
the
object that the pointer points to. Though void pointer declaration is possible, void
variable's
A void pointer can point any type of variable with proper type casting. The size of a
void
pointer displayed will be two. When a pointer is declared as void two bytes are allocated to it. Later
using type casting, a number of bytes can be allocated or deallocated. Void variables cannot be
declared because memory is not allocated to them and there is no place to store the address.
WILD POINTERS
Pointers are used to store memory addresses. An improper use of pointer creates many errors
in the program. Hence, pointers should be handled cautiously. When a pointer points to an
unallocated memory location or data value whose memory is de-allocated, such a pointer is called a
wild pointer. That is uninitialized pointers are known as wild pointers. The wild pointer generates
garbage memory location and dependent reference. The pointer becomes wild due to the following
reasons:
int k,*x;
clrscr () ;
for(k=0;k<=3;k++)
printf("%u",x[k]);
OUTPUT:
7272 24 330 30 55 9 2 7 7 53
CONSTANT POINTERS
In the above example, it is not possible to modify the address of the pointer str.
Features of pointers
➢ Pointers help u8s to build complex data structures like linked list, stack, queues.
ARITHMETIC OPERATIONS WITH POINTERS
Arithmetic operations on pointer variables are also possible. Increment, decrement, prefix
and postfix operations can be performed with the pointers, The effects of these operations are shown
in Table.
address incremented by two. i.e. 4046 is the original address and on increment its value will be 4048
Similarly, characters, floating point numbers and long integers require 1, 4 and 4 bytes,
respectively.
Eg:-P38. Write a program to show the effect of increment and decrement operators used as
void main ()
int i, *ii;
ii=&i;
clrscr();
}
OUTPUT:
Enter Value of i= 8
Address of i = 4060
Address of i = 4062
Address of i = 4062
Address of i = 4062
Address of i = 4062
Address of i = 4060
void main()
int a=25,b=10,*Pi*j;
p=&a; j=&b;
clrscr();
Output
Addition a+ b = 35
Subtraction a-b = 15
Product a*b = 250
Division a/b = 2
a mod b = 5
Basics of a Functions
A function is a block of code that performs a specific task.
In C, we can divide a large program into the basic building blocks known as function. The function
contains the set of programming statements enclosed by {}. A function can be called multiple times
to provide reusability and modularity to the C program. In other words, we can say that the collection
of functions creates a program. The function is also known as procedure or subroutine in other
programming languages.
Advantage of functions in C
• By using functions, we can avoid rewriting same logic/code again and again in a program.
• We can call C functions any number of times in a program and from any place in a program.
• We can track a large C program easily when it is divided into multiple functions
• Reusability is the main achievement of C functions.
• However, Function calling is always an overhead in a C program.
Function Aspects
Function declaration
All functions in a c program must be declared, before they are invoked. A function declaration (also
known as function prototype) consists of four parts.
• Function type (return type).
• Function name.
• Parameter list.
• Terminating semicolon.
The general format of function declaration is:
• Function name.
• Function type.
• List of parameters
• Local variable declaration.
• Function statements; and
• A return statement.
The general format of function definition is:
Function call
A function can be called by simply using the function name followed by a list of parameters (or
arguments), if any, enclosed in parentheses and separated by commas. If the function call does not
require any arguments, an empty pair of parentheses must follow the name of the function. The
function call may be a part of a simple expression (such as an assignment statement), or it may be
one of the operands within a more complex expression. The arguments appearing in the function
call are referred to as actual parameters.
Functions
1.Library functions:
Library functions are built-in functions in Library functions are the functions which are
declared in the C header files (stdio.h) such as scanf(), printf(), gets(), puts(), ceil(), floor() etc.
2. User-defined functions:
User defined functions are the functions which are created by the C programmer, so that he/she can
use it many times. It reduces the complexity of a big program and optimizes the code.
Return Value
C function may or may not return a value from the function. If you don't have to return any value
from the function, use void for the return type.
Let's see a simple example of C function that doesn't return any value from the
function.
void hello()
{
printf("hello c");
}
If you want to return any value from the function, you need to use any data type such as int,
long, char, etc. The return type depends on the value to be returned from the function.
Let's see a simple example of C function that returns int value from the function.
int get()
{
return 10;
}
In the above example, we have to return 10 as a value, so the return type is int. If you want to return
floating-point value (e.g., 10.2, 3.1, 54.5, etc), you need to use float as the return type of the method.
float get()
{
return 10.2;
}
Now, you need to call the function, to get the value of the function.
A function may or may not accept any argument. It may or may not return any value. Based on these
facts, there are four different aspects of function calls.
Example
#include<stdio.h>
void printName();
void main ()
{
printf("Hello ");
printName();
}
void printName()
{
printf(" C programming");
}
Output
Hello C programming
Example
#include<stdio.h>
void sum();
void main()
{
printf("\nGoing to calculate the sum of two numbers:");
sum();
}
void sum()
{
int a,b;
printf("\nEnter two numbers");
scanf("%d %d",&a,&b);
printf("The sum is %d",a+b);
}
Output
Going to calculate the sum of two numbers:
Enter two numbers
10
20
The sum is 30
Example for Function without argument and with return value
Example
#include<stdio.h>
#include<conio.h>
int sum();
void main()
{
int result;
printf("\nGoing to calculate the sum of two numbers:");
result = sum();
printf("%d",result);
getch();
}
int sum()
{
int a,b;
printf("\nEnter two numbers");
scanf("%d%d",&a,&b);
return a+b;
}
Output
Going to calculate the sum of two numbers:
Enter two numbers
10
20
The sum is 30
Example
program to calculate the area of the square
#include<stdio.h>
float square();
void main()
{
printf("Going to calculate the area of the square\n");
float area = square();
printf("The area of the square: %f\n",area);
getch();
}
float square()
{
float side;
printf("Enter the length of the side in meters: ");
scanf("%f”,&side);
return side * side;
}
Output
Going to calculate the area of the square
Enter the length of the side in meters: 10
The area of the square: 100.000000
Example for Function with argument and without return value
Example
#include<stdio.h>
void sum(int, int);
void main()
{
int a,b,result;
printf("\nGoing to calculate the sum of two numbers:");
printf("\nEnter two numbers:");
scanf("%d %d",&a,&b);
sum(a,b);
}
void sum(int a, int b)
{
printf("\nThe sum is %d",a+b);
}
Output
Going to calculate the sum of two numbers:
Enter two numbers
10
20
The sum is 30
Example
float avg;
avg=(a+b+c+d+e)/5);
printf(“The average of five numbers=%f ”,avg);
}
Output
Going to calculate the average of five numbers
Enter five numbers
10
20
30
40
50
The average of five numbers= 30.000000
➢ Call by value
➢ Call by reference
Call by Value
In this type, the value of actual arguments is passed to the formal arguments and operation is done
on the formal arguments. Any change in the formal arguments made does not affect the actual
arguments because formal arguments are the photocopy of the actual argument. Hence, when a
function is called by the call by value method, it does not affect the actual contents of the arguments.
Changes made in the formal arguments are local to the block of the called function.
Write a program to exchange values of two variables by using 'call by value' to the function.
#include<stdio.h>
void swap(int x,int y);
main()
{
int a,b;
printf(“Enter the values:”);
a=10;
b=20;
swap(a,b);
printf(“a=%d b=%d”,a,b);
}
void swap(int x,int y)
{
int t;
t=x;
x=y;
y=t;
printf(“x=%d y=%d”,x,y);
}
Output
x=20 y=10
a=10 b=20
Call by Reference
In this type, instead of passing values, addresses (reference) are passed. Function operates on
addresses rather than values. Here, the formal arguments are pointers to the actual argument. In this
type, formal arguments point to the actual argument. Hence, changes made in the argument are
permanent.
{
int a,b;
printf(“Enter the values:”);
a=10;
b=20;
swap(&a,&b);
printf(“a=%d b=%d”,a,b);
}
void swap(int *x,int *y)
{
int t;
t=*x;
*x=*y;
*y=t;
printf(“x=%d y=%d”,*x,*y);
}
Output
x=20 y=10
a=20 b=10
RECURSION
The C language supports recursive feature, i.e. a function is call repetitively by itself. The recursion can
be used directly or indirectly. The direct recursion function calls to itself till the condition is true. In
indirect recursion, a function calls to another function and then called function calls to the calling
function.
Example P52.
/* recursive function for factorial*/