[go: up one dir, main page]

100% found this document useful (1 vote)
3K views471 pages

C in Depth All Questions

This document contains questions from chapters 2 through 16 of the book "C in Depth". Each chapter section lists multiple questions related to code snippets provided. The questions assess understanding of C language concepts like data types, operators, input/output, conditional statements, and expressions. Overall, the document provides a set of practice problems to test comprehension of core C programming topics covered in the book.

Uploaded by

Abhinav Saxena
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
100% found this document useful (1 vote)
3K views471 pages

C in Depth All Questions

This document contains questions from chapters 2 through 16 of the book "C in Depth". Each chapter section lists multiple questions related to code snippets provided. The questions assess understanding of C language concepts like data types, operators, input/output, conditional statements, and expressions. Overall, the document provides a set of practice problems to test comprehension of core C programming topics covered in the book.

Uploaded by

Abhinav Saxena
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 471

C in Depth questions Questions : Chapter 2

Questions : Chapter 3 Questions : Chapter 4


Questions : Chapter 5 Questions : Chapter 6
Questions : Chapter 7 Questions : Chapter 8
Questions : Chapter 9 Questions : Chapter 10
Questions : Chapter 11 Questions : Chapter 12
Questions : Chapter 13 Questions : Chapter 14
Questions : Chapter 15 Questions : Chapter 16
23 August 2016

Chapter 2

** In chapter exercises for chapter 2:

**

Q) Discuss the ouput of the following program:

/*P2.1 Program to find out the size and limits of data types*/
#include <stdio.h>
#include <limits.h>
#include <float.h>
int main(void)
{
printf("sizeof(char) = %u\n",sizeof(char));
printf("sizeof(short) = %u\n",sizeof(short));
printf("sizeof(int) = %u\n",sizeof(int));
printf("sizeof(long) = %u\n",sizeof(long));
printf("sizeof(float) = %u\n",sizeof(float));
printf("sizeof(double) = %u\n",sizeof(double));
printf("sizeof(long double) = %u\n",sizeof(long double));
1

printf("SCHAR_MIN = %d\n",SCHAR_MIN);
printf("SCHAR_MAX = %d\n",SCHAR_MAX);
printf("UCHAR_MAX = %d\n",UCHAR_MAX);
printf("SHRT_MIN = %d\n",SHRT_MIN);
printf("SHRT_MAX = %d\n",SHRT_MAX);
printf("USHRT_MAX = %u\n",USHRT_MAX);
printf("INT_MIN = %d\n",INT_MIN);
printf("INT_MAX = %d\n",INT_MAX);
printf("UINT_MAX = %u\n",UINT_MAX);
printf("LONG_MIN = %ld\n",LONG_MIN);
printf("LONG_MAX = %ld\n",LONG_MAX);
printf("ULONG_MAX = %lu\n",ULONG_MAX);
printf("FLT_MIN = %e\n",FLT_MIN);
printf("FLT_MAX = %e\n",FLT_MAX);
printf("DBL_MIN = %e\n",DBL_MIN);
printf("DBL_MAX = %e\n",DBL_MAX);
printf("LDBL_MIN = %e\n",LDBL_MIN);
printf("LDBL_MAX = %e\n",LDBL_MAX);

/*Number of digits of precision*/


printf("FLT_DIG = %d\n",FLT_DIG);
printf("DBL_DIG = %d\n",DBL_DIG);
printf("LDBL_DIG = %d\n",LDBL_DIG);
return 0;

Chapter 3

Q-1) Find the output of the following code snippet:

/*E3.1*/
#include <stdio.h>
#define MSSG "Hello World\n"
2

int main(void)
{
printf(MSSG);
return 0;
}
Q-2) Find the output of the following code snippet:

/*E3.2*/
#include <stdio.h>
int main(void)
{
printf("Indian\b \n");
printf("New\rDelhi\n");
return 0;
}
Q-3) Find the output of the following code snippet:

/*E3.3*/
#include <stdio.h>
int main(void)
{
int a=11;
printf("a=%d\t",a);
printf("a=%o\t",a);
printf("a=%x\t",a);
printf("a=%X\n",a);
return 0;
}
Q-4) Find the output of the following code snippet:

/*E3.3*/
#include <stdio.h>
#include <limits.h>
int main(void)
{
int a=4000000000;
unsigned int b=4000000000;
printf("a=%d, b=%u\n",a,b);
printf("%d, %u\n",INT_MAX,UINT_MAX);
3

return 0;
Q-5) Find the output of the following code snippet:

/*E3.5*/
#include <stdio.h>
int main(void)
{
char ch;
printf("Enter a character : ");
scanf("%c",&ch);
printf("%d\n",ch);
return 0;
}
Q-6) Find the output of the following code snippet:

/*E3.6*/
#include <stdio.h>
int main(void)
{
float b=123.1265;
printf("%f\t",b);
printf("%.2f\t",b);
printf("%.3f\n",b);
return 0;
}
Q-7) Find the output of the following code snippet:

/*E3.7*/
#include <stdio.h>
int main(void)
{
int a=625,b=2394,c=12345;
printf("%5d,%5d,%5d\n",a,b,c);
printf("%3d,%4d,%5d\n",a,b,c);
return 0;
}
Q-8) Find the output of the following code snippet:

/*E3.8*/
#include <stdio.h>
int main(void)
{
int a=98;
char ch='c';
printf("%c,%d\n",a,ch);
return 0;
}
Q-9) Find the output of the following code snippet:

/*E3.9*/
#include <stdio.h>
int main(void)
{
float a1,b1,a2,b2,a3,b3;
a1=2;
b1=6.8;
a2=4.2;
b2=3.57;
a3=9.82;
b3=85.673;
printf("%3.1f,%4.2f\n",a1,b1);
printf("%5.1f,%6.2f\n",a2,b2);
printf("%7.1f,%8.2f\n",a3,b3);
return 0;
}
Q-10) Find the output of the following code snippet:

/*E3.10*/
#include <stdio.h>
int main(void)
{
printf("%10s\n","India");
printf("%4s\n","India");
printf("%.2s\n","India");
printf("%5.2s\n","India");
return 0;
}
5

Chapter 4

** In chapter exercises for chapter 4:

**

Q-1) Find the output of the following code:

/*P4.1 Integer arithmetic operations*/


#include <stdio.h>
int main(void)
{
int a=17,b=4;
printf("Sum=%d\n",a+b);
printf("Difference=%d\n",a-b);
printf("Product=%d\n",a*b);
printf("Quotient=%d\n",a/b);
printf("Remainder=%d\n",a%b);
return 0;
}
Q-2) Find the output of the following code:

/*P4.2 Program to understand the floating point arithmetic operation */


#include <stdio.h>
int main(void)
{
float a=12.4,b=3.8;
printf("Sum=%.2f\n",a+b);
printf("Difference=%.2f\n",a-b);
printf("Product=%.2f\n",a*b);
printf("a/b=%.2f\n",a/b);
return 0;
}
Q-3) Find the output of the following code:

/*P4.3 Prefix increment/decrement*/


#include <stdio.h>
int main(void)
{
int x=8;
printf("x=%d\t",x);
printf("x=%d\t",++x);
/*Prefix increment*/
printf("x=%d\t",x);
6

printf("x=%d\t",--x);
printf("x=%d\n",x);
return 0;

/*Prefix decrement*/

Q-4) Find the output of the following code:

/*P4.4 Program to understand the use of postfix increment/decrement*/


#include <stdio.h>
int main(void)
{
int x=8;
printf("x=%d\t",x);
printf("x=%d\t",x++);
/*postfix increment*/
printf("x=%d\t",x);
printf("x=%d\t",x--);
/*postfix decrement*/
printf("x=%d\n",x);
return 0;
}
Q-5) Find the output of the following code:

/*P4.5 Program to understand the use of relational operators*/


#include <stdio.h>
int main(void)
{
int a,b ;
printf("Enter values for a and b : ");
scanf("%d%d",&a,&b);
if(a<b)

printf("%d
if(a<=b)
printf("%d
if(a==b)
printf("%d
if(a!=b)
printf("%d
if(a>b)
printf("%d
if(a>=b)

is less than %d\n",a,b);


is less than or equal to %d\n",a,b);
is equal to %d\n",a,b);
is not equal to %d\n",a,b);
is greater than %d\n",a,b);

printf("%d is greater than or equal to %d\n",a,b);


return 0;

Q-6) Find the output of the following code:

/*P4.6 Program to print the larger of two numbers using conditional operator */
#include <stdio.h>
int main(void)
{
int a,b,max;
printf("Enter values for a and b :");
scanf("%d%d",&a,&b);
max = a>b ? a : b;
/*ternary operator*/
printf("Larger of %d and %d is %d\n",a,b,max);
return 0;
}
Q-7) Find the output of the following code:

/*P4.7 Program to understand the use of comma operator*/


#include <stdio.h>
int main(void)
{
int a,b,c,sum;
sum = (a=8,b=7,c=9,a+b+c);
printf("Sum=%d\n",sum);
return 0;
}
Q-8) Find the output of the following code:

/*P4.8 Program to interchange the value of two variables using comma operator*/
#include <stdio.h>
int main(void)
{
int a=8,b=7,temp;
printf("a=%d, b=%d\n",a,b);
temp=a,a=b,b=temp;
printf("a=%d, b=%d\n",a,b);
return 0;
}
8

Q-9) Find the output of the following code:

/*P4.9 Program to understand the sizeof operator*/


#include <stdio.h>
int main(void)
{
int var;
printf("Size of int=%u\n",sizeof(int));
printf("Size of float=%u\n",sizeof(float));
printf("Size of var=%u\n",sizeof(var));
printf("Size of an integer constant=%u\n",sizeof(45));
return 0;
}
Q-10) Find the output of the following code:

/*P4.10 Program to understand type conversion in assignment*/


#include <stdio.h>
int main(void)
{
char c1,c2;
int i1,i2;
float f1,f2;
c1='H';
i1=80.56;
/*float converted to int, only 80 assigned to i1 */
f1=12.6;
c2=i1;
/*int converted to char */
i2=f1;
/*float converted to int */
/*Now c2 has the character with ASCII value 80, i2 is assigned value 12 */
printf("c2=%c, i2=%d\n",c2,i2);
f2=i1;
/*int converted to float*/
i2=c1;
/*char converted to int */
/*Now i2 contains ASCII value of character 'H' which is 72*/
printf("f2=%.2f, i2=%d\n",f2,i2);
return 0;
}
Q-11) Find the output of the following code:

/*P4.11 Program to illustrate the use of cast operator*/


#include <stdio.h>
int main(void)
9

int x=5,y=2;
float p,q;
p=x/y;
printf("p=%f\n",p);
q=(float)x/y;
printf("q=%f\n",q);
return 0;

Q-12) Find the output of the following code:

/*P4.12 Program to evaluate some expressions*/


int main(void)
{
int a,b,c,d,e,f,g,h,k;
a=8, b=4, c=2, d=1, e=5, f=20;
printf("%d\t", a+b-(c+d)*3%e+f/9);
a=17, b=5, c=6, d=3, e=5;
printf("%d\t",a%6-b/2+(c*d-5)/e);
a=4, b=5, c=6, d=3, e=5, f=10;
printf("%d\t",a*b-c/d<e+f);
a=8, b=5, c=8, d=3, e=65, f=10, g=2, h=5, k=2;
printf("%d\t",a-b+c/d==e/f-g+h%k);

a=8, b=3, c=2, d=3, e=2, f=11;


printf("%d\n",a-b||(a-b*c)+d&&e-f%3);
return 0;

** Back chapter exercises for chapter 4:

**

Q-1) Find the output of the following code:

/*E4.1*/
#include <stdio.h>
int main(void)
{
int a=-3;
10

a = -a-a+!a;
printf("%d\n",a);
return 0;
Q-2) Find the output of the following code:

/*E4.2*/
#include <stdio.h>
int main(void)
{
int a=2,b=1,c,d;
c = a<b;
d = (a>b) && ( c<b);
printf("c=%d, d=%d\n",c,d);
return 0;
}
Q-3) Find the output of the following code:

/*E4.3*/
#include <stdio.h>
int main(void)
{
int a=9,b=15,c=16,d=12,e,f;
e = !(a<b || b<c);
f = (a>b) ? a-b: b-a;
printf("e=%d, f=%d\n",e,f);
return 0;
}
Q-4) Find the output of the following code:

/*E4.4*/
#include <stdio.h>
int main(void)
{
int a=5;
a=6;
a=a+5*a;
printf("a=%d\n",a);
return 0;
}
11

Q-5) Find the output of the following code:

/*E4.5*/
#include <stdio.h>
int main(void)
{
int a=5, b=5;
printf("%d,%d\t",++a,b--);
printf("%d,%d\t",a,b);
printf("%d,%d\t",++a,b++);
printf("%d,%d\n",a,b);
return 0;
}
Q-6) Find the output of the following code:

/*E4.6*/
#include <stdio.h>
int main(void)
{
int x,y,z;
x=8++;
y=++x++;
z=(x+y)--;
printf("x=%d, y=%d, z=%d\n",x,y);
return 0;
}
Q-8) Find the output of the following code:

/*E4.8*/
#include <stdio.h>
int main(void)
{
int a=14,b,c;
a=a%5;
b=a/3;
c=a/5%3;
printf("a=%d, b=%d, c=%d\n",a,b,c);
return 0;
}
Q-9) Find the output of the following code:
12

/*E4.9*/
#include <stdio.h>
int main(void)
{
int a=15,b=13,c=16,x,y;
x = a-3%2+c*2/4%2+b/4;
y = a = b+5-b+9/3;
printf("x=%d, y=%d\n",x,y);
return 0;
}
Q-10) Find the output of the following code:

/*E4.10*/
#include <stdio.h>
int main(void)
{
int x,y,z,k=10;
k+=(x=5, y=x+2, z=x+y);
printf("x=%d, y=%d, z=%d, k=%d\n",x,y,z,k);
return 0;
}
Q-11) Find the output of the following code:

/*E4.11*/
#include <stdio.h>
int main(void)
{
float b;
b = 15/2;
printf("%f\t",b);
b = (float)15/2 + (15/2);
printf("%f\n",b);
return 0;
}
Q-12) Find the output of the following code:

/*E4.12*/
#include <stdio.h>
int main(void)
13

int a=9;
char ch='A';
a=a+ch+24;
printf("%d,%c\t%d,%c\n",ch,ch,a,a);
return 0;
Q-13) Find the output of the following code:

/*E4.13*/
#include <stdio.h>
int main(void)
{
int a,b,c,d;
a=b=c=d=4;
a*=b+1;
c+=d*=3;
printf("a=%d, c=%d\n",a,c);
return 0;
}
Q-14) Find the output of the following code:

/*E4.14*/
#include <stdio.h>
int main(void)
{
int a=5,b=10,temp;
temp=a,a=b,b=temp;
printf("a=%d, b=%d\n",a,b);
return 0;
}
Q-15) Find the output of the following code:

/*E4.15*/
#include <stdio.h>
int main(void)
{
int a=10, b=3, max;
a>b ? max=a : max=b;
14

printf("%d\n",max);
return 0;
Q-17) Find the output of the following code:

/*E4.17*/
#include <stdio.h>
int main(void)
{
int a=3,b=4,c=3,d=4,x,y;
x = (a=5) && (b=7);
y = (c=5) || (d=8);
printf("a=%d, b=%d, c=%d, d=%d, x=%d, y=%d\n",a,b,c,d,x,y);
x = (a==6) && (b=9);
y = (c==6) || (d=10);
printf("a=%d, b=%d, c=%d, d=%d, x=%d, y=%d\n",a,b,c,d,x,y);
return 0;
}
Q-18) Find the output of the following code:

/*E4.18*/
#include <stdio.h>
int main(void)
{
int a=10;
a=a++;
a = a++ * a--;
printf("%d\n",a);
printf("%d\n",a++ * a++);
return 0;
}
Q-19) Find the output of the following code:

/*E4.19*/
#include <stdio.h>
int main(void)
{
int a=2,b=2,x,y;
x = 4*(++a * 2 + 3);
15

y = 4*(b++ * 2 + 3 );
printf("a=%d, b=%d, x=%d, y=%d\n",a,b,x,y);
return 0;
Q-20) Find the output of the following code:

/*E4.20*/
#include <stdio.h>
int main(void)
{
float tempC,tempF;
printf("Enter the temprature in Celsius : ");
scanf("%f",&tempC);
tempF = (tempC * 9/5) + 32;
printf("Temprature in Fahrenheit is : %f\n", tempF);
return 0;
}
Q-21) Find the output of the following code:

/*E4.21*/
#include <stdio.h>
int main(void)
{
float r,area,perimeter;
printf("Enter radius of the circle : ");
scanf("%f",&r);
area = 22.0/7 * r * r;
perimeter = 2 * 22.0/7 * r;
printf("Area=%f, Perimeter=%f\n",area,perimeter);
return 0;
}
Q-22) Find the output of the following code:

/*E4.22*/
#include <stdio.h>
int main(void)
{
int n;
printf("Enter a number : ");
16

scanf("%d",&n);
printf("Octal - %o, Hexadecimal - %x\n",n,n);
return 0;
Q-23) Find the output of the following code:

/*E4.23*/
#include <stdio.h>
int main(void)
{
int n;
printf("Enter a number : ");
scanf("%d",&n);
printf("Remainder = %d\n",n%3);
return 0;
}
Q-24) Find the output of the following code:

/*E4.24*/
#include <stdio.h>
int main(void)
{
int x,y;
printf("Enter two numbers : ");
scanf("%d%d",&x,&y);
x>y ? printf("%d\n",x-y): printf("%d\n",x+y);
return 0;
}

Chapter 5

** In chapter exercises for chapter 5:

**

Q-1) Discuss the ouptput/solution to the following problems:

/*P5.1 Program to print the bigger number*/


#include <stdio.h>
int main(void)
{
int a,b;
17

printf("Enter two numbers : ");


scanf("%d%d",&a,&b);
if(a>b)
printf("Bigger number=%d\n",a);
else
printf("Bigger number=%d\n",b);
return 0;

Q-2) Discuss the ouptput/solution to the following problems:

/*P5.2 Program to print whether a number is even or odd */


#include <stdio.h>
int main(void)
{
int num;
printf("Enter a number : ");
scanf("%d",&num);
if(num%2 == 0)
/*test for even */
printf("Number is even\n");
else
{
printf("Number is odd\n");
num*=2;
printf("Now the number is %d\n",num);
}
return 0;
}
Q-3) Discuss the ouptput/solution to the following problems:

/*P5.3 Program to print a message if negative number is entered */


#include <stdio.h>
int main(void)
{
int num;
printf("Enter a number : ");
scanf("%d",&num);
if(num<0)
{
printf("Number entered is negative\n");
18

num=-num;
}
printf("Value of num is : %d\n", num);
return 0;

Q-4) Discuss the ouptput/solution to the following problems:

/*P5.4 Program to find quotient and remainder*/


#include <stdio.h>
int main(void)
{
int x,y,quo,rem;
printf("Enter two numbers : ");
scanf("%d%d",&x,&y);
if(y) /*if y is non-zero*/
{
quo=x/y;
rem=x%y;
printf("Quotient=%d, Remainder=%d\n",quo,rem);
}
else
printf("Divide by zero error\n");
return 0;
}
Q-5) Discuss the ouptput/solution to the following problems:

/*P5.5 Program to find biggest number from three given numbers*/


#include <stdio.h>
int main(void)
{
int a,b,c,big;
printf("Enter three numbers : ");
scanf("%d%d%d", &a, &b, &c);
if(a>b)
{
if(a>c)
big=a;
else
big=c;
19

}
else
{

if(b>c)
else

big=b;

big=c;
}
printf("Biggest number is %d\n",big);
return 0;
}/*End of main()*/
Q-6) Discuss the ouptput/solution to the following problems:

/*P5.6 Program to find whether a year is leap or not*/


#include <stdio.h>
int main(void)
{
int year;
printf("Enter year : ");
scanf("%d",&year);

if(year%100 != 0)
{
if(year%4 == 0)
printf("Leap year\n");
else
printf("Not leap\n");
}
else
{
if(year%400 == 0)
printf("Leap year\n");
else
printf("Not leap\n");
}
return 0;

Q-7) Discuss the ouptput/solution to the following problems:

20

/*P5.7 Program to find out the grade of a student when the marks of 4 subjects are give
The method of assigning grade is percentage>=85
grade=A
percentage<85 and percentage>=70
grade=B
percentage<70 and percentage>=55
grade=C
percentage<55 and percentage>=40
grade=D
percentage<40
grade=E
*/
#include <stdio.h>
int main(void)
{
float m1,m2,m3,m4,total,per;
char grade;
printf("Enter marks of 4 subjects : ");
scanf("%f%f%f%f",&m1,&m2,&m3,&m4);
total=m1+m2+m3+m4;

per=total/4;
if(per>=85)
grade='A';
else if(per>=70)
grade='B';
else if(per>=55)
grade='C';
else if(per>=40)
grade='D';
else
grade='E';
printf("Percentage is %f,Grade is %c\n",per,grade);
return 0;

Q-8) Discuss the ouptput/solution to the following problems:

/*P5.8 Program to print numbers from 1 to 10 using while loop*/


#include <stdio.h>
int main(void)
{
int i=1;
while(i<=10)
{
21

printf("%d\t",i);
i = i+1;

}
printf("\n");
return 0;

/*Statement that changes the value of condition

Q-9) Discuss the ouptput/solution to the following problems:

/*P5.9 Program to print numbers in reverse order with a difference of 2*/


#include <stdio.h>
int main(void)
{
int k=10;
while(k>=2)
{
printf("%d\t",k);
k=k-2;
}
printf("\n");
return 0;
}
Q-10) Discuss the ouptput/solution to the following problems:

/*P5.10 Program to print the sum of digits of any number*/


#include <stdio.h>
int main(void)
{
int n,sum=0,rem;
printf("Enter a number : ");
scanf("%d",&n);
while(n>0)
{
rem = n%10;
/*taking last digit of n*/
sum+=rem;
n/=10;
/*skipping last digit of n*/
}
printf("Sum of digits=%d\n",sum);
return 0;
}
22

Q-11) Discuss the ouptput/solution to the following problems:

/*P5.11 Program to find the product of digits of any number*/


#include <stdio.h>
int main(void)
{
int n,prod=1,rem;
printf("Enter a number : ");
scanf("%d",&n);
while(n>0)
{
rem = n%10;
/*taking last digit of n*/
prod*=rem;
n/=10; /*skipping last digit of n*/
}
printf("Product of digits = %d\n",prod);
return 0;
}
Q-12) Discuss the ouptput/solution to the following problems:

/*P5.12 Program to find the factorial of any number*/


#include <stdio.h>
int main(void)
{
int n,num;
long fact=1;
printf("Enter a number : ");
scanf("%d",&n);
num=n;
if(n<0)
printf("No factorial of negative number\n");
else
{
while(n>1)
{
fact*=n;
n--;
}
printf("Factorial of %d=%ld\n",num,fact);
}
23

return 0;

Q-13) Discuss the ouptput/solution to the following problems:

/*P5.13 Program to convert a binary number to a decimal number*/


#include <stdio.h>
int main(void)
{
int n,nsave,rem,d,j=1,dec=0;
printf("Enter the number in binary : ");
scanf("%d",&n);
nsave=n;
while(n>0)
{
rem=n%10;
/*taking last digit of n*/
d=rem*j;
dec+=d;
j*=2;
n/=10;
/*skipping last digit of n*/
}
printf("Binary number = %d, Decimal number = %d\n",nsave,dec);
return 0;
}
Q-14) Discuss the ouptput/solution to the following problems:

/*P5.14 Program to print numbers from 1 to 10 using a do-while loop*/


#include <stdio.h>
int main(void)
{
int i=1;
do
{
printf("%d\t",i);
i = i+1;
}while(i<=10);
printf("\n");
return 0;
}
Q-15) Discuss the ouptput/solution to the following problems:
24

/*P5.15 Program to count digits in a number */


#include <stdio.h>
int main(void)
{
int n,count=0,rem;
printf("Enter a number : ");
scanf("%d",&n);
do
{
n/=10;
count++;
}while(n>0);
printf("Number of digits=%d\n",count);
return 0;
}
Q-16) Discuss the ouptput/solution to the following problems:

/*P5.16 Program to find the sum of numbers entered*/


#include <stdio.h>
int main(void)
{
int num,sum=0;
do
{
printf("Enter a number (enter 0 to stop) : ");
scanf("%d",&num);
sum+=num;
}while(num!=0);
printf("Sum is %d\n",sum);
return 0;
}
Q-17) Discuss the ouptput/solution to the following problems:

/*P5.17 Program to print numbers from 1 to 10 using for loop*/


#include <stdio.h>
int main(void)
{
int i;
for(i=1; i<=10; i++)
25

printf("%d\t",i);
printf("\n");
return 0;

Q-18) Discuss the ouptput/solution to the following problems:

/*P5.18 Program to print numbers in reverse order with a difference of 2*/


#include <stdio.h>
int main(void)
{
int k;
for(k=10; k>=2; k-=2)
printf("%d\t",k);
printf("\n");
return 0;
}
Q-19) Discuss the ouptput/solution to the following problems:

/*P5.19 Multiply two positive numbers without using * operator*/


#include <stdio.h>
int main(void)
{
int a,b,i;
int result=0;
printf("Enter two numbers to be multiplied : ");
scanf("%d%d",&a,&b);
for(i=1; i<=b; i++)
result=result+a;
printf("%d * %d = %d\n",a,b,result);
return 0;
}
Q-20) Discuss the ouptput/solution to the following problems:

/*P5.20 Find the sum of this series upto n terms


1 + 2 + 4 + 7 + 11 + 16 + */
#include <stdio.h>
int main(void)
{
int i,n,sum=0,term=1;
26

printf("Enter number of terms : ");


scanf("%d",&n);
for(i=1; i<=n; i++)
{
sum+=term;
term=term+i;
}
printf("The sum of series upto %d terms is %d\n",n,sum);
return 0;

Q-21) Discuss the ouptput/solution to the following problems:

/*P5.21 Program to generate fibonacci series


1, 1, 2, 3, 5, 8, 13, 34, 55, 89...................
In this series each number is a sum of the previous two numbers*/
#include <stdio.h>
int main(void)
{
long x,y,z;
int i,n;
x=0;
y=1;
printf("Enter the number of terms : ");
scanf("%d",&n);
printf("%ld ",y);
for(i=1; i<n; i++)
{
z=x+y;
printf("%ld ",z);
x=y;
y=z;
}
printf("\n");
return 0;
}
Q-22) Discuss the ouptput/solution to the following problems:

/*P5.22 Program to print the sum of digits of any number using for loop */
#include <stdio.h>
27

int main(void)
{
int n,sum=0,rem;
printf("Enter a number : ");
scanf("%d",&n);
for( ; n>0; n/=10)
{
rem=n%10;
/*taking last digit of number*/
sum+=rem;
}
printf("Sum of digits=%d\n",sum);
return 0;
}
Q-23) Discuss the ouptput/solution to the following problems:

/*P5.23 Program to show the use of comma operator in for loop*/


#include <stdio.h>
int main(void)
{
int i,j;
for(i=0,j=10; i<=j; i++,j--)
printf("i=%d j=%d\n",i,j);
return 0;
}
Q-24) Discuss the ouptput/solution to the following problems:

/*P5.24 Program to understand nesting in for loop*/


#include <stdio.h>
int main(void)
{
int i,j;
for(i=1; i<=3; i++)
/*outer loop*/
{
printf("i=%d\n",i);
for(j=1; j<=4; j++)
/*inner loop*/
printf("j=%d\t",j);
printf("\n");
}
return 0;
}
28

Q-25) Discuss the ouptput/solution to the following problems:

/*P5.25 Program to print Armstrong numbers*/


#include <stdio.h>
int main(void)
{
int num,n,cube,d,sum;
printf("Armstrong numbers are :\n");

for(num=100; num<=999; num++) /*outer loop to generate numbers*/


{
n=num;
sum=0;
while(n>0)
/*inner loop to calculate sum of cube of digits*/
{
d=n%10;
n/=10;
cube=d*d*d;
sum=sum+cube;
}/*End of while loop*/
if(num==sum)
printf("%d\n",num);
}/*End of for loop*/
return 0;

Q-26) Discuss the ouptput/solution to the following problems:

/* P5.26 Program to find the sum of digits of a number until the sum is reduced to 1 di
For example - 538769->38->11->2 */
#include <stdio.h>
int main(void)
{
long num;
int dig,sum;
printf("Enter a number : ");
scanf("%ld",&num);
printf("%ld->",num);
do
{
sum = 0;
29

while(num!=0)
{
dig=num%10;
sum+=dig;
num/=10;
}
printf("%d\t",sum);
num=sum;
}while(num/10!=0); /*while num is more than one digit*/
return 0;

Q-27) Discuss the ouptput/solution to the following problems:

/*P5.27 Program to understand the use of break*/


#include <stdio.h>
int main(void)
{
int n;
for(n=1; n<=5; n++)
{
if(n==3)
break;
printf("Number=%d\n",n);
}
printf("Out of for loop\n");
return 0;
}
Q-28) Discuss the ouptput/solution to the following problems:

/*P5.28 Program to find whether a number is prime or not*/


#include <stdio.h>
#include <math.h>
int main(void)
{
int i,n;
printf("Enter a number : ");
scanf("%d",&n);
for(i=2; i<=sqrt(n); i++)
30

if(n%i==0)
break;

if(i>sqrt(n))
printf("%d is prime\n",n);
else
printf("%d is not prime\n",n);
return 0;

Q-29) Discuss the ouptput/solution to the following problems:

/*P5.29 Program to understand the use of continue statement*/


#include <stdio.h>
int main(void)
{
int n;
for(n=1; n<=5; n++)
{
if(n==3)
continue;
printf("Number=%d\n",n);
}
printf("Out of for loop\n");
return 0;
}
Q-30) Discuss the ouptput/solution to the following problems:

/*P5.30 Program to find the sum and average of 10 positive integers*/


#include <stdio.h>
int main(void)
{
int i=1,n,sum=0;
float avg;
printf("Enter 10 positive numbers : \n");
while(i<=10)
{
printf("Enter number %d : ",i);
scanf("%d",&n);
if(n<0)
31

printf("Enter only positive numbers\n");


continue;

}
sum+=n;
i++;

}
avg=sum/10.0;
printf("Sum=%d Avg=%f\n",sum,avg);
return 0;

Q-31) Discuss the ouptput/solution to the following problems:

/*P5.31 Program to find whether a number is even or odd*/


#include <stdio.h>
int main(void)
{
int n;
printf("Enter a number : ");
scanf("%d",&n);
if(n%2==0)
goto even;
else
goto odd;
even:
printf("Number is even\n");
goto end;
odd:
printf("Number is odd\n");
goto end;
end:
printf("\n");
return 0;
}
Q-32) Discuss the ouptput/solution to the following problems:

/*P5.32 Program to understand the switch control statement*/


#include <stdio.h>
int main(void)
32

int choice;
printf("Enter your choice : ");
scanf("%d",&choice);
switch(choice)
{
case 1:
printf("First\n");
case 2:
printf("Second\n");
case 3:
printf("Third\n");
default:
printf("Wrong choice\n");
}
return 0;

Q-33) Discuss the ouptput/solution to the following problems:

/*P5.33 Program to understand the switch with break statement*/


#include <stdio.h>
int main(void)
{
int choice;
printf("Enter your choice : ");
scanf("%d",&choice);
switch(choice)
{
case 1:
case 2:
case 3:

printf("First\n");
break;

/*break statement in switch*/

printf("Second\n");
break;

printf("Third\n");
break;
default:
printf("Wrong choice\n");
33

}
return 0;
}/*End of main()*/
Q-34) Discuss the ouptput/solution to the following problems:

/*P5.34 Program to perform arithmetic calculations on integers*/


#include <stdio.h>
int main(void)
{
char op;
int a,b;
printf("Enter number,operator and another number : ");
scanf("%d%c%d",&a,&op,&b);
switch(op)
{
case '+':
printf("Result = %d\n",a+b);
break;
case '-':
printf("Result = %d\n",a-b);
break;
case '*':
printf("Result = %d\n",a*b);
break;
case '/':
printf("Result = %d\n",a/b);
break;
case '%':
printf("Result = %d\n",a%b);
break;
default:
printf("Enter valid operator\n");
}/*End of switch*/
return 0;
}/*End of main()*/
Q-35) Discuss the ouptput/solution to the following problems:

/*P5.35 Program to find whether the alphabet is a vowel or consonant*/


#include <stdio.h>
34

int main(void)
{
char ch;
printf("Enter an alphabet : ");
scanf("%c",&ch);
switch(ch)
{
case 'a':
case 'e':
case 'i':
case 'o':
case 'u':
printf("Alphabet is a vowel\n");
break;
default:
printf("Alphabet is a consonant\n");
}
return 0;
}
Q-36) Discuss the ouptput/solution to the following problems:

/*P5.36 A menu driven program using infinite loop and switch*/


#include <stdio.h>
int main(void)
{
int choice;
while(1)
{
printf("1.Create database\n");
printf("2.Insert new record\n");
printf("3.Modify a record\n");
printf("4.Delete a record\n");
printf("5.Display all records\n");
printf("6.Exit\n");
printf("Enter your choice : ");
scanf("%d",&choice);
switch(choice)
{
case 1:
35

case 2:
case 3:
case 4:
case 5:
case 6:

printf("Database created.....\n\n");
break;
printf("Record inserted.....\n\n");
break;
printf("Record modified.....\n\n");
break;
printf("Record deleted.....\n\n");
break;
printf("Records displayed.....\n\n");
break;

exit(1);
default:
printf("Wrong choice\n");
}/*End of switch*/
}/*End of while*/
return 0;
}/*End of main( )*/
Q-37) Discuss the ouptput/solution to the following problems:

/*P5.37 Program to check whether a date is valid or not*/


#include <stdio.h>
int main(void)
{
int d,m,y;
int flag=1,isleap=0;
printf("Enter date(dd/mm/yyyy): ");
scanf("%d/%d/%d",&d,&m,&y);
if(y%100!=0 && y%4==0 || y%400==0)
isleap=1;
if(y<1850 || y>2050 || m<1 || m>12 || d<1 || d>31)
flag=0;
else if(m==2)
/*Check for number of days in February*/
{
36

if(d==30 || d==31 || (d==29 && !isleap) )


flag=0;

}
else if(m==4 || m==6 || m==9 || m==11)/*Check days in April,June,Sept,Nov*/
{
if(d==31)
flag=0;
}
if(flag==0)
printf("Not a valid date\n");
else
printf("Valid Date \n");
return 0;
}/*End of main()*/
Q-38) Discuss the ouptput/solution to the following problems:

/*P5.38 Program to get difference of two dates in years, months, days*/


#include <stdio.h>
int main(void)
{
int d1,d2,d,m1,m2,m,y1,y2,y;
printf("Enter first date(dd/mm/yyyy): ");
scanf("%d/%d/%d",&d1,&m1,&y1);
printf("Enter second date(dd/mm/yyyy): ");
scanf("%d/%d/%d",&d2,&m2,&y2);
if(d2<d1)
{
if(m2==3)
{
if(y2%100!=0 && y2%4==0 || y2%400==0) /*check for leap year*/
d2=d2+29;
else
d2=d2+28;
}
else if(m2==5 || m2==7 || m2==10 || m2==12)
d2=d2+30;
else
d2=d2+31;
m2=m2-1;
37

}
if(m2<m1)
{
y2=y2-1;
m2=m2+12;
}
y=y2-y1;
m=m2-m1;
d=d2-d1;
printf("Difference of the two dates is : ");
printf("%d years %d months %d days\n",y,m,d);
return 0;
}/*End of main()*/
Q-39) Discuss the ouptput/solution to the following problems:

/*P5.39 Program to multiply two numbers


#include <stdio.h>
int main(void)
{
int a,b,x,y,s=0;
printf("Enter two numbers to be
scanf("%d%d",&x,&y);
a = x;
b = y;
while(a>=1)
{
if(a%2!=0)
s=s+b;
a/=2;
b*=2;
}
printf("%d * %d = %d\n",x,y,s);
return 0;
}

by russian peasant method*/

multiplied : ");

/*Loop till first number reduces to 1*/


/*If first number is odd*/
/*Add second number to s*/
/*Divide first number by 2*/
/*Multiply second number by 2*/

Q-40) Discuss the ouptput/solution to the following problems:

/*P5.40 Program to find out the number of notes required for a given amount of money*/
#include <stdio.h>
int main(void)
38

int n,choice,notes;
printf("Enter the total amount in Rs : ");
scanf("%d",&n);
printf("Enter the value of note from which you want to begin : ");
scanf("%d",&choice);
switch(choice)
{
case 100:
notes=n/100;
printf("Number of 100 Rs notes = %d\n", notes);
n=n%100;
/*Fall thru*/
case 50:
notes=n/50;
printf("Number of 50 Rs notes = %d\n", notes);
n=n%50; /*Fall thru*/
case 20:
notes=n/20;
printf("Number of 20 Rs notes = %d\n", notes);
n=n%20; /*Fall thru*/
case 10:
notes=n/10;
printf("Number of 10 Rs notes = %d\n", notes);
n=n%10; /*Fall thru*/
case 5:
notes=n/5;
printf("Number of 5 Rs notes = %d\n", notes);
n=n%5; /*Fall thru*/
case 2:
notes=n/2;
printf("Number of 2 Rs notes = %d\n", notes);
n=n%2; /*Fall thru*/
case 1:
notes=n/1;
printf("Number of 1 Rs notes = %d\n", notes);
break;
default:
printf("Enter only valid values");
break;
}
39

printf("\n");
return 0;

Q-41) Discuss the ouptput/solution to the following problems:

/*P5.41 Program to find day of week from a given date*/


#include <stdio.h>
int main(void)
{
int d,m,y,j,f,h,fh,day;
printf("Enter date(dd/mm/yyyy): ");
scanf("%d/%d/%d",&d,&m,&y);
j=d;
switch(m-1)
{
case 11: j+=30;
/*Fall thru in all cases*/
case 10: j+=31;
case 9:
j+=30;
case 8:
j+=31;
case 7:
j+=31;
case 6:
j+=30;
case 5:
j+=31;
case 4:
j+=30;
case 3:
j+=31;
case 2:
j+=28;
case 1:
j+=31;
}
if(y%100!=0 && y%4==0 || y%400==0)
if(m>2)
j=j+1;
f=(y-1)/4;
h=(y-1)/100;
fh=(y-1)/400;
day=(y+j+f-h+fh)%7;
switch(day)
{
case 0: printf("Saturday\n"); break;
case 1: printf("Sunday\n");
break;
case 2: printf("Monday\n");
break;
case 3: printf("Tuesday\n");
break;
40

case 4: printf("Wednesday\n"); break;


case 5: printf("Thursday\n"); break;
case 6: printf("Friday\n");
break;

}
return 0;
}/*End of main()*/

Q-42) Discuss the ouptput/solution to the following problems:

/*P5.42 Program to print triad numbers*/


#include <stdio.h>
int main(void)
{
int m,n,p,num;
int i,k,d1,d2,d3;
for(num=100; num<=999/3; num++)/*Loop A*/
{
for(i=num; i<=3*num; i+=num )/*loop B*/
{
k=i;
d1=k%10; k/=10;
d2=k%10; k/=10;
d3=k%10; k/=10;
if(d1==d2 || d2==d3 || d3==d1)
goto nextnum;
}/*End of loop B*/
for(m=num; m>0; m/=10)/*Loop C*/
{
d1=m%10;
for(n=num*2; n>0; n/=10)/*Loop D*/
{
d2=n%10;
for(p=num*3; p>0; p/=10) /*Loop E*/
{
d3=p%10;
if(d1==d2 || d2==d3 || d1==d3)
goto nextnum;
}/*End of Loop E*/
}/*End of Loop D*/
}/*End of loop C*/
printf("%d %d %d\t",num,num*2,num*3);
41

nextnum:
;
}/*End of loop A*/
return 0;
}/*End of main()*/
Q-43) Discuss the ouptput/solution to the following problems:

/*P5.43 Program to find the LCM and


#include <stdio.h>
int main(void)
{
int x,y,a,b;
printf("Enter two numbers :
scanf("%d%d",&x,&y);
a=x; b=y;
while(a!=b)
{
if(a<b)
a=a+x;
else
b=b+y;
}
printf("LCM of %d and %d is
a=x; b=y;
while(a!=b )
{
if(a>b)
a=a-b;
else
b=b-a;
}
printf("HCF of %d and %d is
return 0;
}

HCF of two numbers*/

");

%d\n",x,y,a);

%d\n",x,y,a);

Q-44) Discuss the ouptput/solution to the following problems:

/*PYRAMIDS*/
#include <stdio.h>
42

/*Pyramid (a)*/
int main(void)
{
int i,j,n;
printf("Enter number of lines : ");
scanf("%d",&n);
for(i=1; i<=n; i++)
{
for(j=1; j<=i; j++)
printf("* ");
printf("\n");
}
return 0;
}
/*Pyramid (b)*/
/*
int main(void)
{
int i,j,n;
printf("Enter number of lines : ");
scanf("%d",&n);
for(i=1; i<=n; i++)
{
for(j=1; j<=i; j++)
printf("%2d",i);
printf("\n");
}
return 0;
}
*/
/*Pyramid (c)*/
/*
int main(void)
{
int i,j,n;
printf("Enter number of lines : ");
scanf("%d",&n);
43

}
*/

for(i=1; i<=n; i++)


{
for(j=1; j<=i; j++)
printf("%2d",j);
printf("\n");
}
return 0;

/*Pyramid (d)*/
/*
int main(void)
{
int i,j,n;
printf("Enter number of lines : ");
scanf("%d",&n);
for(i=1; i<=n; i++)
{
for(j=1; j<=i; j++)
printf("%3d",i+j);
printf("\n");
}
return 0;
}
*/
/*Pyramid (e)*/
/*
int main(void)
{
int i,j,n;
printf("Enter number of lines : ");
scanf("%d",&n);
for(i=1; i<=n; i++)
{
for(j=1; j<=i; j++)
printf("%d ",(i+j)%2==0 ? 1 : 0);
printf("\n");
}
44

}
*/

return 0;

/*Pyramid (f)*/
/*
int main(void)
{
int i,j,n,p=1;
printf("Enter number of lines : ");
scanf("%d",&n);
for(i=1; i<=n; i++)
{
for(j=1; j<=i; j++)
printf("%3d",p++);
printf("\n");
}
return 0;
}
*/
/*Pyramid (g)*/
/*
int main(void)
{
int i,j,n;
printf("Enter number of lines : ");
scanf("%d",&n);
for(i=1; i<=n; i++)
{
for(j=1; j<=i; j++)
printf("%2d",n+1-j);
printf("\n");
}
return 0;
}
*/
/*Pyramid (h)*/
/*
45

int main(void)
{
int i,j,n;
printf("Enter number of lines : ");
scanf("%d",&n);
for(i=1; i<=n; i++)
{
for(j=1; j<=i; j++)
printf("%2d",n+1-i);
printf("\n");
}
return 0;
}
*/
/*Pyramid (i)*/
/*
int main(void)
{
int i,j,n;
printf("Enter number of lines : ");
scanf("%d",&n);
for(i=1; i<=n; i++)
{
for(j=1; j<=n+1-i; j++)
printf("* ");
printf("\n");
}
return 0;
}
*/
/*Pyramid (j)*/
/*
int main(void)
{
int i,j,n;
printf("Enter number of lines : ");
scanf("%d",&n);
for(i=1; i<=n; i++)
46

}
*/

for(j=1; j<=n+1-i; j++)


printf("%2d",i);
printf("\n");

}
return 0;

/*Pyramid (k)*/
/*
int main(void)
{
int i,j,n;
printf("Enter number of lines : ");
scanf("%d",&n);
for(i=1; i<=n; i++)
{
for(j=1; j<=n+1-i; j++)
printf("%2d",j);
printf("\n");
}
return 0;
}
*/
/*Pyramid (l)*/
/*
int main(void)
{
int i,j,n;
printf("Enter number of lines : ");
scanf("%d",&n);
for(i=1; i<=n; i++)
{
for(j=1; j<=n+1-i; j++)
printf("%2d",n+1-i);
printf("\n");
}
return 0;
47

}
*/
/*Pyramid (m)*/
/*
int main(void)
{
int i,j,n;
printf("Enter number of lines : ");
scanf("%d",&n);
for(i=1; i<=n; i++)
{
for(j=1; j<=n+1-i; j++)
printf("%2d",n+1-j);
printf("\n");
}
return 0;
}
*/
/*Pyramid (n)*/
/*
int main(void)
{
int i,j,n;
printf("Enter number of lines : ");
scanf("%d",&n);
for(i=1; i<=n; i++)
{
for( j=1; j<=n-i; j++)
printf(" ");
for(j=1; j<=i; j++)
printf("* ");
printf("\n");
}
return 0;
}
*/
/*Pyramid (o)*/
48

/*
int main(void)
{
int i,j,n;
printf("Enter number of lines : ");
scanf("%d",&n);
for(i=1; i<=n; i++)
{
for(j=1; j<=n-i; j++)
printf(" ");
for(j=1; j<=i; j++)
printf("%2d",j);
printf("\n");
}
return 0;
}
*/
/*Pyramid (p)*/
/*
int main(void)
{
int i,j,n;
printf("Enter number of lines : ");
scanf("%d",&n);
for(i=1; i<=n; i++)
{
for( j=1; j<=n-i; j++)
printf(" ");
for(j=1; j<=i; j++)
printf("*");
printf("\n");
}
return 0;
}
*/
/*Pyramid (q)*/
/*
int main(void)
49

}
*/

int i,j,n;
printf("Enter number of lines : ");
scanf("%d",&n);
for(i=1; i<=n; i++)
{
for(j=1; j<=n-i; j++)
printf(" ");
for(j=1; j<=i; j++)
printf("%d",j);
printf("\n");
}
return 0;

/*Pyramid (r)*/
/*
int main(void)
{
int i,j,n;
printf("Enter number of lines : ");
scanf("%d",&n);
for(i=1; i<=n; i++)
{
for(j=1; j<=n-i; j++)
printf(" ");
for(j=1; j<=2*i-1; j++)
printf("*");
printf("\n");
}
return 0;
}
*/
/*Pyramid (s)*/
/*
int main(void)
{
int i,j,n;
50

}
*/

printf("Enter number of lines : ");


scanf("%d",&n);
for(i=1; i<=n; i++)
{
for(j=1; j<=n-i; j++)
printf(" ");
for(j=1; j<=2*i-1; j++)
printf("%d",i);
printf("\n");
}
return 0;

/*Pyramid (t)*/
/*
int main(void)
{
int i,j,n;
printf("Enter number of lines : ");
scanf("%d",&n);
for(i=1; i<=n; i++)
{
for(j=1; j<=n-i; j++)
printf(" ");
for(j=1; j<=2*i-1; j++)
printf("%d",j);
printf("\n");
}
return 0;
}
*/
/*Pyramid (u)*/
/*
int main(void)
{
int i,j,n;
printf("Enter number of lines : ");
51

}
*/

scanf("%d",&n);
for(i=1; i<=n; i++)
{
for(j=1; j<=2*(n-i); j++)
printf(" ");
for(j=1; j<=2*i-1; j++)
printf("* ");
printf("\n");
}
return 0;

/*Pyramid (v)*/
/*
int main(void)
{
int i,j,n,p;
printf("Enter number of lines : ");
scanf("%d",&n);
for(i=1; i<=n; i++)
{
for(j=1; j<=n-i; j++)
printf(" ");
p=i;
for(j=1; j<=i; j++)
printf("%d",p++);
p=p-2;
for(j=1; j<=i-1; j++)
printf("%d",p--);
printf("\n");
}
return 0;
}
*/
/*Pyramid (w)*/
/*
int main(void)
52

}
*/

int i,j,n,p;
printf("Enter number of lines : ");
scanf("%d",&n);
for(i=1; i<=n; i++)
{
for(j=1; j<=n-i; j++)
printf(" ");
p=n;
for(j=1; j<=i; j++)
printf("%d",p--);
p=p+2;
for(j=1; j<=i-1; j++)
printf("%d",p++);
printf("\n");
}
return 0;

/*Pyramid (x)*/
/*
int main(void)
{
int i,j,n;
printf("Enter number of lines : ");
scanf("%d",&n);
for(i=1; i<=n; i++)
{
for(j=1; j<=i; j++)
printf(" ");
for(j=1; j<=2*(n-i)+1; j++)
printf("*");
printf("\n");
}
return 0;
}
*/
/*Pyramid (y)*/
53

/*
int main(void)
{
int i,j,n;
printf("Enter number of lines : ");
scanf("%d",&n);
for(i=1; i<=n; i++)
{
for(j=1; j<=i; j++)
printf(" ");
for(j=1; j<=2*(n-i)+1; j++)
printf("%d",n+1-i);
printf("\n");
}
return 0;
}
*/
/*Pyramid (z)*/
/*
int main(void)
{
int i,j,n;
printf("Enter number of lines : ");
scanf("%d",&n);
for(i=1; i<=n; i++)
{
for(j=1; j<=i; j++)
printf(" ");
for(j=1; j<=2*(n-i)+1; j++)
printf("%d",j);
printf("\n");
}
return 0;
}
*/
/*Pyramid (z1)*/
/*
int main(void)
54

}
*/

int i,j,n,p;
printf("Enter number of lines : ");
scanf("%d",&n);
for(i=1; i<=n; i++)
{
for(j=1; j<=i; j++)
printf(" ");
p=n+1-i;
for(j=1; j<=n-i+1; j++)
printf("%d",p++);
p=p-2;
for(j=1; j<=n-i; j++)
printf("%d",p--);
printf("\n");
}
return 0;

/*Pyramid (z2)*/
/*
int main(void)
{
int i,j,n,p;
printf("Enter number of lines : ");
scanf("%d",&n);
for(i=1; i<=n; i++)
{
for(j=1; j<=i; j++)
printf(" ");
p=n;
for(j=1; j<=n-i+1; j++)
printf("%d",p--);
p=p+2;
for(j=1; j<=n-i; j++)
printf("%d",p++);
printf("\n");
}
55

}
*/

return 0;

/*Pyramid (z3)*/
/*
int main(void)
{
int i,j,n;
printf("Enter n : ");
scanf("%d",&n);

}
*/

for(i=1; i<=n; i++)


{
for(j=1; j<=n-i; j++)
printf(" ");
for(j=1; j<=2*i-1; j++)
printf("*");
printf("\n");
}
n--;
for(i=1; i<=n; i++)
{
for(j=1; j<=i; j++)
printf(" ");
for(j=1; j<=2*(n-i)+1; j++)
printf("*");
printf("\n");
}
return 0;

/*Pyramid (z4)*/
/*
int main(void)
{
int i,j,n;
printf("Enter n : ");
56

}
*/

scanf("%d",&n);
for(i=1; i<=n; i++)
{
for(j=1; j<=n-i; j++)
printf(" ");
for(j=1; j<=2*i-1; j++)
printf("%d",i);
printf("\n");
}
n--;
for(i=1; i<=n; i++)
{
for(j=1; j<=i; j++)
printf(" ");
for(j=1; j<=2*(n-i)+1; j++)
printf("%d",n+1-i);
printf("\n");
}
return 0;

/*Pyramid (z5)*/
/*
int main(void)
{
int i,j,n;
printf("Enter n : ");
scanf("%d",&n);
for(i=1; i<=n; i++)
{
for(j=1; j<=n-i; j++)
printf(" ");
for(j=1; j<=2*i-1; j++)
printf("%d",j);
printf("\n");
}
n--;
for(i=1; i<=n; i++)
57

}
*/

for(j=1; j<=i; j++)


printf(" ");
for(j=1; j<=2*(n-i)+1; j++)
printf("%d",j);
printf("\n");

}
return 0;

/*Pyramid (z6)*/
/*
int main(void)
{
int i,j,n,p;
printf("Enter n : ");
scanf("%d",&n);
for(i=1; i<=n; i++)
{
for(j=1; j<=n-i; j++)
printf(" ");
p=i;
for(j=1; j<=i; j++)
printf("%d",p++);
p=p-2;
for(j=1; j<=i-1; j++)
printf("%d",p--);
printf("\n");
}
n--;
for(i=1; i<=n; i++)
{
for(j=1; j<=i; j++)
printf(" ");
p=n+1-i;
for(j=1; j<=n-i+1; j++)
printf("%d",p++);
p=p-2;
for(j=1; j<=n-i; j++)
58

printf("%d",p--);
printf("\n");

}
*/

}
return 0;

/*Pyramid (z7)*/
/*
int main(void)
{
int i,j,n,p;
printf("Enter n : ");
scanf("%d",&n);
for(i=1; i<=n; i++)
{
for(j=1; j<=n-i; j++)
printf(" ");
p=n;
for(j=1; j<=i; j++)
printf("%d",p--);
p=p+2;
for(j=1; j<=i-1; j++)
printf("%d",p++);
printf("\n");
}
n--;
for(i=1; i<=n; i++)
{
for(j=1; j<=i; j++)
printf(" ");
p=n;
for(j=1; j<=n-i+1; j++)
printf("%d",p--);
p=p+2;
for(j=1; j<=n-i; j++)
printf("%d",p++);
printf("\n");
}
return 0;
59

}
*/

** Back exercises for chapter 5:

**

Q-1) Write the output of the following code: Q-2) Write the output of
the following code: Q-3) Write the output of the following code: Q-4) Write
the output of the following code: Q-6) Write the output of the following
code: Q-7) Write the output of the following code: Q-8) Write the output of
the following code: Q-9) Write the output of the following code: Q-10) Write
the output of the following code: Q-11) Write the output of the following
code: Q-12) Write the output of the following code: Q-13) Write the output
of the following code: Q-14) Write the output of the following code: Q16) Write the output of the following code: Q-17) Write the output of the
following code: Q-18) Write the output of the following code: Q-19) Write
the output of the following code: Q-20) Write the output of the following
code: Q-21) Write the output of the following code: Q-22) Write the output
of the following code: Q-23) Write the output of the following code: Q24) Write the output of the following code: Q-25) Write the output of the
following code: Q-26) Write the output of the following code: Q-27) Write
the output of the following code: Q-28) Write the output of the following
code: Q-29) Write the output of the following code: Q-30) Write the output
of the following code: Q-31) Write the output of the following code: Q32) Write the output of the following code: Q-33) Write the output of the
following code: Q-34) Write the output of the following code: Q-35) Write
the output of the following code: Q-36) Write the output of the following
code: Q-37) Write the output of the following code: Q-38) Write the output
of the following code: Q-39) Write the output of the following code: Q40) Write the output of the following code: Q-41) Write the output of the
following code: Q-42) Write the output of the following code: Q-43) Write
the output of the following code: Q-44) Write the output of the following
code: Q-45) Write the output of the following code: Q-46) Write the output
of the following code: Q-47) Write the output of the following code: Q48) Write the output of the following code: Q-49) Write the output of the
following code: Q-50) Write the output of the following code: Q-51) Write
the output of the following code: Q-52) Write the output of the following
code: Q-53) Write the output of the following code: Q-54) Write the output
of the following code: Q-55) Write the output of the following code: Q56) Write the output of the following code: Q-57) Write the output of the
following code: Q-58) Write the output of the following code: Q-59) Write
the output of the following code: Q-60) Write the output of the following

60

code: Q-61) Write the output of the following code: Q-62) Write the output
of the following code:

Chapter 6

** In chapter exercises for chapter 6:

**

/*P6.1 Program to find the square root of a number*/


#include <stdio.h>
#include <math.h>
int main(void)
{
double n,s;
printf("Enter a number : ");
scanf("%lf",&n);
s=sqrt(n);
printf("Square root of %.2lf is %.2lf\n",n,s);
return 0;
}
/*P6.2 Program to draw a line*/
#include <stdio.h>
void drawline(void);
/*Function Declaration*/
int main(void)
{
drawline();
/*Function Call*/
return 0;
}
void drawline(void)
/*Function Definition*/
{
int i;
for(i=1; i<=80; i++)
printf("-");
}
/*P6.3 Program to find the sum of two numbers*/
#include <stdio.h>
int sum(int x,int y);
/*Function declaration*/
int main(void)
{
61

int a,b,s;
printf("Enter values for a and b : ");
scanf("%d%d",&a,&b);
s=sum(a,b);
/*Function call*/
printf("Sum of %d and %d is %d\n",a,b,s);
return 0;

}
int sum(int x,int y)
{
int s;
s=x+y;
return s;
}

/*Function definition*/

/*P6.4 Program to find the sum of two numbers*/


#include <stdio.h>
int sum(int x,int y); /*Function declaration*/
int main(void)
{
int a=10,b=20,k;
k=sum(a,b);
/*Function call*/
printf("%d\n",k);
k=sum(4,5);
/*Function call*/
printf("%d\n",k);
k=sum(a+b,b*2); /*Function call*/
printf("%d\n",k);
return 0;
}
int sum(int x,int y) /*Function definition*/
{
int s;
s=x+y;
return s;
}
/*P6.5 Program to understand the use of return statement*/
#include <stdio.h>
void selection(int age,float ht);
int main(void)
{
62

int age;
float ht;
printf("Enter age and height: ");
scanf("%d %f",&age,&ht);
selection(age,ht);
return 0;

}
void selection(int age,float ht)
{
if(age>25)
{
printf("Age should be less than 25\n");
return;
}
if(ht<5)
{
printf("Height should be more than 5\n");
return;
}
printf("Selected\n");
}
/*P6.6 Program to find the larger number*/
#include <stdio.h>
int larger(int x,int y);
int main(void)
{
int x, y;
printf("Enter two numbers : ");
scanf("%d%d",&x,&y);
printf("Larger number=%d\n",larger(x,y));
return 0;
}
int larger(int x,int y)
{
return x>y?x:y;
}
/*P6.7*/
#include <stdio.h>
63

void func(int a,int b);


int main(void)
{
int x=10,y=20;
func(x,y);
printf("x=%d,y=%d\n",x,y);
return 0;
}
void func(int a,int b)
{
a++;
b--;
printf("a=%d,b=%d\n",a,b);
}
/*P6.8 Program to find the sum of two numbers*/
#include <stdio.h>
int sum(int x,int y)
/*Function definition*/
{
int s;
s=x+y;
return s;
}
int main(void)
{
int a,b,s;
printf("Enter values for a and b : ");
scanf("%d %d",&a,&b);
s=sum(a,b);
/*Function call*/
printf("Sum of %d and %d is %d\n",a,b,s);
return 0;
}
/*P6.9 Program that finds whether a number is even or odd*/
#include <stdio.h>
void find(int n);
int main(void)
{
int num;
printf("Enter a number : ");
64

scanf("%d",&num);
find(num);
return 0;

}
void find(int n)
{
if(n%2==0)
printf("%d is even\n",n);
else
printf("%d is odd\n",n);
}
/*P6.10 Program to find out the factorial of a number*/
#include <stdio.h>
long int factorial(int n);
int main(void)
{
int num;
printf("Enter a number : ");
scanf("%d",&num);
if(num<0)
printf("No factorial of negative number\n");
else
printf("Factorial of %d is %ld\n",num,factorial(num));
return 0;
}
long int factorial(int n)
{
int i;
long int fact=1;
if(n==0)
return 1;
for(i=n; i>1; i--)
fact*=i;
return fact;
}
/*P6.11 Program that uses a function with no arguments and no return values*/
#include <stdio.h>
void displaymenu(void);
65

int main(void)
{
int choice;
displaymenu();
printf("Enter your choice : ");
scanf("%d",&choice);
return 0;
}
void displaymenu(void)
{
printf("1.Create database\n");
printf("2.Insert new record\n");
printf("3.Modify a record\n");
printf("4.Delete a record\n");
printf("5.Display all records\n");
printf("6.Exit\n");
}
/*P6.12*/
#include <stdio.h>
int func(void);
int main(void)
{
printf("%d\n",func());
return 0;
}
/*Returns the sum of squares of all odd numbers from 1 to 25*/
int func(void)
{
int num,s=0;
for(num=1; num<=25; num++)
{
if(num%2!=0)
s+=num*num;
}
return s;
}
/*P6.13 Program to find the type and area of a triangle*/
#include <stdio.h>
66

#include <math.h>
void type(float a,float b,float c);
void area(float a,float b,float c);
int main(void)
{
float a,b,c;
printf("Enter the sides of triangle : ");
scanf("%f%f%f",&a,&b,&c);
if(a<b+c && b<c+a && c<a+b)
{
type(a,b,c);
area(a,b,c);
}
else
printf("No triangle possible with these sides\n");
return 0;
}
void type(float a, float b, float c)
{
if((a*a)+(b*b)==(c*c) || (b*b)+(c*c)==(a*a) || (c*c)+(a*a)==(b*b))
printf("Right angled triangle\n");
if(a==b && b==c)
printf("Equilateral triangle\n");
else if(a== b || b==c || c==a)
printf("Isosceles trianlge\n");
else
printf("Scalene triangle\n");
}
void area(float a,float b,float c)
{
float s, area;
s=(a+b+c)/2;
area=sqrt(s*(s-a)*(s-b)*(s-c));
printf("Area of triangle=%f\n",area);
}
/*P6.14 Program to find the sum of digits of any number*/
#include <stdio.h>
int sum(int n);
int main(void)
67

int num;
printf("Enter a number : ");
scanf("%d",&num);
printf("Sum of digits of %d is %d\n",num,sum(num));
return 0;

}
int sum(int n)
{
int sum=0;
while(n>0)
{
sum+=n%10;
n/=10;
}
return sum;
}

/*Skip the last digit of number*/

/*P6.15 Program to understand the use of global variables*/


#include <stdio.h>
void func1(void);
void func2(void);
int a,b=6;
int main(void)
{
printf("Inside main() : a=%d,b=%d\n",a,b);
func1();
func2();
return 0;
}
void func1(void)
{
printf("Inside func1() : a=%d,b=%d\n",a,b);
}
void func2(void)
{
int a=8;
printf("Inside func2() : a=%d,b=%d\n",a,b);
}

68

/*P6.16 Program to understand the use of static variables*/


#include <stdio.h>
void func(void);
int main(void)
{
func();
func();
func();
return 0;
}
void func(void)
{
int a=10;
static int b=10;
printf("a=%d, b=%d\n",a,b);
a++;
b++;
}
/*P6.17*/
#include <stdio.h>
int reverse(int n);
int main(void)
{
int num;
printf("Enter a number : ");
scanf("%d",&num);
printf("%d\n",reverse(num));
return 0;
}
int reverse(int n)
{
int rev=0;
do
{
rev=rev*10+n%10;
n/=10;
}while(n>0);
return rev;
}
69

/*P6.18*/
#include <stdio.h>
long int reverse(long int n);
int isPalindrome(long int num);
int main(void)
{
long int num;
printf("Enter a number : ");
scanf("%ld",&num);
if(isPalindrome(num))
printf("Number is a palindrome\n");
else
printf("Number is not a palindrome\n");
return 0;
}
int isPalindrome(long int num)
{
if(num==reverse(num))
return 1;
return 0;
}
long int reverse(long int n)
{
long int rev=0;
do
{
rev=rev*10+n%10;
n/=10;
}while(n>0);
return rev;
}
/*P6.19*/
#include <stdio.h>
#include <math.h>
int isprime(int n);
int main(void)
{
int num;
printf("Enter a number : ");
70

scanf("%d",&num);
if(isprime(num))
printf("Number is prime\n");
else
printf("Number is not prime\n");
return 0;

}
int isprime(int n)
{
int i;
for(i=2; i<=sqrt(n); i++)
if(n%i==0)
return 0;
return 1;
}

/*P6.20*/
#include <stdio.h>
#include <math.h>
void printPrimes(int num1,int num2);
int isprime(int n);
int main(void)
{
int num1,num2;
printf("Enter two numbers : ");
scanf("%d%d",&num1,&num2);
printf("Prime number between %d and %d are : ",num1,num2);
printPrimes(num1,num2);
return 0;
}
void printPrimes(int num1, int num2)
{
int i;
for(i=num1; i<=num2; i++)
if(isprime(i))
printf("%d ",i);
}
int isprime(int n)
{
int i;
71

for(i=2; i<=sqrt(n); i++)


if(n%i==0)
return 0;
return 1;

/*P6.21*/
#include <stdio.h>
long int binary(int num);
int main(void)
{
int num;
printf("Enter a number : ");
scanf("%d",&num);
printf("Decimal=%d, Binary=%ld\n",num,binary(num));
return 0;
}
long int binary(int num)
{
long a=1,bin=0,rem;
while(num>0)
{
rem=num%2;
bin=bin+rem*a;
num/=2;
a*=10;
}
return bin;
}
/*P6.22*/
#include <stdio.h>
#include <math.h>
double power(double a,int n);
int main(void)
{
double a;
int n;
printf("Enter base : ");
scanf("%lf",&a);
72

printf("Enter exponent : ");


scanf("%d",&n);
printf("%lf raised to power %d is %lf\n",a,n,power(a,n));
return 0;

}
double power(double a,int n)
{
int i;
double p=1;
if(n==0)
return 1;
else
{
for(i=1; i<=abs(n); i++)
p=p*a;
if(n>0)
return p;
else
return 1/p;
}
}

/*P6.23 Program to convert a binary or octal number to a decimal number*/


#include <stdio.h>
func(int n,int base);
int main(void)
{
int num, base, result;
char choice;
printf("Enter 'b' for binary or 'o' for octal : ");
scanf("%c",&choice);
printf("Enter a number : ");
scanf("%d",&num);
base=(choice=='b')? 2 : 8;
result=func(num,base);
printf("Decimal number is %d\n",result);
return 0;
}
func(int n,int base)
{
73

int rem,d,j=1,dec=0;
while(n>0)
{
rem=n%10;
d=rem*j;
dec+=d;
j*=base;
n/=10;
}
return dec;

/*extract last digit*/

/*skip last digit*/

/*P6.24 Program to find out permutations and combinations*/


#include <stdio.h>
long factorial(int);
long perm(int,int);
long comb(int,int);
int main(void)
{
int n,r;
printf("Enter n and r: ");
scanf("%d%d",&n,&r);
printf("Total combinations are : %ld\n",comb(n,r));
printf("Total permutations are : %ld\n",perm(n,r));
return 0;
}
long comb(int n,int r)
{
long c;
c=perm(n,r)/factorial(r);
return c;
}
long perm(int n,int r)
{
long p;
p=factorial(n)/factorial(n-r) ;
return p;
}
long int factorial(int n)
{
74

int i;
long int fact=1;
if(n==0)
return 1;
for(i=n; i>1; i--)
fact*=i;
return fact;

/*P6.25 Pascals triangle*/


#include <stdio.h>
long factorial(int);
long comb(int,int);
int main(void)
{
int i,j,k;
printf("Enter number of rows for Pascal's triangle : ");
scanf("%d",&k);
for(i=0; i<k; i++)
{
for(j=0; j<=i; j++)
printf("%5ld",comb(i,j));
printf("\n");
}
return 0;
}
long comb(int n,int r)
{
long c;
c=factorial(n)/(factorial(r)*factorial(n-r));
return c;
}
long int factorial(int n)
{
int i;
long int fact=1;
if(n==0)
return 1;
for(i=n; i>1; i--)
fact*=i;
75

return fact;

/*P6.26 Program to convert a decimal number to roman number*/


#include <stdio.h>
int roman(int,int,char);
int main(void)
{
int num;
printf("Enter a number : ");
scanf("%d",&num);
if(num>=1000)
num = roman(num,1000,'m');
if(num>=500)
num = roman(num,500,'d');
if(num>=100)
num = roman(num,100,'c');
if(num>=50)
num = roman(num,50,'l');
if(num>=10)
num = roman(num,10,'x');
if(num>=5)
num = roman(num,5,'v');
if(num>=1)
roman(num,1,'i');
printf("\n");
return 0;
}
int roman(int n,int k,char c)
{
if(n==9)
{
printf("ix");
return 0;
}
if(n==4)
{
printf("iv");
return 0;
}
76

while(n>=k)
{
printf("%c",c);
n=n-k;
}
return n;

/*P6.27 Prime factors*/


#include <stdio.h>
void pfact(int num);
int main(void)
{
int num;
printf("Enter a number : ");
scanf("%d",&num);
pfact(num);
printf("\n");
return 0;
}
void pfact(int num)
{
int i;
for(i=2; num!=1; i++)
while(num%i==0)
{
printf("%d ",i);
num=num/i;
}
}
/*P6.28 Sum of series*/
#include <stdio.h>
long int factorial(int n);
double power(float x,int n);
double series(float x,int n);
int main(void)
{
float x;
int n;
77

printf("Enter x : ");
scanf("%f",&x);
printf("Enter number of terms : ");
scanf("%d",&n);
printf("%lf\n",series(x,n));
return 0;

}
double series(float x,int n)
{
int i,j,sign=1;
float term,sum=0;
for(i=1; i<=n; i++)
{
sign = (i%2==0)?-1:1;
j=2*i-1;
term=sign*power(x,j)/factorial(j);
sum+=term;
}
return sum;
}
long int factorial(int n)
{
int i;
long int fact=1;
if(n==0)
return 1;
for(i=n; i>1; i--)
fact*=i;
return fact;
}
double power(float x,int n)
{
int i;
float p=1;
for(i=1; i<=n; i++)
p=p*x;
return p;
}

** Back exercises for chapter 6:

**

78

/*E6.1*/
#include <stdio.h>
void func(void);
int main(void)
{
printf("Lucknow\n");
goto ab;
return 0;
}
void func(void)
{
ab:
printf("Bareilly\n");
}
/*E6.2*/
#include <stdio.h>
void func(int a,int b);
int main(void)
{
int x;
x=func(2,3);
return 0;
}
void func(int a,int b)
{
int s;
s=a+b;
return;
}
/*E6.3*/
#include <stdio.h>
int func(void);
int main(void)
{
int x=10;
x=func();
printf("%d\n",x);
return 0;
79

}
int func(void)
{
printf("Function\n");
}
/*E6.4*/
#include <stdio.h>
int add(int x,y,z)
{
return x+y+z;
}
int main(void)
{
int sum;
sum=add(1,2,3);
return 0;
}
/*E6.5*/
#include <stdio.h>
int main(void)
{
int s;
s=func(1,2);
printf("%d\n",s);
s=func(1,2,3,4);
printf("%d\n",s);
return 0;
}
int func(int a,int b,int c)
{
return a+b+c;
}
/*E6.6*/
#include <stdio.h>
int sum(int x,int y);
int multiply(int x,int y);
int main(void)
80

int m=6,n=3;
printf("%d\t",multiply(m,n));
printf("%d\t",multiply(15,4));
printf("%d\t",multiply(m+n,m-n));
printf("%d\n",multiply(6,sum(m,n)));
return 0;

}
int multiply(int x,int y)
{
return x*y;
}
int sum(int x,int y)
{
return x+y;
}
/*E6.7*/
#include <stdio.h>
int func(int x,int y);
int main(void)
{
int p=func(5,6);
printf("%d",p);
return 0;
}
int func(int x,int y)
{
int x=2;
return x*y;
}

/*E6.8*/
#include <stdio.h>
int min(int a,int b);
int main(void)
{
int a=10,b=5;
printf("%d\n",min(a,b));
return 0;
81

}
int min(int a,int b)
{
a<b? return a: return b;
}
/*E6.9*/
#include <stdio.h>
int max(int a,int b)
{
return a>b? a: b;
}
int main(void)
{
int a=2,b=8,c=3;
printf("%d\n",max(a,max(b,c)));
return 0;
}
/*E6.10*/
#include <stdio.h>
void func(int x,int y);
int main(void)
{
int x;
x=func(5,6)+100;
printf("%d",x);
return 0;
}
void func(int x,int y)
{
int z;
z=x+y;
}
/*E6.11*/
#include <stdio.h>
int diff(int x,int y)
{ return x-y; }
int sum(int x,int y)
82

{ return x+y; }
int main(void)
{
int a=20,b=5,c=2,d=6;
printf("%d\t",a+diff(d,c));
printf("%d\n",diff(a,sum(diff(b,c),d)));
return 0;
}
/*E6.12*/
#include <stdio.h>
int sqr(int x);
int cube(int x);
int func(int n);
int main(void)
{
int n=5;
printf("%d\n",func(n));
return 0;
}
int sqr(int x)
{ return x*x; }
int cube(int x)
{ return x*x*x; }
int func(int n)
{
return n+sqr(n-2)+cube(n-3);
}
/*E6.13*/
#include <stdio.h>
int func(int a,int b,int c);
int main(void)
{
int x=1,y=2,z=3,result;
result = func(x, y, (z=5,z+10));
printf("x=%d, y=%d, z=%d",x,y,z);
printf(" result=%d\n",result);
return 0;
}
83

func(int a, int b, int c)


{
return 2*(a+b+c);
}
/*E6.14*/
#include <stdio.h>
int sum(int a,int b);
int main(void)
{
(void)sum(1,2);
return 0;
}
int sum(int a,int b)
{
printf("Sum is %d\n",a+b);
return a+b;
}
/*E6.15*/
#include <stdio.h>
int square1(int a);
int square2(double a);
double square3(int a);
double square4(double a);
int main(void)
{
double x=2.5,y;
y=square1(x);
printf("%lf\t",y);
y=square2(x);
printf("%lf\t",y);
y=square3(x);
printf("%lf\t",y);
y=square4(x);
printf("%lf\n",y);
return 0;
}
int square1(int a)
{
84

return a*a;
}
int square2(double a)
{
return a*a;
}
double square3(int a)
{
return a*a;
}
double square4(double a)
{
return a*a;
}
/*E6.16*/
#include <stdio.h>
main()
{
int func(int a,int b)
{
return (a+b);
}
int c;
c=func(3,5);
printf("%d",c);
return 0;
}
/*E6.17*/
#include <stdio.h>
void display(int,int);
int main(void)
{
int x=15;
float y=290.5;
display(x,y);
return 0;
}
void display(int a,int b)
85

{
}

printf("%d

%d\n",a,b);

/*E6.18*/
#include <stdio.h>
void func(void);
int main(void)
{
int i=5;
for(i=i+1; i<8; i++)
func();
return 0;
}
void func(void)
{
int j;
for(j=1; j<3; j++)
printf("%d\t",++j);
}
/*E6.19*/
#include <stdio.h>
int func(int a,int b);
int main(void)
{
int i=2,j=3;
printf("%d\n",func(i,j));
return 0;
}
int func(int a,int b)
{
a=a-5;
b=b+5;
return(!a + --b);
}
/*E6.20*/
#include <stdio.h>
int func(int a,int b,int c);
86

int main(void)
{
int x;
x=func(2,3,4);
printf("%d\n",x);
return 0;
}
int func(int a,int b,int c)
{
return a,b,c;
}
/*E6.21*/
#include <stdio.h>
void func(int a,int b);
int main(void)
{
int i=5,j=10;
func(i/2,j%3);
return 0;
}
void func(int a,int b)
{
a/=2;
b--;
printf("%d\t",a+b);
}
/*E6.22*/
#include <stdio.h>
int a=5;
void func(void);
int main(void)
{
func();
printf("%d\n",a);
return 0;
}
void func(void)
{
87

int a=2;
printf("%d\t",a);

/*E6.23*/
#include <stdio.h>
int func(int x,int y);
int main(void)
{
int a=2,b=5;
a=func(a+b,a-b);
printf("%d\n",a);
return 0;
}
int func(int x,int y)
{
return x+y,x-y;
}
/*E6.24*/
#include <stdio.h>
int func(int k);
int main(void)
{
int i=0,k=3;
i+=func(k);
i+=func(k);
i+=func(k);
printf("%d\n",i);
return 0;
}
int func(int k)
{
static int m=2;
m=m+k;
return m;
}
/*E6.25*/
#include <stdio.h>
88

int main(void)
{
int i=9;
if(i==9)
{
int i=25;
}
printf("i=%d\n",i);
return 0;
}
/*E6.26*/
#include <stdio.h>
void func(int a,static int b);
int main(void)
{
func(1,2);
func(3,4);
return 0;
}
void func(int a,static int b)
{
a++;
b++;
printf("%d %d\n",a,b);
}
/*E6.27*/
#include <stdio.h>
int func(void);
int main(void)
{
int i;
for(i=1; i<=6; i++)
printf("%d ",func());
return 0;
}
int func(void)
{
static int k=1;
89

k*=2;
return k;

/*E6.28*/
#include <stdio.h>
int func(int n);
int main(void)
{
printf("%d ",func(2));
printf("%d ",func(5));
printf("%d ",func(2));
return 0;
}
int func(int n)
{
static int s=0;
int i;
for(i=1; i<=n; i++)
s+=i;
return s;
}
/*E6.29*/
#include <stdio.h>
int func(int a,int b);
int func1(int a, int b);
int func2(int a,int b);
int f1(int x,int y);
int f2(int x,int y);
int main(void)
{
int a,b;
printf("Enter a and b : ");
scanf("%d%d",&a,&b);
printf("%d ",func(a,b));
printf("%d ",func1(a,b));
printf("%d ",func2(a,b));
return 0;
}
90

int func(int a,int b)


{
int x;
if(a==b)
x=f1(a,b);
else
x=f2(a,b);
return x;
}
int func1(int a,int b)
{
if(a==b)
return f1(a,b);
return f2(a,b);
}
int func2(int a,int b)
{
return a==b? f1(a,b): f2(a,b);
}
int f1(int x,int y)
{
return x+y;
}
int f2(int x,int y)
{
return x-y;
}
/*E6.30*/
#include <stdio.h>
#include <math.h>
int func(int n);
int func1(int n);
int main(void)
{
int n;
printf("Enter a number : ");
scanf("%d",&n);
printf("%d ",func(n));
printf("%d ",func1(n));
91

return 0;
}
int func(int n)
{
int i,flag=0;
for(i=2; i<=sqrt(n); i++)
{
if(n%i==0)
{
flag=1;
break;
}
}
return flag;
}
int func1(int n)
{
int i;
for(i=2; i<=sqrt(n); i++)
if(n%i==0)
return 1;
return 0;
}
/*E6.31*/
#include <stdio.h>
int func(int n);
int func1(int n);
int main(void)
{
int n;
printf("Enter n : ");
scanf("%d",&n);
printf("%d ",func(n));
printf("%d ",func1(n));
return 0;
}
int func(int n)
{
if(n==39)
92

{
}
else

n+=5;
return n;

return n;
}
int func1(int n)
{
if(n==39)
n+=5;
return n;
}
/*E6.32*/
#include <stdio.h>
int func(int x,int b);
int func1(int x,int b);
int main(void)
{
int x,b;
printf("Enter x and b : ");
scanf("%d%d",&x,&b);
printf("%d ",func(x,b));
printf("%d ",func1(x,b));
return 0;
}
int func(int x,int b)
{
if(x==5)
return b+2;
else if(x>5)
return b+10;
else
return b;
}
int func1(int x,int b)
{
if(x==5)
b+=2;
93

else if(x>5)
b+=10;
return b;

/*E6.33*/
#include <stdio.h>
int abs(int a);
int abs1(int a);
int main(void)
{
int a;
printf("Enter a : ");
scanf("%d",&a);
printf("%d ",abs(a));
printf("%d ",abs1(a));
return 0;
}
int abs(int a)
{
if(a<0)
return -a;
else
return a;
}
int abs1(int a)
{
if(a<0)
a=-a;
return a;
}
/*E6.34*/
#include <stdio.h>
int func(int a,int b);
int func1(int a,int b);
int func2(int a,int b);
int main(void)
{
int a,b;
94

printf("Enter a and b : ");


scanf("%d%d",&a,&b);
printf("%d ",func(a,b));
printf("%d ",func1(a,b));
printf("%d ",func2(a,b));
return 0;

}
int func(int a,int b)
{
a=a-b;
if(a!=0)
return a;
else
return 0;
}
int func1(int a,int b)
{
a=a-b;
return a;
}
int func2(int a,int b)
{
return a-b;
}

/*E6.35*/
#include <stdio.h>
int func(int,int);
int func1(int,int);
int main(void)
{
int a,b;
printf("Enter a and b :");
scanf("%d%d",&a,&b);
printf("%d ",func(a,b));
printf("%d ",func1(a,b));
return 0;
}
int func(int a,int b)
{
95

a=a-b;
if(a!=0)
{
a++;
return a;
}
else
return 0;

}
int func1(int a,int b)
{
a=a-b;
if(a!=0)
a++;
return a;
}

/*E6.36*/
#include <stdio.h>
int reverse(int n);
int isPalindrome(int num);
int isPalindrome1(int num);
int main(void)
{
int num;
printf("Enter a number : ");
scanf("%d",&num);
if( isPalindrome(num) )
printf("Number is a palindrome\n");
else
printf("Number is not a palindrome\n");
if( isPalindrome1(num) )
printf("Number is a palindrome\n");
else
printf("Number is not a palindrome\n");
return 0;

}
int isPalindrome(int num)
{

96

if(num==reverse(num))
return 1;
else
return 0;

}
int isPalindrome1(int num)
{
if(num==reverse(num))
return 1;
return 0;
}
int reverse(int n)
{
int rev=0;
do
{
rev=rev*10+n%10;
n/=10;
}while(n>0);
return rev;
}
/*E6.37*/
#include <stdio.h>
int func(int a,int b);
int func1(int a,int b);
int main(void)
{
int a,b;
printf("Enter a and b : ");
scanf("%d%d",&a,&b);
printf("%d %d ",func(a,b),func1(a,b));
return 0;
}
int func(int a,int b)
{
a=a-b;
if(a!=2)
{
a++;
97

}
else
{

return a;

a=a+b;
printf("%d ",a);
return b;

int func1(int a,int b)


{
a=a-b;
if(a!=2)
{
a++;
return a;
}
a=a+b;
printf("%d ",a);
return b;
}
/*E6.38*/
#include <stdio.h>
int func(int,int);
int func1(int,int);
int main(void)
{
int a,b;
printf("Enter a and b : ");
scanf("%d%d",&a,&b);
printf("%d %d ",func(a,b),func1(a,b));
return 0;
}
int func(int m,int n)
{
if(m==5)
return n-10;
else if(m>5)
98

else

return n+10;
return n;

}
int func1(int m,int n)
{
if(m==5)
return n-10;
if (m>5)
return n+10;
return n;
}
/*E6.39*/
#include <stdio.h>
char findGrade(int m1,int m2,int m3,int m4);
char findGrade1(int m1,int m2,int m3,int m4);
int main(void)
{
int m1,m2,m3,m4;
printf("Enter m1,m2,m3,m4 : ");
scanf("%d%d%d%d",&m1,&m2,&m3,&m4);
printf("%c ",findGrade(m1,m2,m3,m4));
printf("%c ",findGrade1(m1,m2,m3,m4));
return 0;
}
char findGrade(int m1,int m2,int m3,int m4)
{
float total,per;
total = m1+m2+m3+m4;
per = total/4;
if(per>=85)
return 'A';
else if(per>=70)
return 'B';
else if(per>=55)
return 'C';
else if(per>=40)
return 'D';
else
99

return 'E';
}
char findGrade1(int m1,int m2,int m3,int m4)
{
float total,per;
total = m1+m2+m3+m4;
per = total/4;
if(per>=85)
return 'A';
if(per>=70)
return 'B';
if(per>=55)
return 'C';
if(per>=40)
return 'D';
return 'E';
}
/*E6.40*/
#include <stdio.h>
void mult_table(num);
int main(void)
{
int num;
printf("Enter a number : ");
scanf("%d",&num);
mult_table(num);
return 0;
}
void mult_table(num)
{
int i;
for(i=1; i<=10; i++)
printf("%2d x %2d = %3d\n", num, i, num*i);
}
/*E6.41 Program to print Armstrong numbers*/
#include <stdio.h>
void PrintArmstrong(void);
int isArmstrong(int num);
100

int cubesum(int n);


int main(void)
{
int num;
printf("Armstrong numbers are :\n");
PrintArmstrong();
printf("Enter a number : ");
scanf("%d",&num);
if(isArmstrong(num))
printf("%d is an Armstrong number\n",num);
else
printf("%d is not an Armstrong number\n",num);
return 0;

}
void PrintArmstrong(void)
{
int num;
for(num=100; num<=999; num++)
if(num==cubesum(num))
printf("%d\n",num);
}
int isArmstrong(int num)
{
if(num==cubesum(num))
return 1;
else
return 0;
}
int cubesum(int n)
{
int d,cube,sum=0;
while(n>0)
{
d = n%10;
n/=10;
cube = d*d*d;
sum = sum+cube;
101

}
return sum;

/*E6.42*/
#include <stdio.h>
int ProdDigits(long num);
int main(void)
{
long num;
printf("Enter a number : ");
scanf("%ld",&num);
printf("%d\n",ProdDigits(num));
return 0;
}
int ProdDigits(long num)
{
int prod=1,dig;
do
{
dig=num%10;
prod*=dig;
num/=10;
}while(num>0);
return prod;
}
/*E6.43*/
#include <stdio.h>
int MDR(long int num);
int mPersistence(long int num);
int ProdDigits(long int num);
int main(void)
{
long int num;
printf("Enter a number : ");
scanf("%ld",&num);
printf("Multiplicative Digital root of %d is %d\n",num,MDR(num));
printf("Persistence of %d is %d\n",num,mPersistence(num));
return 0;
102

}
int MDR(long int num)
{
while(num>9)/*while num is more than one digit*/
num=ProdDigits(num);
return num;
}
int mPersistence(long int num)
{
int per=0;
while(num>9)/*while num is more than one digit*/
{
per++;
num=ProdDigits(num);
}
return per;
}
int ProdDigits(long num)
{
int prod=1,dig;
do
{
dig=num%10;
prod*=dig;
num/=10;
}while(num>0);
return prod;
}
/*E6.44*/
#include <stdio.h>
int sumPrDivisors(int i);
int main(void)
{
int i;
printf("Enter i : ");
scanf("%d",&i);
printf("%d\n",sumPrDivisors(i));
return 0;
}
103

int sumPrDivisors(int num)


{
int i,s=0;
for(i=1; i<=num/2; i++)
if(num%i==0)
s+=i;
return s;
}
/*E6.45*/
#include <stdio.h>
int sumPrDivisors(int i);
int main(void)
{
int i;
for(i=1; i<=10000; i++)
if( sumPrDivisors(i)==i )
printf("%d\n",i);
return 0;
}
int sumPrDivisors(int num)
{
int i,s=0;
for(i=1;i<=num/2;i++)
if(num%i==0)
s+=i;
return s;
}
/*E6.46*/
#include <stdio.h>
int sumPrDivisors(int i);
int main(void)
{
int i,j;
for(i=1; i<=2000; i++)
for(j=1; j<=2000; j++)
if( i!=j && sumPrDivisors(i)==j && sumPrDivisors(j)==i )
printf("%d %d\n",i,j);
return 0;
104

}
int sumPrDivisors(int num)
{
int i,s=0;
for(i=1; i<=num/2; i++)
if(num%i==0)
s+=i;
return s;
}
/*E6.47*/
#include <stdio.h>
int sumPrDivisors(int i);
void perfect_amicable(int x,int y);
int main(void)
{
perfect_amicable(1,2000);
return 0;
}
void perfect_amicable(int x,int y)
{
int i,j;
for(i=x; i<=y; i++)
for(j=x; j<=y; j++)
if( sumPrDivisors(i)==j && sumPrDivisors(j)==i )
{
if(i==j)
printf("Perfect number : %d\n", i);
else
printf("Amicable numbers : %d %d\n",i,j);
}
}
int sumPrDivisors(int num)
{
int i,s=0;
for(i=1;i<=num/2;i++)
if(num%i==0)
s+=i;
return s;
105

}
/*E6.48*/
#include <stdio.h>
int isPrime(int n);
int sumPrDivisors(int i);
int main(void)
{
int i;
for(i=1; i<=100; i++)
if( isPrime(i))
printf("%d\t",i);
return 0;
}
int isPrime(int n)
{
return sumPrDivisors(n)==1;
}
int sumPrDivisors(int num)
{
int i,s=0;
for(i=1; i<=num/2; i++)
if(num%i==0)
s+=i;
return s;
}
/*E6.49*/
#include <stdio.h>
float convert(float n, char unitType);
int main(void)
{
float len;
printf("Enter length in inches : ");
scanf("%f",&len);
printf("Length in cms = %f\n", convert(len, 'i'));
printf("Enter length in cms : ");
scanf("%f",&len);
printf("Length in inches = %f\n", convert(len, 'c') );
return 0;
106

}
float convert(float n, char unitType)
{
return unitType=='i' ? n*2.54 : n/2.54;
}
/*E6.50*/
#include <stdio.h>
int Product(int a,int b);
int Quotient(int a,int b);
int Remainder(int a,int b);
int main(void)
{
int x,y;
printf("Enter x and y (y should be non-zero) : ");
scanf("%d%d",&x,&y);
printf("Product=%d\n",Product(x,y));
printf("Quotient=%d\n",Quotient(x,y));
printf("Remainder=%d\n",Remainder(x,y));
return 0;
}
int Product(int a, int b)
{
int i,p=0;
for(i=1; i<=b; i++)
p+=a;
return p;
}
int Quotient(int a, int b)
{
int q=0;
while(a>=b)
{
a-=b;
q++;
}
return q;
}
int Remainder(int a, int b)
{
107

while(a>=b)
a-=b;
return a;

/*E6.51*/
#include <stdio.h>
int isAlphaNumeric(char ch);
int isAlphabet(char ch);
int isNumeric(char ch);
int main(void)
{
char ch;
printf("Enter a character : ");
scanf("%c",&ch);
if( isAlphaNumeric(ch) )
printf("%c is AlphaNumeric\n",ch);
else
printf("%c is not AlphaNumeric\n",ch);
return 0;
}
int isAlphaNumeric(char ch)
{
return isAlphabet(ch) || isNumeric(ch);
}
int isAlphabet(char ch)
{
return ch>=65 && ch<=90 || ch>=97 && ch<=122;
}
int isNumeric(char ch)
{
return ch>=48 && ch<=57;
}
/*E6.52*/
#include <stdio.h>
char upper(char ch);
int main(void)
{
char ch;
108

while((ch=getchar())!='\n')
putchar(upper(ch));
return 0;

}
char upper(char ch)
{
return (ch>=97 && ch<=122) ? ch-32 : ch;
}
/*E6.53*/
#include <stdio.h>
double series(int n);
int main(void)
{
int n;
printf("Enter number of terms : ");
scanf("%d",&n);
printf("%lf\n",series(n));
return 0;
}
double series(int n)
{
int i;
double term,sum=0;
for(i=1; i<=n; i++)
{
term=1.0/(i*i);/*should take 1.0 for floating point arithmetic*/
sum+=term;
}
return sum;
}
/*E6.54*/
#include <stdio.h>
#include <math.h>
int isprime(int n);
void PrintTwinPrimes(int x);
void PrintTwinPrimes1(int x);
int main(void)
109

PrintTwinPrimes(1000);
PrintTwinPrimes1(1000);
return 0;

void PrintTwinPrimes(int n)
{
int i;
for(i=3; i<n; i=i+2)
{
if(isprime(i) && isprime(i+2) )
printf("%5d %5d\n",i,i+2);
}
}
/*isprime() callled lesser times in this function*/
void PrintTwinPrimes1(int n)
{
int i,flag=1;
for(i=3; i<n; i=i+2)
{
if(isprime(i+2))
{
if(flag==1)
printf("%5d %5d\n",i,i+2);
else
flag=1;
}
else
flag=0;
}
}
int isprime(int n)
{
int i;
for(i=2; i<=sqrt(n); i++)
if(n%i==0)
return 0;
110

return 1;

/*E6.55*/
#include <stdio.h>
int isLeap(int y);
int main(void)
{
int year;
printf("Enter year : ");
scanf("%d",&year);
if(isLeap(year))
printf("%d is a Leap Year\n", year);
else
printf("%d is not a Leap Year\n", year);
return 0;
}
int isLeap(int y)
{
if(y%100!=0 && y%4==0 || y%400==0)
return 1;
return 0;
}
/*E6.56*/
#include <stdio.h>
int isValid(int d,int m,int y);
int isLeap(int y);
int main(void)
{
int day,month,year;
printf("Enter date(dd/mm/yyyy): ");
scanf("%d/%d/%d",&day,&month,&year);
if( isValid(day,month,year) )
printf("%d/%d/%d is a valid date\n",day,month,year);
else
printf("%d/%d/%d is not a valid date\n",day,month,year);
return 0;
}
int isValid(int d,int m,int y)
111

if(y<1850 || y>2050 || m<1 || m>12 || d<1 || d>31)


return 0;
if(m==2)
/*Check for number of days in February*/
if(d==30 || d==31 || (d==29 && !isLeap(y)))
return 0;
if(m==4 || m==6 || m==9 || m==11)/*Check days in April,June,Sept,Nov*/
if(d==31)
return 0;
return 1;

}
int isLeap(int y)
{
if(y%100!=0 && y%4==0 || y%400==0)
return 1;
return 0;
}

/*E6.57*/
#include <stdio.h>
int main(void)
{
int d1,m1,y1,d2,m2,y2,c;
printf("Enter Date1(dd/mm/yyyy): ");
scanf("%d/%d/%d",&d1,&m1,&y1);
printf("Enter Date2(dd/mm/yyyy): ");
scanf("%d/%d/%d",&d2,&m2,&y2);
c=cmpdate(d1,m1,y1,d2,m2,y2);
if(c==1)
printf("Date 1 is before Date 2\n");
else if(c==-1)
printf("Date 2 is before Date 1\n");
else
printf("Dates are same\n");
return 0;

}
int cmpdate(int d1, int m1, int y1, int d2, int m2, int y2)
{
if(y1<y2)
112

return
if(y1>y2)
return
if(m1<m2)
return
if(m1>m2)
return
if(d1<d2)
return
if(d1>d2)
return
return 0;

1;
-1;
1;
-1;
1;
-1;

/*E6.58*/
#include <stdio.h>
int findJulian(int d,int m,int y);
int isLeap(int y);
int main(void)
{
int day,month,year;
printf("Enter date(dd/mm/yyyy): ");
scanf("%d/%d/%d",&day,&month,&year);
printf("Julian Day = %d\n",findJulian(day,month,year));
return 0;
}/*End of main()*/
int findJulian(int d,int m,int y)
{
int j=d;
switch(m-1)
{
case 11: j+=30;
case 10: j+=31;
case 9:
j+=30;
case 8:
j+=31;
case 7:
j+=31;
case 6:
j+=30;
case 5:
j+=31;
case 4:
j+=30;
113

/*Fall thru in all cases*/

case 3:
case 2:
case 1:

j+=31;
j+=28;
j+=31;

}
if( isLeap(y) && m>2 )
j=j+1;
return j;

}
int isLeap(int y)
{
if(y%100!=0 && y%100!=0 || y%400==0)
return 1;
return 0;
}
/*E6.59*/
#include <stdio.h>
void printDayOfWeek(int day,int month,int year);
int findJulian(int day, int month, int year);
int isLeap(int year);
void Print(int julianDay,int year);
int isValid(int d,int m,int y);
int main(void)
{
int day,month,year;
printf("Enter date(dd/mm/yyyy): ");
scanf("%d/%d/%d",&day,&month,&year);
if(isValid(day,month,year))
printDayOfWeek(day, month,year);
else
printf("Not a Valid date\n");
return 0;
}/*End of main()*/
void printDayOfWeek(int day,int month,int year)
{
int julianDay;
julianDay = findJulian(day,month,year);
Print(julianDay,year);
}
114

void Print(int j,int y)


{
int f,h,fh,day;
f = (y-1)/4;
h = (y-1)/100;
fh = (y-1)/400;
day = (y+j+f-h+fh)%7;
switch(day)
{
case 0: printf("Saturday\n");
case 1: printf("Sunday\n");
case 2: printf("Monday\n");
case 3: printf("Tuesday\n");
case 4: printf("Wednesday\n");
case 5: printf("Thursday\n");
case 6: printf("Friday\n");
}
}
int findJulian(int d,int m,int y)
{
int j=d;
switch(m-1)
{
case 11: j+=30;
case 10: j+=31;
case 9:
j+=30;
case 8:
j+=31;
case 7:
j+=31;
case 6:
j+=30;
case 5:
j+=31;
case 4:
j+=30;
case 3:
j+=31;
case 2:
j+=28;
case 1:
j+=31;
}
if( isLeap(y) && m>2 )
j=j+1;
return j;
}
115

break;
break;
break;
break;

break;
break;

break;

/*Fall thru in all cases*/

int isLeap(int y)
{
if(y%100!=0 && y%4==0 || y%400==0)
return 1;
return 0;
}
int isValid(int d, int m, int y)
{
if(y<1850 || y>2050 || m<1 || m>12 || d<1 || d>31)
return 0;
if(m==2)
/*Check for number of days in February*/
if(d==30 || d==31 || (d==29 && !isLeap(y)))
return 0;
if(m==4 || m==6 || m==9 || m==11)/*Check days in April,June,Sept,Nov*/
if(d==31)
return 0;
return 1;
}
/*E6.60*/
#include <stdio.h>
int diffDays(int d1,int m1,int y1,int d2,int m2,int y2);
int findJulian(int day,int month,int year);
int isLeap(int year);
int cmpdate(int d1,int m1,int y1,int d2,int m2,int y2);
int isValid(int d, int m, int y);
int main(void)
{
int d1,m1,y1,d2,m2,y2;
do
{
printf("Dates between years 1850 and 2050 are valid.\n");
printf("Enter dates with valid day,month and year values\n");
printf("Date1 should be before Date2\n\n");
printf("Enter Date1(dd/mm/yyyy): ");
scanf("%d/%d/%d",&d1,&m1,&y1);
printf("Enter Date2(dd/mm/yyyy): ");
scanf("%d/%d/%d",&d2,&m2,&y2);
116

}while( !isValid(d1,m1,y1) || !isValid(d2,m2,y2) || cmpdate(d1,m1,y1,d2,m2,y2)=


printf("Difference = %d\n",diffDays(d1,m1,y1,d2,m2,y2));
return 0;
}/*End of main()*/
int cmpdate(int d1, int m1, int y1, int d2, int m2, int y2)
{
if(y1<y2)
return 1;
if(y1>y2)
return -1;
if(m1<m2)
return 1;
if(m1>m2)
return -1;
if(d1<d2)
return 1;
if(d1>d2)
return -1;
return 0;
}
int isValid(int d, int m, int y)
{
if(y<1850 || y>2050 || m<1 || m>12 || d<1 || d>31)
return 0;
if(m==2)
/*Check for number of days in February*/
if(d==30 || d==31 || (d==29 && !isLeap(y)) )
return 0;
if(m==4 || m==6 || m==9 || m==11)/*Check days in April,June,Sept,Nov*/
if(d==31)
return 0;
return 1;
}
int diffDays(int d1,int m1,int y1,int d2,int m2,int y2)
{
int j1,j2,d,y;
j1=findJulian(d1, m1, y1);
j2=findJulian(d2, m2, y2);
117

if(y1==y2)
return j2-j1;
d=0;
for(y=y1+1; y<=y2-1; y++)
{
if(isLeap(y))
d=d+366;
else
d=d+365;
}
if (isLeap(y1))
return (366-j1) + d + j2 ;
else
return (365-j1) + d + j2 ;
}/*End of diffDays()*/
int findJulian(int d, int m, int y)
{
int j = d;
switch(m-1)
{
case 11: j+=30;
/*Fall thru in all cases*/
case 10: j+=31;
case 9:
j+=30;
case 8:
j+=31;
case 7:
j+=31;
case 6:
j+=30;
case 5:
j+=31;
case 4:
j+=30;
case 3:
j+=31;
case 2:
j+=28;
case 1:
j+=31;
}
if( isLeap(y) && m!=1 && m!=2 )
j = j+1;
return j;
}
int isLeap(int y)
{
118

if(y%100!=0 && y%4==0 || y%400==0)


return 1;
else
return 0;

Chapter 7

** In chapter exercises for chapter 7:

**

/*P7.1 Program to find the factorial of a number by recursive method*/


#include <stdio.h>
long int fact(int n);
long int Ifact(int n);
int main(void)
{
int num;
printf("Enter a number : ");
scanf("%d", &num);
if(num<0)
printf("No factorial for negative number\n");
else
printf("Factorial of %d is %ld\n", num, fact(num) );
if(num<0)
printf("No factorial for negative number\n");
else
printf("Factorial of %d is %ld\n", num, Ifact(num) );
return 0;
}/*End of main()*/
/*Recursive*/
long int fact(int n)
{
if(n==0)
return 1;
return(n*fact(n-1));
}/*End of fact()*/
/*Iterative*/
119

long int Ifact(int n)


{
long fact=1;
while(n>0)
{
fact=fact*n;
n--;
}
return fact;
}/*End of ifact()*/
/*P7.2 Program to display numbers from 1 to n and find their sum*/
#include <stdio.h>
int summation(int n);
void display1(int n);
void display2(int n);
int main(void)
{
int n;
printf("Enter number of terms : ");
scanf("%d", &n);
display1(n);
printf("\n");
display2(n);
printf("\n");
printf("sum = %d\n", summation(n));
return 0;
}/*End of main()*/
int summation(int n)
{
if(n==0)
return 0;
return ( n + summation(n-1) );
}/*End of summation()*/
/*displays in reverse order*/
void display1(int n)
{
if(n==0)
120

return;
printf("%d ",n);
display1(n-1);
}/*End of display1()*/
void display2(int n)
{
if(n==0)
return;
display2(n-1);
printf("%d ",n);
}/*End of display2()*/
/*P7.3 Program to display and find out the sum of series*/
/* Series : 1 + 2 + 3 + 4 + 5 +....... */
#include <stdio.h>
int series(int n);
int rseries(int n);
int main(void)
{
int n;
printf("Enter number of terms : ");
scanf("%d", &n);
printf("\b\b = %d\n", series(n));
/* \b to erase last +sign */
printf("\b\b = %d\n\n\n", rseries(n));
return 0;
}/*End of main()*/
/*Iterative function*/
int series(int n)
{
int i,sum=0;
for(i=1; i<=n; i++)
{
printf("%d + ", i);
sum+=i;
}
return sum;
121

}/*End of series()*/
/*Recursive function*/
int rseries(int n)
{
int sum;
if(n==0)
return 0;
sum=n+rseries(n-1);
printf("%d + ",n);
return sum;
}/*End of rseries()*/
/*P7.4 Program to display integer as sequence of digits and find sum of its digits*/
#include <stdio.h>
void display(long int n);
void Rdisplay(long int n);
int sumdigits( long int n);
int main(void)
{
long int num;
printf("Enter number : ");
scanf("%ld", &num);
printf("%d\n",sumdigits(num));
printf("\n");
display(num);
printf("\n");
Rdisplay(num);
printf("\n");
return 0;
}/*End of main()*/
/*Finds the sum of digits of an integer*/
int sumdigits(long int n)
{
if(n/10==0) /* if n is a single digit number*/
return n;
return n%10 + sumdigits(n/10);
}/*End of sumdigits()*/

122

/*Displays the digits of an integer*/


void display(long int n)
{
if(n/10==0)
{
printf("%d",n);
return;
}
display(n/10);
printf("%d",n%10);
}/*End of display()*/
/*Displays the digits of an integer in reverse order*/
void Rdisplay(long int n)
{
if(n/10==0)
{
printf("%d",n);
return;
}
printf("%d",n%10);
Rdisplay(n/10);
}/*End of Rdisplay()*/
/*P7.5 Program to convert a positive decimal number to Binary, Octal or Hexadecimal */
#include <stdio.h>
void convert(int, int);
int main(void)
{
int num;
printf("Enter a positive decimal number : ");
scanf("%d",&num);
convert(num,2);
printf("\n");
convert(num,8);
printf("\n");
convert(num,16);
printf("\n");
return 0;
}/*End of main()*/
123

void convert(int num,int base)


{
int rem=num%base;
if(num==0)
return;
convert(num/base,base);
if(rem<10)
printf("%d",rem);
else
printf("%c",rem-10+'A');
}/*End of convert()*/
/*P7.6 Program to raise a floating point number to a positive integer*/
#include <stdio.h>
float power(float a,int n);
float Ipower(float a,int n);
int main(void)
{
float a,p;
int n;
printf("Enter a and n : ");
scanf("%f %d",&a,&n);
p=power(a,n);
printf("%f raised to power %d is %f\n",a,n,p);
p=Ipower(a, n);
printf("%f raised to power %d is %f\n",a,n,p);
return 0;
}/*End of main()*/
/*Recursive*/
float power(float a,int n)
{
if(n==0)
return 1;
else
return(a * power(a,n-1));
}/*End of power()*/
124

/*Iterative*/
float Ipower(float a,int n)
{
int i;
float result=1;
for(i=1; i<=n; i++)
result=result * a;
return result;
}/*End of Ipower()*/
/*P7.7 Program to print prime factors*/
#include <stdio.h>
void PFactors(int num);
void IPFactors(int n);
int main(void)
{
int num;
printf("Enter a number : ");
scanf("%d", &num);
PFactors(num); printf("\n");
IPFactors(num); printf("\n");
return 0;
}/*End of main()*/
void PFactors(int num)
{
int i=2;
if(num==1)
return;
while(num%i!=0)
i++;
printf("%d ", i);
PFactors(num/i);
}/*End of PFactors()*/
/*Iterative*/
void IPFactors(int num)
{
int i;
125

for(i=2; num!=1; i++)


while(num%i == 0)
{
printf("%d ",i);
num = num/i;
}
}/*End of IPFactors()*/
/*P7.8 Program to find GCD of two numbers*/
#include <stdio.h>
int GCD(int a,int b);
int gcd(int a,int b);
int main(void)
{
int a, b;
printf("Enter a and b : \n");
scanf("%d%d",&a, &b);
printf("%d\n",GCD(a,b));
printf("%d\n",gcd(a,b));
return 0;
}/*End of main()*/
/*Recursive*/
int GCD(int a,int b)
{
if(b==0)
return a;
return GCD(b, a%b);
}/*End of GCD()*/
/*Iterative*/
int gcd(int a,int b)
{
int rem;
while(b!=0)
{
rem=a%b;
a=b;
b=rem;
}
126

return a;
}/*End of gcd()*/
/*P7.9 Program to generate fibonacci series*/
#include <stdio.h>
int fib(int n);
int TailRecursiveFib(int n);
int TRfib(int n, int next, int result);
void Ifib(int n);
int main(void)
{
int nterms, i;
printf("Enter number of terms : ");
scanf("%d",&nterms);
for(i=0; i<nterms; i++)
printf("%d ",fib(i));
printf("\n");
for(i=0; i<nterms; i++)
printf("%d ",TailRecursiveFib(i));
printf("\n");

Ifib(nterms);
printf("\n");
return 0;

/*Recursive*/
int fib(int n)
{
if(n==0 || n==1)
return(1);
return(fib(n-1) + fib(n-2));
}
int TailRecursiveFib(int n)
{
return TRfib(n,1,1);
127

}
int TRfib(int n, int next, int result)
{
if(n==0)
return(result);
return TRfib(n-1, next+result, next);
}
/*Iterative*/
void Ifib(int n)
{
int i,x=0,y=1,z;
printf("%d ", y);
for(i=1; i<n; i++)
{
z=x+y;
printf("%d ", z);
x = y;
y = z;
}
}
/*P7.10 Program that tests whether a number is divisible by 11 and 9 or not*/
#include <stdio.h>
#include <math.h>
int divisibleBy9(long int x);
int divisibleBy11(long int x);
int main(void)
{
long int num;
printf("Enter the number to be tested : ");
scanf("%ld", &num);
if(divisibleBy9(abs(num)))
printf("The number is divisible by 9\n");
else
printf("The number is not divisible by 9\n");

128

if(divisibleBy11(abs(num)))
printf("The number is divisible by 11\n");
else
printf("The number is not divisible by 11\n");
return 0;
}/*End of main()*/
int divisibleBy9(long int n)
{
int sumofDigits;
if(n==9)
return 1;
if(n<9)
return 0;
sumofDigits=0;
while(n>0)
{
sumofDigits += n%10;
n/=10;
}
return divisibleBy9(sumofDigits);
}/*End of divisibleBy9()*/
int divisibleBy11(long int n)
{
int s1=0, s2=0,diff;
if(n==0)
return 1;
if(n<10)
return 0;
while(n>0)
{
s1+=n%10;
n/=10;
s2+=n%10;
n/=10;
}
diff = s1>s2 ? (s1-s2) : (s2-s1);
return divisibleBy11(diff);
}/*End of divisibleBy11()*/
129

/*P7.11 Program to solve Tower of Hanoi problem using recursion*/


#include <stdio.h>
void tofh(int ndisk, char source, char temp, char dest);
int main(void)
{
char source='A',temp='B',dest='C';
int ndisk;
printf("Enter the number of disks : ");
scanf("%d", &ndisk );
printf("Sequence is :\n");
tofh(ndisk, source, temp, dest);
return 0;
}/*End of main()*/
void tofh(int ndisk, char source, char temp, char dest)
{
if(ndisk==1)
{
printf("Move Disk %d from %c-->%c\n", ndisk, source, dest);
return;
}
tofh(ndisk-1, source, dest, temp);
printf("Move Disk %d from %c-->%c\n", ndisk, source, dest);
tofh(ndisk-1, temp, source, dest);
}/*End of tofh( )*/
/*P7.12 Program to find the factorial of a number by tail recursion*/
#include <stdio.h>
long TailRecursiveFact(int n);
long TRfact(int n, int result);
int main(void)
{
int num;
printf("Enter a number : ");
scanf("%d", &num);
if(num<0)
printf("No factorial for negative number\n");
printf("Factorial of %d is %ld\n", num, TailRecursiveFact(num));
return 0;
}
/*Tail recursive*/
130

long TRfact(int n, int result)


{
if(n==0)
return result;
return TRfact(n-1, n*result);
}/*End of TRFact()*/
/*Helper function for tail recursive function*/
long TailRecursiveFact(int n)
{
return TRfact(n,1);
}/*End of TailRecursiveFact()*/
/*P7.13 Program to search an element through binary search*/
#include <stdio.h>
#define SIZE 100
int binary_search(int arr[],int item, int low, int high);
int main(void)
{
int arr[SIZE],i, item, n;
printf("Enter the number of elements : ");
scanf("%d",&n);
printf("Enter elements of the array(in sorted order) : \n");
for(i=0; i<n; i++)
scanf("%d",&arr[i]);
printf("Enter the item to be searched : ");
scanf("%d", &item);
i=binary_search(arr,item,0,n-1);
if(i==-1)
printf("Not Present\n");
else
printf("Present at index %d\n",i);
return 0;
}/*End of main()*/
int binary_search(int arr[],int item,int low,int up)
{
int mid;
if(up < low)
131

return -1;
/*not found*/
mid=(low+up)/2;
if(item > arr[mid])
return binary_search(arr,item,mid+1,up);
else if(item < arr[mid])
return binary_search(arr,item,low,mid-1);
else
return mid;
/*found*/
}/*End of binary_search()*/

** Back exercises for chapter 7:

**

/*E7.1*/
#include <stdio.h>
int func1(int a,int b);
int func2(int a,int b);
int main(void)
{
printf("%d %d\n",func1(3,8),func2(3,8));
return 0;
}
func1(int a,int b)
{
if(a>b)
return 0;
return b + func1(a,b-1);
}
func2(int a,int b)
{
if(a>b)
return 0;
return a + func2(a+1,b);
}
/*E7.2*/
#include <stdio.h>
int func(int a, int b);
int main(void)
{
printf("%d \n",func(3,8));
132

/*Search in right porti

/*Search in left portio

return 0;
}
int func(int a, int b)
{
if(a>b)
return 1000;
return a + func(a+1,b);
}
/*E7.3*/
#include <stdio.h>
int func(int a);
int func1(int a);
int main(void)
{
printf("%d\n",func(6));
printf("%d\n",func1(6));
return 0;
}
int func(int a)
{
if(a==10)
return a;
return a + func(a+1);
}
int func1(int a)
{
if(a==0)
return a;
return a + func1(a+1);
}
/*E7.4*/
#include <stdio.h>
int func(int a,int b);
int main(void)
{
printf("%d\n",func(4,8));
printf("%d\n",func(3,8));
return 0;
133

}
int func(int a,int b)
{
if(a==b)
return a;
return a+b+func(a+1,b-1);
}
/*E7.5*/
#include <stdio.h>
void func1(int,int);
void func2(int,int);
int main(void)
{
func1(10,18);
printf("\n");
func2(10,18);
return 0;
}/*End of main()*/
void func1(int a,int b)
{
if(a>b)
return;
printf("%d ",b);
func1(a,b-1);
}
void func2(int a,int b)
{
if(a>b)
return;
func2(a,b-1);
printf("%d ",b);
}
/*E7.6*/
#include <stdio.h>
void func1(int a,int b);
134

void func2(int a,int b);


int main(void)
{
func1(10,18);
printf("\n");
func2(10,18);
return 0;
}
void func1(int a,int b)
{
if(a>b)
return;
printf("%d ",a);
func1(a+1,b);
}
void func2(int a,int b)
{
if(a>b)
return;
func2(a+1,b);
printf("%d ",a);
}
/*E7.7*/
#include <stdio.h>
int func(int a, int b);
int main(void)
{
printf("%d\t",func(3,8));
printf("%d\t",func(3,0));
printf("%d\n",func(0,3));
return 0;
}
int func(int a, int b)
{
if(b==0)
return 0;
if(b==1)
return a;
return a + func(a,b-1);
135

}
/*E7.8*/
#include <stdio.h>
int count(int n);
int main(void)
{
printf("%d\n",count(17243));
return 0;
}
int count(int n)
{
if(n==0)
return 0;
return 1 + count(n/10);
}
/*E7.9*/
#include <stdio.h>
int func(int n);
int main(void)
{
printf("%d\n",func(14837));
return 0;
}
int func(int n)
{
return (n)? n%10 + func(n/10) : 0;
}
/*E7_10*/
#include <stdio.h>
int count(long int n, int d);
int main(void)
{
printf("%d\n",count(123212,2));
return 0;
}
int count(long int n, int d)
{
136

if(n == 0)
return 0;
else if(n%10 == d)
return 1 + count(n/10,d);
else
return count(n/10,d);

/*E7_11*/
#include <stdio.h>
int f(char *s,char a);
int main(void)
{
char str[100],a;
printf("Enter a string :");
gets(str);
printf("Enter a character :");
scanf("%c",&a);
printf("%d\n",f(str,a));
return 0;
}
int f(char *s,char a)
{
if(*s=='\0')
return 0;
if(*s==a)
return 1 + f(s+1,a);
return f(s+1,a);
}
/*E7_12*/
#include <stdio.h>
void func1(int n);
void func2(int n);
int main(void)
{
func1(4);
printf("\n");
func2(4);
return 0;
137

}
void func1(int n)
{
int i;
if(n==0)
return;
for(i=1; i<=n; i++)
printf("*");
printf("\n");
func1(n-1);
}
void func2(int n)
{
int i;
if(n==0)
return;
func2(n-1);
for(i=1; i<=n; i++)
printf("*");
printf("\n");
}
/*E7_13 Input and add n numbers*/
#include <stdio.h>
int
InputAndAdd(int n);
int main(void)
{
int n;
printf("Enter n :");
scanf("%d",&n);
printf("%d\n",InputAndAdd(n));
return 0;
}
int
InputAndAdd(int n)
{
int a;
printf("Enter a number : ");
scanf("%d",&a);
138

if(n==1)
return a;
return a + InputAndAdd(n-1);

/*E7_14 Enter a line of text and Reverse it*/


#include <stdio.h>
void func(void);
int main(void)
{
printf("Enter text :\n");
func();
printf("\n");
return 0;
}/*End of main()*/
void func(void)
{
char c;
if((c=getchar())!='\n')
func();
putchar(c);
}
/*E7_15 Count prime numbers*/
#include <stdio.h>
#include <math.h>
int countPrimes(int a, int b);
int isprime(int n);
int main(void)
{
int a,b;
printf("Enter values of a and b :");
scanf("%d %d",&a,&b);
printf("\nTotal prime numbers = %d\n",countPrimes(a,b));
return 0;
}
countPrimes(int a, int b)
{
if(a>b)
return 0;
139

if(isprime(b))
{
printf("%d ",b);
return 1 + countPrimes(a,b-1);
}
else
return countPrimes(a,b-1);

}
int isprime(int n)
{
int i;
for(i=2; i<=sqrt(n); i++)
if(n%i == 0)
return 0;
return 1;
}

/*E7_16 Find sum of those proper divisors of number a*/


#include <stdio.h>
int sumdiv(int num, int x);
int main(void)
{
int num;
printf("Enter a number : ");
scanf("%d",&num);
printf("\nSum of divisors = %d\n",sumdiv(num,num/2));
return 0;
}
sumdiv(int num, int x)
{
if(x==1)
{
printf("%d ",x);
return 1;
}
if(num%x==0)/*if x is a proper divisor*/
{
printf("%d ",x);
140

}
else
}

return x + sumdiv(num,x-1);
return sumdiv(num,x-1);

/*E7_17 find whether a number is perfect or not */


#include <stdio.h>
int sumdiv(int num, int x);
int main(void)
{
int num;
printf("Enter a number :");
scanf("%d",&num);
if(sumdiv(num, num/2) == num)
printf("Perfect\n");
else
printf("Not Perfect\n");
return 0;
}
sumdiv(int num, int x)
{
if(x==1)
return 1;
if(num%x==0)/*if x is a proper divisor*/
return x + sumdiv(num,x-1);
else
return sumdiv(num,x-1);
}
/*E7_18 Display a number in words*/
#include <stdio.h>
void f(int n);
int main(void)
{
int num=12340;
f(num);
return 0;
}
void f(int n)
141

if(n==0)
return;
f(n/10);
switch(n%10)
{
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
}

printf("zero ");break;
printf("one ");break;
printf("two ");break;
printf("three ");break;
printf("four ");break;
printf("five ");break;
printf("six ");break;
printf("seven ");break;
printf("eight ");break;
printf("nine ");break;

/*E7_19 Reverse an integer*/


#include <stdio.h>
void reverse(int n, int *p_rev);
int main(void)
{
int rev=0;
reverse(1234,&rev);
printf("%d\n",rev);

rev=0;
reverse(4567,&rev);
printf("%d\n",rev);
return 0;

void reverse(int n, int *p_rev)


{
if(n==0)
142

return;
*p_rev = *p_rev * 10 + n%10;
reverse(n/10, p_rev);

/*E7_20 Find remainder*/


#include <stdio.h>
int rem(int a,int b);
int main(void)
{
int a,b;
printf("Enter two numbers :");
scanf("%d%d",&a,&b);
printf("%d\n",rem(a,b));
return 0;
}
int rem(int a,int b)
{
if(a<b)
return a;
return rem(a-b,b);
}
/*E7_21 Find Quotient*/
#include <stdio.h>
int quo(int a,int b);
int main(void)
{
int a,b;
printf("Enter two numbers :");
scanf("%d%d",&a,&b);
printf("%d\n",quo(a,b));
return 0;
}
int quo(int a,int b)
{
if(a<b)
return 0;
return 1 + quo(a-b,b);
}
143

/*E7_22*/
#include <stdio.h>
int main(void)
{
int a,b;
printf("Enter two numbers :");
scanf("%d%d",&a,&b);
printf("%d\n",pow(a,b));
return 0;
}
int pow(int a, int n)
{
if (n==0)
return 1;
else if (n%2==0)
return pow(a*a, n/2);
else
return a * pow(a*a, (n-1)/2);
}

/*E7_23 Multiplication by Russian peasant method*/


#include <stdio.h>
int f(int a,int b);
int main(void)
{
int a,b;
printf("Enter two numbers : ");
scanf("%d%d",&a,&b);
printf("%d\n",f(a,b));
return 0;
}
int f(int a,int b)
{
if(a==0) /*if we write if(a==1) return b; then 0 * b can not be computed, so t
return 0;
if(a%2!=0) /*if a is odd*/
return b + f(a/2, b*2);
return f(a/2, b*2);
}
/*E7_24*/
144

#include <stdio.h>
int log2(int num);
int logN(int num,int base);
int main(void)
{
int num, base;
printf("Enter a number :");
scanf("%d",&num);
printf("%d\n",log2(num));
printf("Enter a number and a base :");
scanf("%d%d",&num,&base);
printf("%d\n",logN(num,base)) ;
return 0;

}
int log2(int num)
{
if(num==1)
return 0;
return 1 + log2(num/2);
}
int logN(int num,int base)
{
if(num<base)
return 0;
return 1 + logN(num/base,base);
}
/*E7_25 Binomial coefficient*/
#include <stdio.h>
int BC(int n, int k);
int main(void)
{
int n,k;
printf("Enter n and k : ");
scanf("%d%d",&n,&k);
printf("%d\n",BC(n,k));
return 0;
145

}
int BC(int n,int k)
{
if(k==0 || k==n)
return 1;
return BC(n-1,k-1) + BC(n-1,k);
}
/*E7_26*/
#include <stdio.h>
long int fact(int num);
double power(float x,int n);
double series(float x,int n);
double rseries(float x,int n);
int main(void)
{
float x;
int n;
printf("Enter x : ");
scanf("%f", &x);
printf("Enter number of terms : ");
scanf("%d", &n);
printf("Iterative %lf\n",series(x,n));
printf("Recursive %lf\n",rseries(x,n));
return 0;
}
long int fact(int num)
{
int i;
long int f=1;
for(i=1; i<=num; i++)
f=f*i;
return f;
}
double power(float x,int n)
{
int i;
float p=1;
for(i=1; i<=n; i++)
p = p*x;
146

return p;
}
double series(float x,int n)
{
int i,j,sign=1;
float term,sum=0;
for(i=1; i<=n; i++)
{
sign = (i%2==0)?-1:1;
j = 2*i-1;
term = sign*power(x,j)/fact(j);
sum+=term;
}
return sum;
}
double rseries(float x,int n)
{
int sign=1;
float term;
if(n==0)
return 0;
sign = (n%2==0)?-1:1;
term = sign * power(x,2*n-1)/fact(2*n-1);
return term + rseries(x,n-1);
}
/*E7_27 Print pyramid of numbers */
#include <stdio.h>
void func1(int n);
void func2(int n);
void func3(int n);
int main(void)
{
func1(4);
printf("\n");
func2(4);
printf("\n");
func3(4);
return 0;
147

}
void func1(int n)
{
int i;
if(n==0)
return;
else
{
func1(n-1);
for(i=1; i<= n; i++)
printf("%d ",i);
printf("\n");
}
}
void func2(int n)
{
int i;
if(n==0)
return;
else
{
for(i=1; i<=n; i++)
printf("%d ",i);
printf("\n");
func2(n-1);
}
}
void func3(int n)
{
int i;
if(n==0)
return;
else
{
for(i=n; i>=1; i--)
printf("%d ",i);
printf("\n");
148

func3(n-1);

/*E7_28 Return nth triangular number*/


#include <stdio.h>
#include <math.h>
int func(int n);
int main(void)
{
int n;
printf("Enter n :");
scanf("%d",&n);
printf("%d\n",func(n));
return 0;
}
func(int n)
{
if(n==1)
return 1;
return n + func(n-1);
}

Chapter 8

** In chapter exercises for chapter 8:

**

/*P8.1 Program to input values into an array and display them*/


#include <stdio.h>
int main(void)
{
int arr[5],i;
for(i=0; i<5; i++)
{
printf("Enter a value for arr[%d] : ",i);
scanf("%d",&arr[i]);
}
printf("The array elements are : \n");
for(i=0; i<5; i++)
printf("%d\t",arr[i]);
149

printf("\n");
return 0;

/*P8.2 Program to add elements of an array*/


#include <stdio.h>
int main(void)
{
int arr[10],i,sum=0;
for(i=0; i<10; i++)
{
printf("Enter a value for arr[%d] : ",i);
scanf("%d",&arr[i]);
sum+=arr[i];
}
printf("Sum=%d\n",sum);
return 0;
}
/*P8.3 Program to count even and odd numbers in an array*/
#include <stdio.h>
#define SIZE 10
int main(void)
{
int arr[SIZE],i,even=0,odd=0;
for(i=0; i<SIZE; i++)
{
printf("Enter a value for arr[%d] : ",i);
scanf("%d",&arr[i]);
if(arr[i]%2 == 0)
even++;
else
odd++;
}
printf("Even numbers=%d, Odd numbers=%d\n",even,odd);
return 0;
}
/*P8.4 Program to find the largest and smallest number in an array*/
#include <stdio.h>
150

int main(void)
{
int i,arr[10]={2,5,4,1,8,9,11,6,3,7};
int small,large;
small=large=arr[0];
for(i=1; i<10; i++)
{
if(arr[i] < small)
small=arr[i];
if(arr[i] > large)
large=arr[i];
}
printf("Smallest=%d,Largest=%d\n",small,large);
return 0;
}
/*P8.5 Program to reverse the elements of an array*/
#include <stdio.h>
int main(void)
{
int i,j,temp,arr[10] = {1,2,3,4,5,6,7,8,9,10};
for(i=0,j=9; i<j; i++,j--)
{
temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
printf("After reversing, the array is : ");
for(i=0; i<10; i++)
printf("%d ",arr[i]);
printf("\n");
return 0;
}
/*P8.6 Program to convert a decimal number to binary number*/
#include <stdio.h>
int main(void)
{
int num,arr[15],i,j;
printf("Enter a decimal number : ");
151

scanf("%d",&num);
i=0;
while(num>0)
{
arr[i] = num%2; /*store the remainder in array*/
num/=2;
i++;
}
printf("Binary number is : ");
for(j=i-1; j>=0; j--)
/*print the array backwards*/
printf("%d",arr[j]);
printf("\n");
return 0;

/*P8.7 Program to pass array elements to a function*/


#include <stdio.h>
void check(int num);
int main(void)
{
int arr[10],i;
printf("Enter the array elements : ");
for(i=0; i<10; i++)
{
scanf("%d",&arr[i]);
check(arr[i]);
}
return 0;
}
void check(int num)
{
if(num%2==0)
printf("%d is even\n",num);
else
printf("%d is odd\n",num);
}
/*P8.8 Program to understand the effect of passing an array to a function*/
#include <stdio.h>
void func(int val[]);
152

int main(void)
{
int i,arr[6]={1,2,3,4,5,6};
func(arr);
printf("Contents of array are : ");
for(i=0; i<6; i++)
printf("%d ",arr[i]);
printf("\n");
return 0;
}
void func(int val[])
{
int sum=0,i;
for(i=0; i<6; i++)
{
val[i]=val[i]*val[i];
sum+=val[i];
}
printf("Sum of squares=%d\n",sum);
}
/*P8.9 Program that uses a general function which works on arrays of different sizes*/
#include <stdio.h>
int add(int arr[],int n);
int main(void)
{
int a[5]={2,4,6,8,10};
int b[8]={1,3,5,7,9,11,13,15};
int c[10]={1,2,3,4,5,6,7,8,9,10};
printf("Sum of elements of array a : %d\n",add(a,5));
printf("Sum of elements of array b : %d\n",add(b,8));
printf("Sum of elements of array c : %d\n",add(c,10));
return 0;
}
int add(int arr[],int n)
{
int i,sum=0;
for(i=0; i<n; i++)
sum+=arr[i];
return sum;
153

}
/*P8.10 Program to input and display a matrix*/
#define ROW 3
#define COL 4
#include <stdio.h>
int main(void)
{
int mat[ROW][COL],i,j;
printf("Enter the elements of the matrix(%dx%d) row-wise :\n",ROW,COL);
for(i=0; i<ROW; i++)
for(j=0; j<COL; j++)
scanf("%d",&mat[i][j]);

printf("The matrix that you have entered is :\n");


for(i=0; i<ROW; i++)
{
for(j=0; j<COL; j++)
printf("%5d",mat[i][j]);
printf("\n");
}
printf("\n");
return 0;

/*P8.11 Addition of two matrices*/


#define ROW 3
#define COL 4
#include <stdio.h>
int main(void)
{
int i,j,mat1[ROW][COL],mat2[ROW][COL],mat3[ROW][COL];
printf("Enter matrix mat1(%dx%d)row-wise :\n",ROW,COL);
for(i=0; i<ROW; i++)
for(j=0; j<COL; j++)
scanf("%d",&mat1[i][j]);
printf("Enter matrix mat2(%dx%d)row-wise :\n",ROW,COL);
for(i=0; i<ROW; i++)
for(j=0; j<COL; j++)
scanf("%d",&mat2[i][j] );
154

/*Addition*/
for(i=0; i<ROW; i++)
for(j=0; j<COL; j++)
mat3[i][j] = mat1[i][j] + mat2[i][j];
printf("The resultant matrix mat3 is :\n");
for(i=0; i<ROW; i++)
{
for(j=0; j<COL; j++)
printf("%5d",mat3[i][j]);
printf("\n");
}
return 0;

/*P8.12 Multiplication of two matrices*/


#include <stdio.h>
#define ROW1 3
#define COL1 4
#define ROW2 COL1
#define COL2 2
int main(void)
{
int mat1[ROW1][COL1],mat2[ROW2][COL2],mat3[ROW1][COL2];
int i,j,k;
printf("Enter matrix mat1(%dx%d)row-wise :\n",ROW1,COL1);
for(i=0; i<ROW1; i++)
for(j=0; j<COL1; j++)
scanf("%d",&mat1[i][j]);
printf("Enter matrix mat2(%dx%d)row-wise :\n",ROW2,COL2);
for(i=0; i<ROW2; i++)
for(j=0; j<COL2; j++)
scanf("%d",&mat2[i][j] );
/*Multiplication*/
for(i=0; i<ROW1; i++)
for(j=0; j<COL2; j++)
{
mat3[i][j] = 0;
for(k=0; k<COL1; k++)
mat3[i][j] += mat1[i][k] * mat2[k][j];
}
155

printf("The Resultant matrix mat3 is :\n");


for(i=0; i<ROW1; i++)
{
for(j=0; j<COL2; j++)
printf("%5d",mat3[i][j]);
printf("\n");
}
return 0;

/*P8.13 Tranpose of matrix. */


#include <stdio.h>
#define ROW 3
#define COL 4
int main(void)
{
int mat1[ROW][COL], mat2[COL][ROW],i,j;
printf("Enter matrix mat1(%dx%d) row-wise : \n",ROW,COL);
for(i=0; i<ROW; i++)
for(j=0; j<COL; j++)
scanf("%d",&mat1[i][j]);
for(i=0; i<COL; i++)
for(j=0; j<ROW; j++)
mat2[i][j]=mat1[j][i];

printf("Transpose of matrix is:\n");


for(i=0; i<COL; i++)
{
for(j=0; j<ROW; j++)
printf("%5d",mat2[i][j]);
printf("\n");
}
return 0;

/*P8.14 Input and output of strings using scanf() and printf()*/


#include <stdio.h>
int main(void)
{
156

char str[10]="Anpara";
printf("String is : %s\n",str);
printf("Enter new value for string : ");
scanf("%s",str);
printf("String is : %s\n",str);
return 0;

/*P8.15 Program for input and output of strings using gets() and puts()*/
#include <stdio.h>
int main(void)
{
char str[10];
printf("Enter a string : ");
gets(str);
printf("String is : ");
puts(str);
return 0;
}
/*P8.16 Program to convert a decimal number to Binary, octal or hexadecimal*/
#include <stdio.h>
void func(int num,int b);
int main(void)
{
int num,ch;
printf("Enter a decimal number : ");
scanf("%d",&num);
printf("1.Binary\n2.Octal\n3.Hexadecimal\n");
printf("Enter your choice : ");
scanf("%d",&ch);
switch(ch)
{
case 1:
printf("Binary equivalent is : ");
func(num,2);
break;
case 2:
printf("Octal equivalent is : ");
func(num,8);
157

case 3:

}
printf("\n");
return 0;

break;
printf("Hexadecimal equivalent is : ");
func(num,16);
break;

}
void func(int num,int b)
{
int i=0,j,rem;
char arr[20];
while(num>0)
{
rem=num%b;
num/=b;
if(rem>9 && rem<16)
arr[i++]=rem-10+'A';
else
arr[i++]=rem+'0';
}
for(j=i-1; j>=0; j--)
printf("%c",arr[j]);
}
/*P8.17 Linear search in an array*/
#include <stdio.h>
#define MAX 50
int LinearSearch(int arr[],int n,int item);
int main(void)
{
int i,n,item,arr[MAX],index;
printf("Enter the number of elements : ");
scanf("%d",&n);
printf("Enter the elements : \n");
for(i=0; i<n; i++)
scanf("%d", &arr[i]);
printf("Enter the item to be searched : ");
scanf("%d", &item);
158

index=LinearSearch(arr,n,item);
if(index==-1)
printf("%d not found in array\n",item);
else
printf("%d found at position %d\n",item,index);
return 0;

int LinearSearch(int arr[],int n,int item)


{
int i=0;
while(i<n && item!=arr[i])
i++;
if(i<n)
return i;
else
return -1;
}
/*P8.18 Binary search in an array*/
#include <stdio.h>
#define MAX 50
int BinarySearch(int arr[],int size,int item);
int main(void)
{
int i,size,item,arr[MAX],index;
printf("Enter the number of elements : ");
scanf("%d",&size);
printf("Enter the elements(in sorted order) : \n");
for(i=0; i<size; i++)
scanf("%d",&arr[i]);
printf("Enter the item to be searched : ");
scanf("%d",&item);
index=BinarySearch(arr,size,item);
if(index==-1)
printf("%d not found in array\n",item);
else
159

printf("%d found at position %d\n",item,index);


return 0;

}
int BinarySearch(int arr[],int size,int item)
{
int low=0,up=size-1,mid;
while(low<=up)
{
mid=(low+up)/2;
if(item > arr[mid])
low=mid+1;
/*Search in right half*/
else if(item < arr[mid])
up=mid-1;
/*Search in left half*/
else
return mid;
}
return -1;
}
/*P8.19*/
#include <stdio.h>
#define MAX 100
int main(void)
{
int arr[MAX],i,j,n,temp,min;
printf("Enter the number of elements : ");
scanf("%d",&n);
for(i=0; i<n; i++)
{
printf("Enter element %d : ",i+1);
scanf("%d", &arr[i]);
}
/*Find the index of smallest element*/
min=0;
for(j=1; j<n; j++)
{
if(arr[min]>arr[j])
min=j ;
}
if(min!=0)
160

temp=arr[0];
arr[0]=arr[min];
arr[min]=temp ;

}
for(i=0; i<n; i++)
printf("%d ", arr[i]);
printf("\n");
return 0;

/*P8.20 Selection sort*/


#include <stdio.h>
#define MAX 100
int main(void)
{
int arr[MAX],i,j,n,temp,min;
printf("Enter the number of elements : ");
scanf("%d",&n);
for(i=0; i<n; i++)
{
printf("Enter element %d : ",i+1);
scanf("%d",&arr[i]);
}
/*Selection sort*/
for(i=0; i<n-1; i++)
{
/*Find the index of smallest element*/
min=i;
for(j=i+1; j<n; j++)
{
if(arr[min]>arr[j])
min=j ;
}
if(i!=min)
{
temp=arr[i];
arr[i]=arr[min];
arr[min]=temp ;
}
161

}
printf("Sorted list is : \n");
for(i=0; i<n; i++)
printf("%d ",arr[i]);
printf("\n");
return 0;

/*P8.21*/
#include <stdio.h>
#define MAX 100
int main(void)
{
int arr[MAX],i,j,temp,n,xchanges;
printf("Enter the number of elements : ");
scanf("%d",&n);
for(i=0; i<n; i++)
{
printf("Enter element %d : ",i+1);
scanf("%d",&arr[i]);
}
xchanges=0;
for(j=0; j<n-1; j++)
{
if(arr[j] > arr[j+1])
{
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
xchanges++;
}
}

for(i=0; i<n; i++)


printf("%d ",arr[i]);
printf("\nTotal exchanges = %d ",xchanges);
return 0;

162

/*P8.22 Bubble sort*/


#include <stdio.h>
#define MAX 100
int main(void)
{
int arr[MAX],i,j,temp,n,xchanges;
printf("Enter the number of elements : ");
scanf("%d",&n);
for(i=0; i<n; i++)
{
printf("Enter element %d : ",i+1);
scanf("%d",&arr[i]);
}
/*Bubble sort*/
for(i=0; i<n-1 ;i++)
{
xchanges = 0;
for(j=0; j<n-1-i; j++)
{
if(arr[j] > arr[j+1])
{
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
xchanges++;
}
}
if(xchanges==0) /*If list is sorted*/
break;
}
printf("Sorted list is :\n");
for(i=0; i<n; i++)
printf("%d ",arr[i]);
printf("\n");
return 0;
}

/*P8.23 Program to insert an item in an array at a specified index by moving other elem
#include <stdio.h>
#define SIZE 10
163

int main(void)
{
int arr[SIZE];
int i,item,index;
printf("Enter elements of the array : \n");
for(i=0; i<SIZE-1; i++) /*rightmost space in the array should be empty*/
scanf("%d",&arr[i]);
printf("Enter the item to be inserted : ");
scanf("%d",&item);
printf("Enter the index where item is to be inserted : ");
scanf("%d",&index);
for(i=SIZE-2; i>=index; i--)
arr[i+1]=arr[i];
/*Shift elements to the right*/
arr[i+1]=item;
/*Insert item at the proper place*/

for(i=0; i<SIZE; i++)


printf("%d ",arr[i]);
printf("\n");
return 0;

/*P8.24 Program to insert an item in a sorted array at the proper place by shifting oth
#include <stdio.h>
#define SIZE 10
int main(void)
{
int arr[SIZE];
int i,item;
printf("Enter elements of the array(in sorted order) : \n");
for(i=0; i<SIZE-1; i++) /*rightmost space in the array should be empty*/
scanf("%d",&arr[i] );
printf("Enter the item to be inserted : ");
scanf("%d",&item);
for(i=SIZE-2; item<arr[i] && i>=0; i--)
arr[i+1]=arr[i];
/*Shift elements to the right*/
arr[i+1]=item;
/*Insert item at the proper place*/
for(i=0; i<SIZE; i++)
printf("%d ",arr[i]);
164

printf("\n");
return 0;

/*P8.25 Program of sorting using insertion sort*/


#include <stdio.h>
#define MAX 100
int main(void)
{
int arr[MAX],i,j,k,n;
printf("Enter the number of elements : ");
scanf("%d",&n);
for(i=0; i<n; i++)
{
printf("Enter element %d : ",i+1);
scanf("%d", &arr[i]);
}
/*Insertion sort*/
for(i=1; i<n; i++)
{
k=arr[i]; /*k is to be inserted at proper place*/
for(j=i-1; j>=0 && k<arr[j]; j--)
arr[j+1]=arr[j];
arr[j+1]=k;
}
printf("Sorted list is :\n");
for(i=0; i<n; i++)
printf("%d ",arr[i]);
printf("\n");
return 0;
}/*End of main()*/
/*P8.26 Program of merging two sorted arrays into a third sorted array*/
#include <stdio.h>
#define MAX 100
void merge(int arr1[],int arr2[],int arr3[],int n1,int n2);
int main(void)
{
int arr1[MAX],arr2[MAX],arr3[2*MAX],n1,n2,i;
printf("Enter the number of elements in array 1 : ");
165

scanf("%d",&n1);
printf("Enter all the elements in sorted order :\n");
for(i=0; i<n1; i++)
{
printf("Enter element %d : ",i+1);
scanf("%d",&arr1[i]);
}
printf("Enter the number of elements in array 2 : ");
scanf("%d",&n2);
printf("Enter all the elements in sorted order :\n");
for(i=0; i<n2; i++)
{
printf("Enter element %d : ",i+1);
scanf("%d",&arr2[i]);
}
merge(arr1,arr2,arr3,n1,n2);
printf("\nMerged list : ");
for(i=0; i<n1+n2; i++)
printf("%d ",arr3[i]);
printf("\n");
return 0;

}
void merge(int arr1[],int arr2[],int arr3[],int n1,int n2)
{
int i,j,k;
i=0; /*Index for first array*/
j=0; /*Index for second array*/
k=0; /*Index for merged array*/
while((i<=n1-1)&&(j<=n2-1))
{
if(arr1[i]<arr2[j])
arr3[k++]=arr1[i++];
else
arr3[k++]=arr2[j++];
}
while(i<=n1-1) /*Put remaining elements of arr1 into arr3*/
arr3[k++]=arr1[i++];
while(j<=n2-1) /*Put remaining elements of arr2 into arr3*/
arr3[k++]=arr2[j++];
}/*End of merge()*/
166

/*P8.27 Pascal's triangle*/


#include <stdio.h>
#define MAX 15
int main(void)
{
int a[MAX][MAX];
int i,j,n;
printf("Enter n : ");
scanf("%d",&n);
for(i=0; i<=n; i++)
{
for(j=0; j<=i; j++)
if(j==0 || i==j)
a[i][j]=1;
else
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
for(i=0; i<n; i++)
{
for(j=0; j<=i; j++)
printf("%5d",a[i][j]);
printf("\n");
}
return 0;
}
/*P8.28 Magic matrix*/
#include <stdio.h>
#define MAX 20
int main(void)
{
int a[MAX][MAX],i,j,n,num;
printf("Enter value of n(odd value) : ");
scanf("%d",&n);
i=n-1;
/*Bottom row*/
j=(n-1)/2; /*Centre column*/
for(num=1; num<=n*n; num++)
{
a[i][j]=num;
167

i++; /*move down*/


j--; /*move left*/
if(num%n==0)
{
i-=2; /*one above the previous row*/
j++;
/*back to the previous column*/
}
else if(i==n)
i=0; /*go to topmost row*/
else if(j==-1)
j=n-1; /*go to rightmost column*/

}
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
printf("%4d",a[i][j]);
printf("\n");
}
return 0;

/*P8.29 Prime numbers using sieve*/


#include <stdio.h>
#define MAX 10000
int main(void)
{
int p,i,n,a[MAX]={0};
printf("Enter n : ");
scanf("%d",&n);
p=2;
while(p*p <= n)
{
for(i=2; i*p<=n; i++)
a[i*p]=1;

/*Cross out all multiples of p*/

for(i=p+1; i<=n; i++) /*Find next uncrossed*/


if(a[i]==0)
{
168

p=i;
break;

}
/*Print all uncrossed integers*/
for(i=2; i<=n; i++)
if(a[i]==0)
printf("%d ",i);
return 0;

/*P8.30*/
#include <stdio.h>
#define MAX 20
int main(void)
{
int a[MAX][MAX],i,j,n,start,end;
printf("Enter value of n : ");
scanf("%d", &n);
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
scanf("%d", &a[i][j]);
printf("\n");
}
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
printf("%4d", a[i][j]);
printf("\n");
}
printf("\n\n");
for(start=0,end=n-1; start<=end; start++,end--)
{
for(i=start; i<=end; i++)
printf("%d ",a[start][i]);
for(i=start+1; i<=end; i++)
printf("%d ",a[i][end]);
169

for(i=end-1; i>=start; i--)


printf("%d ",a[end][i]);
for(i=end-1; i>=start+1; i--)
printf("%d ",a[i][start]);

}
return 0;

** Back exercises for chapter 8:

**

/*E8.1*/
#include <stdio.h>
int main(void)
{
int i,size=5,arr[size];
for(i=0; i<size; i++)
scanf("%d",&arr[i]);
for(i=0; i<size; i++)
printf("%d ",arr[i]);
return 0;
}
/*E8.2*/
#include <stdio.h>
int main(void)
{
int arr[4]={2,4,8,16},i=3,j=0;
while(i)
{
j+=arr[i];
i--;
}
printf("j=%d\n",j);
return 0;
}
/*E8.3*/
#include <stdio.h>
int main(void)
{
int i=0,j=0,arr[6]={4,2,6,0,5,10};
170

while(arr[i])
{
j+=arr[i];
i++;
}
printf("j=%d\n",j);
return 0;

/*E8.4*/
#include <stdio.h>
void func(int arr[]);
int main(void)
{
int arr[5]={5,10,15,20,25};
func(arr);
return 0;
}
void func(int arr[])
{
int i=5,sum=0;
while(i>2)
sum=sum+arr[--i];
printf("sum=%d\n",sum);
}
/*E8.5*/
#include <stdio.h>
int main(void)
{
int x[10],y[3][4],z[2][3][5];
printf("%u\t%u\t%u\n",sizeof(x),sizeof(y),sizeof(z));
return 0;
}
/*E8.6*/
#include <stdio.h>
void swapvar(int a,int b);
void swaparr(int arr1[5],int arr2[5]);
int main(void)
171

int a=4,b=6;
int arr1[5]={1,2,3,4,5};
int arr2[5]={6,7,8,9,10};
swapvar(a,b);
swaparr(arr1,arr2);
printf("a=%d, b=%d\n",a,b);
printf("arr1[0]=%d, arr1[4]=%d\n",arr1[0],arr1[4]);
printf("arr2[0]=%d, arr2[4]=%d\n",arr2[0],arr2[4]);
return 0;

}
void swapvar(int a,int b)
{
int temp;
temp=a, a=b, b=temp;
}
void swaparr(int arr1[5],int arr2[5])
{
int i,temp;
for(i=0; i<5; i++)
{
temp=arr1[i], arr1[i]=arr2[i], arr2[i]=temp; }
}
/*E8.7*/
#include <stdio.h>
int main(void)
{
int i,j,arr[3][4]={ {1,2,3,4}, {5,6,7,8}, {9,10,11,12} };
for(i=0; i<4; i++)
{
for(j=0; j<3; j++)
printf("%3d",arr[j][i]);
printf("\n");
}
return 0;
}
/*E8.8*/
#include <stdio.h>
int main(void)
172

int a[10]={2,-3,4,-5,6,7,1,9,-10,-11};
int i,j,x,k=0;
for(i=0; i<10; i++)
{
x=a[k];
if(x<0)
{
for(j=k; j<10; j++)
a[j]=a[j+1];
a[9]=x;
}
else
k++;
}
for(i=0; i<10; i++)
printf("%d ",a[i]);
printf("\n");
return 0;

/*E8.9*/
#include <stdio.h>
#define N 10
int main(void)
{
int i,a[N];
a[0]=a[1]=1;
for(i=2; i<N; i++)
a[i]=a[i-1]+a[i-2];

for(i=0; i<N; i++)


printf("%d ",a[i]);
return 0;

/*E8.10*/
#include <stdio.h>
#define N 6
173

int main(void)
{
int i,j,a[N]={1,2,3,4,5,6};
for(i=0; i<N; i++)
for(j=0; j<i; j++)
a[i]+=a[j];
for(i=0; i<N; i++)
printf("%d ",a[i]);
return 0;
}
/*E8.11*/
#include <stdio.h>
#define N 6
int main(void)
{
int i,j,a[N]={1,2,3,4,5,6};
for(i=0; i<N; i++)
for(j=i+1; j<N; j++)
a[i]+=a[j];

for(i=0; i<N; i++)


printf("%d ",a[i]);
return 0;

/*E8.12*/
#include <stdio.h>
#define N 10
int main(void)
{
int i,j,a[N]={1};
for(i=0; i<N; i++)
for(j=0; j<i; j++)
a[i]+=a[j];
for(i=0; i<N; i++)
printf("%d ",a[i]);
return 0;
}
174

/*E8.13*/
#include <stdio.h>
int func(int arr[],int size);
int main(void)
{
int arr[10]={1,2,3,4,8,10};
printf("%d\n",func(arr,6));
return 0;
}
int func(int arr[],int size)
{
if(size==0)
return 0;
else if(arr[size-1]%2==0)
return 1 + func(arr,size-1);
else
return func(arr,size-1);
}
/*E8.14*/
#include <stdio.h>
void func(int arr[],int i, int j);
int main(void)
{
int arr[10]={1,6,2,7,3,4,8,10,9,5};
func(arr,2,7);
return 0;
}
void func(int arr[],int i,int j)
{
if(i>j)
return;
func(arr,i+1,j);
printf("%d ",arr[i]);
}
/*E8.15*/
#include <stdio.h>
int main(void)
{
175

int arr[10]={1,2,3,4,8,10};
printf("%d\n",func(arr,6));
return 0;

}
int func(int arr[],int size)
{
if(size==0)
return 0;
return arr[size-1] + func(arr,size-1);
}
/*E8.16*/
#include <stdio.h>
int func(int arr[],int size);
int main(void)
{
int arr[10]={2,3,1,4,6,34};
printf("%d\n",func(arr,6));
return 0;
}
int func(int arr[],int size)
{
int m;
if(size==1)
return arr[0];
m=func(arr,size-1);
if(arr[size-1] < m)
return arr[size-1];
else
return m;
}
/*E8.17*/
#include <stdio.h>
int func(int arr[],int low,int high);
int main(void)
{
int arr[10]={3,4,2,11,8,10};
printf("%d\n",func(arr,0,5));
return 0;
176

}
int func(int arr[],int low,int high)
{
int mid,left,right;
if(low==high)
return arr[low];
mid=(low+high)/2;
left=func(arr,low,mid);
right=func(arr,mid+1,high);
if(left<right)
return left;
else
return right;
}
/*E8.18*/
#include <stdio.h>
#define MAX 50
int main(void)
{
int i,arr[MAX],size,temp;
printf("Enter size of array : ");
scanf("%d",&size);
printf("Enter array : ");
for(i=0; i<size; i++)
scanf("%d",&arr[i]);
for(i=0; i<size-1; i=i+2)
{
temp=arr[i];
arr[i]=arr[i+1];
arr[i+1]=temp;
}
for(i=0; i<size; i++)
printf("%d ",arr[i]);
return 0;
}
/*E8.19*/
#include <stdio.h>
#define MAX 50
177

int main(void)
{
int i,arr[MAX],size,max,min;
printf("Enter size of array : ");
scanf("%d",&size);
printf("Enter array : ");
for(i=0; i<size; i++)
scanf("%d",&arr[i]);
max=min=arr[0];
for(i=0; i<size; i++)
{
if(arr[i]>max)
max=arr[i];
if(arr[i]<min)
min=arr[i];
}
printf("%d %d %d\n",max,min,max-min);
return 0;
}
/*E8.20 Find largest and second largest element in an array */
#include <stdio.h>
#include <limits.h>
#include <stdlib.h>
#define MAX 50
int main(void)
{
int i,arr[MAX],size,max,smax;
printf("Enter size of array : ");
scanf("%d",&size);
printf("Enter array : ");
for(i=0; i<size; i++)
scanf("%d",&arr[i]);
if(size<2)
{
printf("There should be at least two elements\n");
exit(1);
}
max=smax=INT_MIN;

/*Include limits.h for INT_MIN*/


178

for(i=0; i<size; i++)


if(arr[i] > max)
{
smax=max;
max=arr[i];

}/*If arr[i] is less than max but greater than smax, change only smax*/
else if(arr[i] > smax)
smax = arr[i];

printf("Largest=%d, Second Largest=%d\n",max,smax);


return 0;

/*E8.21 Reverse first elements of an array*/


#include <stdio.h>
#define MAX 50
int main(void)
{
int i,arr[MAX],size,j,n,temp;
printf("Enter size of array : ");
scanf("%d",&size);
printf("Enter array : ");
for(i=0; i<size; i++)
scanf("%d",&arr[i]);
printf("Enter n : ");
scanf("%d",&n);

for(i=0,j=n-1; i<j; i++,j--)


{
temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
for(i=0; i<size; i++)
printf("%d ",arr[i]);
return 0;

/*E8.22*/
#include <stdio.h>
179

#define MAX 100


int main(void)
{
int arr[MAX],i,j,temp,n,xchanges;
printf("Enter the number of elements : ");
scanf("%d",&n);
for(i=0; i<n; i++)
{
printf("Enter element %d : ",i+1);
scanf("%d",&arr[i]);
}
/*Bubble sort*/
for(i=0; i<n-1 ;i++)
{
xchanges = 0;
for(j=0; j<n-1-i; j++)
{
if(arr[j] > arr[j+1])
{
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
xchanges++;
}
}
if(xchanges==0) /*If list is sorted*/
break;
}
printf("List in Ascending order is :\n");
for(i=0; i<n; i++)
printf("%d ",arr[i]);
printf("\n");

printf("List in Descending order is :\n");


for(i=n-1; i>=0; i--)
printf("%d ",arr[i]);
printf("\n");
return 0;

180

/*E8.23*/
#include <stdio.h>
#define MAX 100
void selection(int arr[], int n);
void bubble(int arr[], int n);
void insertion(int arr[], int n);
int main(void)
{
int i,n=10;
int arr1[MAX]={4,5,7,9,8,3,1,5,6,2};
int arr2[MAX]={4,5,7,9,8,3,1,5,6,2};
int arr3[MAX]={4,5,7,9,8,3,1,5,6,2};
selection(arr1,n);
bubble(arr2,n);
insertion(arr3,n);
for(i=0; i<n; i++)
printf("%d ",arr1[i]);
printf("\n");
for(i=0; i<n; i++)
printf("%d ",arr2[i]);
printf("\n");
for(i=0; i<n; i++)
printf("%d ",arr3[i]);
printf("\n");
return 0;
}/*End of main()*/
void selection(int arr[],int n)
{
int i,j,max,temp;
for(i=0; i<n-1; i++)
{
max = i;
for(j=i+1; j<n; j++)
{
if(arr[max] < arr[j])
181

max = j ;
}
if(i!=max)
{
temp = arr[i];
arr[i] = arr[max];
arr[max] = temp ;
}

void bubble(int arr[],int n)


{
int i,j,xchanges,temp;
for(i=0; i<n-1; i++)
{
xchanges = 0;
for(j=0; j<n-1-i; j++)
{
if(arr[j] < arr[j+1])
{
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
xchanges++;
}
}
if(xchanges==0) /*If list is sorted*/
break;
}
}
void insertion(int arr[],int n)
{
int i,j,k;
for(i=1; i<n; i++)
{
k=arr[i];
for(j=i-1; j>=0 && k>arr[j]; j--)
182

arr[j+1]=arr[j];
arr[j+1]=k;

/*E8.24*/
#include <stdio.h>
#define MAX 50
int AllDistinct(int arr[],int size);
int main(void)
{
int i,arr[MAX],size;
printf("Enter size of array : ");
scanf("%d",&size);
printf("Enter array : ");
for(i=0; i<size; i++)
scanf("%d",&arr[i]);
if(AllDistinct(arr,size))
printf("All elements are distinct\n");
else
printf("All elements are not distinct\n");
return 0;

}
int AllDistinct(int arr[],int size)
{
int i,j;
for(i=0; i<size; i++)
for(j=i+1; j<size; j++)
if(arr[i]==arr[j])/*Duplicate found*/
return 0;
return 1;
}
/*E8.25*/
#include <stdio.h>
#define MAX 50
int deleteDuplicates(int arr[],int size);
int main(void)
{
183

int i,arr[MAX],size;
printf("Enter size of array : ");
scanf("%d",&size);
printf("Enter array : ");
for(i=0; i<size; i++)
scanf("%d",&arr[i]);
size=deleteDuplicates(arr,size);
for(i=0; i<size; i++)
printf("%d ",arr[i]);
return 0;

}
int deleteDuplicates(int arr[],int size)
{
int i,j,k;
for(i=0; i<size; i++)
{
for(j=i+1; j<size; )
{
if(arr[i]==arr[j])/*Duplicate found*/
{
size--;
for(k=j; k<size; k++)
arr[k]=arr[k+1];
}
else
j++;
/*Continue Comparing*/
}
}
return size;/*Return the new size of the array*/
}
/*E8.26*/
#include <stdio.h>
#define MAX 50
int deleteDuplicates(int arr[],int size);
int main(void)
{
int i,arr[MAX],size;
printf("Enter size of array : ");
184

scanf("%d",&size);
printf("Enter array : ");
for(i=0; i<size; i++)
scanf("%d",&arr[i]);
size=deleteDuplicates(arr,size);
for(i=0; i<size; i++)
printf("%d ",arr[i]);
return 0;

}
int deleteDuplicates(int arr[],int size)
{
int i,k,n_dup;
for(i=0; i<size; i++)
{
if(arr[i]==arr[i+1])
{
k=i+1;
while(k<size && arr[k]==arr[k+1])
k++;
/*Duplicates of arr[i] start at i+1 and end at k*/
n_dup=k-i;
/*Number of duplictaes of arr[i]*/
for(k=i+1; k<size; k++)
arr[k]=arr[k+n_dup];
size=size-n_dup;
}
}
return size;/*Return the new size of the array*/
}
/*E8.27*/
#include <stdio.h>
#define MAX 50
int main(void)
{
int i,j,n,arr[MAX],inv=0;
printf("Enter size of array : ");
scanf("%d",&n);
for(i=0; i<n; i++)
{
185

printf("%d : ",i);
scanf("%d",&arr[i]);

}
for(i=0; i<n-1; i++)
for(j=i+1; j<n; j++)
if(arr[i] > arr[j])
inv++;
printf("Total inversions in the array : %d\n",inv);
return 0;

/*E8.28*/
#include <stdio.h>
#define MAX 50
int main(void)
{
int i,size,arr[MAX],count;
int max_freq=0;
int mf_element,element;
printf("Enter the number of elements : ");
scanf("%d",&size);
printf("Enter the elements in sorted order : \n");
for(i=0; i<size; i++)
scanf("%d",&arr[i]);
mf_element=arr[0];
max_freq=0;
i=0;
while(i<=size-1)
{
element=arr[i];
count=0;
while(arr[i]==element && i<size)
{
count++;
i++;
}
186

if(count > max_freq)


{
mf_element=element;
max_freq=count;
}

}
printf("%d occurs %d times\n", mf_element,max_freq);
return 0;

/*E8.29*/
#include <stdio.h>
#define MAX 50
int main(void)
{
int i,size,arr[MAX],leader;
printf("Enter size of array :");
scanf("%d",&size);
for(i=0; i<size; i++)
{
printf("%d : ",i);
scanf("%d",&arr[i]);
}
leader=arr[size-1];
/*Last element is a leader*/
printf("%d ", leader);

for(i=size-2; i>=0; i--)


if(arr[i]>leader)
{
/*A new leader is found*/
leader=arr[i];
printf("%d ",leader);
}
return 0;

/*E8.30*/
#include <stdio.h>
187

#define MAX 50
int LastOcc(int arr[],int size,int item);
int firstOcc(int arr[],int size,int item);
int main(void)
{
int i,size,item,arr[MAX],index;
printf("Enter the number of elements : ");
scanf("%d",&size);
printf("Enter the elements(in sorted order) : \n");
for(i=0; i<size; i++)
scanf("%d",&arr[i]);
printf("Enter the item to be searched : ");
scanf("%d",&item);

index=firstOcc(arr,size,item);
if(index==-1)
printf("%d not found in array\n",item);
else
{
printf("First occurence of %d is at position %d\n",item,index);
index=LastOcc(arr,size,item);
printf("Last occurence of %d is at position %d\n",item,index);
}
return 0;

int firstOcc(int arr[],int size,int item)


{
int low=0,up=size-1,mid;
if(arr[0]==item)
return 0;
while(low<=up)
{
mid=(low+up)/2;
if(arr[mid-1]<item && arr[mid]==item)
return mid;
if(item>arr[mid])
low=mid+1;
/*Search in right half*/
else if(item<=arr[mid]) /*if equal we'll search in left half*/
188

}
return -1;

up=mid-1;

/*Search in left half*/

int LastOcc(int arr[],int size,int item)


{
int low=0,up=size-1,mid;
if(arr[size-1]==item)
return size-1;
while(low<=up)
{
mid=(low+up)/2;
if(arr[mid+1]>item && arr[mid]==item)
return mid;
if(item>=arr[mid])/*if equal we'll search in right half */
low=mid+1;
/*Search in right half */
else if(item < arr[mid])
up=mid-1;
/*Search in left half */
}
return -1;
}
/*E8.31*/
#include <stdio.h>
#define MAX 20
void sort_Columnwise(int a[MAX][MAX],int m,int n);
void sort_RowWise(int a[MAX][MAX],int m,int n);
int main(void)
{
int a[MAX][MAX],i,j,m,n;
printf("Enter number of rows : ");
scanf("%d",&m);
printf("Enter number of columns : ");
scanf("%d",&n);
for(i=0; i<m; i++)
{
for(j=0; j<n; j++)
scanf("%d",&a[i][j]);
printf("\n");
189

}
for(i=0; i<m; i++)
{
for(j=0; j<n; j++)
printf("%4d",a[i][j]);
printf("\n");
}

sort_RowWise(a,m,n);
printf("\n");
for(i=0; i<m; i++)
{
for(j=0; j<n; j++)
printf("%4d",a[i][j]);
printf("\n");
}
sort_Columnwise(a,m,n);
printf("\n");
for(i=0; i<m; i++)
{
for(j=0; j<n; j++)
printf("%4d",a[i][j]);
printf("\n");
}
return 0;

void sort_Columnwise(int a[MAX][MAX],int m,int n)


{
int k,xchanges,i,j,temp;
for(k=0; k<n; k++)
{
/*Bubble sort*/
for(i=0; i<m-1 ;i++)
{
xchanges=0;
for(j=0; j<m-1-i; j++)
{
if(a[j][k] > a[j+1][k])
{
190

temp=a[j][k];
a[j][k]=a[j+1][k];
a[j+1][k]=temp;
xchanges++;

}
if(xchanges==0) /*If list is sorted*/
break;

void sort_RowWise(int a[MAX][MAX],int m,int n)


{
int i,j,k,temp,xchanges;
for(k=0; k<m; k++)
{
for(i=0; i<n-1 ;i++)
{
xchanges = 0;
for(j=0; j<n-1-i; j++)
{
if(a[k][j] > a[k][j+1])
{
temp=a[k][j];
a[k][j]=a[k][j+1];
a[k][j+1]=temp;
xchanges++;
}
}
if(xchanges==0) /*If list is sorted*/
break;
}
}
}
/*E8.32*/
#include <stdio.h>
#define MAX 20
void sort_Rowwise(int a[MAX][MAX],int m,int n);
191

void sort_Columnwise(int a[MAX][MAX],int m,int n);


int search(int a[MAX][MAX],int m,int n,int item);
int main(void)
{
int a[MAX][MAX],i,j,m,n,item;
printf("Enter the number of rows : ");
scanf("%d",&m);
printf("Enter the number of columns : ");
scanf("%d",&n);
for(i=0; i<m; i++)
{
for(j=0; j<n; j++)
scanf("%d",&a[i][j]);
printf("\n");
}
for(i=0; i<m; i++)
{
for(j=0; j<n; j++)
printf("%4d",a[i][j]);
printf("\n");
}
printf("\n");
sort_Rowwise(a,m,n);
for(i=0; i<m; i++)
{
for(j=0; j<n; j++)
printf("%4d",a[i][j]);
printf("\n");
}
sort_Columnwise(a,m,n);
printf("\n");
for(i=0; i<m; i++)
{
for(j=0; j<n; j++)
printf("%4d",a[i][j]);
printf("\n");
}
printf("Enter item to be searched: ");
192

scanf("%d",&item);
if(!search(a,m,n,item))
printf("Not found\n");
return 0;

int search(int a[MAX][MAX], int m, int n, int item)


{
int i,j;
i=0,j=n-1;
while(i<=n-1 && j>=0)
{
if(a[i][j] == item)
{
printf("Found at Row:%d, Column:%d\n", i,j);
return 1;
}
if( a[i][j] < item )
i++;
else
j--;
}
return 0;
}
void sort_Rowwise(int a[MAX][MAX], int m, int n)
{
int i,j,k, temp,xchanges;
for(k=0; k<m; k++)
{
for(i=0; i<n-1 ;i++)
{
xchanges = 0;
for(j=0; j<n-1-i; j++)
{
if(a[k][j] > a[k][j+1])
{
temp = a[k][j];
a[k][j] = a[k][j+1];
a[k][j+1] = temp;
193

xchanges++;

}
if(xchanges==0) /*If list is sorted*/
break;

void sort_Columnwise(int a[MAX][MAX], int m, int n)


{
int k,xchanges,i,j,temp;
for(k=0; k<n; k++)
{
for(i=0; i<m-1 ;i++)
{
xchanges = 0;
for(j=0; j<m-1-i; j++)
{
if(a[j][k] > a[j+1][k])
{
temp = a[j][k];
a[j][k] = a[j+1][k];
a[j+1][k] = temp;
xchanges++;
}
}
if(xchanges==0) /*If list is sorted*/
break;
}
}
}
/*E8.33*/
#include <stdio.h>
#define MAX 20
int main(void)
{
int a[MAX][MAX],i,j,m,n,temp;
printf("Enter the number of rows : ");
194

scanf("%d",&m);
printf("Enter the number of columns : ");
scanf("%d",&n);
for(i=0; i<m; i++)
{
for(j=0; j<n; j++)
scanf("%d",&a[i][j]);
printf("\n");
}
for(i=0; i<m; i++)
{
for(j=0; j<n; j++)
printf("%4d",a[i][j]);
printf("\n");
}
/*Interchange rows 0 and m-1*/
for(j=0; j<n; j++)
{
temp=a[0][j];
a[0][j]=a[m-1][j];
a[m-1][j]=temp;
}

printf("\n\n");
for(i=0; i<m; i++)
{
for(j=0; j<n; j++)
printf("%4d",a[i][j]);
printf("\n");
}
return 0;

/*E8.34*/
#include <stdio.h>
#define MAX 20
int main(void)
195

int a[MAX][MAX],i,j,m,n,temp,p,q;
printf("Enter the number of rows : ");
scanf("%d",&m);
printf("Enter the number of columns : ");
scanf("%d",&n);
for(i=0; i<m; i++)
{
for(j=0; j<n; j++)
scanf("%d",&a[i][j]);
printf("\n");
}
for(i=0; i<m; i++)
{
for(j=0; j<n; j++)
printf("%4d",a[i][j]);
printf("\n");
}
for(p=0,q=m-1; p<q; p++,q--)
/*Interchange rows p and q*/
for(j=0; j<n; j++)
{
temp=a[p][j];
a[p][j]=a[q][j];
a[q][j]=temp;
}

printf("\n");
for(i=0; i<m; i++)
{
for(j=0; j<n; j++)
printf("%4d",a[i][j]);
printf("\n");
}
return 0;

196

/*E8.35*/
#include <stdio.h>
#define MAX 20
int main(void)
{
int a[MAX][MAX],i,j,m,n,temp;
printf("Enter the number of rows : ");
scanf("%d",&m);
printf("Enter the number of columns : ");
scanf("%d",&n);
for(i=0; i<m; i++)
{
for(j=0; j<n; j++)
scanf("%d",&a[i][j]);
printf("\n");
}
for(i=0; i<m; i++)
{
for(j=0; j<n; j++)
printf("%4d",a[i][j]);
printf("\n");
}
/*Interchange columns 0 and n-1*/
for(i=0; i<m; i++)
{
temp=a[i][0];
a[i][0]=a[i][n-1];
a[i][n-1]=temp;
}
printf("\n");
for(i=0; i<m; i++)
{
for(j=0; j<n; j++)
printf("%4d",a[i][j]);
printf("\n");
}
197

return 0;

/*E8.36*/
#include <stdio.h>
#define MAX 20
int main(void)
{
int a[MAX][MAX],i,j,m,n,temp,p,q;
printf("Enter the number of rows : ");
scanf("%d",&m);
printf("Enter the number of columns : ");
scanf("%d",&n);
for(i=0; i<m; i++)
{
for(j=0; j<n; j++)
scanf("%d",&a[i][j]);
printf("\n");
}
for(i=0; i<m; i++)
{
for(j=0; j<n; j++)
printf("%4d",a[i][j]);
printf("\n");
}
for(p=0,q=n-1; p<q; p++,q--)
/*Interchange columns p and q*/
for(i=0; i<m; i++)
{
temp=a[i][p];
a[i][p]=a[i][q];
a[i][q]=temp;
}
printf("\n");
for(i=0; i<m; i++)
{
for(j=0; j<n; j++)
198

printf("%4d",a[i][j]);
printf("\n");

}
return 0;

/*E8.37*/
#include <stdio.h>
#define MAX 20
int isSymmetric(int a[MAX][MAX],int n);
int main(void)
{
int a[MAX][MAX],i,j,n;
printf("Enter the number of rows : ");
scanf("%d",&n);
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
scanf("%d",&a[i][j]);
printf("\n");
}
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
printf("%4d",a[i][j]);
printf("\n");
}
if(isSymmetric(a,n))
printf("Matrix is symmetric\n");
else
printf("Matrix is not symmetric\n");
return 0;
}
int isSymmetric(int a[MAX][MAX],int n)
{
int i,j;
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
if( a[i][j] != a[j][i] )
199

}
}

return 0;
return 1;

/*E8.38*/
#include <stdio.h>
int sumEven(int arr[],int size);
int main(void)
{
int arr[6]={1,2,3,4,8,10};
printf("%d\n",sumEven(arr,6));
return 0;
}
int sumEven(int arr[],int size)
{
if(size==0)
return 0;
else if(arr[size-1]%2==0)
return arr[size-1] + sumEven(arr,size-1);
else
return sumEven(arr,size-1);
}
/*E8.39*/
#include <stdio.h>
int func(int arr[],int low,int high);
int main(void)
{
int arr[6]={1,2,3,4,8,10};
printf("%d\n",func(arr,0,5));
return 0;
}
int func(int arr[],int low,int high)
{
int mid, left, right;
if(low==high)
return arr[low];
mid=(low+high)/2;
left=func(arr,low,mid);
200

right=func(arr,mid+1,high);
return left+right;

/*E8.40*/
#include <stdio.h>
void reverse(int arr[],int low,int high);
int main(void)
{
int i,arr[6]={1,2,3,4,8,10};
reverse(arr,0,5);
for(i=0; i<=5; i++)
printf("%d ",arr[i]);
return 0;
}
void reverse(int arr[],int low,int high)
{
int tmp;
if(low>=high)
return;
tmp=arr[low];
arr[low]=arr[high];
arr[high]=tmp;
reverse(arr,low+1,high-1);
}
/*E8.41*/
#include <stdio.h>
int isAscending(int arr[],int size);
int main(void)
{
int i,n,arr[50];
printf("Enter number of elements :");
scanf("%d",&n);
for(i=0; i<n; i++)
scanf("%d",&arr[i]);
if(isAscending(arr,n))
printf("Array elements are in strict ascending order\n");
else
printf("Array elements are not in strict ascending order\n");
201

return 0;
}
int isAscending(int arr[],int size)
{
if(size==1)
return 1;
if(arr[0]>=arr[1])
return 0;
return isAscending(arr+1,size-1);
}
/*E8.42*/
#include <stdio.h>
#define MAX 20
int main(void)
{
int a[MAX][MAX],i,j,m,n;
printf("Enter value of m (rows): ");
scanf("%d",&m);
printf("Enter value of n (columns): ");
scanf("%d",&n);
for(i=0; i<m; i++)
{
for(j=0; j<n; j++)
scanf("%d",&a[i][j]);
printf("\n");
}
for(i=0; i<m; i++)
{
a[i][n]=0;
for(j=0; j<n; j++)
a[i][n]+=a[i][j];
}
for(j=0; j<=n; j++)
{
a[m][j]=0;
for(i=0; i<m; i++)
a[m][j]+=a[i][j];
202

for(i=0; i<=m; i++)


{
for(j=0; j<=n; j++)
printf("%4d",a[i][j]);
printf("\n");
}
return 0;

/*E8.43*/
#include <stdio.h>
#define MAX 20
int main(void)
{
int a[MAX][MAX],i,j,k,m,n,rStart,cStart,rEnd,cEnd;
printf("Enter value of m (rows): ");
scanf("%d", &m);
printf("Enter value of n (columns): ");
scanf("%d", &n);
for(i=0; i<m; i++)
{
for(j=0; j<n; j++)
scanf("%d",&a[i][j]);
printf("\n");
}
for(i=0; i<m; i++)
{
for(j=0; j<n; j++)
printf("%4d", a[i][j]);
printf("\n");
}
printf("\n\n");

for(rStart=0,cStart=0,rEnd=m-1,cEnd=n-1; rStart<=rEnd && cStart<=cEnd; rStart++


{
203

for(k=cStart; k<=cEnd; k++)


printf("%d* ",a[rStart][k]);
for(k=rStart+1; k<=rEnd; k++)
printf("%d$ ",a[k][cEnd]);
if(rStart<rEnd)
for(k=cEnd-1; k>=cStart; k--)
printf("%d# ",a[rEnd][k]);
if(cStart<cEnd)
for(k=rEnd-1; k>=rStart+1; k--)
printf("%d& ",a[k][cStart]);
}
return 0;

/*P8.44*/
#include <stdio.h>
#define MAX 20
int main(void)
{
int a[MAX][MAX],i,j,n,start,end;
printf("Enter value of n : ");
scanf("%d", &n);
j=1;
for(start=0,end=n-1; start<=end; start++,end--)
{
for(i=start; i<=end; i++)
a[start][i]=j++;
for(i=start+1; i<=end; i++)
a[i][end]=j++;
for(i=end-1; i>=start; i--)
a[end][i]=j++;
for(i=end-1; i>=start+1; i--)
a[i][start]=j++;
}
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
printf("%4d", a[i][j]);
204

printf("\n");
}
printf("\n\n");
return 0;

/*E8.45*/
#include <stdio.h>
#define MAX 50
void partition(int a[],int size);
int main(void)
{
int i,arr[MAX],size;
printf("Enter size of array :");
scanf("%d",&size);
for(i=0; i<size; i++)
{
printf("%d : ",i);
scanf("%d",&arr[i]);
}
partition(arr,size);
for(i=0; i<size; i++)
printf("%d ",arr[i]);
return 0;
}
void partition(int a[],int size)
{
int i=0,j=size-1,temp;
while(i<j)
{
while(a[i]<0 && i<j) /*Move right*/
i++;
while(a[j]>=0 && i<j) /*Move left*/
j--;
if(i<j)
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
i++; j--;
205

/*E8.46 Program to find next greater element*/


#include <stdio.h>
#define MAX 50
int main(void)
{
int i,j,size,arr[MAX],next_ge[MAX];
printf("Enter size of array :");
scanf("%d",&size);
for(i=0; i<size; i++)
{
scanf("%d",&arr[i]);
next_ge[i]=-1;
}
for(i=0; i<size; i++)
for(j=i+1; j<size; j++)
if(arr[i] < arr[j])
{
next_ge[i] = arr[j];
break;
}

for(i=0; i<size; i++)


printf("%d\t",arr[i]);
printf("\n");
for(i=0; i<size; i++)
printf("%d\t",next_ge[i]);
return 0;

/*E8.47*/
#include <stdio.h>
#define MAX 50
int main(void)
{
int i,j,n,arr[MAX],min,temp;
206

int k=3;
printf("Enter size of array :");
scanf("%d",&n);
for(i=0; i<n; i++)
{
printf("%d : ",i);
scanf("%d",&arr[i]);
}

for(i=0; i<k; i++)/*Selection sort upto k only*/


{
min=i;
for(j=i+1; j<n; j++)
{
if(arr[min] > arr[j])
min=j ;
}
if(i!=min)
{
temp=arr[i];
arr[i]=arr[min];
arr[min]=temp;
}
}
printf("kth smallest element is %d\n",arr[k-1]);
return 0;

/*E8.48*/
#include <stdio.h>
void reverse(int a[], int start, int end);
int main(void)
{
int a[10]={0,1,2,3,4,5,6,7,8,9},i;
reverse(a,4,7);
for(i=0; i<10; i++)
printf("%d ",a[i]);
return 0;
207

}
void reverse(int a[], int start, int end)
{
int i,j,temp;
for(i=start,j=end; i<j; i++,j--)
{
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
/*E8.49*/
#include <stdio.h>
#define MAX 50
int main(void)
{
int i,arr[MAX],temp,size;
printf("Enter size of array : ");
scanf("%d",&size);
for(i=0; i<size; i++)
{
printf("%d : ",i);
scanf("%d",&arr[i]);
}
for(i=0; i<size; i++)
printf("%d ",arr[i]);
printf("\n");

temp=arr[0];
for(i=1; i<size; i++)
arr[i-1]=arr[i];
arr[size-1]=temp;
for(i=0; i<size; i++)
printf("%d ",arr[i]);
return 0;

/*E8.50*/
208

#include <stdio.h>
#define MAX 50
void rotate1(int a[],int size,int k);
void rotate2(int a[], int size, int k);
void reverse(int a[], int start, int end);
int main(void)
{
int a[MAX],size,i,k;
printf("Enter size of array : ");
scanf("%d",&size);
for(i=0; i<size; i++)
{
printf("%d : ",i);
scanf("%d",&a[i]);
}
printf("Enter k(How many times to rotate left): ");
scanf("%d",&k);
rotate1(a,size,k);
for(i=0; i<size; i++)
printf("%d ",a[i]);
printf("\n");
rotate2(a,size,k);
for(i=0; i<size; i++)
printf("%d ",a[i]);
return 0;

}
/*rotate left by 1,k times*/
void rotate1(int a[],int size,int k)
{
int i,j,temp;
for(j=1; j<=k; j++)
{
temp=a[0];
for(i=1; i<size; i++)
a[i-1]=a[i];
a[size-1]=temp;
}
}
209

/*rotate left by k using reverse()*/


void rotate2(int a[], int size, int k)
{
reverse(a,0,k-1);
reverse(a,k,size-1);
reverse(a,0,size-1);
}
void reverse(int a[], int start, int end)
{
int i,j,temp;
for(i=start,j=end; i<j; i++,j--)
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}

Chapter 9

** In chapter exercises for chapter 9:

**

/*P9.1 Program to print address of variables using address operator*/


#include <stdio.h>
int main(void)
{
int age=30;
float salary=1500.50;
printf("Address of age=%p\n",&age);
printf("Address of salary=%p\n",&salary);
return 0;
}
/*P9.2 Dereferencing pointer variables*/
#include <stdio.h>
int main(void)
{
int a=87;
float b=4.5;
210

int *p1=&a;
float *p2=&b;
printf("Value of p1 = Address of a = %p\n",p1);
printf("Value of p2 = Address of b = %p\n",p2);
printf("Address of p1 = %p\n",&p1);
printf("Address of p2 = %p\n",&p2);
printf("Value of a = %d %d %d\n",a,*p1,*(&a));
printf("Value of b = %.1f %.1f %.1f\n",b,*p2,*(&b));
return 0;

/*P9.3 Program to print size of pointer variables and size of values dereferenced by th
#include <stdio.h>
int main(void)
{
char a='x',*p1=&a;
int b=12,*p2=&b;
float c=12.4,*p3=&c;
double d=18.34,*p4=&d;
printf("sizeof(p1)=%u, sizeof(*p1)=%u\n",sizeof(p1),sizeof(*p1));
printf("sizeof(p2)=%u, sizeof(*p2)=%u\n",sizeof(p2),sizeof(*p2));
printf("sizeof(p3)=%u, sizeof(*p3)=%u\n",sizeof(p3),sizeof(*p3));
printf("sizeof(p4)=%u, sizeof(*p4)=%u\n",sizeof(p4),sizeof(*p4));
return 0;
}
/*P9.4 Pointer arithmetic*/
#include <stdio.h>
int main(void)
{
int a=5,*pi=&a;
char b='x',*pc=&b;
float c=5.5,*pf=&c;
printf("Value of pi=Address of a=%p\n",pi);
printf("Value of pc=Address of b=%p\n",pc);
printf("Value of pf=Address of c=%p\n",pf);
pi++;
pc++;
pf++;
printf("Now value of pi=%p\n",pi);
211

printf("Now value of pc=%p\n",pc);


printf("Now value of pf=%p\n",pf);
return 0;

/*P9.5 Postfix/prefix
#include <stdio.h>
int main(void)
{
int a=5;
int *p;
p = &a;
printf("Value
printf("Value
printf("Value
printf("Value
printf("Value
printf("Value
printf("Value
return 0;
}

increment/decrement in a pointer variable of base type int*/

of
of
of
of
of
of
of

p
p
p
p
p
p
p

=
=
=
=
=
=
=

Address of a = %p\n",p);
%p\n",++p);
%p\n",p++);
%p\n",p);
%p\n",--p);
%p\n",p--);
%p\n",p);

/*P9.6 Pointer to pointer*/


#include <stdio.h>
int main(void)
{
int a=5;
int *pa;
int **ppa;
pa = &a;
ppa = &pa;
printf("Address of a=%p\n",&a);
printf("Value of pa=Address of a=%p\n",pa);
printf("Value of *pa=Value of a=%d\n",*pa);
printf("Address of pa=%p\n",&pa);
printf("Value of ppa=Address of pa=%p\n",ppa);
printf("Value of *ppa=Value of pa=%p\n",*ppa);
printf("Value of **ppa=Value of a=%d\n",**ppa);
printf("Address of ppa=%p\n",&ppa);
return 0;
}
212

/*P9.7 Program to print the value and address of the elements of an array */
#include <stdio.h>
int main(void)
{
int arr[5] = {5,10,15,20,25};
int i;
for(i=0; i<5; i++)
{
printf("Value of arr[%d] = %d\t",i,arr[i]);
printf("Address of arr[%d] = %p\n",i,&arr[i]);
}
return 0;
}

/*P9.8 Program to print the value and address of elements of an array using pointer not
#include <stdio.h>
int main(void)
{
int arr[5]={5,10,15,20,25};
int i;
for(i=0; i<5; i++)
{
printf("Value of arr[%d] = %d\t",i,*(arr+i));
printf("Address of arr[%d] = %p\n",i,arr+i);
}
return 0;
}

/* P9.9 Program to print the value of array elements using pointer and subscript notati
#include <stdio.h>
int main(void)
{
int arr[5] = {5,10,15,20,25};
int i=0;
for(i=0; i<5; i++)
{
printf("Value of arr[%d] = ",i);
printf("%d\t",arr[i]);
printf("%d\t",*(arr+i));
printf("%d\t",*(i+arr));
213

printf("%d\n",i[arr]);
printf("Address of arr[%d] = %p\n",i,&arr[i]);

}
return 0;

/*P9.10 Program to print the value and address of array elements by subscripting a poin
#include <stdio.h>
int main(void)
{
int arr[5]={5,10,15,20,25};
int i,*p;
p=arr;
for(i=0; i<5; i++)
{
printf("Address of arr[%d]= %p %p %p %p\n",i,&arr[i],arr+i,p+i,&p[i]);
printf("Value of arr[%d]= %d %d %d %d\n",i,arr[i],*(arr+i),*(p+i),p[i])
}
return 0;
}

/*P9.11 Program to understand difference between pointer to an integer and pointer to a


#include <stdio.h>
int main(void)
{
int *p;
/*Can point to an integer*/
int (*ptr)[5]; /*Can point to an array of 5 integers*/
int arr[5];
p=arr; /*Points to 0th element of arr*/
ptr=&arr;
/*Points to the whole array arr*/
printf("p=%p,ptr=%p\n",p,ptr);
p++;
ptr++;
printf("p=%p,ptr=%p\n",p,ptr);
return 0;
}
/*P9.12 Program to dereference a pointer to an array*/
#include <stdio.h>
int main(void)
214

int arr[5] = {3,5,6,7,9};


int *p=arr;
int (*ptr)[5]=&arr;
printf("p=%p, ptr=%p\n",p,ptr);
printf("*p=%d, *ptr=%p\n",*p,*ptr);
printf("sizeof(p)=%u,sizeof(*p)=%u\n",sizeof(p),sizeof(*p));
printf("sizeof(ptr)=%u,sizeof(*ptr)=%u\n",sizeof(ptr),sizeof(*ptr));
return 0;

/*P9.13 Program to print the values and address of elements of a 2-D array*/
#include <stdio.h>
int main(void)
{
int arr[3][4]= {
{10,11,12,13},
{20,21,22,23},
{30,31,32,33}
};
int i,j;
for(i=0; i<3; i++)
{
printf("Address of %dth array = %p %p\n",i,arr[i],*(arr+i));
for(j=0; j<4; j++)
printf("%d %d ",arr[i][j],*(*(arr+i)+j));
printf("\n");
}
return 0;
}
/*P9.14 Program to print elements of a 2-D array by subscripting a pointer to an array
#include <stdio.h>
int main(void)
{
int arr[3][4] = { {10,11,12,13}, {20,21,22,23}, {30,31,32,33} };
int (*ptr)[4];
ptr = arr;
printf("%p %p %p\n",ptr,ptr+1,ptr+2);
215

printf("%p %p %p\n",*ptr,*(ptr+1),*(ptr+2));
printf("%d %d %d\n",**ptr,*(*(ptr+1)+2),*(*(ptr+2)+3));
printf("%d %d %d\n",ptr[0][0],ptr[1][2],ptr[2][3]);
return 0;

/*P9.15 Program to print the elements of 3-D array using pointer notation*/
#include <stdio.h>
int main(void)
{
int arr[2][3][2] = {
{
{5,10},
{6,11},
{7,12},
},
{
{20,30},
{21,31},
{22,32},
}
};
int i,j,k;
for(i=0; i<2; i++)
for(j=0; j<3; j++)
{
for(k=0; k<2; k++)
printf("%d\t",*(*(*(arr+i)+j)+k));
printf("\n");
}
return 0;
}
/*P9.16 Call by value*/
#include <stdio.h>
void value(int x,int y);
int main(void)
{
int a=5,b=8;
printf("a=%d,b=%d\n",a,b);
216

value(a,b);
printf("a=%d,b=%d\n",a,b);
return 0;

}
void value(int x,int y)
{
x++;
y++;
printf("x=%d,y=%d\n",x,y);
}
/*P9.17 Program to explain call by reference*/
#include <stdio.h>
void ref(int *p,int *q);
int main(void)
{
int a=5,b=8;
printf("a=%d,b=%d\n",a,b);
ref(&a,&b);
printf("a=%d,b=%d\n",a,b);
return 0;
}
void ref(int *p,int *q)
{
(*p)++;
(*q)++;
printf("*p=%d, *q=%d\n",*p,*q);
}
/*P9.18 Returning more than one value from a function using call by reference*/
#include <stdio.h>
void func(int x,int y,int *ps,int *pd,int *pp);
int main(void)
{
int a,b,sum,diff,prod;
a=6;
b=4;
func(a,b,&sum,&diff,&prod);
printf("Sum=%d, Difference=%d, Product=%d\n",sum,diff,prod);
return 0;
217

}
void func(int x,int y,int *ps,int *pd,int *pp)
{
*ps=x+y;
*pd=x-y;
*pp=x*y;
}
/*P9.19 Function returning pointer*/
#include <stdio.h>
int *fun(int *p,int n);
int main(void)
{
int n=5,arr[10]={1,2,3,4,5,6,7,8,9,10};
int *ptr;
ptr=fun(arr,n);
printf("Value of arr=%p, Value of ptr=%p, value of *ptr=%d\n",arr,ptr,*ptr);
return 0;
}
int *fun(int *p,int n)
{
p = p+n;
return p;
}
/*P9.20 Passing 1-D array to a function*/
#include <stdio.h>
void func(int a[]);
int main(void)
{
int i,arr[5]={3,6,2,7,1};
func(arr);
printf("Inside main(): ");
for(i=0; i<5; i++)
printf("%d ",arr[i]);
printf("\n");
return 0;
}
void func(int a[])
218

int i;
printf("Inside func(): ");
for(i=0; i<5; i++)
{
a[i]=a[i]+2;
printf("%d ",a[i]);
}
printf("\n");

/*P9.21 Program to verify the fact that when an array is passed to a function, the rece
#include <stdio.h>
void func(double f[],int *i,char c[5]);
int main(void)
{
double d_arr[5]={1.4,2.5,3.7,4.1,5.9};
int i_arr[5]={1,2,3,4,5};
char c_arr[5]={'a','b','c','d','e'};
printf("Inside main() : ");
printf("sizeof(d_arr)=%u\t",sizeof(d_arr));
printf("sizeof(i_arr)=%u\t",sizeof(i_arr));
printf("sizeof(c_arr)=%u\n",sizeof(c_arr));
printf("%p %p %p\n",d_arr,i_arr,c_arr);
func(d_arr,i_arr,c_arr);
return 0;
}
void func(double d[],int *i,char c[5])
{
printf("Inside func() : ");
printf("sizeof(d)=%u\t",sizeof(d));
printf("sizeof(i)=%u\t",sizeof(i));
printf("sizeof(c)=%u\n",sizeof(c));
printf("%p %p %p\n",d,i,c);
}
/*P9.22 Passing a 2-D array to a function*/
#include <stdio.h>
void func(int (*a)[4]);
int main(void)
219

int i,j,arr[3][4]= {

{10,11,12,13},
{20,21,22,23},
{30,31,32,33},

};
printf("Inside main() : sizeof(arr) = %u\n",sizeof(arr));
func(arr);
printf("Contents of array after calling func() are :\n");
for(i=0; i<3; i++)
{
for(j=0; j<4; j++)
printf("%d ",arr[i][j]);
printf("\n");
}
return 0;

}
void func(int (*a)[4])
{
int i,j;
printf("Inside func() : sizeof(a) = %u\n",sizeof(a));
printf("Inside func() : sizeof(*a) = %u\n",sizeof(*a));
for(i=0; i<3; i++)
for(j=0; j<4; j++)
a[i][j] = a[i][j]+2;
}
/*P9.23 Array of pointers*/
#include <stdio.h>
int main(void)
{
int *pa[3];
int i,a=5,b=10,c=15;
pa[0]=&a;
pa[1]=&b;

pa[2]=&c;

for(i=0; i<3; i++)


{
printf("pa[%d]=%p\t",i,pa[i]);
printf("*pa[%d]=%d\n",i,*pa[i]);
}
220

return 0;

/*P9.24 Array of pointers*/


#include <stdio.h>
int main(void)
{
int i,arr[4] = {5,10,15,20};
int *pa[4];
for(i=0; i<4; i++)
pa[i] = &arr[i];
for(i=0; i<4; i++)
{
printf("pa[%d] = %p\t",i,pa[i]);
printf("*pa[%d] = %d\n",i,*pa[i]);
}
return 0;
}
/*P9.25 Array of pointers*/
#include <stdio.h>
int main(void)
{
int i,j,arr[3][4]={{10,11,12,13},{20,21,22,23},{30,31,32,33}};
int *pa[3];
for(i=0; i<3; i++)
pa[i]=arr[i];

for(i=0; i<3; i++)


{
for(j=0; j<4; j++)
printf("%d ",pa[i][j]);
printf("\n");
}
return 0;

/*P9.26 Dereferencing a void pointer*/


#include <stdio.h>
int main(void)
221

int a=3;
float b=3.4,*fp=&b;
void *vp;
vp=&a;
printf("Value of a = %d\n",*(int *)vp);
*(int *)vp = 12;
printf("Value of a = %d\n",*(int *)vp);
vp=fp;
printf("Value of b = %f\n",*(float *)vp);
return 0;

/*P9.27 Pointer arithmetic in void pointers*/


#include <stdio.h>
int main(void)
{
int i;
float a[4] = {1.2,2.5,3.6,4.6};
void *vp;
vp=a;
for(i=0; i<4; i++)
{
printf("%.1f\t", *(float *)vp);
(float *)vp=(float *)vp+1;
}
printf("\n");
return 0;
}

/*Cant write vp=vp+1*/

/*P9.28 Program to understand dynamic allocation of memory*/


#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int *p,n,i;
printf("Enter the number of integers to be entered : ");
scanf("%d",&n);
p = (int *)malloc(n*sizeof(int));
if(p==NULL)
222

printf("Memory not available\n");


exit(1);

}
for(i=0; i<n; i++)
{
printf("Enter an integer : ");
scanf("%d",p+i);
}
for(i=0; i<n; i++)
printf("%d\t",*(p+i));
return 0;

/*P9.29 realloc() function*/


#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int i,*ptr;
ptr=(int *)malloc(5 *sizeof(int));
if(ptr==NULL)
{
printf("Memory not available\n");
exit(1);
}
for(i=0; i<5; i++)
*(ptr+i)=i*2;

ptr=(int *)realloc(ptr,9*sizeof(int));
/*Allocate memory for 4 more integers
if(ptr==NULL)
{
printf("Memory not available\n");
exit(1);
}
for(i=5; i<9; i++)
*(ptr+i)=i*10;
for(i=0; i<9; i++)
printf("%d ",*(ptr+i));
223

return 0;

/*P9.30 Program to access dynamically allocated memory as a 1d array*/


#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int *p,n,i;
printf("Enter the number of integers to be entered : ");
scanf("%d",&n);
p=(int *)malloc(n*sizeof(int));
if(p==NULL)
{
printf("Memory not available\n");
exit(1);
}
for(i=0; i<n; i++)
{
printf("Enter an integer : ");
scanf("%d",&p[i] );
}
for(i=0; i<n; i++)
printf("%d\t",p[i]);
return 0;
}
/*P9.31 Program to dynamically allocate a 2-D array using pointer to an array*/
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int i,j,rows;
int (*a)[4];
printf("Enter number of rows : ");
scanf("%d",&rows);
a = (int(*)[4])malloc(rows*4*sizeof(int));
for(i=0; i<rows; i++)
for(j=0; j<4; j++)
{
224

printf("Enter a[%d][%d] : ",i,j);


scanf("%d",&a[i][j]);

}
printf("The matrix is :\n");
for(i=0; i<rows; i++)
{
for(j=0; j<4; j++)
printf("%5d",a[i][j]);
printf("\n");
}
free(a);
return 0;

/*P9.32 Program to dynamically allocate a 2-D array using array of pointers*/


#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int *a[3],i,j,cols;
printf("Enter number of columns : ");
scanf("%d",&cols);
/*Initialize each pointer in array by address of dynamically allocated memory*/
for(i=0; i<3; i++)
a[i] = (int *) malloc(cols*sizeof(int));
for(i=0; i<3; i++)
for(j=0; j<cols; j++)
{
printf("Enter value for a[%d][%d] : ",i,j);
scanf("%d",&a[i][j]);
}
printf("The matrix is :\n");
for(i=0; i<3; i++)
{
for(j=0; j<cols; j++)
printf("%5d",a[i][j]);
printf("\n");
}
for(i=0; i<3; i++)
free(a[i]);
225

return 0;

/*P9.33 Program to dynamically allocate a 2-D array*/


#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int **a,i,j,rows,cols;
printf("Enter number of rows and columns : ");
scanf("%d%d",&rows,&cols);
/*Allocate a one dimensional array of int pointers*/
a=(int **)malloc(rows*sizeof(int *));
/*Allocate a one dimensional array of integers for each row pointer */
for(i=0; i<rows; i++)
a[i] = (int *)malloc(cols * sizeof(int));
for(i=0; i<rows; i++)
for(j=0; j<cols; j++)
{
printf("Enter a[%d][%d] : ",i,j);
scanf("%d",&a[i][j]);
}
printf("The matrix is :\n");
for(i=0; i<rows; i++)
{
for(j=0; j<cols; j++)
printf("%5d",a[i][j]);
printf("\n");
}

for(i=0; i<rows; i++)


free(a[i]);
free(a);
return 0;

/*P9.34 Program to illustrate that every function has an address and how to access that
#include <stdio.h>
226

void func1();
int main(void)
{
printf("Address of function main() is : %p\n",main);
printf("Address of function func1() is : %p\n",func1);
return 0;
}
void func1()
{
printf("C in depth\n");
}
/*P9.35 Program to invoke a function using function pointer*/
#include <stdio.h>
float add(int,float),result;
int main(void)
{
float (*fp)(int,float);
float result;
fp=add; /*Assign address of function add() to pointer fp*/
/*Invoking a function directly using functions name */
result = add(5,6.6);
printf("%f\n",result);
/*Invoking a function indirectly by dereferencing function pointer */
result = (*fp)(5,6.6);
printf("%f\n",result);
return 0;

}
float add(int a,float b)
{
return a+b;
}

/*P9.36 Program to send a function's address as an argument to other function*/


#include <stdio.h>
void func(char,void(*fp)(float));
void fun1(float);
227

int main(void)
{
printf("Function main() called\n");
func('a',fun1);
return 0;
}
void func(char b,void(*fp)(float))
{
printf("Function func() called\n");
(*fp)(8.5);
}
void fun1(float f)
{
printf("Function fun1() called\n");
}
/*P9.37 Program to pass a pointer containing function's address as an argument*/
#include <stdio.h>
void func(char,void(*fp)(float));
void fun1(float);
int main(void)
{
void (*p)(float);
p=fun1;
printf("Function main() called\n");
func('a',p);
return 0;

}
void func(char b,void(*fp)(float))
/*Value of p stored in fp*/
{
printf("Function func() called\n");
(*fp)(8.5);
/*Calling fun1 indirectly using pointer */
}
void fun1(float f)
{
printf("Function fun1() called \n");
}
/*P9.38 Array of function pointers*/
#include <stdio.h>
228

float add(float,int);
float sub(float,int);
float mul(float,int);
float div(float,int);
int main(void)
{
int i,b;
float a;
float(*fp[])(float,int)={add,sub,mul,div};
char *operation[]={"Add","Subtract","Multiply","Divide"};
printf("Enter a float and a integer : " );
scanf("%f%d",&a,&b);
for(i=0;i<4;i++)
printf("%s: %f\n",operation[i],(*fp[i])(a,b));
return 0;

}
float add(float a,int
{
return a+b;
}
float sub(float a,int
{
return a-b;
}
float mul(float a,int
{
return a*b;
}
float div(float a,int
{
return a/b;
}

b)

b)

b)

b)

** Back exercises for chapter 9:

**

/*E9.1*/
int main(void)
{
229

int a=5,*ptr;
ptr=&a;
printf("Input a number : ");
scanf("%d",ptr);
/*Suppose the input number is 16*/
printf("%d %d\n",a,*ptr);
return 0;

/*E9.2*/
#include <stdio.h>
int main(void)
{
int *ptr;
printf("Enter a number : ");
scanf("%d",ptr);
printf("%d\n",*ptr);
return 0;
}
/*E9.3*/
#include <stdio.h>
int main(void)
{
int arr[5],i;
for(i=0; i<5; i++)
printf("%p ",arr+i);
printf("\nEnter 5 numbers : ");
for(i=0; i<5; i++)
scanf("%d",arr+i);
for(i=0; i<5; i++)
printf("%d ",*(arr+i));
return 0;
}
/*E9.4*/
#include <stdio.h>
int main(void)
{
int i,arr[5]={25,30,35,40,45},*p;
p=arr;
230

for(i=0; i<5; i++)


printf("%d\t%d\t",*(p+i),p[i]);
return 0;

/*E9.5*/
#include <stdio.h>
int main(void)
{
int i,arr[5]= {25,30,35,40,45},*p;
p=&arr[4];
for(i=0; i<5; i++)
printf("%d\t%d\t",*(p-i),p[-i]);
return 0;
}
/*E9.6*/
#include <stdio.h>
int main(void)
{
int i,arr[5] = {25,30,35,40,55},*p;
for(i=0; i<5; i++)
{
printf("%d ",*arr);
arr++;
}
return 0;
}
/*E9.7*/
#include <stdio.h>
int main(void)
{
int i,arr[5]={25,30,35,40,45},*p=arr;
for(i=0; i<5; i++)
{
(*p)++;
printf("%d ",*p);
p++;
}
231

return 0;

/*E9.8*/
#include <stdio.h>
int main(void)
{
int i,arr[5]={25,40,55,70,85},*p=arr;
for(i=0; i<5; i++)
printf("%d ",*p++);
printf("\n");

for(i=0; i<5; i++)


printf("%d ",*--p);
printf("\n");
return 0;

/*E9.9*/
#include <stdio.h>
int main(void)
{
int i,arr[5]={25,40,55,70,85},*p=arr;
for(i=0; i<8; i++)
printf("%d ",++*p);
printf("\n");
for(i=0; i<7; i++)
printf("%d ",(*p)++);
printf("\n");
return 0;
}
/*E9.10*/
#include <stdio.h>
int main(void)
{
int arr[10]={25,30,35,40,55,60,65,70,85,90},*p;
for(p=&arr[0]; p<arr+10; p++)
printf("%d ",*p);
return 0;
}
232

/*E9.11*/
#include <stdio.h>
int main(void)
{
int arr[10]= {25,30,35,40,55,60,65,70,85,90},*p;
for(p=arr+2; p<arr+8; p=p+2)
printf("%d ",*p);
return 0;
}
/*E9.12*/
#include <stdio.h>
int main(void)
{
int i,arr[10]={25,30,35,40,55,60,65,70,85,90};
int *p=arr+9;
for(i=0; i<10; i++)
printf("%d ",*p--);
return 0;
}
/*E9.13*/
#include <stdio.h>
int main(void)
{
int arr[10]={25,30,35,40,55,60,65,70,85,90},*p;
for(p=arr+9; p>=arr; p--)
printf("%d ",*p);
return 0;
}
/*E9.14*/
#include <stdio.h>
int main(void)
{
int arr[4]={10,20,30,40};
int x=100, *ptr=arr;
printf("%p
%d
%d\n",ptr,*ptr,x);
x=*ptr++;
printf("%p
%d
%d\n",ptr,*ptr,x);
233

x=*++ptr;
printf("%p
x=++*ptr;
printf("%p
x=(*ptr)++;
printf("%p
return 0;

%d

%d\n",ptr,*ptr,x);

%d

%d\n",ptr,*ptr,x);

%d

%d\n",ptr,*ptr,x);

/*E9.15*/
#include <stdio.h>
int main(void)
{
int x,arr[8]={11,22,33,44,55,66,77,88};
x=(arr+2)[3];
printf("%d\n",x);
return 0;
}
/*E9.16*/
#include <stdio.h>
int main(void)
{
int arr[8]={11,22,33,44,55,66,77,88};
int *p,*q;
q=arr/2;
p=q*2;
printf("%d %d",*p,*q);
return 0;
}
/*E9.17*/
#include <stdio.h>
int main(void)
{
int arr[6]={1,2,3,4,5,6};
int *p=arr;
printf("Size of p=%u,Size of arr=%u\n",sizeof(p),sizeof(arr));
return 0;
}
234

/*E9.18*/
#include <stdio.h>
int main(void)
{
float a=5,*p,**pp;
p=&a;
pp=&p;
printf("a=%f, p=%p, pp=%p\n",a,p,pp);
a=a+1;
p=p+1;
pp=pp+1;
printf("a=%f, p=%p, pp=%p\n",a,p,pp);
return 0;
}
/*E9.19*/
#include <stdio.h>
int a=5,b=10;
void change1(int *p)
{ p=&a; }
void change2(int **pp)
{*pp=&b;}
int main(void)
{
int x=20,*ptr=&x;
printf("%d ",*ptr);
change1(ptr);
printf("%d ",*ptr);
change2(&ptr);
printf("%d\n",*ptr);
return 0;
}
/*E9.20*/
#include <stdio.h>
void func(int x,int *y);
int main(void)
{
int a=2,b=6;
func(a,&b);
235

printf("a=%d, b=%d\n",a,b);
return 0;

}
void func(int x,int *y)
{
int temp;
temp=x;
x=*y;
*y=temp;
}

/*E9.21*/
#include <stdio.h>
void func(int **pp);
int main(void)
{
int *ptr;
func(&ptr);
printf("%d\n",*ptr);
return 0;
}
void func(int **pp)
{
int num=10;
*pp=&num;
}
/*E9.22*/
#include <stdio.h>
void func(int x,int y);
int main(void)
{
int a=5,b=8;
func(a,b);
printf("a=%d,b=%d\n",a,b);
return 0;
}
void func(int x,int y)
{
int temp;
236

temp=*(&x), *(&x)=*(&y), *(&y)=temp;

/*E9.23*/
#include <stdio.h>
void func1(int *ptr);
void func2(int **pptr);
int main(void)
{
int arr[5]={1,2,3,4,5};
int *p=arr;
printf("p = %p,\t",p);
func1( p);
printf("p = %p,\t",p);
func2(&p);
printf("p = %p\n",p);
return 0;
}
void func1(int *ptr)
{
ptr++;
}
void func2(int **pptr)
{
(*pptr)++;
}
/*E9.24*/
#include <stdio.h>
void func(int a[10]);
int main(void)
{
int arr[10];
func(arr);
return 0;
}
void func(int a[10])
{
int b[10],x=5;
a=&x;
237

b=&x;

/*E9.25*/
#include <stdio.h>
int main(void)
{
int arr[3][4];
printf("%p\t",arr);
printf("%p\t",arr[0]);
printf("%p\n",&arr[0][0]);
printf("%u\t",sizeof(arr));
printf("%u\t",sizeof(arr[0]));
printf("%u\n",sizeof(arr[0][0]));
return 0;
}
/*E9.26*/
#include <stdio.h>
int main(void)
{
int arr[3][4][5];
printf("%p\t",arr);
printf("%p\t",arr[0]);
printf("%p\t",arr[0][0]);
printf("%p\n",&arr[0][0][0]);
printf("%u\t",sizeof(arr));
printf("%u\t",sizeof(arr[0]));
printf("%u\t",sizeof(arr[0][0]));
printf("%u\n",sizeof(arr[0][0][0]));
return 0;
}
/*E9.27*/
#include <stdio.h>
void func(int a[]);
int main(void)
{
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
func(arr+3);
238

return 0;
}
void func(int a[])
{
int i;
for(i=0; a[i]!=8; i++)
printf("%d ",a[i]);
}
/*E9.28*/
#include <stdio.h>
void swap(int *b,int *c);
int main(void)
{
int i,j;
int arr[10]={3,2,4,1,5,9,8,10,7,6};
for(i=0; i<10; i++)
for(j=0; j<10-i-1; j++)
if(*(arr+j) > *(arr+j+1))
swap(arr+j,arr+j+1);
for(i=0; i<10; i++)
printf("%d\t",arr[i]);
printf("\n");
return 0;
}
void swap(int *b,int *c)
{
int temp;
temp=*b, *b=*c, *c=temp;
}
/*E9.29*/
#include <stdio.h>
int main(void)
{
int i,arr[3][4] = {{10,11,12,13},{20,21,22,23},{30,31,32,33}};
int *pa[3];
int (*p)[4];
p=arr;
for(i=0; i<3; i++)
239

pa[i]=arr[i];
printf("%d %d %d\n",pa[0][0],pa[0][1],pa[2][3]);
printf("%d %d %d\n",p[0][0],p[0][1],p[2][3]);
return 0;

/*E9.30*/
#include <stdio.h>
#include <stdlib.h>
int *func1(void);
int *func2(void);
int main(void)
{
int *ptr1,*ptr2;
ptr1=func1();
ptr2=func2();
printf("%d %d\n",*ptr1,*ptr2);
free(ptr2);
return 0;
}
int *func1(void)
{
int a=8,*p=&a;
return p;
}
int *func2(void)
{
int *p;
p=(int *)malloc(sizeof(int));
*p=9;
return p;
}
/*E9.31*/
#include <stdio.h>
int main(void)
{
int i,arr[3][4]={ {10,11,12,13},{20,21,22,23},{30,31,32,33}};
int *p=&arr[0][0];
for(i=0; i<12; i++)
240

printf("%d ",p[i]);
printf("\n");
return 0;

/*E9.32*/
#include <stdio.h>
int main(void)
{
int a[2][3];
a[1][2]=9;
printf("%d\n",a[1,2]);
return 0;
}
/*E9.33*/
#include <stdio.h>
int main(void)
{
int a[5]={1},b[5]={1};
if(a==b)
printf("Same\n");
else
printf("Different\n");
return 0;
}

Chapter 10

** In chapter exercises for chapter 10:

**

/*P10.1 Program to print characters of a string and address of each character*/


#include <stdio.h>
int main(void)
{
char str[]="India";
int i;
for(i=0; str[i]!='\0'; i++)
{
printf("Character = %c\t",str[i]);
241

printf("Address = %p\n",&str[i]);
}
return 0;

/*P10.2 Program to print the address and characters of a string using pointer*/
#include <stdio.h>
int main(void)
{
char str[]="India";
char *p;
p=str;
while(*p!='\0')
{
printf("Character = %c\t",*p);
printf("Address = %p\n",p);
p++;
}
return 0;
}
/*P10.3 Input and output strings using scanf() and printf()*/
#include <stdio.h>
int main(void)
{
char name[40];
printf("Enter a name : ");
scanf("%s",name);
printf("%s %s\n",name,"Srivastava");
return 0;
}
/*P10.4 Input and output strings using gets() and puts()*/
#include <stdio.h>
int main(void)
{
char name[20];
printf("Enter a name : ");
gets(name);
printf("Entered name is : ");
242

puts(name);
return 0;

/*P10.5 strlen() function*/


#include <stdio.h>
#include <string.h>
int main(void)
{
char str[50];
printf("Enter a string : ");
gets(str);
printf("Length of the string is
return 0;
}

: %u\n",strlen(str));

/*P10.6 Program to understand the work of strcmp() function */


#include <stdio.h>
#include <string.h>
int main(void)
{
char str1[10],str2[10];
printf("Enter two strings : ");
gets(str1);
gets(str2);
if((strcmp(str1,str2))==0)
printf("Strings are same\n");
else
printf("Strings are not same\n");
return 0;
}
/*P10.7 strcpy() function */
#include <stdio.h>
#include <string.h>
int main(void)
{
char str1[10], str2[10];
printf("Enter a string :" );
scanf("%s",str2);
243

strcpy(str1, str2);
printf("First string :%s \t\t Second string : %s\n",str1,str2);
strcpy(str1,"Delhi");
strcpy(str2,"Bangalore");
printf("First string :%s \t\t Second string : %s\n",str1,str2);
return 0;

/*P10.8 strcat() function*/


#include <stdio.h>
#include <string.h>
int main(void)
{
char str1[20], str2[20];
printf("Enter two strings : ");
gets(str1);
gets(str2);
strcat(str1,str2);
printf("First string : %s\tSecond string : %s\n",str1,str2);
strcat(str1, "_one");
printf("Now first string is : %s \n",str1);
return 0;
}
/*P10.9 Nesting of strcat() and strcpy() functions */
#include <stdio.h>
#include <string.h>
int main(void)
{
char str1[30] = "Subhash ";
char str2[10] = "Chandra ";
char str3[20];
strcat(strcat(str1, str2),"Bose");
printf("str1 - %s\n",str1);
strcat(strcpy(str3,"Dev"), "anshi");
printf("str3 - %s\n",str3);
return 0;
}
/*P10.10*/
#include <stdio.h>
244

#include <stdlib.h>
int main(void)
{
char *str;
str=(char *)malloc(10);
printf("Enter a string : ");
scanf("%s",str);
printf("String is : %s\n",str);
return 0;
}
/*P10.11 Program to print the strings of the two-dimensional character array*/
#include <stdio.h>
#define N 5
#define LEN 10
int main(void)
{
char arr[N][LEN]={
"white",
"red",
"green",
"yellow",
"blue"
};
int i;
for(i=0; i<N; i++)
{
printf("String=%s\t",arr[i]);
printf("Address of string=%p\n",arr[i]);
}
return 0;
}
/*P10.12 Program to sort array of strings*/
#include <stdio.h>
#include <string.h>
#define N 5
#define LEN 10
int main(void)
{
245

char arr[N][LEN] = {

"white",
"red",
"green",
"yellow",
"blue"
};

char temp[10];
int i,j;
printf("Before sorting :\n");
for(i=0; i<N; i++)
printf("%s
",arr[i]);
printf("\n");
for(i=0; i<N ; i++)
for(j=i+1; j<N; j++)
if( strcmp(arr[i],arr[j]) > 0 )
{
strcpy(temp,arr[i]);
strcpy(arr[i],arr[j]);
strcpy(arr[j],temp) ;
}
printf("After sorting :\n");
for(i=0; i<N; i++)
printf("%s
",arr[i]);
return 0;

/*P10.13 Array of pointers to strings*/


#include <stdio.h>
int main(void)
{
int i;
char *arrp[] = {

for(i=0; i<5; i++)

};

246

"white",
"red",
"green",
"yellow",
"blue"

printf("String : %s\n",arrp[i]);
printf("Address of string : %p\n",arrp[i]);
printf("Address of string is stored at : %p\n",arrp+i);

}
return 0;

/*P10.14 Program to show the differences between array of strings and array of pointers
#include <stdio.h>
#include <string.h>
int main(void)
{
char arr[5][10];
char *arrp[5];
arr[0]="January";
arrp[0]="January";

/*Invalid*/
/*Valid*/

strcpy(arr[1],"February");
strcpy(arrp[1],"February");

/*Valid*/
/*Invalid, arrp[1] not initialized*/

scanf("%s",arr[2]);
scanf("%s",arrp[2]);

/*Valid*/
/*Invalid, arrp[2] not initialized*/

arrp[3]=(char *)malloc(10);
strcpy(arrp[3],"March");

/*Valid*/

arrp[4]=(char *)malloc(10);
scanf("%s",arrp[4]);
return 0;

/*P10.15*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(void)
{
char *arrp[10],str[20];
247

/*Valid*/

int i;
for(i=0; i<10; i++)
{
printf("Enter string %d : ",i+1);
gets(str);
/*Now allocate memory sufficient to hold the string*/
arrp[i] = (char *)malloc(strlen(str)+1);
strcpy(arrp[i],str);
}
for(i=0; i<10; i++)
printf("%s\t",arrp[i]);
printf("\n");
for(i=0; i<10; i++)
free(arrp[i]);
return 0;

/*P10.16 Program to input a date and print the month*/


#include <stdio.h>
int main(void)
{
int d,m,y;
char *months[] = {"January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November",
"December"};
printf("Enter date (dd/mm/yyyy) : ");
scanf("%d/%d/%d", &d, &m, &y);
printf("%d %s %d\n", d,months[m-1],y);
return 0;
}
/*P10.17 Program to sort strings represented by array of pointers*/
#include <stdio.h>
#include <string.h>
#define N 5
int main(void)
{
char *arrp[N] = {"white","red","green","yellow","blue"};
int i,j;
char *temp;
248

printf("Before sorting : \n");


for(i=0; i<N; i++)
printf("%s\t",arrp[i]);
printf("\n");

for(i=0; i<N ; i++)


for(j=i+1; j<N; j++)
if(strcmp(arrp[i],arrp[j])>0)
{
temp = arrp[i];
arrp[i] = arrp[j];
arrp[j] = temp;
}
printf("After sorting :\n");
for(i=0; i<N; i++)
printf("%s\t",arrp[i]);
printf("\n");
return 0;

/*P10.18 */
#include <stdio.h>
#include <string.h>
int main(void)
{
char str1[10];
strncpy(str1, "Departmental", 6);
str1[6]='\0';
printf("%s\n", str1);
strncpy(str1, "Dep", 6);
printf("%s\n", str1);
return 0;
}
/*P10.19*/
#include <stdio.h>
#include <string.h>
int main(void)
{
249

char str1[15]="ABC";
strncat(str1,"DEFGHIJ",4);
printf("%s\n",str1);
return 0;

/*P10.20*/
#include <stdio.h>
#include <string.h>
int main(void)
{
if(strncmp("Deepali","Deepanjali",4)==0)
printf("Same\n");
else
printf("Different\n");
return 0;
}
/*P10.21*/
#include <stdio.h>
#include <string.h>
int main(void)
{
char *p;
p=strchr("Multinational",'n');
printf("%s\n",p);
p=strrchr("Multinational",'n');
printf("%s\n",p);
return 0;
}
/*P10.22*/
#include <stdio.h>
#include <string.h>
int main(void)
{
char *p1,*p2,*p3;
p1=strpbrk("abcmnop","lmn");
p2=strpbrk("abcmnop","ln");
p3=strpbrk("1234ABCD","COT");
250

printf("%s\t%s\t%s\n",p1,p2,p3);
return 0;

/*P10.23*/
#include <stdio.h>
#include <string.h>
int main(void)
{
char *ptr;
ptr=strstr("placement section","cement");
printf("%s\n", ptr);
return 0;
}
/*P10.24*/
#include <stdio.h>
#include <string.h>
int main(void)
{
char str[]="...why?but;not?oh!, where
char seps[] = "?!;,. \t";
char *t;
t=strtok(str, seps);
while(t!=NULL)
{
printf("%s ",t);
t=strtok(NULL, seps);
}
return 0;
}

when";

/*P10.25 Program to convert integer and float values to strings using sprintf() functio
#include <stdio.h>
int main(void)
{
char str1[10];
char str2[10];
int x=1348;
float y=234.56;
251

sprintf(str1,"%d",x);
sprintf(str2,"%.2f",y);
printf("str1=%s, str2=%s\n",str1,str2);
return 0;

/*P10.26 sprintf() function */


#include <stdio.h>
int main(void)
{
char str[50];
char name[10]="Suresh";
int m1=89,m2=78,m3=80;
float per=(m1+m2+m3)/3.0;
char gr='A';
sprintf(str,"Result-%s %d %d %d %.2f %c\n",name,m1,m2,m3,per,gr);
printf("The string str is : %s\n",str);
return 0;
}
/*P10.27 Program to convert strings to integer and float values*/
#include <stdio.h>
int main(void)
{
char str1[10] = "1348";
char str2[10] = "234.56";
int x;
float y;
sscanf(str1,"%d",&x);
sscanf(str2,"%f",&y);
printf("Value of x=%d, Value of y=%.2f\n",x,y);
return 0;
}
/*P10.28 sscanf() function*/
#include <stdio.h>
int main(void)
{
char name[10];
int age;
252

float sal;
char str[30]="Shravani 23 28000.0";
sscanf(str,"%s%d%f",name,&age,&sal);
printf("Name : %s\n",name);
printf("Age
: %d\n",age);
printf("Salary : %.2f\n",sal);
return 0;

/*P10.29 Program to enter a string and print it in reverse order*/


#include <stdio.h>
#include <string.h>
int main(void)
{
char str[50];
int len;
printf("Enter a string : ");
gets(str);

for(len=strlen(str)-1; len>=0; len--)


printf("%c",str[len]);
return 0;

/*P10.30 Program to test whether a string is palindrome or not*/


#include <stdio.h>
#include <string.h>
int main(void)
{
char str[50];
int i,j;
printf("Enter a string : ");
gets(str);
for(i=0,j=strlen(str)-1; i<=j; i++,j--)
if(str[i]!=str[j])
break;
if(i>j)
printf("String is a palindrome\n" );
else
printf("String is not a palindrome\n" );
253

return 0;

/*P10.31*/
#include <stdio.h>
#include <string.h>
void reverseStr(char str[]);
void reverse(char str[],int start,int end);
int main(void)
{
char str[50];
strcpy(str,"I have many books");
reverseStr(str);
puts(str);
reverse(str,6,9);
puts(str);
return 0;
}
void reverseStr(char str[])
{
int i,j;
char tmp;
for(i=0,j=strlen(str)-1; i<=j; i++,j--)
{
tmp=str[i];
str[i]=str[j];
str[j]=tmp;
}
}
void reverse(char str[],int start,int end)
{
char tmp;
while(start<=end)
{
tmp=str[start];
str[start]=str[end];
str[end]=tmp;
start++;
end--;
}
254

}
/*P10.32*/
#include <stdio.h>
#include <string.h>
void reverse(char str[], int start, int end);
void reverse_letters(char str[], int start, int end);
int main(void)
{
char str[50];
strcpy(str,"I have many books");
reverse_letters(str,0,strlen(str)-1);
puts(str);
return 0;
}
void reverse_letters(char str[], int start, int end)
{
int w_start,w_end;
for(w_start=w_end=start; w_end<end; w_end++)
{
if(str[w_end]==' ')
continue;
w_start = w_end;
while(str[w_end]!=' ' && w_end<=end)
w_end++;
w_end--;
reverse(str,w_start,w_end);/*Reverse the word*/
}

}
void reverse(char str[], int start, int end)
{
char tmp;
while(start<=end)
{
tmp=str[start];
str[start]=str[end];
str[end]=tmp;
start++;
end--;
255

/*P10.33*/
#include <stdio.h>
#include <string.h>
void reverse_words(char str[],int start,int end);
void reverse_letters(char str[],int start,int end);
void reverse(char str[],int start,int end);
int main(void)
{
char str[50];
strcpy(str,"I have many books");
reverse_words(str,0,strlen(str)-1);
puts(str);
return 0;
}
void reverse_words(char str[], int start, int end)
{
reverse(str, start, end);
reverse_letters(str, start, end);
}
void reverse_letters(char str[], int start, int end)
{
int w_start,w_end;
for(w_start=w_end=start; w_end<end; w_end++)
{
if(str[w_end]==' ')
continue;
w_start = w_end;
while(str[w_end]!=' ' && w_end<=end)
w_end++;
w_end--;
reverse(str,w_start,w_end);/*Reverse the letters of the word*/
}

}
void reverse(char str[], int start, int end)
{
char tmp;
256

while(start<=end)
{
tmp=str[start];
str[start]=str[end];
str[end]=tmp;
start++;
end--;
}

/*P10.34*/
#include <stdio.h>
#include <string.h>
int count(char *str, char ch);
void replace(char *str, char ch1, char ch2);
int main(void)
{
char str[30];
strcpy(str,"Programming in C language");
printf("%d\n",count(str,'a'));
replace(str,'a','z');
puts(str);
return 0;
}
int count(char *str, char ch)
{
int cnt=0;
while(*str++!='\0')
if(*str==ch)
cnt++;
return cnt;
}
void replace(char *str, char ch1, char ch2)
{
while(*str++!='\0')
if(*str==ch1)
*str=ch2;
}
/*P10.35*/
#include <stdio.h>
257

#include <string.h>
void del_char(char *str,char ch);
int main(void)
{
char str[50]="Data Structures through c in depth";
del_char(str,'u');
puts(str);
return 0;
}
void del_char(char *str,char ch)
{
unsigned int i,j;
for(i=0,j=0; i<=strlen(str)-1; i++)
if(str[i]!=ch)
str[j++]=str[i];
str[j]='\0';
}
/*P10.36*/
#include <stdio.h>
#include <ctype.h>
int count_words(char *str);
int main(void)
{
char str[50]=" blue green red ";
printf("Number of words in string = %d\n",count_words(str));
return 0;
}
int count_words(char *str)
{
int count=0;
while(*str!='\0')
{
while(isspace(*str))
/*Pass over white spaces*/
str++;
if(*str=='\0')
return count;
while(!isspace(*str) && *str!='\0')
{
putchar(*str);
258

str++;
}
count++;
printf("\n");

}
return count;

/*P10.37*/
#include <stdio.h>
#include <string.h>
void count(char *str);
int main(void)
{
char str[50];
printf("Enter a string : ");
gets(str);
count(str);
return 0;
}
void count(char *str1)
{
char str[50],ch;
int i,j,count,n;
strcpy(str,str1);
n=strlen(str);
for(i=0; i<n; i++)
{
if(str[i]!=0)
{
ch=str[i];
count=0;
for(j=0; j<n; j++)
if(str[j]==ch)
{
count++;
str[j]=0;
}
printf("%c occurs %d times\n",ch,count);
259

}
}

/*P10.38*/
#include <stdio.h>
#include <string.h>
int find_firstNR(char str[]);
int main(void)
{
char str[50]="Suresh Kumar Srivastava";
printf("%d\n",find_firstNR(str));
return 0;
}
int find_firstNR(char str[])
{
int i,j;
int end=strlen(str)-1;
for(i=0; i<end; i++)
{
for(j=0; j<=end; j++)
if(str[i]==str[j] && i!=j)
break;
if(j==end+1)
return i;
}
return -1;
}
/*P10.39*/
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <math.h>
int str_to_i(char str[]);
double str_to_d(char str[]);
int main(void)
{
char str[20];
printf("Enter a string : ");
260

scanf("%s",str);
printf("%d\n",str_to_i(str));

printf("Enter a string : ");


scanf("%s",str);
printf("%lf\n",str_to_d(str));
return 0;

int str_to_i(char str[])


{
int i,num=0,sign;
i=0;
while(isspace(str[i]))/*Skip Initial white spaces*/
i++;
sign = (str[i]=='-') ? -1 : 1;

if(str[i]=='-' || str[i]=='+')
i++;
while(isdigit(str[i]))
num = num*10+(str[i++]-'0');
return sign*num;

double str_to_d(char str[])


{
int i=0,j,sign;
double num=0;
while(isspace(str[i]))/*Skip Initial white spaces*/
i++;
sign = (str[i]=='-') ? -1 : 1;
if(str[i]=='-' || str[i]== '+')
i++;
while(isdigit(str[i]))
num = num*10+(str[i++]-'0');
if(str[i]=='.')
i++;
j=i;
261

while(isdigit(str[i]))
num = num*10+(str[i++]-'0');
return sign*num/pow(10,i-j);

/*P10.40*/
#include <stdio.h>
#include <string.h>
void i_to_str(int num,char str[],int base);
void d_to_str(double num,char str[]);
int main(void)
{
char str1[30];
i_to_str(45,str1,16);puts(str1);
i_to_str(45,str1,10);puts(str1);
i_to_str(45,str1,8);puts(str1);
i_to_str(45,str1,2);puts(str1);
i_to_str(-45,str1,10);puts(str1);
d_to_str(27.647611,str1); puts(str1);
d_to_str(-12.345622,str1); puts(str1);
return 0;
}
void i_to_str(int num,char str[],int b)
{
int i=0,temp,rem,j,sign;
sign = num<0? -1: 1;
if(sign==-1)
num=-num;
while(num>0)
{
rem = num%b;
num/=b;
if(rem>9 && rem<16)
str[i++]= rem-10+'A';
else
str[i++]=rem+'0';
}
if(sign==-1)
str[i++]='-';
262

str[i]='\0';
for(i=0,j=strlen(str)-1; i<j; i++,j--) /*Reverse the string*/
{
temp = str[i];
str[i] = str[j];
str[j] = temp;
}

}
void d_to_str(double num,char str[])
{
int i,k;
double d;
i=num;
i_to_str(i,str,10);
str[strlen(str)+1] = '\0';
str[strlen(str)] = '.';
d = num-i;
k = d*1000000;
if(k<0)
k=-k;
i_to_str(k,str+strlen(str),10);
}
/*P10.41*/
#include <stdio.h>
#include <string.h>
void encrypt1(char *str);
void decrypt1(char *str);
void encrypt2(char *str1, char *str2);
void decrypt2(char *str1,char *str2);
int strch(char *str, char ch);
int main(void)
{
char str[100],str2[30];
strcpy(str,"program");
puts(str);
encrypt1(str);
puts(str);
263

decrypt1(str);
puts(str);
strcpy(str2,"mnkghdtabwvuprqczjxieyflos");
strcpy(str,"program");
puts(str);
encrypt2(str,str2);
puts(str);
decrypt2(str,str2);
puts(str);
return 0;

}
void encrypt1(char *str)
{
for( ;*str!='\0'; str++)
{
if(*str<97 || *str>122)
continue;
if(*str=='z')
*str='a';
else
*str=*str+1;
}
}

void decrypt1(char *str)


{
for( ; *str!='\0'; str++)
{
if(*str<97 || *str>122)
continue;
if(*str=='a')
*str='z';
else
*str=*str-1;
}
}
void encrypt2(char *str1, char *str2)
{
for( ;*str1!='\0'; str1++)
264

if(*str1<97 || *str1>122)
continue;
*str1=str2[*str1-97];

}
void decrypt2(char *str1, char *str2)
{
int i;
for( ; *str1!='\0'; str1++)
{
if(*str1<97 || *str1>122)
continue;
i=strch(str2,*str1);
*str1=i+97;
}
}
int strch(char *str, char ch)
{
int i;
for(i=0; str[i]!='\0'; i++)
if(str[i]==ch)
return i;
}
/*P10.42*/
#include <stdio.h>
int main(void)
{
int n,num,d=0,dig[4];
char *ones[] = {"","One","Two","Three","Four","Five","Six",
"Seven","Eight","Nine","Ten"};

char *el[] = {"Ten","Eleven","Twelve","Thirteen","Fourteen",


"Fifteen","Sixteen","Seventeen","Eighteen","Nineteen"
char *tens[] = {"","","Twenty","Thirty","Forty","Fifty",
"Sixty","Seventy","Eighty","Ninety"};
printf("Enter a 4 digit number : ");
scanf("%d",&num);
265

n=num;
do
{

dig[d] = n%10;
n/=10;
d++;
}while(n>0);

if(d==4)
printf("%s Thousand", ones[dig[3]]);
if(d>=3 && dig[2]!=0)
printf(" %s Hundred ", ones[dig[2]]);
if(d>=2)
{
if(dig[1]==0)
printf("%s\n",ones[dig[0]]);
else if(dig[1]==1)
printf("%s\n",el[dig[0]]);
else
printf("%s %s\n",tens[dig[1]],ones[dig[0]]);
}
if(d==1 && num!=0)
printf("%s\n",ones[dig[0]]);
if(num==0)
printf("Zero\n");
return 0;

/*P10.43*/
#include <stdio.h>
int length(char *str);
void display(char *str);
void Rdisplay(char *str);
int main(void)
{
char str[50]="Devanshi";
printf("%d\n",length(str));
display(str);
printf("\n");
Rdisplay(str);
266

return 0;
}
int length(char *str)
{
if(*str == '\0')
return 0;
return (1 + length(str+1));
}
void display(char *str)
{
if(*str == '\0')
return;
putchar(*str);
display(str+1);
}
void Rdisplay(char *str)
{
if(*str == '\0')
return;
Rdisplay(str+1);
putchar(*str);
}

** Back exercises for chapter 10:

**

/*E10.1*/
#include <stdio.h>
int main(void)
{
int i=0;
char name[10] = {'M','o','h','i','n','i','\0'};
while(name[i])
putchar(name[i++]);
return 0;
}
/*E10.2*/
#include <stdio.h>
int main(void)
{
267

char *str;
printf("Enter a string : ");
gets(str);
printf("String is %s\n",str);
return 0;

/*E10.3*/
#include <stdio.h>
#include <string.h>
int main(void)
{
char *str1="Good",*str2="Morning";
strcat(str1,str2);
printf("%s\n",str1);
return 0;
}
/*E10.4*/
#include <stdio.h>
#include <string.h>
int main(void)
{
char str[10]="How";
strcat(str,'?');
printf("%s\n",str);
return 0;
}
/*E10.5*/
#include <stdio.h>
int main(void)
{
char str[]="Vijaynagar";
str=str+5;
printf("%s\n",str);
return 0;
}
/*E10.6*/
#include <stdio.h>
268

void func(char str[]);


int main(void)
{
char str[]="Vijaynagar";
func(str);
return 0;
}
void func(char str[])
{
str=str+5;
printf("%s\n",str);
}
/*E10.7*/
#include <stdio.h>
int main(void)
{
char str[] ={70,97,105,116,104,0};
printf("%s\n",str);
return 0;
}
/*E10.8*/
#include <stdio.h>
int main(void)
{
char *p="Devanshi";
char arr[]="Devanshi";
*(p+2)='b';
arr[2]='b';
puts(p);
puts(arr);
return 0;
}
/*E10.9*/
#include <stdio.h>
int main(void)
{
char str[]="painstaking";
269

char *p=str+5;
printf("%c\t",*p);
printf("%s\n",p);
return 0;

/*E10.10*/
#include <stdio.h>
int main(void)
{
printf("%c\t","Determination"[2]);
printf("%c\t",*("Determination"+2));
printf("%s\t","Determination"+2);
printf("Determination"+2);
printf("\t");
printf("Determination"+strlen("Deepali"));
printf("\t");
printf("Determination"+sizeof("Deepali"));
printf("\n");
return 0;
}
/*E10.11*/
#include <stdio.h>
int main(void)
{
char str[]="Lucknow";
char *p=str;
p=p+3;
p[3]='t';
printf("%s %s\n",str,p);
return 0;
}
/*E10.12*/
#include <stdio.h>
#include <string.h>
int main(void)
{
char *p[]={"Orange","Yellow","Sky""Blue","Black"};
270

char arr[10];
printf("%s %s %s\n",p[1],p[2],p[3]);
strcpy(arr,"Luck""now");
printf("%s\n",arr);
return 0;

/*E10.13*/
#include <stdio.h>
#include <string.h>
int main(void)
{
char str1[15]="Good ";
char str2[]="Evening";
strcpy(str1+strlen(str1),str2);
printf("%s\n",str1);
return 0;
}
/*E10.14*/
#include <stdio.h>
#include <string.h>
int main(void)
{
char str1[]="Parul";
char str2[10];
strcpy(str2,str1);
if(str1==str2)
printf("Same\n");
else
printf("Different\n");
return 0;
}
/*E10.15*/
#include <stdio.h>
int main(void)
{
char x[]="Shilpee";
char y[20];
271

y="Anjali";
printf("%s %s\n",x,y);
return 0;

/*E10.16*/
#include <stdio.h>
#include <string.h>
int main(void)
{
char str1[]="deep";
char str2[]={'d','e','e','p'};
if(strcmp(str1,str2)==0)
printf("Same\n");
else
printf("Different\n");
return 0;
}
/*E10.17*/
#include <stdio.h>
#include <string.h>
int main(void)
{
char str1[]="Parul",str2[]="Devanshi";
if(strlen(str1)-strlen(str2) >=0 )
puts(str1);
else
puts(str2);
return 0;
}
/*E10.18*/
#include <stdio.h>
#include <string.h>
int main(void)
{
char name[15]="Vikramaditya";
int i=0;
while(name[i])
272

printf("%c ",name[i]);
i=i+3;

}
return 0;

/*E10.19*/
#include <stdio.h>
int main(void)
{
char str[10][20];
int i;
for(i=0; i<10; i++)
scanf("%s",str[i]);
for(i=0; i<10; i++)
printf("%s ",str[i]);
return 0;
}
/*E10.20*/
#include <stdio.h>
int main(void)
{
char *str[10];
int i;
for(i=0; i<10; i++)
scanf("%s",str[i]);
for(i=0; i<10; i++)
printf("%s",str[i]);
return 0;
}
/*E10.21*/
#include <stdio.h>
#include <string.h>
char *combine(char *arr1,char *arr2);
int main(void)
{
char str1[20],str2[20];
273

char *p;
strcpy(str1,"Suresh ");
strcpy(str2,"Kumar");
p=combine(str1,str2);
puts(p);
return 0;

}
char *combine(char *arr1,char *arr2)
{
char str[80];
strcpy(str,arr1);
strcat(str,arr2);
return str;
}
/*E10.22*/
#include <stdio.h>
int main(void)
{
char *str="Deepali Srivastava";
int i=0;
while(str[++i]);
printf("%d\n",i);
return 0;
}
/*E10.23*/
#include <stdio.h>
int main(void)
{
int d1,m1,y1;
char date[11]="24/05/1973";
date[2]=date[5]='\0';
sscanf(date,"%d",&d1);
sscanf(date+3,"%d",&m1);
sscanf(date+6,"%d",&y1);
date[2]=date[5]='/';
printf("d1=%d,m1=%d,y1=%d\n",d1,m1,y1);
printf("date=%s\n",date);
return 0;
}
274

/*E10.24*/
#include <stdio.h>
void func(char *p);
int main(void)
{
char *str="doubtful";
func(str);
return 0;
}
void func(char *p)
{
if(*p!='f')
{
printf("%c",*p);
func(++p);
}
}
/*E10.25*/
#include <stdio.h>
void func(char *p);
int main(void)
{
char *str="tap";
func(str);
return 0;
}
void func(char *p)
{
if(*p)
{
func(p+1);
printf("%c",*p++);
}
}
/*E10.26*/
#include <stdio.h>
int main(void)
{
275

char *ptr;
ptr="My name is %s and age is %d\n";
printf(ptr,"Ranju",30);
return 0;

/*E10.27*/
#include <stdio.h>
void func1(char x[]);
void func2(char x[]);
int main(void)
{
char arr[5];
puts(arr);
func1(arr);
puts(arr);
func2(arr);
puts(arr);
return 0;
}
void func1(char x[])
{
x="Jack";
puts(x);
}
void func2(char x[])
{
x[0]='J', x[1]='i', x[2]='l', x[3]='l', x[4]='\0';
puts(x);
}
/*E10.28*/
#include <stdio.h>
int main(void)
{
char *ptr;
ptr = "Every saint has a past,\
Every sinner has a future.\n";
printf("Giving " "is " "living.""\n");
printf(ptr);
276

return 0;

/*E10.29*/
#include <stdio.h>
int main(void)
{
int marks;
char name[50];
printf("Enter marks : ");
scanf("%d",&marks);
printf("Enter name : ");
gets(name);
puts(name);
return 0;
}
/*E10.30*/
#include <stdio.h>
#include <string.h>
int main(void)
{
char *p, str[100]="
main()";
strcpy(str, str+strspn(str, " \t"));
puts(str);
return 0;
}
/*E10.31*/
#include <stdio.h>
#include <ctype.h>
char *str_upper(char *str);
int main(void)
{
char str[50];
printf("Enter a string : ");
gets(str);
puts(str_upper(str));
return 0;
}
277

char *str_upper(char *str)


{
char *s=str;
while(*s!='\0')
{
*s=toupper(*s);
s++;
}
return str;
}
/*E10.32*/
#include <stdio.h>
#include <ctype.h>
int strCIcmp(char *str1,char *str2);
int main(void)
{
char str1[50]="Deepali",str2[20]="deePali";
printf("%d\n",strCIcmp(str1,str2));
return 0;
}
int strCIcmp(char *str1,char *str2)
{
while(toupper(*str1) == toupper(*str2))
{
if(*str1 == '\0')
return 0;
str1++;
str2++;
}
return(toupper(*str1) - toupper(*str2));
}
/*E10.33*/
#include <stdio.h>
#include <string.h>
int main(void)
{
char *p,name[50];

278

printf("Enter a string : ");


fgets(name,sizeof(name),stdin);
printf("%s...\n",name);
printf("Enter a string : ");
fgets(name,sizeof(name),stdin);
if((p=strchr(name,'\n'))!=NULL)
*p='\0';
printf("%s...\n",name);

printf("Enter a string : ");


fgets(name,sizeof(name),stdin);
name[strlen(name)-1]='\0';
printf("%s...\n",name);
return 0;

/*E10.34*/
#include <stdio.h>
#include <string.h>
char *remove_LTblanks(char *str);
int main(void)
{
char str[100]="
Deepali Saxena
";
printf("...%s..",remove_LTblanks(str));
return 0;
}
char *remove_LTblanks(char *str)
{
int i,j,l,t,newlength;
l=0;
while(str[l]==' ')
l++;
/*Leading Blanks = l*/
j=strlen(str)-1;
while(str[j]==' ')
j--;
t=strlen(str)-1-j;
/*printf("Trailing Blanks = t*/
newlength = strlen(str)-l-t;
279

for(i=0,j=l; i<newlength; i++,j++)


str[i]=str[j];
str[newlength]='\0';
return str;

/*E10.35*/
#include <stdio.h>
#include <string.h>
#include <ctype.h>
char *sort(char *str);
int main(void)
{
char str[30];
strcpy(str,"Devanshi");
puts(sort(str));
return 0;
}
char *sort(char *str)
{
int i,j,n;
char temp;
n=strlen(str);
for(i=0; i<n-1 ;i++)
for(j=0; j<n-1-i; j++)
{
if(toupper(str[j]) > toupper(str[j+1]) )
{
temp = str[j];
str[j] = str[j+1];
str[j+1] = temp;
}
}
return str;
}
/*E10.36*/
#include <stdio.h>
#include <string.h>
#include <ctype.h>
280

void abbreviate(char *str1,char *str2);


int main(void)
{
char str1[50],str2[10];
strcpy(str1," World Health Organisation ");
abbreviate(str1,str2);
puts(str2);
return 0;
}
void abbreviate(char *str1,char *str2)
{
while(*str1!='\0')
{
while(isspace(*str1))
/*Skip white spaces*/
str1++;
if(*str1=='\0')
{
*str2='\0';
return;
}
*str2++ = *str1;
while(!isspace(*str1) && *str1!='\0')
str1++;
}
*str2='\0';
}
/*E10.37*/
#include <stdio.h>
#include <string.h>
void extract(char *str1,int i,int n,char *str2);
int main(void)
{
char str1[50],str2[50];
strcpy(str1,"Srivastava");
extract(str1,3,6,str2);
puts(str2);
return 0;
}
void extract(char *str1,int i, int n, char *str2)
281

int j,k;
j=0;
while(str1[j]!='\0' && j<i)
j++;
for(k=0; k<n; k++,j++)
str2[k]=str1[j];
str2[k]='\0';

/*E10.38*/
#include <stdio.h>
#include <string.h>
void del_Multspaces(char *str);
int main(void)
{
char str[100]="
Data Structures
del_Multspaces(str);
puts(str);
return 0;
}
void del_Multspaces(char *str)
{
int i=0,j=0;
while(i<=strlen(str)-1)
{
if(str[i]==' ')
{
while(str[i]==' ')
i++;
str[j++]=' ';
}
str[j++]=str[i++];
}
str[j]='\0';
}
/*E10.39*/
#include <stdio.h>
#include <string.h>
282

through

C in

depth ";

int pstrncmp(char *str1,char *str2, int n);


char *pstrncpy(char *str1, char *str2, int n);
char *pstrncat(char *str1,char *str2, int n);
int main(void)
{
char str1[50]="Dev", str2[50]="anshikal";
pstrncat(str1,str2,5);
puts(str1);
strcpy(str1,"Deepali"); strcpy(str2,"Deepam");
printf("%d\n",pstrncmp(str1,str2,5) );

strcpy(str1,""); strcpy(str2,"Vinay");
pstrncpy(str1,str2,4);
puts(str1);
return 0;

int pstrncmp(char *str1,char *str2, int n)


{
while(*str1 == *str2)
{
n--;
if(*str1 == '\0' || n<=0 )
return 0;
str1++;
str2++;
}
return(*str1 - *str2);
}
char *pstrncpy(char *str1, char *str2, int n)
{
while(*str2!='\0' && n>0)
{
*str1++ = *str2++;
n--;
}
while(n > 0);
{
283

*str1++ = '\0';
n--;

}
return str1;

char *pstrncat(char *str1,char *str2, int n)


{
char *p=str1;
int i;
while(*p!='\0')
p++;

for(i=0; i<n; i++)


*p++ = *str2++;
*str2='\0';
return str1;

/*E10.40*/
#include <stdio.h>
#include <string.h>
char *strstr_r(char *str, char *substr);
int main(void)
{
char str1[50];
strcpy(str1,"no yes ... yes no yes no");
puts(strstr_r(str1,"yes"));
return 0;
}
/*Return a pointer to the last occurrence of the substring*/
char *strstr_r(char *str, char *substr)
{
char *prev,*s;
if(*substr=='\0')
return NULL;
prev=NULL;
s=strstr(str,substr);
284

while(s!=NULL)
{
prev=s;
s=strstr(prev+1,substr);
}
return prev;

/*E10.41*/
#include <stdio.h>
#include <string.h>
int find_indexF(char *str, char *substr);
int find_indexL(char *str, char *substr);
int main(void)
{
char str1[30];
strcpy(str1,"no yes no yes");
printf("%d\n",find_indexF(str1,"yes"));
printf("%d\n",find_indexL(str1,"yes"));
return 0;
}
/*Returns index of the first occurrence of substring*/
int find_indexF(char *str, char *substr)
{
char *s,*p1,*p2;
if(*substr=='\0')
return -1;

/*If substring is empty*/

for(s=str; *s!='\0'; s++)


{
p1=s;
p2=substr;
while(*p2!='\0' && *p1==*p2)
{
p1++;
p2++;
}
if(*p2=='\0')
return s-str;
285

}
return -1;

}
/*Returns index of the last occurrence of substring*/
int find_indexL(char *str, char *substr)
{
int i;
char *s,*p1,*p2;

if(*substr=='\0')
/*If substring is empty*/
return -1;
i=-1;
for(s=str; *s!='\0'; s++)
{
p1=s;
p2=substr;
while(*p2!='\0' && *p1==*p2)
p1++,p2++;
if(*p2=='\0')
i = s-str;
}
return i;

/*E10.42*/
#include <stdio.h>
#include <string.h>
int str_start(char *str1, char *str2);
int str_end(char *str, char *substr);
int main(void)
{
char str1[30]="yes no yes";
int i;
i=str_start(str1,"yes");
printf("%d ",i);
i=str_start(str1,"es");
printf("%d ",i);

286

i=str_end(str1,"yes");
printf("%d ",i);

i=str_end(str1,"ye");
printf("%d ",i);
return 0;

/*Returns 1 if substr is present at the start of str*/


int str_start(char *str, char *substr)
{
char *p1,*p2;
if(*substr=='\0')
return 0;
p1=str;
p2=substr;
while(*p1 == *p2)
{
if(*p1=='\0' || *p2=='\0')
break;
p1++;
p2++;
}
if(*p2=='\0')
return 1;
else
return 0;
}
/*Returns 1 if substr is present at the end of str*/
int str_end(char *str, char *substr)
{
char *p1,*p2;
if(*substr=='\0')
return 0;
for(p1=str; *p1!='\0'; p1++)
;

287

for(p2=substr; *p2!='\0'; p2++)


;
/*Now p1 and p2 point to the end of str and substr respectively*/
while(*p1 == *p2)
{
if(p1==str || p2==substr)
break;
p1--;
p2--;
}

if(*p1==*p2 && p2==substr)


return 1;
else
return 0;

#include <stdio.h>
#include <string.h>
int main(void)
{
char *p,x,str[100]="JP Nagar Bangalore, Vijaynagar Bangalore, Jaynagar Bangalor
p=strstr(str,"Bangalore");
while(p!=NULL)
{
x=p[9];
strcpy(p,"Bengaluru");
p[9]=x; /*we dont need the '\0' character written by strcpy()*/
p=strstr(str,"Bangalore");
}
puts(str);
return 0;
}
/*P10.44*/
#include <stdio.h>
#include <string.h>
int count_word1(char *str,char *word);
int count_word2(char *str,char *word);
288

int main(void)
{
char str[100]="hut cut hut but nuthut hut on hutin but hut";
printf("\n%d \n",count_word1(str,"hut"));
printf("\n%d \n",count_word2(str,"hut"));
return 0;
}
int count_word1(char *str,char *word)
{
int i=0;
char *s=str;
s=strstr(s,word);
while(s!=NULL)
{
if(s==str && *(s+strlen(word))=='\0') /*only word*/
i++;
else if(s==str && *(s+strlen(word))==' ')/*first word*/
i++;
else if(*(s-1)==' ' && *(s+strlen(word))=='\0' )/*last word*/
i++;
else if(*(s-1)==' ' && *(s+strlen(word))==' ')/*in middle*/
i++;
if(s)
puts(s);
s=strstr(s+1,word);
}
return i;
}
int count_word2(char *str,char *word)
{
int i=0;
char *s=str;
s=strstr(s,word);
while(s!=NULL)
{
if(s==str || *(s-1)==' ')
if(*(s+strlen(word))=='\0'|| *(s+strlen(word))==' ')
i++;
if(s)
puts(s);
289

s=strstr(s+1,word);
}
return i;

/*E10.45*/
#include <stdio.h>
#include <string.h>
void func(char *str1, char *str2);
int main(void)
{
char str1[100],str2[100];
strcpy(str1,"Deepali Sri");strcpy(str2,"Suresh Sri");
func(str1,str2);
puts(str1);
puts(str2);
return 0;
}
void func(char *str1, char *str2)
{
char str3[80],str4[80];
int i,j,k,len1,len2;
len1=strlen(str1);
len2=strlen(str2);
k=0;
for(i=0; i<len1; i++)
{
for(j=0; j<len2; j++)
if(str1[i] == str2[j])
break;
if(j==len2)
str3[k++] = str1[i];
}
str3[k]='\0';
k=0;
for(i=0; i<len2; i++)
{
for(j=0; j<len1; j++)
if(str2[i]==str1[j])
290

break;
if(j==len1)
str4[k++]=str2[i];

}
str4[k] = '\0';
strcpy(str1,str3);
strcpy(str2,str4);

/*E10.46 Program to find day of week from a given date*/


#include <stdio.h>
int main(void)
{
int d,m,y,j,f,h,fh,day;
char *days[] = {"Saturday","Sunday", "Monday", "Tuesday", "Wednesday", "Thursda
printf("Enter date(dd/mm/yyyy): ");
scanf("%d/%d/%d",&d,&m,&y);
j = d;
switch(m-1)
{
case 11: j+=30;
case 10: j+=31;
case 9:
j+=30;
case 8:
j+=31;
case 7:
j+=31;
case 6:
j+=30;
case 5:
j+=31;
case 4:
j+=30;
case 3:
j+=31;
case 2:
j+=28;
case 1:
j+=31;
}
if(y%4==0 && y%100!=0 || y%400==0)
if(m!=1 && m!=2)
j = j+1;
f = (y-1)/4;
h = (y-1)/100;
fh = (y-1)/400;
day = (y+j+f-h+fh)%7;
printf("%s\n",days[day]);
291

return 0;
}/*End of main()*/
/*E10.47*/
#include <stdio.h>
#include <string.h>
int count_vowels (char *str);
int main(void)
{
char str[100];
printf("Enter a string :");
gets(str);
printf("%d\n",countVowels(str));
return 0;
}
int countVowels(char *str)
{
if(*str == '\0')
return 0;
switch(*str)
{
case 'A': case 'a':
case 'E': case 'e':
case 'I': case 'i':
case 'O': case 'o':
case 'U': case 'u':
return 1 + countVowels(str+1);
default:
return countVowels(str+1);
}
}
/*E10.48*/
#include <stdio.h>
void f(char *s, char a, char b);
int main(void)
{
char str[100],a,b;
printf("Enter a string :");
gets(str);
292

printf("Enter two characters :");


scanf("%c %c",&a,&b);
f(str,a,b);
puts(str);
return 0;

}
void f(char *str, char a, char b)
{
if(*str=='\0')
return;
if(*str==a)
*str=b;
f(str+1,a,b);
}

/*E10.49*/
#include <stdio.h>
#include <string.h>
void reverse_str(char *str);
void rev(char *s,int size);
int main(void)
{
char str[100];
printf("Enter a string :");
gets(str);
reverse_str(str);
puts(str);
return 0;
}
void reverse_str(char *str)
{
rev(str,strlen(str));
}
void rev(char *str,int size)
{
char tmp;
if(size<=1)
return;
else
{
293

tmp = str[0];
str[0] = str[size-1];
str[size-1] = tmp;
rev(str+1,size-2);

/*E10.50*/
#include <stdio.h>
#include <string.h>
int find(char *str, char c, int i);
int findFirst(char *str, char c);
int main(void)
{
char str[100];
printf("Enter a string :");
gets(str);
printf("%d\n",findFirst(str,'a'));
return 0;
}
int findFirst(char *str, char c)
{
return find(str,c,0);
}
int find(char *str, char c, int i)
{
if(*str=='\0')
return -1;
if(*str == c)
return i;
return find(str+1,c,i+1);
}
/*E10.51*/
#include <stdio.h>
#include <string.h>
int findLast(char *str, char c);
int find(char *str, char c, int n);
int main(void)
{
294

char str[100];
char c='a';
printf("Enter a string :");
gets(str);
printf("%d\n",findLast(str,c));
return 0;

}
int findLast(char *str,char c)
{
return find(str,c,strlen(str));
}
int find(char *str, char c, int n)
{
if(n==0)
return -1;
if(str[n-1]==c)
return n-1;
return find(str,c,n-1);
}
/*E10.52*/
#include <stdio.h>
#include <string.h>
int is_palindrome(char *s);
int find(char *s, int size);
int main(void)
{
char str[100];
printf("Enter a string :");
gets(str);
if(is_palindrome(str))
printf("%s is a palindrome\n", str);
else
printf("%s is not a palindrome\n", str);
return 0;
}
int is_palindrome(char *str)
{
return find(str,strlen(str));
}
295

int find(char *str, int size)


{
if(size<=1)
return 1;
if(str[0] != str[size-1])
return 0;
return find(str+1,size-2);
}

/*E10.53*/
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int is_palindrome(char *s);
int find(char *s, int size);
int main(void)
{
char str[100];
printf("Enter a string :");
gets(str);
if(is_palindrome(str))
printf("%s is a palindrome\n", str);
else
printf("%s is not a palindrome\n", str);
puts(str);
return 0;
}
int is_palindrome(char *str)
{
return find(str,strlen(str));
}
int find(char *str, int size)
{
if(size<=1)
return 1;
if(str[0] == ' ' || str[0]==',' || str[0]=='"'|| str[0]=='.'|| str[0]=='!'|| st
return find(str+1, size-1);
if(str[size-1]==' ' || str[size-1]==','|| str[size-1]=='"'|| str[size-1]=='.'|
return find(str, size-1);
if(toupper(str[0]) != toupper(str[size-1]) )
296

return 0;
return find(str+1, size-2);

/*E10.54*/
#include <stdio.h>
#include <ctype.h>
int str_to_i(char *str);
void f(char *s, int *num);
int main(void)
{
char str[10];
int num;
printf("Enter a string of numbers :");
gets(str);
num=str_to_i(str);
printf("%d %s\n",num,str);
return 0;
}
int str_to_i(char *str)
{
int num=0;
f(str,&num);
return num;
}
void f(char *s, int *pnum)
{
if(*s=='\0' || !isdigit(*s) )
return;
*pnum = (*pnum)*10 + *s-'0';
return f(s+1, pnum);
}
/*E10.55*/
#include <stdio.h>
#include <string.h>
void Permute1(char str[]);
void Permute1_rec(char str[], char* currentptr);

297

void Permute2(char str[]);


void Permute2_rec(char str[], int startIndex, int lastIndex);
void Swap(char *a, char *b);
int main(void)
{
char str[10]="abc";
Permute1(str);
printf("\n\n");
Permute2(str);
printf("\n");
return 0;
}
void Permute1(char str[])
{
Permute1_rec(str,str);
}
void Permute1_rec(char str[], char* currentptr)
{
char *ptr;
if( *(currentptr + 1) == '\0')
printf("%s\t", str);
else
for(ptr=currentptr; *ptr!='\0'; ptr++)
{
Swap(ptr,currentptr);
Permute1_rec(str, currentptr+1);
Swap(ptr,currentptr);
}
}
void Permute2(char str[])
{
Permute2_rec(str,0,strlen(str)-1);
}
void Permute2_rec(char str[], int startIndex, int lastIndex)
{
int i;
if(startIndex==lastIndex)
{
for(i=0;i<=lastIndex;i++)
298

printf("%c",str[i]);
printf("\t");

}
else
for(i=startIndex;i<=lastIndex;i++)
{
Swap(&str[startIndex], &str[i]);
Permute2_rec(str,startIndex+1,lastIndex);
Swap(&str[startIndex], &str[i]);
}

}
void Swap(char *a, char *b)
{
char temp = *a; *a=*b; *b=temp;
}

10

Chapter 11

** In chapter exercises for chapter 11:

**

/*P11.1 Program to display the values of structure members*/


#include <stdio.h>
#include <string.h>
struct student
{
char name[20];
int rollno;
float marks;
};
int main(void)
{
struct student stu1={"Mary",25,68};
struct student stu2,stu3;
strcpy(stu2.name,"John");
stu2.rollno=26;
stu2.marks=98;
printf("Enter name, rollno and marks for stu3 : ");
scanf("%s %d %f", stu3.name, &stu3.rollno, &stu3.marks);
printf("stu1 : %s %d %.2f\n",stu1.name,stu1.rollno,stu1.marks);
printf("stu2 : %s %d %.2f\n",stu2.name,stu2.rollno,stu2.marks);
299

printf("stu3 : %s %d
return 0;

%.2f\n",stu3.name,stu3.rollno,stu3.marks);

/*P11.2 Program to assign a structure variable to another structure variable*/


struct student
{
char name[20];
int rollno;
float marks;
};
int main(void)
{
struct student stu1={"Oliver",12,98};
struct student stu2;
stu2 = stu1;
printf("stu1:%s %d %.2f\n",stu1.name,stu1.rollno,stu1.marks);
printf("stu2:%s %d %.2f\n",stu2.name,stu2.rollno,stu2.marks);
return 0;
}
/*P11.3 Array of structures*/
#include <stdio.h>
struct student
{
char name[20];
int rollno;
float marks;
};
int main(void)
{
int i;
struct student stuarr[10];
for(i=0; i<10; i++)
{
printf("Enter name,rollno and marks : ");
scanf("%s%d%f",stuarr[i].name,&stuarr[i].rollno,&stuarr[i].marks);
}
for(i=0; i<10; i++)
printf("%s %d %f\n",stuarr[i].name,stuarr[i].rollno,stuarr[i].marks);
300

return 0;

/*P11.4 Program to understand arrays within structures*/


#include <stdio.h>
struct student
{
char name[20];
int rollno;
int submarks[4];
};
int main(void)
{
int i,j;
struct student stuarr[3];
for(i=0; i<3; i++)
{
printf("Enter data for student %d\n", i+1);
printf("Enter name : ");
scanf("%s", stuarr[i].name);
printf("Enter roll number : ");
scanf("%d",&stuarr[i].rollno);
for(j=0; j<4; j++)
{
printf("Enter marks for subject %d : ",j+1);
scanf("%d", &stuarr[i].submarks[j]);
}
}
for(i=0; i<3; i++)
{
printf("Data of student %d\n", i+1);
printf("Name:%s, Roll number:%d\nMarks:",stuarr[i].name,stuarr[i].rolln
for(j=0; j<4; j++)
printf("%d ",stuarr[i].submarks[j]);
printf("\n");
}
return 0;
}
/*P11.5 Program to understand pointers to structures*/
#include <stdio.h>
301

struct student
{
char name[20];
int rollno;
int marks;
};
int main(void)
{
struct student stu = {"Mary", 25, 68};
struct student *ptr = &stu;
printf("Name - %s\t", ptr->name);
printf("Rollno - %d\t", ptr->rollno);
printf("Marks - %d\n", ptr->marks);
return 0;
}
/*P11.6 Program to understand how structure members are sent to a function */
#include <stdio.h>
#include <string.h>
struct student
{
char name[20];
int rollno;
int marks;
};
void display(char name[],int rollno,int marks);
int main(void)
{
struct student stu1={"John",12,87};
struct student stu2;
strcpy(stu2.name,"Mary");
stu2.rollno=18;
stu2.marks=90;
display(stu1.name,stu1.rollno,stu1.marks);
display(stu2.name,stu2.rollno,stu2.marks);
return 0;
}
void display(char name[],int rollno,int marks)
{
printf("Name - %s\t",name);
302

printf("Rollno - %d\t",rollno);
printf("Marks - %d\n",marks);

/*P11.7 Program to understand how a structure variable is sent to a function*/


#include <stdio.h>
struct student
{
char name[20];
int rollno;
int marks;
};
void display(struct student);
int main(void)
{
struct student stu1={"John",12,87};
struct student stu2={"Mary",18,90};
display(stu1);
display(stu2);
return 0;
}
void display(struct student stu)
{
printf("Name - %s\t",stu.name);
printf("Rollno - %d\t",stu.rollno);
printf("Marks - %d\n",stu.marks);
}

/*P11.8 Program to understand how a pointer to structure variable is sent to a function


#include <stdio.h>
struct student
{
char name[20];
int rollno;
int marks;
};
void display(struct student *);
void inc_marks(struct student *);
int main(void)
{
303

struct student stu1 = {"John",12,87};


struct student stu2 = {"Mary",18,90};
inc_marks(&stu1);
inc_marks(&stu2);
display(&stu1);
display(&stu2);
return 0;

}
void inc_marks(struct student *stuptr)
{
(stuptr->marks)++;
}
void display(struct student *stuptr)
{
printf("Name - %s\t",stuptr->name);
printf("Rollno - %d\t",stuptr->rollno);
printf("Marks - %d\n",stuptr->marks);
}
/*P11.9 Program to understand how a structure variable is returned from a function*/
#include <stdio.h>
struct student
{
char name[20];
int rollno;
int marks;
};
void display(struct student);
struct student change(struct student stu);
int main(void)
{
struct student stu1 = {"John",12,87};
struct student stu2 = {"Mary",18,90};
stu1 = change(stu1);
stu2 = change(stu2);
display(stu1);
display(stu2);
return 0;
}
struct student change(struct student stu)
304

stu.marks=stu.marks + 5;
stu.rollno=stu.rollno-10;
return stu;

}
void display(struct student stu)
{
printf("Name - %s\t", stu.name);
printf("Rollno - %d\t", stu.rollno);
printf("Marks - %d\n", stu.marks);
}

/*P11.10 Program to understand how a pointer to structure is returned from a function*/


#include <stdio.h>
#include <string.h>
struct student
{
char name[20];
int rollno;
int marks;
};
void display(struct student *);
struct student *func(struct student *p1, struct student *p2);
int main(void)
{
struct student *stuptr;
struct student stu1={"Dev",23,78}, stu2={"Ved",12,89};
stuptr = func(&stu1, &stu2);
display(stuptr);
return 0;
}
struct student *func(struct student *p1, struct student *p2)
{
if(p1->marks > p2->marks)
return p1;
else
return p2;
}
void display( struct student *stuptr)
{
305

printf("Name - %s\t", stuptr->name);


printf("Rollno - %d\t", stuptr->rollno);
printf("Marks - %d\n", stuptr->marks);

/*P11.11 Program to understand how an array of structures is sent to a function*/


#include <stdio.h>
struct student
{
char name[20];
int rollno;
int marks;
};
void display(struct student);
void dec_marks(struct student stuarr[]);
int main(void)
{
int i;
struct student stuarr[3]={
{"Mary",12,98},
{"John",11,97},
{"Tom",13,89}
};
dec_marks(stuarr);
for(i=0; i<3; i++)
display(stuarr[i]);
return 0;
}
void dec_marks(struct student stuarr[])
{
int i;
for(i=0; i<3; i++)
stuarr[i].marks = stuarr[i].marks-10;
}
void display(struct student stu)
{
printf("Name - %s\t", stu.name);
printf("Rollno - %d\t", stu.rollno);
printf("Marks - %d\n", stu.marks);
}
306

** Back exercises for chapter 11:

**

/*E11_1*/
#include <stdio.h>
int main(void)
{
struct result
{
int marks;
char grade;
};
struct result A1, B1;
A1.marks=80;
A1.grade='A';
B1=A1;
printf("Marks=%d\t",B1.marks);
printf("Grade=%c\n",B1.grade);
return 0;
}
/*E11_2*/
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
struct rec
{
char *name;
int age;
}*ptr;
char name[10]="Somalika";
ptr=(struct rec *)malloc(sizeof(struct rec));
ptr->name=name;
ptr->age=93;
printf("%s\t",ptr->name);
printf("%d\n",ptr->age);
return 0;
}
/*E11_3*/
#include <stdio.h>
struct student {char name[20]; int age;};
307

int main(void)
{
struct student stu1={"Anita", 10},stu2={"Anita",12};
if(stu1 == stu2)
printf("Same\n");
else
printf("Not same\n");
return 0;
}
/*E11_4*/
#include <stdio.h>
void func(struct tag v);
int main(void)
{
struct tag
{
int i;
char c;
};
struct tag var={2,'s'};
func(var);
return 0;
}
void func(struct tag v)
{
printf("%d %c\n",v.i,v.c);
}
/*E11_5*/
#include <stdio.h>
void func(struct {int i; char c;} v);
int main(void)
{
struct {int i; char c;}var = {2,'s'};
func(var);
return 0;
}
void func(struct {int i; char c;} v)
{
308

printf("%d

%c\n",v.i,v.c);

/*E11_6*/
#include <stdio.h>
struct tag{int i; char c;};
void func(struct tag);
int main(void)
{
struct tag var = {12,'c'};
func(var);
printf("%d\n",var.i);
return 0;
}
void func(struct tag var)
{
var.i++;
}
/*E11_7*/
#include <stdio.h>
struct tag{ int i; char c;};
void func(struct tag *);
int main(void)
{
struct tag var = {12,'c'};
func(&var);
printf("%d\n",var.i);
return 0;
}
void func(struct tag *ptr)
{
ptr->i++;
}
/*E11_8*/
#include <stdio.h>
#include <string.h>
int main(void)
{
309

union tag
{
char name[15];
int age;
}rec;
strcpy(rec.name,"Somalika");
rec.age=23;
printf("Name = %s\n",rec.name);
return 0;

/*E11_9*/
#include <stdio.h>
struct
{
char a[20];
int b;
union
{
double c;
struct
{
char d[15];
float e;
}x;
}y;
}z;
int main(void)
{
printf("%u %u %u\n",sizeof(z.y.x),sizeof(z.y),sizeof(z));
return 0;
}
/*E11_10*/
#include <stdio.h>
int main(void)
{
typedef short int s_int;
unsigned s_int var=3;
printf("%u", var);
310

return 0;

/*E11_11*/
#include <stdio.h>
typedef struct tag{int i; char c;}tag;
int main(void)
{
struct tag v1={1,'a'};
tag v2={2,'b'};
printf("%d %c %d %c\n",v1.i,v1.c,v2.i,v2.c);
return 0;
}
/*E11_12*/
#include <stdio.h>
typedef struct{char name[20]; int age;}stu;
typedef struct{int data; node *link;}node;
int main(void)
{
stu *p=malloc(sizeof(stu));
node *ptr=malloc(sizeof(node));
p->age=30;
ptr->data=3;
printf("%d %d\n",p>age,ptr>data);
return 0;
}
/*E11_13*/
#include <stdio.h>
#include <limits.h>
#define N 5
struct person
{
char name[20];
int age;
char city[50];
};
int main(void)
{
311

struct person p[5],eldestP;


int i,max=INT_MIN;

for(i=0; i<5; i++)


{
printf("Enter name : ");
scanf("%s",p[i].name);
printf("Enter age : ");
scanf("%d",&p[i].age);
printf("Enter city : ");
scanf("%s",p[i].city);
if(p[i].age > max)
{
max=p[i].age;
eldestP=p[i];
}
}
printf("%s %d %s\n",eldestP.name,eldestP.age,eldestP.city);
return 0;

/*E11_14*/
#include <stdio.h>
#define N 5
struct train
{
char name[20];
int hr;
int min;
char m;
};
int main(void)
{
struct train t[5];
int i;
for(i=0; i<5; i++)
{
printf("Enter name : ");
scanf("%s",t[i].name);
printf("Enter arrival time(hh:mm A/P) : ");
312

scanf("%d : %d %c",&t[i].hr, &t[i].min,&t[i].m);


}
for(i=0; i<5; i++)
{
printf("%s\t",t[i].name);
t[i].m=='A' ? printf("%d",t[i].hr) : printf("%d",t[i].hr+12);
printf(":%d\n",t[i].min);
}
return 0;

/*E11_15*/
#include <stdio.h>
#include <string.h>
#define N 5
struct employee
{
char name[20];
int age;
int salary;
};
void sort(struct employee emp[]);
void display(struct employee emp[]);
int main(void)
{
struct employee emp[N];
int i;
for(i=0; i<N; i++)
{
printf("Enter name :");
scanf("%s",emp[i].name);
printf("Enter age : ");
scanf("%d", &emp[i].age);
printf("Enter salary : ");
scanf("%d", &emp[i].salary);
printf("\n");
}
313

display(emp);
sort(emp);
display(emp);
return 0;

}
void sort(struct employee emp[])
{
struct employee temp;
int i,j;
for(i=0; i<N-1; i++)
for(j=i+1; j<N; j++)
if(strcmp(emp[i].name, emp[j].name) > 0 )
{
temp = emp[i];
emp[i] = emp[j];
emp[j] = temp;
}
}
void display(struct employee emp[])
{
int i;
for(i=0; i<N; i++)
{
printf("%s\t\t",emp[i].name);
printf("%d\t", emp[i].age);
printf("%d\n", emp[i].salary);
}
printf("\n");
}
/*E11_16*/
#include <stdio.h>
#include <stdlib.h>
struct node
{
int info;
struct node *link;
};
struct node *create_list(struct node *start);
void display(struct node *start);
314

struct node *addatbeg(struct node *start,int data);


struct node *addatend(struct node *start,int data);
int countOccurrences(struct node *start, int n);
int main(void)
{
struct node *start=NULL;
int n;
start=create_list(start);
display(start);
printf("Enter a value : ");
scanf("%d",&n);
printf("The value %d occurs %d times\n",n,countOccurrences(start,n) );
return 0;
}/*End of main()*/
int countOccurrences(struct node *ptr, int n)
{
int k=0;
while(ptr!=NULL)
{
if(ptr->info == n)
k++;
ptr=ptr->link;
}
return k;
}/*End of countOccurrences()*/
struct node *create_list(struct node *start)
{
int i,n,data;
printf("Enter the number of nodes : ");
scanf("%d",&n);
start=NULL;
if(n==0)
return start;
printf("Enter the element to be inserted : ");
scanf("%d",&data);
start=addatbeg(start,data);
315

for(i=2;i<=n;i++)
{
printf("Enter the element to be inserted : ");
scanf("%d",&data);
start=addatend(start,data);
}
return start;
}/*End of create_list()*/
void display(struct node *start)
{
struct node *p;
if(start==NULL)
{
printf("List is empty\n");
return;
}
p=start;
printf("List is :\n");
while(p!=NULL)
{
printf("%d ",p->info);
p=p->link;
}
printf("\n\n");
}/*End of display() */
struct node *addatbeg(struct node *start,int data)
{
struct node *tmp;
tmp=(struct node *)malloc(sizeof(struct node));
tmp->info=data;
tmp->link=start;
start=tmp;
return start;
}/*End of addatbeg()*/
struct node *addatend(struct node *start,int data)
{
struct node *p,*tmp;
316

tmp=(struct node *)malloc(sizeof(struct node));


tmp->info=data;
p=start;
while(p->link!=NULL)
p=p->link;
p->link=tmp;
tmp->link=NULL;
return start;
}/*End of addatend()*/
/*E11_17*/
#include <stdio.h>
#include <stdlib.h>
struct node
{
int info;
struct node *link;
};
struct node *create_list(struct node *start);
void display(struct node *start);
struct node *addatbeg(struct node *start,int data);
struct node *addatend(struct node *start,int data);
int largest(struct node *start);
int smallest(struct node *start);
int main(void)
{
struct node *start=NULL;
start=create_list(start);
display(start);
printf("Largest element is %d\n",largest(start));
printf("Smallest element is %d\n",smallest(start));
return 0;
}/*End of main()*/
int largest(struct node *ptr)
{
int large=ptr->info;
while(ptr!=NULL)
{
317

if(ptr->info >large)
large = ptr->info;
ptr=ptr->link;

}
return large;
}/*End of largest()*/

int smallest(struct node *ptr)


{
int small=ptr->info;
while(ptr!=NULL)
{
if(ptr->info < small)
small = ptr->info;
ptr=ptr->link;
}
return small;
}/*End of smallest()*/
struct node *create_list(struct node *start)
{
int i,n,data;
printf("Enter the number of nodes : ");
scanf("%d",&n);
start=NULL;
if(n==0)
return start;
printf("Enter the element to be inserted : ");
scanf("%d",&data);
start=addatbeg(start,data);
for(i=2;i<=n;i++)
{
printf("Enter the element to be inserted : ");
scanf("%d",&data);
start=addatend(start,data);
}
return start;
}/*End of create_list()*/
318

void display(struct node *start)


{
struct node *p;
if(start==NULL)
{
printf("List is empty\n");
return;
}
p=start;
printf("List is :\n");
while(p!=NULL)
{
printf("%d ",p->info);
p=p->link;
}
printf("\n\n");
}/*End of display() */
struct node *addatbeg(struct node *start,int data)
{
struct node *tmp;
tmp=(struct node *)malloc(sizeof(struct node));
tmp->info=data;
tmp->link=start;
start=tmp;
return start;
}/*End of addatbeg()*/
struct node *addatend(struct node *start,int data)
{
struct node *p,*tmp;
tmp=(struct node *)malloc(sizeof(struct node));
tmp->info=data;
p=start;
while(p->link!=NULL)
p=p->link;
p->link=tmp;
tmp->link=NULL;
return start;
319

}/*End of addatend()*/
/*E11_18*/
#include <stdio.h>
#include <stdlib.h>
struct node
{
int info;
struct node *link;
};
struct node *create_list(struct node *start);
void display(struct node *start);
struct node *addatbeg(struct node *start,int data);
struct node *addatend(struct node *start,int data);
struct node *Copy(struct node *start1);
int main(void)
{
struct node *start1=NULL,*start2;
printf("Enter list 1 -\n");
start1=create_list(start1);
printf("List 1 is :\n");
display(start1);
start2 = Copy(start1);
printf("Copy of list 1 is :\n");
display(start2);
return 0;
}/*End of main()*/
struct node *Copy(struct node *start)
{
struct node *startCopy=NULL;
struct node *p1,*p2,*tmp;
if(start==NULL)
return NULL;

320

p1=start;
tmp=(struct node *)malloc(sizeof(struct node));
tmp->info=p1->info;
p2=startCopy=tmp;
p1=p1->link;
while(p1!=NULL)
{
tmp=(struct node *)malloc(sizeof(struct node));
tmp->info = p1->info;
p2->link=tmp;
p2=tmp;
p1=p1->link;
}
p2->link=NULL;
return startCopy;
}/*End of Copy()*/
struct node *create_list(struct node *start)
{
int i,n,data;
printf("Enter the number of nodes : ");
scanf("%d",&n);
start=NULL;
if(n==0)
return start;
printf("Enter the element to be inserted : ");
scanf("%d",&data);
start=addatbeg(start,data);
for(i=2;i<=n;i++)
{
printf("Enter the element to be inserted : ");
scanf("%d",&data);
start=addatend(start,data);
}
return start;
}/*End of create_list()*/

321

void display(struct node *start)


{
struct node *p;
if(start==NULL)
{
printf("Empty\n");
return;
}
p=start;
while(p!=NULL)
{
printf("%d ",p->info);
p=p->link;
}
printf("\n\n");
}/*End of display() */
struct node *addatbeg(struct node *start,int data)
{
struct node *tmp;
tmp=(struct node *)malloc(sizeof(struct node));
tmp->info=data;
tmp->link=start;
start=tmp;
return start;
}/*End of addatbeg()*/
struct node *addatend(struct node *start,int data)
{
struct node *p,*tmp;
tmp=(struct node *)malloc(sizeof(struct node));
tmp->info=data;
p=start;
while(p->link!=NULL)
p=p->link;
p->link=tmp;
tmp->link=NULL;
return start;
}/*End of addatend()*/
322

/*E11_19*/
#include <stdio.h>
#include <stdlib.h>
struct node
{
int info;
struct node *link;
};
struct node *create_list(struct node *start);
void display(struct node *start);
struct node *addatbeg(struct node *start,int data);
struct node *addatend(struct node *start,int data);
void MoveLarge(struct node *start);
int main(void)
{
struct node *start=NULL;
start=create_list(start);
display(start);
MoveLarge(start);
display(start);
return 0;
}/*End of main()*/
void MoveLarge(struct node *start)
{
struct node *p;
int tmp;
if(start==NULL)
return;
p=start;
while(p->link!=NULL)
{
if(p->info > p->link->info)
{
tmp = p->info;
p->info = p->link->info;
323

p->link->info = tmp;
}
p=p->link;

}
}/*End of MoveLarge()*/

struct node *create_list(struct node *start)


{
int i,n,data;
printf("Enter the number of nodes : ");
scanf("%d",&n);
start=NULL;
if(n==0)
return start;
printf("Enter the element to be inserted : ");
scanf("%d",&data);
start=addatbeg(start,data);
for(i=2;i<=n;i++)
{
printf("Enter the element to be inserted : ");
scanf("%d",&data);
start=addatend(start,data);
}
return start;
}/*End of create_list()*/
void display(struct node *start)
{
struct node *p;
if(start==NULL)
{
printf("List is empty\n");
return;
}
p=start;
printf("List is :\n");
while(p!=NULL)
{
324

printf("%d ",p->info);
p=p->link;

}
printf("\n\n");
}/*End of display() */

struct node *addatbeg(struct node *start,int data)


{
struct node *tmp;
tmp=(struct node *)malloc(sizeof(struct node));
tmp->info=data;
tmp->link=start;
start=tmp;
return start;
}/*End of addatbeg()*/
struct node *addatend(struct node *start,int data)
{
struct node *p,*tmp;
tmp=(struct node *)malloc(sizeof(struct node));
tmp->info=data;
p=start;
while(p->link!=NULL)
p=p->link;
p->link=tmp;
tmp->link=NULL;
return start;
}/*End of addatend()*/
/*E11_20*/
#include <stdio.h>
#include <stdlib.h>
struct node
{
int info;
struct node *link;
};
struct node *create_list(struct node *start);
325

void display(struct node *start);


struct node *addatbeg(struct node *start,int data);
struct node *addatend(struct node *start,int data);
void MoveSmall(struct node *start);
int main(void)
{
struct node *start=NULL;
start=create_list(start);
display(start);
MoveSmall(start);
display(start);
return 0;
}/*End of main()*/
void MoveSmall(struct node *start)
{
struct node *p,*q;
int tmp;
if(start==NULL)
return;
p=start;
q=start->link;
while(q!=NULL)
{
if(p->info > q->info )
{
tmp = p->info;
p->info = q->info;
q->info = tmp;
}
q=q->link;
}
}/*End of MoveSmall()*/
struct node *create_list(struct node *start)
{
int i,n,data;
printf("Enter the number of nodes : ");
scanf("%d",&n);
326

start=NULL;
if(n==0)
return start;
printf("Enter the element to be inserted : ");
scanf("%d",&data);
start=addatbeg(start,data);
for(i=2;i<=n;i++)
{
printf("Enter the element to be inserted : ");
scanf("%d",&data);
start=addatend(start,data);
}
return start;
}/*End of create_list()*/
void display(struct node *start)
{
struct node *p;
if(start==NULL)
{
printf("List is empty\n");
return;
}
p=start;
printf("List is :\n");
while(p!=NULL)
{
printf("%d ",p->info);
p=p->link;
}
printf("\n\n");
}/*End of display() */
struct node *addatbeg(struct node *start,int data)
{
struct node *tmp;
tmp=(struct node *)malloc(sizeof(struct node));
tmp->info=data;
327

tmp->link=start;
start=tmp;
return start;
}/*End of addatbeg()*/
struct node *addatend(struct node *start,int data)
{
struct node *p,*tmp;
tmp=(struct node *)malloc(sizeof(struct node));
tmp->info=data;
p=start;
while(p->link!=NULL)
p=p->link;
p->link=tmp;
tmp->link=NULL;
return start;
}/*End of addatend()*/
/*E11_21*/
#include <stdio.h>
#include <stdlib.h>
struct node
{
int info;
struct node *link;
};
struct node *create_list(struct node *start);
void display(struct node *start);
struct node *addatbeg(struct node *start,int data);
struct node *addatend(struct node *start,int data);
struct node *RemoveFirstInsertLast(struct node *start);
int main(void)
{
struct node *start=NULL;
start=create_list(start);
display(start);
start = RemoveFirstInsertLast(start);
328

display(start);
return 0;
}/*End of main()*/

struct node *RemoveFirstInsertLast(struct node *start)


{
struct node *p;
p=start;
if(start==NULL || start->link==NULL)/*list empty or only one element in the lis
return start;
while(p->link!=NULL)
p=p->link;
/*Now p points to last pointer*/
p->link = start;
start = start->link;
p->link->link=NULL;
return start;
}/*End of RemoveFirstInsertLast()*/
struct node *create_list(struct node *start)
{
int i,n,data;
printf("Enter the number of nodes : ");
scanf("%d",&n);
start=NULL;
if(n==0)
return start;
printf("Enter the element to be inserted : ");
scanf("%d",&data);
start=addatbeg(start,data);
for(i=2;i<=n;i++)
{
printf("Enter the element to be inserted : ");
scanf("%d",&data);
start=addatend(start,data);
}
return start;
329

}/*End of create_list()*/
void display(struct node *start)
{
struct node *p;
if(start==NULL)
{
printf("List is empty\n");
return;
}
p=start;
printf("List is :\n");
while(p!=NULL)
{
printf("%d ",p->info);
p=p->link;
}
printf("\n\n");
}/*End of display() */
struct node *addatbeg(struct node *start,int data)
{
struct node *tmp;
tmp=(struct node *)malloc(sizeof(struct node));
tmp->info=data;
tmp->link=start;
start=tmp;
return start;
}/*End of addatbeg()*/
struct node *addatend(struct node *start,int data)
{
struct node *p,*tmp;
tmp=(struct node *)malloc(sizeof(struct node));
tmp->info=data;
p=start;
while(p->link!=NULL)
p=p->link;
p->link=tmp;
tmp->link=NULL;
330

return start;
}/*End of addatend()*/
/*E11_22*/
#include <stdio.h>
#include <stdlib.h>
struct node
{
int info;
struct node *link;
};
struct node *create_list(struct node *start);
void display(struct node *start);
struct node *addatbeg(struct node *start,int data);
struct node *addatend(struct node *start,int data);
struct node *RemoveLastInsertFirst(struct node *start);
int main(void)
{
struct node *start=NULL;
start=create_list(start);
display(start);
start = RemoveLastInsertFirst(start);
display(start);
return 0;
}/*End of main()*/

struct node *RemoveLastInsertFirst(struct node *start)


{
struct node *p;
p=start;
if(start==NULL || start->link==NULL )/*list empty or only one element in the li
return start;
while(p->link->link!=NULL)
p=p->link;
/*Now p points to second last node*/
p->link->link=start;
start=p->link;
p->link=NULL;
331

return start;
}/*End of RemoveLastInsertFirst()*/
struct node *create_list(struct node *start)
{
int i,n,data;
printf("Enter the number of nodes : ");
scanf("%d",&n);
start=NULL;
if(n==0)
return start;
printf("Enter the element to be inserted : ");
scanf("%d",&data);
start=addatbeg(start,data);
for(i=2;i<=n;i++)
{
printf("Enter the element to be inserted : ");
scanf("%d",&data);
start=addatend(start,data);
}
return start;
}/*End of create_list()*/
void display(struct node *start)
{
struct node *p;
if(start==NULL)
{
printf("List is empty\n");
return;
}
p=start;
printf("List is :\n");
while(p!=NULL)
{
printf("%d ",p->info);
p=p->link;
}
332

printf("\n\n");
}/*End of display() */
struct node *addatbeg(struct node *start,int data)
{
struct node *tmp;
tmp=(struct node *)malloc(sizeof(struct node));
tmp->info=data;
tmp->link=start;
start=tmp;
return start;
}/*End of addatbeg()*/
struct node *addatend(struct node *start,int data)
{
struct node *p,*tmp;
tmp=(struct node *)malloc(sizeof(struct node));
tmp->info=data;
p=start;
while(p->link!=NULL)
p=p->link;
p->link=tmp;
tmp->link=NULL;
return start;
}/*End of addatend()*/
/*E11_23*/
#include <stdio.h>
#include <stdlib.h>
struct node
{
int info;
struct node *link;
};
struct node *create_list(struct node *start);
void display(struct node *ptr);
void Rdisplay(struct node *ptr);
int length(struct node *ptr);
int sum (struct node *ptr);
int search(struct node *ptr, int item );
333

struct node *insertLast(struct node *ptr, int value);


struct node *delLast(struct node *ptr );
struct node *reverse(struct node *ptr);
int main(void)
{
struct node *start=NULL;
int choice,data;
while(1)
{
printf("1.Create List\n");
printf("2.Display\n");
printf("3.Display in reverse order\n");
printf("4.Count\n");
printf("5.Sum of elements\n");
printf("6.Search\n");
printf("7.Insert at last\n");
printf("8.Delete the last node\n");
printf("9.Reverse the list\n");
printf("10.Quit\n");
printf("Enter your choice : ");
scanf("%d",&choice);
printf("\n");
switch(choice)
{
case 1:
start=create_list(start);
break;
case 2:
display(start);
printf("\n\n");
break;
case 3:
Rdisplay(start);
printf("\n\n");
break;
case 4:
printf("Number of elements = %d\n\n",length(start));
334

break;
case 5:
printf("Sum of elements = %d\n\n",sum(start));
break;
case 6:
printf("Enter the element to be searched : ");
scanf("%d",&data);
if( search(start,data) == 1 )
printf("Element present\n\n");
else
printf("Element not present\n\n");
break;
case 7:
printf("Enter the element to be inserted : ");
scanf("%d",&data);
start=insertLast(start,data);
break;
case 8:
start=delLast(start);
printf("Last node deleted......\n");
break;
case 9:
start=reverse(start);
break;
case 10:
exit(1);
default:
printf("Wrong choice\n");
}/*End of switch */
}/*End of while */
return 0;
}/*End of main()*/
struct node *create_list(struct node *start)
{
int i,n,value;
struct node *q,*tmp;
printf("Enter the number of nodes : ");
scanf("%d",&n);
start=NULL;
335

for(i=1;i<=n;i++)
{
printf("Enter the element to be inserted : ");
scanf("%d",&value);
tmp= malloc(sizeof(struct node));
tmp->info=value;
tmp->link=NULL;
if(start==NULL) /*If list is empty */
start=tmp;
else
{
/*Element inserted at the end */
q=start;
while(q->link!=NULL)
q=q->link;
q->link=tmp;
}

}
return start;
}/*End of create_list()*/

void display(struct node *ptr)


{
if(ptr==NULL)
return;
printf("%d ",ptr->info);
display(ptr->link);
}/*End of display()*/
void Rdisplay(struct node *ptr)
{
if(ptr==NULL)
return;
Rdisplay(ptr->link);
printf("%d ",ptr->info);
}/*End of Rdisplay()*/
int length(struct node *ptr)
{
336

if(ptr==NULL)
return 0;
return 1 + length(ptr->link);
}/*End of length()*/
int sum (struct node *ptr)
{
if (ptr == NULL)
return 0;
return ptr->info + sum(ptr->link);
}/*End of sum()*/
int search(struct node *ptr, int item)
{
if(ptr==NULL)
return 0;
if(ptr->info == item)
return 1;
return search(ptr->link, item);
}/*End of search()*/
struct node *insertLast(struct node *ptr, int item)
{
struct node *temp;
if (ptr == NULL)
{
temp = malloc(sizeof(struct node));
temp->info = item;
temp->link = NULL;
return temp;
}
ptr->link = insertLast(ptr->link, item);
return ptr;
}/*End of insertLast()*/
struct node *delLast(struct node *ptr )
{
if( ptr->link == NULL )
{
337

free(ptr);
return NULL;

}
ptr->link = delLast(ptr->link);
return ptr;
}/*End of delLast()*/
struct node *reverse(struct node *ptr)
{
struct node *temp;
if( ptr->link == NULL )
return ptr;
temp=reverse(ptr->link);
ptr->link->link=ptr;
ptr->link=NULL;
return temp;
}/*End of reverse()*/

11

Chapter 12

** In chapter exercises for chapter 12:

**

/*P12.1 Program to understand the use of fputc() function*/


#include <stdio.h>
#include <stdlib.h>
int main(void)
{
FILE *fptr;
int ch;
if((fptr=fopen("myfile","w"))==NULL)
{
printf("File does not exist\n");
exit(1);
}
printf("Enter text :\n");
/*Press Ctrl+z in DOS and Ctrl+d in Unix to stop reading characters */
while((ch=getchar())!=EOF)
fputc(ch,fptr);
fclose(fptr);

338

return 0;

/*P12.2 Program to understand the use of fgetc()*/


#include <stdio.h>
#include <stdlib.h>
int main(void)
{
FILE *p;
char ch;
if((p=fopen("myfile","r"))==NULL)
{
printf("Error in opening file\n");
exit(1);
}
while((ch=fgetc(p))!=EOF)
printf("%c",ch);
fclose(p);
return 0;
}
/*P12.3 Copy a file to another file*/
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
FILE *sptr, *dptr;
char ch;
if((sptr=fopen("source.txt","r"))==NULL)
{
printf("Error in opening source file\n");
exit(1);
}
if((dptr=fopen("destination.txt","w"))==NULL)
{
printf("Error in opening destination file\n");
exit(1);
}
while((ch=fgetc(sptr))!=EOF)
fputc(ch,dptr);
339

fclose(sptr);
fclose(dptr);
return 0;

/*P12.4 Program to understand the use of fputs()*/


#include <stdio.h>
#include <stdlib.h>
int main(void)
{
FILE *fptr;
char str[80];
if((fptr=fopen("test","w"))==NULL)
{
printf("Error in opening file\n");
exit(1);
}
printf("Enter the text\n");
printf("To stop entering, press Ctrl+d/Ctrl+z\n");
while(gets(str)!=NULL)
fputs(str,fptr);
fclose(fptr);
return 0;
}
/*P12.5 Program to understand the use of fputs()*/
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
FILE *fptr;
char str[80];
if((fptr=fopen("test1","w"))==NULL)
{
printf("Error in opening file\n");
exit(1);
}
printf("Enter the text\n");
printf("To stop entering, press Ctrl+d/Ctrl+z\n");
while(gets(str)!=NULL)
340

strcat(str,"\n");
fputs(str,fptr);

}
fclose(fptr);
return 0;

/*P12.6 Program to understand the use of fgets() */


#include <stdio.h>
#include <stdlib.h>
int main(void)
{
FILE *fptr;
char str[80];
if( (fptr=fopen("test","r"))==NULL)
{
printf("Error in opening file\n");
exit(1);
}
while(fgets(str,80,fptr)!=NULL)
puts(str);
fclose(fptr);
return 0;
}
/*P12.7 Program to understand the use of fprintf()*/
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
FILE *fp;
char name[10];
int age;
if( (fp = fopen("rec","w"))==NULL)
{
printf("Error in opening file\n");
exit(1);
}
printf("Enter your name and age : ");
341

scanf("%s%d",name,&age);
fprintf(fp,"My name is %s and age is %d ",name,age);
fclose(fp);
return 0;

/*P12.8 Program to understand the use of fprintf()*/


#include <stdio.h>
#include <stdlib.h>
struct student
{
char name[20];
float marks;
}stu;
int main(void)
{
FILE *fp;
int i,n;
if((fp=fopen("students","w"))==NULL)
{
printf("Error in opening file\n");
exit(1);
}
printf("Enter number of records : ");
scanf("%d",&n);
for(i=1; i<=n; i++)
{
printf("Enter name and marks : ");
scanf("%s%f",stu.name,&stu.marks);
fprintf(fp,"%s %f",stu.name,stu.marks);
}
return 0;
}
/*P12.9 Program to understand the use of fscanf()*/
#include <stdio.h>
#include <stdlib.h>
struct student
{
char name[20];
342

float marks;
}stu;
int main(void)
{
FILE *fp;
if((fp=fopen("students","r"))==NULL)
{
printf("Error in opening file\n");
exit(1);
}
printf("NAME\tMARKS\n");
while(fscanf(fp,"%s %f",stu.name,&stu.marks)!=EOF )
printf("%s\t%f\n",stu.name,stu.marks);

fclose(fp);
return 0;

/*P12.10 Program to understand the use of fwrite()*/


#include <stdio.h>
#include <stdlib.h>
struct record
{
char name[20];
int roll;
int marks;
}student;
int main(void)
{
int i,n;
FILE *fp;
if((fp=fopen("stu","wb"))==NULL)
{
printf("Error in opening file\n");
exit(1);
}
printf("Enter number of records : ");
scanf("%d",&n);
for(i=0; i<n; i++)
343

printf("Enter name : ");


scanf("%s",student.name);
printf("Enter roll no : ");
scanf("%d",&student.roll);
printf("Enter marks : ");
scanf("%d",&student.marks);
fwrite(&student,sizeof(student),1,fp);

}
fclose(fp);
return 0;

/*P12.11 Program to understand the use of fread()*/


#include <stdio.h>
#include <stdlib.h>
struct record
{
char name[20];
int roll;
int marks;
}student;
int main(void)
{
FILE *fp;
fp = fopen("stu","rb");
if(fp==NULL)
{
printf("Error in opening file\n");
exit(1);
}
printf("\nNAME\tROLLNO\tMARKS\n");
while(fread(&student,sizeof(student),1,fp)==1)
{
printf("%s\t",student.name);
printf("%d\t",student.roll);
printf("%d\n",student.marks);
}
fclose(fp);
return 0;
344

}
/*P12.12 Program to understand the use of fseek()*/
#include <stdio.h>
#include <stdlib.h>
struct record
{
char name[20];
int roll;
int marks;
}student;
int main(void)
{
int n;
FILE *fp;
fp=fopen("stu","rb");
if(fp==NULL)
{
printf("Error in opening file\n");
exit(1);
}
printf("Enter the record number to be read : ");
scanf("%d",&n);
fseek(fp,(n-1)*sizeof(student),0); /*skip n-1 records*/
fread(&student,sizeof(student),1,fp); /*Read the nth record*/
printf("%s\t",student.name);
printf("%d\t",student.roll);
printf("%d\n",student.marks);
fclose(fp);
return 0;
}
/*P12.13 Program to understand the use of ftell()*/
#include <stdio.h>
#include <stdlib.h>
struct record
{
char name[20];
int roll;
int marks;
345

}student;
int main(void)
{
FILE *fp;
fp = fopen("stu","rb");
if(fp==NULL)
{
printf("Error in opening file\n");
exit(1);
}
printf("Position indicator in the beginning -> %ld\n",ftell(fp));
while(fread(&student,sizeof(student),1,fp)==1)
{
printf("Position indicator -> %ld\n",ftell(fp));
printf("%s\t",student.name);
printf("%d\t",student.roll);
printf("%d\n",student.marks);
}
printf("%d\n",ftell(fp));
fclose(fp);
return 0;
}
/*P12.14 Program to understand the use of rewind()*/
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
FILE *fp;
fp = fopen("stu","rb+");
if(fp==NULL)
{
printf("Error in opening file\n");
exit(1);
}
printf("Position indicator -> %ld\n",ftell(fp));
fseek(fp, 0, 2);
printf("Position indicator -> %ld\n",ftell(fp));
rewind(fp);
printf("Position indicator -> %ld\n",ftell(fp));
346

fclose(fp);
return 0;

/*P12.15 Program to append records to a file*/


#include <stdio.h>
#include <stdlib.h>
int main(void)
{
struct record
{
char name[20];
int roll;
int marks;
}student;
FILE *fp;
int choice=1;
fp=fopen("stu","ab");/*opened in append mode*/
if(fp==NULL)
{
printf("Error in opening file\n");
exit(1);
}
while(choice==1)
{
printf("Enter name : ");
scanf("%s",student.name);
printf("Enter roll no : ");
scanf("%d",&student.roll);
printf("Enter marks : ");
scanf("%d",&student.marks);
fwrite(&student,sizeof(student),1,fp);
printf("Want to enter more ?(1 for yes / 0 for no) : ");
scanf("%d",&choice);
}
fclose(fp);
return 0;
}
/* P12.16 Program to read records from a file and calculate grade of each student
and display it
347

grade= A if marks>=80
= B if marks>=60 and < 80
= C if marks<60
*/
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
struct record
{
char name[20];
int roll;
int marks;
}student;
FILE *fp;
fp = fopen("stu","rb");/*opened in read mode */
if(fp==NULL)
{
printf("Error in opening file\n");
exit(1);
}
printf("\nNAME\t\tMARKS\t\tGRADE\n\n");
while(fread(&student,sizeof(student),1,fp)==1)
{
printf("%s\t\t",student.name);
printf("%4d\t\t",student.marks);
if(student.marks>=80)
printf("A\n");
else if(student.marks>=60)
printf("B\n");
else
printf("C\n");
}
fclose(fp);
return 0;
}
/*P12.17 Program to modify records in a file*/
#include <stdio.h>
#include <stdlib.h>
348

#include <string.h>
int main(void)
{
struct record
{
char name[20];
int roll;
int marks;
}student;
FILE *fp;
char name[20];
long size = sizeof(student);
unsigned flag = 0;
fp = fopen("stu","rb+");
if(fp==NULL)
{
printf("Error in opening file\n");
exit(1);
}
printf("Enter name of student whose record is to be modified : ");
scanf("%s",name);
while(fread(&student,sizeof(student),1,fp)==1)
if(strcmp(student.name, name)==0)
{
printf("Enter new data -->\n");
printf("Enter name : ");
scanf("%s",student.name);
printf("Enter roll no : ");
scanf("%d",&student.roll);
printf("Enter marks : ");
scanf("%d",&student.marks);
fseek(fp,-size,1);
fwrite(&student,sizeof(student),1,fp);
flag = 1;
break;
}
if(flag==0)
printf("Name not found in file\n");
else
349

printf("Record Modified......\n");
fclose(fp);
return 0;

/*P12.18 Program to delete a record from the file*/


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
struct record
{
char name[20];
int roll;
int marks;
}student;
FILE *fp,*fptmp;
char name[20];
unsigned flag = 0;
fp=fopen("stu","rb");
if(fp==NULL)
{
printf("Error in opening file\n");
exit(1);
}
printf("Enter the name to be deleted : ");
scanf("%s",name);
fptmp=fopen("tempfile","wb");
while(fread(&student, sizeof(student),1,fp)==1)
{
if(strcmp(name,student.name)!=0)
fwrite(&student,sizeof(student),1,fptmp);
else
flag = 1;
}
fclose(fp);
fclose(fptmp);
remove("stu");
rename("tempfile","stu");
350

if(flag==0)
printf("Name not found in file\n");
else
printf("Record deleted......\n");
return 0;

/*P12.19 Program to display the records in sorted order, sorting is performed in ascend
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
struct record
{
char name[20];
int roll;
int marks;
}student,temp,stu[50];
FILE *fp;
int i,j,k=0;
fp = fopen("stu","rb");/*opened in read mode*/
if(fp==NULL)
{
printf("Error in opening file\n");
exit(1);
}
while(fread(&student,sizeof(student),1,fp)==1)
stu[k++] = student;
/*Bubble sort*/
for(i=0; i<k; i++)
{
for(j=0; j<k-1-i; j++)
{
if(strcmp(stu[j].name, stu[j+1].name)>0)
{
temp=stu[j];
stu[j]=stu[j+1];
stu[j+1]=temp;
}
351

}
}
printf("\nNAME\t\tROLLNO\t\tMARKS\n\n");
for(i=0; i<k; i++)
{
printf("%s\t\t",stu[i].name);
printf("%d\t\t",stu[i].roll);
printf("%d\n",stu[i].marks);
}
fclose(fp);
return 0;

/*P12.20 Program to merge two files*/


#include <stdio.h>
#include <stdlib.h>
struct record
{
char name[20];
int roll;
int marks;
}stu1, stu2;
int main(void)
{
FILE *fp1,*fp2,*fp3;
int i,j;
if((fp1=fopen("sectionA","rb")) == NULL)
{
printf("Error in opening file\n");
exit(1);
}
if((fp2=fopen("sectionB","rb"))==NULL)
{
printf("Error in opening file\n");
exit(1);
}
if((fp3=fopen("merged","wb"))==NULL)
{
printf("Error in opening file\n");
exit(1);
352

}
i=fread(&stu1,sizeof(stu1),1,fp1);
j=fread(&stu2,sizeof(stu2),1,fp2);

while((i==1)&&(j==1))
{
if(stu1.marks > stu2.marks)
{
fwrite(&stu1,sizeof(stu1),1,fp3);
i = fread(&stu1,sizeof(stu1),1,fp1);
}
else
{
fwrite(&stu2,sizeof(stu2),1,fp3);
j = fread(&stu2,sizeof(stu2),1,fp2);
}
}
while(i==1)
/*Write remaining records of sectionA into merged*/
{
fwrite(&stu1,sizeof(stu1),1,fp3);
i = fread(&stu1,sizeof(stu1),1,fp1);
}
while(j==1)
/*Write remaining records of sectionB into merged*/
{
fwrite(&stu1,sizeof(stu1),1,fp3);
j = fread(&stu2,sizeof(stu2),1,fp2);
}
fclose(fp1);
fclose(fp2);
fclose(fp3);
return 0;

/*P12.21 Write a program to manage a database of books*/


#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void insert(FILE *fp);
void del(FILE *fp);
353

void modify(FILE *fp);


void booksold(FILE *fp);
int search(FILE *fp,char *name);
void display(FILE *fp);
void list(FILE *fp);
struct {
char name[50];
int ncopies;
float cost;
}book;
int main(void)
{
int choice;
FILE *fp;
fp = fopen("books","rb+");
if(fp==NULL)
{
fp=fopen("books","wb+");
if(fp==NULL)
{
puts("Error in opening file\n");
exit(1);
}
}
while(1)
{
printf("1.Insert a new record\n");
printf("2.Delete a record\n");
printf("3.Display record of a book\n");
printf("4.Modify an existing record\n");
printf("5.List all records\n");
printf("6 Book sold\n");
printf("7.Exit\n");
printf("Enter your choice : ");
scanf("%d",&choice);
switch(choice)
{
case 1:

insert(fp);

354

case 2:
case 3:
case 4:
case 5:
case 6:
case 7:

break;
del(fp);
break;
display(fp);
break;
modify(fp);
break;
list(fp);
break;
booksold(fp);
break;

fclose(fp);
exit(1);
default :
printf("Wrong choice\n");
}/*End of switch */
}/*End of while */
return 0;
}/*End of main( ) */
void insert(FILE *fp)
{
fseek(fp,0,2);
printf("Enter book name : ");
scanf("%s",book.name);
printf("Enter number of copies : ");
scanf("%d",&book.ncopies);
printf("Enter cost of book : ");
scanf("%f",&book.cost);
fwrite(&book,sizeof(book),1,fp);
}/*End of insert()*/
void del(FILE *fp)
{
355

FILE *fptmp;
char name[20];
printf("Enter the name of book to be deleted from database : ");
scanf("%s",name);
if(search(fp,name)==0)
return;
fptmp = fopen("tempfile","wb");
rewind(fp);
while(fread(&book, sizeof(book),1,fp) == 1)
{
if(strcmp(name,book.name)!=0)
fwrite(&book,sizeof(book),1,fptmp);
}
fclose(fp);
fclose(fptmp);
remove("books");
rename("tempfile","books");
printf("\nRecord deleted........\n\n");
fp = fopen("books", "rb+");
}/*End of del()*/
void modify(FILE *fp)
{
char name[50];
long size = sizeof(book);
printf("Enter the name of the book to be modified : ");
scanf("%s",name);
if(search(fp,name) == 1)
{
printf("Enter new data-->\n\n");
printf("Enter book name : ");
scanf("%s",book.name);
printf("Enter number of copies : ");
scanf("%d",&book.ncopies);
printf("Enter cost of book : ");
scanf("%f",&book.cost);
fseek(fp,-size,1);
fwrite(&book,sizeof(book),1,fp);
printf("\nRecord successfully modified\n\n");
}
}/*End of modify()*/
356

void booksold(FILE *fp)


{
char name[50];
long size = sizeof(book);
printf("Enter the name of the book to be sold : ");
scanf("%s", name);
if(search(fp,name)==1)
{
if(book.ncopies >0)
{
book.ncopies--;
fseek(fp, -size, 1);
fwrite(&book, sizeof(book), 1, fp);
printf("One book sold\n");
printf("Now number of copies = %d\n", book.ncopies);
}
else
printf("Book is out of stock\n\n");
}
}/*End of booksold( )*/
void display(FILE *fp)
{
char name[50];
printf("Enter the name of the book : ");
scanf("%s",name);
if(search(fp,name)==1)
{
printf("\nName\t%s\n",book.name);
printf("Copies\t%d\n",book.ncopies);
printf("Cost\t%f\n\n",book.cost);
}
}/*End of display()*/
int search(FILE *fp,char *name)
{
unsigned flag=0;
rewind(fp);
while(fread(&book, sizeof(book),1,fp)==1)
357

if(strcmp(name,book.name)==0)
{
flag = 1;
break;
}

}
if(flag == 0)
printf("\nName not found in file\n\n");
return flag;
}/*End of search()*/
void list(FILE *fp)
{
rewind(fp);
printf("\nNAME\tCOPIES\t\tCOST\n\n");
while(fread(&book, sizeof(book),1,fp)==1)
{
printf("%s\t",book.name);
printf("%d\t\t",book.ncopies);
printf("%f\n",book.cost);
}
printf("\n");
}/*End of list()*/
/*P12.22 Program to understand the use of ferror()*/
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
FILE *fptr;
int ch;
fptr=fopen("test","w");
ch=getc(fptr);
if(ferror(fptr))
{
printf("Error in read operation\n");
exit(1);
}
else
358

printf("%c",ch);
fclose(fptr);
return 0;

/*P12.23 Program to understand the use of feof() and ferror()*/


#include <stdio.h>
#include <stdlib.h>
int main(void)
{
FILE *fptr;
int ch;
if((fptr=fopen("myfile","r"))==NULL)
{
printf("File doesn't exist\n");
exit(1);
}
while((ch=getc(fptr))!=EOF)
printf("%c",ch);
if(feof(fptr))
printf("End of file\n");
if(ferror(fptr))
printf("Error\n");
fclose(fptr);
return 0;
}
/*P12.24 Function to understand the use of clearerr()*/
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
FILE *fptr;
int ch;
fptr = fopen("test","w");
ch = getc(fptr);
if(ferror(fptr))
{
printf("Error in read operation\n");
clearerr(fptr);
359

}
fclose(fptr);
return 0;

/*P12.25 Program to understand the use of rename()*/


#include <stdio.h>
int main(void)
{
char old_name[80],new_name[80];
printf("Enter the name of file to be renamed : ");
gets(old_name);
printf("Enter a new name for the file : ");
gets(new_name);
if(rename(old_name, new_name)==0)
printf("File %s renamed to %s\n",old_name,new_name);
else
perror("File not renamed");
return 0;
}
/*P12.26 Program to understand command line arguments */
#include <stdio.h>
int main(int argc, char *argv[])
{
int i;
printf("argc = %d\n",argc);
for(i=0; i<argc; i++)
printf("argv[%d] = %s\n",i,argv[i]);
return 0;
}
/*P12.27 Program to copy a file to another*/
#include <stdio.h>
#include <stdlib.h>
int main(int argc,char *argv[])
{
FILE *source,*dest;
int c;
if(argc!=3)
360

printf("Wrong number of arguments\n");


exit(1);

}
if((source=fopen(argv[1],"r"))==NULL)
{
printf("Cant open source file\n");
exit(1);
}
if((dest=fopen(argv[2],"w"))==NULL)
{
printf("Cant open destination file\n");
exit(1);
}
while((c=fgetc(source))!=EOF)
fputc(c,dest);
fclose(source);
fclose(dest);
return 0;

/*P12.28*/
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
FILE *fp1,*fp2;
char name[50];
int c1,c2,found='n';
printf("Enter the file name : ");
scanf("%s",name);
if((fp1=fopen(name,"r"))==NULL)
{
printf("Error in opening file\n");
exit(1);
}
fp2 = fopen("c:\\new.c","w");
c1 = fgetc(fp1);
c2 = fgetc(fp1);
361

while(c2!=EOF)
{
if(c1=='/' && c2=='*')
found = 'y';
if(found=='n')
fputc(c1,fp2);
if(c1=='*' && c2=='/')
{
found = 'n';
c2 = fgetc(fp1);
}
c1 = c2;
c2 = fgetc(fp1);
}
fclose(fp1);
fclose(fp2);
return 0;

/*P12.29 Program to count the number of words*/


#include <stdio.h>
#include <stdlib.h>
int is_end(int ch);
int main(void)
{
char line[81];
int i,count=0;
FILE *fptr;
if((fptr=fopen("test.txt","r")) == NULL)
{
printf("File doesn't exist\n");
exit(1);
}
while((fgets(line,81,fptr))!=NULL)
{
for(i=0; line[i]!='\0'; i++)
if(is_end(line[i]))
count++;
362

}
printf("Number of words in the file = %d\n",count);
fclose(fptr);
return 0;

}
int is_end(int ch)
{
switch(ch)
{
case '\n': case '\t':
return 1;
}
return 0;
}

case ' ':

case ',':

case '.':

/*P12.29 Program to count the number of words*/


/*
#include<stdio.h>
#include<stdlib.h>
int is_end(int ch);
main()
{
char line[81];
int i,count=0;
FILE *fptr;
if((fptr=fopen("test.txt","r")) == NULL)
{
printf("File doesn't exist\n");
exit(1);
}
while((fgets(line,81,fptr))!=NULL)
{
for(i=1; line[i]!='\0'; i++)
if( is_end(line[i]) && !is_end(line[i-1]) )
count++;
}
printf("Number of words in the file = %d\n",count);
fclose(fptr);
}
int is_end(int ch)
363

case ':':

cas

}
*/

switch(ch)
{
case '\n': case '\t':
return 1;
}
return 0;

case ' ':

case ',':

case '.':

case ':':

/*P12.30*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int display(char line[],char wordtext[]);
int is_end(int ch);
int main(void)
{
char line[81];
int total = 0;
FILE *fptr;
if((fptr=fopen("test.txt","r")) == NULL)
{
printf("File doesn't exist\n");
exit(1);
}
while((fgets(line,81,fptr))!=NULL)
total = total + display( line, "that" );
printf("Number of times the given word occurs in file is %d\n",total);
fclose(fptr);
return 0;

}
int display(char line[],char wordtext[])
{
int i,j,k,len;
char str[80];
int count = 0;
len = strlen(wordtext);
for(i=0; line[i]!='\0'; i++)
364

cas

k = 0;
if(is_end(line[i-1]) && is_end(line[i+len]) )
{
for(k=0,j=i; k<len; j++,k++)
str[k] = line[j];
str[k] = '\0';
if(strcmp(str,wordtext) == 0)
count++;
}

}
if(count>0)
{
printf("%s",line);
printf("count = %d\n",count);
}
return count;

}
int is_end(int ch)
{
switch(ch)
{
case '\n': case '\t':
return 1;
}
return 0;
}

case ' ':

/*P12.30*/
/*
#include<stdio.h>
#include<stdlib.h>
int display(char line[],char wordtext[]);
int is_end(int ch);
main()
{
char line[81];
int total = 0;
FILE *fptr;
365

case ', ': case '.': case ':': c

if((fptr=fopen("test.txt","r")) == NULL)
{
printf("File doesn't exist\n");
exit(1);
}
while((fgets(line,81,fptr))!=NULL)
total = total + display( line, "that" );
printf("Number of times the given word occurs in file is %d\n",total);
fclose(fptr);

}
int display(char line[],char wordtext[])
{
int i,j,k,len;
char str[80];
int count = 0;
len = strlen(wordtext);
for(i=0; line[i]!='\0'; i++)
{
k = 0;
if((i==0 || is_end(line[i-1])) && is_end(line[i+len]) )
{
for(k=0,j=i; k<len; j++,k++)
str[k] = line[j];
str[k] = '\0';
if(strcmp_in(str,wordtext) == 0)
count++;
}
}
if(count>0)
{
printf("%s",line);
printf("count = %d\n",count);
}
return count;
}
int is_end(int ch)
{
switch(ch)
{
366

case '\n': case '\t':


return 1;

case ' ':

case ', ': case '.': case ':': ca

}
return 0;

}
strcmp_in(char *str1, char *str2)
{
int i;
for(i=0; str1[i]!='\0'; i++)
if(toupper(str1[i]) != toupper(str2[i]))
return 1;
return 0;
}
*/
/*P12.31*/
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
int is_vowel(int ch);
int main(void)
{
char wrong[100],right[150];
int i,j;
FILE *fptr1,*fptr2;
if((fptr1 = fopen("wrong.txt","r")) == NULL)
{
printf("Error in opening file\n");
exit(1);
}
if((fptr2 = fopen("right.txt","w")) == NULL)
{
printf("Error in opening file\n");
exit(1);
}
while((fgets(wrong,100,fptr1)) != NULL)
{
i=j=0;
while(wrong[i]!='\0')
367

if(islower(wrong[i]) && (i==0 || wrong[i-1]=='.'))


right[j++] = toupper(wrong[i++] );
else if(wrong[i]==' ' && wrong[i-1]=='a' && is_vowel(wrong[i+1]))
{
right[j++]='n';
right[j++]=wrong[i++];

}
else

right[j++]=wrong[i++];

}
right[j]='\0';
fputs(right, fptr2);

}
return 0;

}
int is_vowel(int ch)
{
switch(ch)
{
case
case
case
case
case

'a':
'e':
'i':
'o':
'u':

case
case
case
case
case

'A':
'E':
'I':
'O':
'U':

}
return 0;

** Back exercises for chapter 12:

**

/*E12.1*/
#include <stdio.h>
int main(void)
{
FILE *fptr;
unsigned char ch;
fptr=fopen("myfile.txt","r");
while((ch=fgetc(fptr))!=EOF)
368

return 1;

putchar(ch);
fclose(fptr);
return 0;

/*E12.2*/
#include <stdio.h>
int main(void)
{
FILE *fp;
int ch;
fp=fopen("myfile.txt","w");
fprintf(fp,"If equal love there cannot be..");
fputc(26,fp);
fprintf(fp,"..let the more loving one be me\n");
fclose(fp);
fp=fopen("myfile.txt","r");
while((ch=fgetc(fp))!=EOF)
putchar(ch);
return 0;
}
/*E12.3*/
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
FILE *fptr1,*fptr2;
char fname[20];
printf("Enter the path of first file : ");
scanf("%s",fname);
fptr1=fopen(fname,"r");
if(fptr1==NULL)
{
printf("Error in opening first file\n");
exit(1);
}
fptr2=fopen("c:\mydir\names.txt","r");
if(fptr2==NULL)
{
369

printf("Error in opening second file\n");


exit(1);

}
fclose(fptr1);
fclose(fptr2);
return 0;

/*E12.4*/
#include <stdio.h>
int main(void)
{
FILE *fptr;
int ch;
fptr = fopen("names.txt",'r');
while((ch=fgetc(fptr))!=EOF)
putchar(ch);
fclose(fptr);
return 0;
}
/*E12.5*/
#include <stdio.h>
int main(void)
{
char name[50];
int empid;
fprintf(stdout,"Enter your name : ");
fgets(name,50,stdin);
fprintf(stdout,"Enter your empid : ");
fscanf(stdin,"%d",&empid);
fprintf(stdout,"Your empid is : %d",empid);
fputc('\n',stdout);
fprintf(stdout,"Your name is : ");
fputs(name,stdout);
return 0;
}
/*E12.6*/
#include <stdio.h>
370

int main(void)
{
FILE *fptr;
char str[80];
fptr = fopen("test.txt","r");
while(fgets(str,80,fptr)!=EOF)
puts(str);
return 0;
}
/*E12.7*/
#include <stdio.h>
#include <stdlib.h>
int main(int argc,char *argv[])
{
int i,sum=0;
for(i=1; i<argc; i++)
sum=sum+atoi(argv[i]);
printf("%d\n",sum);
return 0;
}
/*E12.8*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
FILE *fp1,*fp2;
char str[100];
if((fp1=fopen("source.txt","r"))==NULL)
{
printf("Cant open source file\n");
exit(1);
}
if((fp2=fopen("dest.txt","w"))==NULL)
{
printf("Cant open destination file\n");
exit(1);
}
371

while((fgets(str,100,fp1)) != NULL)
if(strcmp(str,"\n")!=0)
fputs(str, fp2);
fclose(fp1);
fclose(fp2);
return 0;

/*E12.9*/
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int main(void)
{
FILE *fp1,*fp2;
int c;
char fname[20];
printf("Enter name of the file : ");
scanf("%s",fname);

if((fp1=fopen(fname,"r"))==NULL)
{
printf("Error in opening file\n");
exit(1);
}
if((fp2=fopen("tempfile.txt","w"))==NULL)
{
printf("Error in opening file\n");
exit(1);
}
while((c=fgetc(fp1))!=EOF)
fputc(toupper(c),fp2);
fclose(fp1);
fclose(fp2);
remove(fname);
rename("tempfile.txt",fname);
return 0;

/*E12.10*/
372

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int main(void)
{
FILE *p;
char ch, fname[50];
int n=0;
printf("Enter name of the file : ");
scanf("%s",fname);

if((p=fopen(fname,"r"))==NULL)
{
printf("Error in opening file\n");
exit(1);
}
while((ch=fgetc(p))!=EOF)
{
if(isalnum(ch))
n++;
}
printf("Total alphanumeric characters = %d\n",n);
fclose(p);
return 0;

/*E12.11*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
FILE *fp1,*fp2;
char str[100],fname[20];
int n=1,page=1;
printf("Enter name of the file : ");
scanf("%s",fname);
373

if((fp1=fopen(fname,"r"))==NULL)
{
printf("Error in opening file\n");
exit(1);
}
if((fp2=fopen("tempfile.txt","w"))==NULL)
{
printf("Error in opening file\n");
exit(1);
}
while((fgets(str,100,fp1))!=NULL)
{
if(n%50==1)
fprintf(fp2,"\n......Page %d.....\n",page++);
fprintf(fp2,"%d ",n++);
fputs(str, fp2);
}
fclose(fp1);
fclose(fp2);
remove(fname);
rename("tempfile.txt",fname);
return 0;

/*E12.12*/
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
FILE *fp1,*fp2;
char name[50];
int c1,c2,found='n';
printf("Enter the file name : ");
scanf("%s",name);
if((fp1=fopen(name,"r"))==NULL)
{
printf("Error in opening file\n");
exit(1);
374

}
fp2 = fopen("new.c","w");
c1 = fgetc(fp1);
c2 = fgetc(fp1);

while(c2!=EOF)
{
if(c1=='/' && c2=='/')
found = 'y';
if(found=='n')
fputc(c1,fp2);
if(c2=='\n')
{
fputc('\n',fp2);
found = 'n';
c2 = fgetc(fp1);
}
c1 = c2;
c2 = fgetc(fp1);
}
fclose(fp1);
fclose(fp2);
return 0;

/*E12.13*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc,char *argv[])
{
int i,c;
FILE *fptr1,*fptr2;
if((fptr2=fopen(argv[1],"w"))==NULL)
{
printf("Error in opening file\n");
exit(1);
}
375

printf("argc = %d\n",argc);
for(i=2; i<argc; i++)
{
if((fptr1=fopen(argv[i],"r"))==NULL)
{
printf("Error in opening file\n");
exit(1);
}
while((c=fgetc(fptr1))!=EOF)
fputc(c,fptr2);
fclose(fptr1);
}
fclose(fptr2);
return 0;

/*E12.14*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct employee
{
char name[20];
int age;
int sal;
};
int main(void)
{
struct employee e,temp,emp[50];
FILE *fp;
int i,j,k=0,n;
fp = fopen("emp","wb+");
if(fp==NULL)
{
printf("Error in opening file\n");
exit(1);
}
376

/*Enter records in the file*/


printf("Enter number of records : ");
scanf("%d",&n);
for(i=0; i<n; i++)
{
printf("Enter name : ");
scanf("%s",e.name);
printf("Enter age : ");
scanf("%d",&e.age);
printf("Enter salary : ");
scanf("%d",&e.sal);
fwrite(&e,sizeof(e),1,fp);
}
/*Read records from the file and store in the array emp*/
rewind(fp);
while(fread(&e,sizeof(e),1,fp)==1)
emp[k++] = e;
/*Sort the array emp*/
for(i=0; i<k; i++)
{
for(j=0; j<k-1-i; j++)
{
if(strcmp(emp[j].name,emp[j+1].name)>0)
{
temp=emp[j];
emp[j]=emp[j+1];
emp[j+1]=temp;
}
else if(strcmp(emp[j].name, emp[j+1].name)==0)
if(emp[j].sal > emp[j+1].sal)
{
temp=emp[j];
emp[j]=emp[j+1];
emp[j+1]=temp;
}
}
}
/*Write the sorted array emp in the file*/
377

rewind(fp);
fwrite(emp,sizeof(e),k,fp);

12

/*Read the file and display the records*/


rewind(fp);
while(fread(&e,sizeof(e),1,fp)==1)
{
printf("%s\t",e.name);
printf("%d\t",e.age);
printf("%d\n",e.sal);
}
fclose(fp);
return 0;

Chapter 13

** In chapter exercises for chapter 13:

**

/*P13.1 Program to show macro expansion*/


#include <stdio.h>
#define MSSG "I understand the use of #define\n"
int main(void)
{
printf(MSSG);
return 0;
}
/*P13.2 Program to understand macros with arguments*/
#include <stdio.h>
#define SUM(x,y) ((x)+(y))
#define PROD(x,y) ((x)*(y))
int main(void)
{
int l,m,i,j,a=5,b=3;
float p,q;
l=SUM(a,b);
m=PROD(a,b);
i=SUM(4,6);
j=PROD(4,6);
378

p=SUM(2.2,3.4);
q=PROD(2.2,3.4);
printf("l=%d, m=%d, i=%d, j=%d, p=%.1f, q=%.1f\n",l,m,i,j,p,q);
return 0;

/*P13.3 Program to understand nesting in macros*/


#include <stdio.h>
#define ISLOWER(c) (c>=97 && c<=122)
#define ISUPPER(c) (c>=65 && c<=90)
#define ISALPHA(c) ISLOWER(c) || ISUPPER(c)
#define ISNUM(c)
(c>=48 && c<=57)
#define ISALPHANUM(c) ISALPHA(c) || ISNUM(c)
int main(void)
{
char ch;
printf("Enter a character : \n");
scanf("%c",&ch);
if(ISALPHANUM(ch))
printf("%c is an alphanumeric character\n",ch);
else
printf("%c is not an alphanumeric character\n",ch);
return 0;
}
/*P13.4*/
#include <stdio.h>
#define PROD(x,y) x*y
int main(void)
{
printf("%d\t",PROD(2,4));
printf("%d\n",PROD(3+4,5+1));
return 0;
}
/*P13.5*/
#include <stdio.h>
#define PROD(x,y) (x)*(y)
int main(void)
{
379

printf("%d\t",PROD(2,4));
printf("%d\t",PROD(3+4,5+1));
printf("%d\n",60/PROD(2,3));
return 0;

/*P13.6*/
#include <stdio.h>
#define SQUARE(x) ((x)*(x))
int main(void)
{
int k=5,s;
s=SQUARE(k++);
printf("s=%d, k=%d\n",s,k);
return 0;
}
/*P13.7*/
#include <stdio.h>
int square(int x)
{
return x*x;
}
int main(void)
{
int k=5,s;
s=square(k++);
printf("s=%d,k=%d\n",s,k);
return 0;
}
/*P13.8*/
#include <stdio.h>
#define SWAP(dtype,x,y) {
dtype t; t=x, x=y, y=t; }
int main(void)
{
int a=2, b=5;
SWAP(int,a,b)
printf("a=%d, b=%d\n",a,b);
return 0;
}
380

/*P13.9*/
#include <stdio.h>
#define SWAP(dtype,x,y) {
dtype t; t=x, x=y, y=t; }
int main(void)
{
int s=2,t=5;
SWAP(int,s,t)
printf("s=%d, t=%d\n",s,t);
return 0;
}
/*P13.10*/
#include <stdio.h>
#define MACRO(x) if(x==0) printf("Out for a Duck\n")
int main(void)
{
int runs=12;
if(runs<100 )
MACRO(runs);
else
printf("Scored a century\n");
return 0;
}
/*P13.11 Program to understand generic functions*/
#include <stdio.h>
#define MAX(FNAME, DTYPE)
\
DTYPE FNAME(DTYPE X, DTYPE Y)\
{
return X > Y ? X : Y; \
}
MAX(max_int,int)
MAX(max_float,float)
MAX(max_double,double)
int main(void)
{
int p;
float q;
double r;
p=max_int(3,9);
381

q=max_float(7.4,5.7);
r=max_double(12.34,13.54);
printf("p=%d,q=%.2f,r=%.2lf\n",p,q,r);
return 0;

/*P13.12 Program to understand the use of stringizing operator*/


#include <stdio.h>
#define SHOW(var,format) printf(#var"=%"#format"\n",var);
int main(void)
{
int x=9;
float y=2.5;
char z='$';
SHOW(x,d);
SHOW(y,0.2f);
SHOW(z,c);
SHOW(x*y,0.2f);
return 0;
}
/*P13.13 Program to understand the use of token pasting operator*/
#include <stdio.h>
#define PASTE(a,b) a##b
#define MARKS(subject) marks_##subject
int main(void)
{
int k2=14,k3=25 ;
int marks_chem=89,marks_maths=98;
printf("%d %d ",PASTE(k,2),PASTE(k,3));
printf("%d %d\n",MARKS(chem),MARKS(maths));
return 0;
}
/*P13.14 Program to understand the use of #if directive*/
#include <stdio.h>
#define FLAG 8
int main(void)
{
int a=20,b=4;
382

#if FLAG>=3
printf("Value of FLAG is greater than or equal to 3\n");
a = a+b;
b = a*b;
printf("Values of variables a and b have been changed\n");
#endif
printf("a=%d,b=%d\n",a,b);
printf("Program completed\n");
return 0;

/*P13.15 Program to understand the use of #else directive*/


#include <stdio.h>
#define FLAG 8
int main(void)
{
int a=20,b=4;
#if FLAG>=3
printf("Value of FLAG is greater than or equal to 3\n");
a=a+b;
b=a*b;
#else
printf("Value of FLAG is less than 3\n");
a=a-b;
b=a/b;
#endif
printf("a=%d,b=%d\n",a,b);
printf("Program completed\n");
return 0;
}
/*P13.16 Program to understand the use of #elif directive*/
#include <stdio.h>
#define FLAG 1
int main(void)
{
int a=20,b=4;
#if FLAG==0
printf("Value of FLAG is is zero\n");
a++;
383

#elif FLAG==1

b++;
printf("Value of FLAG is one\n");
a--;
b--;

#elif FLAG==2
printf("Value of FLAG is two\n");
a=a-3;
b=b-3;
#else
printf("Value of FLAG is greater than two or less than zero\n")
a=a+b;
b=a-b;
#endif
printf("a=%d,b=%d\n",a,b);
printf("Program completed\n");
return 0;

/*P13.17 Program to understand the use of #ifdef directive*/


#include <stdio.h>
#define FLAG
int main(void)
{
int a=20,b=4;
#ifdef FLAG
printf("FLAG is defined\n");
a++;
b++;
#endif
printf("a=%d,b=%d\n",a,b);
printf("Program completed\n");
return 0;
}
/*P13.18 Program to understand the use of #undef and #ifdef directives*/
#include <stdio.h>
#define FLAG
int main(void)
{
384

int a=20,b=4;
#ifdef FLAG

#endif
#undef FLAG
#ifdef FLAG

printf("FLAG is defined\n");
a++;
b++;

printf("Prepocessor\n");
a++;
b++;

#endif
printf("a=%d,b=%d\n",a,b);
printf("Program completed\n");
return 0;

/*P13.19 Program to understand the use of #ifndef directive*/


#include <stdio.h>
int main(void)
{
int a=20,b=4;
#ifndef MAX
printf("MAX is not defined\n");
a--;
b--;
#endif
printf("a=%d,b=%d\n",a,b);
printf("Program completed\n");
return 0;
}
/*P13.20 Program to display the values of predefined constants*/
#include <stdio.h>
int main(void)
{
printf("%s\n",__DATE__);
printf("%s\n",__TIME__);
printf("%s\n",__FILE__);
printf("%d\n",__LINE__);
385

return 0;

/*P13.21 Program to understand the use of #line*/


#include <stdio.h>
int main(void)
{
printf("C in depth\n");
printf("%d %s\n",__LINE__ ,__FILE__);
#line 25 "myprog.c"
printf("%d %s\n",__LINE__ ,__FILE__);
return 0;
}

** Back exercises for chapter 13:

**

/*E31_1*/
#define MAX 5;
#include <stdio.h>
int main(void)
{
printf(" %d ",MAX);
return 0;
}
/*E31_2*/
#include <stdio.h>
#define MSSG printf("If you lapse,don't collapse\n");
int main(void)
{
MSSG
return 0;
}
/*E13_3*/
#include <stdio.h>
#define PROD (x,y) ((x)*(y))
int main(void)
{
int a=3,b=4;
printf("Product of a and b = %d",PROD(a,b));
386

return 0;

/*E13_4*/
#include <stdio.h>
#define A 50
#define B A+100
int main(void)
{
int i,j;
i=B/20;
j=500-B;
printf("i=%d,j=%d\n",i,j);
return 0;
}
/*E13_5*/
#include <stdio.h>
#define NEW_LINE printf("\n");
#define BLANK_LINES(n) { int i; for(i=0; i<n; i++) printf("\n"); }
int main(void)
{
printf("When you have a chance");
NEW_LINE
printf("to embrace an opportunity");
BLANK_LINES(3)
printf("Give it a big hug");
NEW_LINE
return 0;
}
/*E13_6*/
#include <stdio.h>
#define INFINITE while(1)
#define CHECK(a) if(a==0) break
int main(void)
{
int x=5;
INFINITE
{
387

printf("%d ",x--);
CHECK(x);

}
return 0;

/*E13_7*/
#include <stdio.h>
#define ABS(x) ((x)<0? -(x) : (x))
int main(void)
{
int array[4]={1,-2,3,-4};
int *p=array+3;
while(p>=array)
{
printf("%d ",ABS(*p));
p--;
}
return 0;
}
/*E13_8*/
#include <stdio.h>
#define . ;
int main(void)
{
printf("If the lift to success is broken, ").
printf("Try the stairs.").
return 0;
}
/*E13_9*/
#include <stdio.h>
#define CUBE(x) (x*x*x)
int main(void)
{
printf("%d\n",CUBE(1+2));
return 0;
}
/*E13_10*/
#include <stdio.h>
388

#define CUBE(x) ((x)*(x)*(x))


int main(void)
{
int i=1;
while(i<=8)
printf("%d\t",CUBE(i++));
return 0;
}
/*E13_11*/
#include <stdio.h>
#define SWAP(dtype,x,y) {
dtype t; t=x+y, x=t-x, y=t-y; }
int main(void)
{
int a=1, b=2, x=3, y=4, s=25, t=26;
SWAP(int,a,b)
SWAP(int,x,y)
SWAP(int,s,t)
printf("a=%d, b=%d, x=%d, y=%d, s=%d, t=%d\n",a,b,x,y,s,t);
return 0;
}
/*E13_12*/
#include <stdio.h>
#define INC(dtype,x,i) x=x+i
int main(void)
{
int arr[5]={20,34,56,12,96},*ptr=arr;
INC(int,arr[2],3);
INC(int*,ptr,2);
printf("*ptr=%d\n",*ptr);
return 0;
}
/*E13_13*/
#include <stdio.h>
#define INT int
int main(void)
{
INT a=2,*p=&a;
389

printf("%d %d\n",a,*p);
return 0;

/*E13_14*/
#include <stdio.h>
#define Y 10
int main(void)
{
#if X || Y && Z
printf("Sea in Depth\n");
#else
printf("See in depth\n");
#endif
return 0;
}
/*E13_15*/
#include <stdio.h>
int main(void)
{
int x=3,y=4,z;
z=x+y;
#include <string.h>
printf("%d\n",z);
return 0;
}
/*E13_16*/
#include <stdio.h>
#define DIFF(FNAME, DTYPE, RTYPE)
\
RTYPE FNAME(DTYPE X, DTYPE Y){ return X-Y;}
DIFF(diff_int, int, int)
DIFF(diff_iptr, int*, int)
DIFF(diff_float, float, float);
DIFF(diff_fptr, float*, int);
int main(void)
{
int iarr[5] = {1,2,3,4,5},a,p,q;
float farr[7] = {1.2,2.3,3.4,4.5,5.6,6.7,7.8},b;
390

a = diff_int(iarr[4],iarr[1]);
b = diff_float(farr[6],farr[2]);
p = diff_iptr(&iarr[4],&iarr[1]);
q = diff_fptr(&farr[4],&farr[1]);
printf("a=%d, b=%.1f, p=%d, q=%d\n",a,b,p,q);
return 0;

/*E13_17*/
#include <stdio.h>
#define MAX 3
int main(void)
{
printf("Value of MAX is %d\n",MAX);
#undef MAX
#ifdef MAX
printf("Have a good day");
#endif
return 0;
}
/*E13_18*/
#include <stdio.h>
#define PRINT1(message) printf(message);
#define PRINT2(message) printf("message");
#define PRINT3(message) printf(#message);
int main(void)
{
PRINT1("If we rest, we rust.\n")
PRINT2("Attack life, its going to kill you anyways.\n")
PRINT3("Well done is better than well said.\n")
return 0;
}
/*E13_19*/
#include <stdio.h>
#define show(value) printf(#value" = %d\n",value);
int main(void)
{
int a=10,b=5,c=4;
391

show(a/b*c);
return 0;

/*E13_20*/
#include <stdio.h>
#define MACRO(a) if(a<=5) printf(#a" = %d\n",a);
int main(void)
{
int x=6, y=15;
if(x<=y)
MACRO(x);
else
MACRO(y);
return 0;
}
/*E13_21*/
#include <stdio.h>
int main(void)
{
#line 100 "system.c"
printf("%d %s\n",__LINE__,__FILE__);
return 0;
}
/*E13_22*/
#include <stdio.h>
#define toupper(c)\
((c)>='a' && (c)<='z' ? (c) +('A'-'a'):(c))
int main(void)
{
char str[] = "Devanshi", *p;
p=str;
while(*p!='\0')
printf("%c",*p++);
printf("\n");
p=str;
while(*p!='\0')
392

13

printf("%c",toupper(*p++));
return 0;

Chapter 14

** In chapter exercises for chapter 14:

**

/*P14.1*/
#include <stdio.h>
void displayBits(int x);
int main(void)
{
int a,b;
printf("Enter values for a and b in hexadecimal: ");
scanf("%x%x",&a,&b);
printf("a=%X\n",a);
displayBits(a);
printf("b=%X\n",b);
displayBits(b);
printf("a&b=%X\n",a&b);
displayBits(a&b);
printf("a|b=%X\n",a|b);
displayBits(a|b);
printf("a^b=%X\n",a^b);
displayBits(a^b);
printf("~a=%X\n",~a);
displayBits(~a);
printf("~b=%X\n",~b);
displayBits(~b);
return 0;
}
void displayBits(int x)
{
int i,mask;
for(i=31; i>=0; i--)
{
mask=1<<i;
putchar((x & mask)?'1':'0'); /* Test and print ith bit*/
if(i%8==0)
putchar(' '); /*Space after 8 bits*/
}
printf("\n");
}
/*P14.2*/
#include <stdio.h>
393

void displayBits(int x);


int main(void)
{
int a=7;
printf("a=%d\t",a); displayBits(a);
a=a<<2;
printf("a=%d\t",a); displayBits(a);
a=a<<3;
printf("a=%d\t",a); displayBits(a);
a=a>>1;
printf("a=%d\t",a); displayBits(a);
a=a>>3;
printf("a=%d\t",a); displayBits(a);
return 0;
}
void displayBits(int x)
{
int i,mask;
for(i=31; i>=0; i--)
{
mask=1<<i;
putchar((x & mask)?'1':'0'); /*Test and print ith bit*/
if(i%8==0)
putchar(' '); /*Space after 8 bits*/
}
printf("\n");
}
/*P14.3*/
#include <stdio.h>
void displayBits(int x);
int main(void)
{
int a, bit, mask, bitposition;
printf("Enter an integer : ");
scanf("%d",&a);
printf("Enter the bit position : ");
scanf("%d", &bitposition);
mask=1<<bitposition;
printf("a=%d\n",a);
394

displayBits(a);
if((a&mask)==0)
bit=0;
else
bit=1;
printf("The bit at position %d is %d\n",bitposition,bit);
return 0;

}
void displayBits(int x)
{
int i,mask;
for(i=31; i>=0; i--)
{
mask=1<<i;
putchar((x & mask)?'1':'0'); /* Test and print ith bit*/
if(i%8==0)
putchar(' '); /*Space after 8 bits*/
}
printf("\n");
}
/*P14.4 Printing the binary pattern of an integer*/
#include <stdio.h>
void displayBits(int x);
int main(void)
{
int x;
printf("Enter an integer : ");
scanf("%d",&x);
displayBits(x);
return 0;
}
void displayBits(int x)
{
int i,mask;
for(i=31; i>=0; i--)
{
mask = 1<<i;
putchar((x & mask)?'1':'0'); /*Test and print ith bit*/
if(i%8==0)
395

}
printf("\n");

putchar(' '); /*Space after 8 bits*/

/*P14.5 Program to find whether a number is even or odd*/


#include <stdio.h>
int main(void)
{
int num;
int mask=0x1;
printf("Enter a number : ");
scanf("%d",&num);
if((num&mask)==0)
printf("Number is even\n");
else
printf("Number is odd\n");
return 0;
}
/*P14.6 Clear rightmost 1 bit*/
#include <stdio.h>
void displayBits(int x);
int main(void)
{
unsigned n=140;
displayBits(n);
n=n&(n-1);
displayBits(n);
return 0;
}
void displayBits(int x)
{
int i,mask;
for(i=31; i>=0; i--)
{
mask=1<<i;
putchar((x & mask)?'1':'0'); /* Test and print ith bit*/
if(i%8==0)
putchar(' '); /*Space after 8 bits*/
396

}
printf("\n");

/*P14.7*/
#include <stdio.h>
int main(void)
{
unsigned n;
printf("Enter n : ");
scanf("%d",&n);
if((n&(n-1))==0) /*parentheses around (n&(n-1)) are necessary as precedence of
printf("%d is power of 2\n",n);
else
printf("%d is not power of 2\n",n);
return 0;
}
/*P14.8 Count Set bits*/
#include <stdio.h>
void displayBits(int x);
int count_setbits1(unsigned x);
int count_setbits2(unsigned x);
int count_setbits3(unsigned x);
int count_setbits4(unsigned x);
int main(void)
{
unsigned x=1124;
displayBits(x);
printf("%d\n",count_setbits1(x));
printf("%d\n",count_setbits2(x));
printf("%d\n",count_setbits3(x));
printf("%d\n",count_setbits4(x));
return 0;
}
int count_setbits1(unsigned x)
{
int count=0,mask,i;
for(i=0; i<32; i++)
397

mask=1<<i;
if((x&mask)!=0) /*Check ith bit*/
count++;

}
return count;

int count_setbits2(unsigned x)
{
int count=0;
while(x!=0)
{
if((x&1)!=0)/*If lowest order bit is 1*/
count++;
x>>=1; /*Shift x right*/
}
return count;
}
int count_setbits3(unsigned x)
{
int count=0;
while(x!=0)
{
count++;
x=x&(x-1); /*Clear the rightmost 1-bit*/
}
return count;
}
int table[]={0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4};
int count_setbits4(unsigned x)
{
int count=0;
while(x!=0)
{
count=count+table[x & 0xF];
x=x>>4;
}

398

return count;
}
void displayBits(int x)
{
int i,mask;
for(i=31; i>=0; i--)
{
mask=1<<i;
putchar((x & mask)?'1':'0'); /* Test and print ith bit*/
if(i%8==0)
putchar(' '); /*Space after 8 bits*/
}
printf("\n");
}
/*P14.9 To set,clear,invert n bits starting from position p in a number x*/
#include <stdio.h>
void displayBits(int x);
int main(void)
{
int mask,p,n,x;
p=7,n=4;
mask=~(~0<<n)<<p-n+1;
x=10345;
displayBits(x);
x=x|mask;
/*Set*/
displayBits(x);
x=10345;
displayBits(x);
x=x&~mask;
/*Clear*/
displayBits(x);

x=10345;
displayBits(x);
x=x^mask;
/*Invert*/
displayBits(x);
return 0;

399

void displayBits(int x)
{
int i,mask;
for(i=31; i>=0; i--)
{
mask=1<<i;
putchar((x & mask)?'1':'0'); /* Test and print ith bit*/
if(i%8==0)
putchar(' '); /*Space after 8 bits*/
}
printf("\n");
}
/*P14.10*/
#include <stdio.h>
void displayBits(int x);
unsigned func(unsigned x, unsigned y, int p, int n);
int main(void)
{
int p=7,n=4;
unsigned x=0x23173b4,y=0x557;
displayBits(x);
displayBits(y);
x=func(x,y,p,n);
displayBits(x);
return 0;
}
unsigned func(unsigned x,unsigned y,int p,int n)
{
unsigned mask=~(~0<<n)<<p-n+1;
return (x&~mask)|(y & mask) ;
}
void displayBits(int x)
{
int i,mask;
for(i=31; i>=0; i--)
{
mask=1<<i;
putchar((x & mask)?'1':'0'); /* Test and print ith bit*/
if(i%8==0)
400

}
printf("\n");

putchar(' '); /*Space after 8 bits*/

/*P4.11*/
#include <stdio.h>
void displayBits(int x);
unsigned func(unsigned x, unsigned y, int p, int n);
int main(void)
{
int p=7,n=4;
unsigned x=0x23173b4,y=0x557;
displayBits(x);
displayBits(y);
x=func(x,y,p,n);
displayBits(x);
return 0;
}
unsigned func(unsigned x, unsigned y, int p, int n)
{
unsigned mask=~(~0<<n)<<p-n+1;
return (x&~mask)|(y<<p-n+1 & mask);
}
void displayBits(int x)
{
int i,mask;
for(i=31; i>=0; i--)
{
mask = 1<<i;
putchar((x & mask)?'1':'0'); /* Test and print ith bit*/
if(i%8==0)
putchar(' '); /*Space after 8 bits*/
}
printf("\n");
}
/*P14.12*/
#include <stdio.h>
void displayBits(int x);
401

unsigned func(unsigned x,unsigned y,int p,int n);


int main(void)
{
int p=13,n=6;
unsigned x=0x23173b4,y=0x2F;
displayBits(x);
displayBits(y);
x=func(x,y,p,n);
displayBits(x);
return 0;
}
unsigned func(unsigned x,unsigned y,int p,int n)
{
unsigned mask = ~(~0<<n)<<p-n+1;
return (x&~mask)|(y<<p-n+1);
}
void displayBits(int x)
{
int i,mask;
for(i=31; i>=0; i--)
{
mask = 1<<i;
putchar((x & mask)?'1':'0'); /*Test and print ith bit*/
if(i%8==0)
putchar(' '); /*Space after 8 bits*/
}
printf("\n");
}
/*P14.13*/
#include <stdio.h>
void displayBits(int x);
int main(void)
{
int mask,i=2,j=7,x;
mask=~(~0<<j-i+1)<<i;
x=103145;
displayBits(x);
402

x=x|mask;
/*Set*/
displayBits(x);
x=103145;
displayBits(x);
x=x&~mask;
/*Clear*/
displayBits(x);
x=103145;
displayBits(x);
x=x^mask;
/*Invert*/
displayBits(x);
return 0;

}
void displayBits(int x)
{
int i,mask;
for(i=31; i>=0; i--)
{
mask=1<<i;
putchar((x & mask)?'1':'0'); /* Test and print ith bit*/
if(i%8==0)
putchar(' '); /*Space after 8 bits*/
}
printf("\n");
}
/*P14.14 Swapping values without using a temporary variable through bitwise XOR*/
#include <stdio.h>
int main(void)
{
int x,y;
printf("Enter values for x and y : ");
scanf("%d%d",&x,&y);
printf("x=%d,y=%d\n",x,y);
x=x^y;
y=x^y;
x=x^y;
printf("x=%d,y=%d\n",x,y);
return 0;
403

}
/*P14.15 Program to print the twos complement of a number*/
#include <stdio.h>
void displayBits(int x);
int main(void)
{
int num,i,mask;
printf("Enter a number : ");
scanf("%d",&num);
displayBits(num);
printf("Two's complement is : \n");
displayBits(~num+1);
for(i=0; i<=31; i++)
{
mask=1<<i;
if((num & mask)!=0)
/*Find a bit with value 1*/
break;
}
for(i=i+1; i<=31; i++)
{
mask = 1<<i;
num = num ^ mask;
/*Invert the bit*/
}
printf("Two's complement is : \n");
displayBits(num);
return 0;

}
void displayBits(int x)
{
int i,mask;
for(i=31; i>=0; i--)
{
mask = 1<<i;
putchar((x & mask)?'1':'0'); /* Test and print ith bit*/
if(i%8==0)
putchar(' '); /*Space after 8 bits*/
}
printf("\n");
404

}
/*P14.16*/
#include <stdio.h>
unsigned nextHighestPow2(unsigned int n);
void displayBits(int x);
int main(void)
{
unsigned n=600;
printf("%d\n",(n));
displayBits(n);
displayBits(nextHighestPow2(n));
printf("%d\n",nextHighestPow2(n));
return 0;
}
unsigned nextHighestPow2(unsigned int n)
{
int i;
if(n && !(n&(n-1)))/*if n is exact power of 2, see P14.7*/
return n;
i=-1;
while(n!=0)
{
n>>=1;
i++;
}
return 1<<i+1;
}
void displayBits(int x)
{
int i,mask;
for(i=31; i>=0; i--)
{
mask=1<<i;
putchar((x&mask)?'1':'0'); /*Test and print ith bit*/
if(i%8==0)
putchar(' '); /*Space after 8 bits*/
}
printf("\n");
405

}
/*P14.17*/
#include <stdio.h>
void displayBits(int x);
int rotate_right1(int num, int n);
int rotate_right2(int num, int n);
int rotate_left1(int num, int n);
int rotate_left2(int num, int n);
int main(void)
{
int num,n,i,bit;
printf("Enter the number to be rotated : ");
scanf("%d",&num);
printf("Enter the number of rotations: ");
scanf("%d",&n);
n%=32;
displayBits(num);
printf("\n");
displayBits(rotate_right1(num,n));
displayBits(rotate_right2(num,n));
displayBits(rotate_left1(num,n));
displayBits(rotate_left2(num,n));
return 0;
}
int rotate_right1(int num, int n)
{
int i;
for(i=1; i<=n; i++)
{
if(num&1)
/* Test LSB */
num=(num>>1) | (1<<31);
/*Switch on MSB*/
else
num=(num>>1) & ~(1<<31);
/*Switch off MSB*/
}
return num;
}
int rotate_left1(int num, int n)
{
int i;
406

for(i=1; i<=n; i++)


{
if(num & (1<<31))
/*Test MSB*/
num=(num<<1) | 1;
/*Switch on LSB*/
else
num=(num<<1) & ~1;
/*Switch off LSB*/
}
return num;

}
int rotate_right2(int num, int n)
{
return (num>>n)|(num<<(32-n));
}
int rotate_left2(int num , int n)
{
return (num<<n) | (num>>(32-n));
}

void displayBits(int x)
{
int i,mask;
for(i=31; i>=0; i--)
{
mask = 1<<i;
putchar((x & mask)?'1':'0'); /* Test and print ith bit*/
if(i%8==0)
putchar(' '); /*Space after 8 bits*/
}
printf("\n");
}
/*P14.18*/
#include <stdio.h>
unsigned mult(unsigned int num,unsigned int n,int *err);
int main(void)
{
unsigned int num,n,err=0,result;
printf("Enter the number and power of 2
scanf("%u%u",&num,&n);
407

: ");

result=mult(num,n,&err);
if(err==1)
printf("Overflow\n");
else
printf("Result=%u\n",result);
return 0;

}
unsigned mult(unsigned int num,unsigned int n,int *err)
{
unsigned int result=num;
while(n>0)
{
num=num<<1; /*Multiply by 2*/
n--;
if(num<result) /*unsigned integer overflow wraps around*/
{
*err=1;
break;
}
result=num;
}
return result;
}
/*P14.19*/
#include <stdio.h>
unsigned int reverse(unsigned int num);
void displayBits(int x);
int main(void)
{
unsigned int x=234242156;
displayBits(x);
displayBits(reverse(x));
return 0;
}
unsigned int reverse(unsigned int num)
{
unsigned int i,rev=0;
for(i=0; i<32; i++)
408

if((num & (1<<i)))/* test ith bit of num*/


rev=rev | (1<<(31-i)); /*set (31-i)th bit of rev equal to ith bit of num*/
return rev;

}
void displayBits(int x)
{
int i,mask;
for(i=31; i>=0; i--)
{
mask=1<<i;
putchar((x & mask)?'1':'0'); /* Test and print ith bit*/
if(i%8==0)
putchar(' '); /*Space after 8 bits*/
}
printf("\n");
}
/*P14.20 Program to convert a binary pattern to an integer*/
#include <stdio.h>
int main(void)
{
char bit;
int i, num = 0;

printf("Enter any bit pattern less than or equal to 32 bits :\n");


for(i=0; i<=31; i++)
{
bit=getchar();
if(bit=='0')
num=num<<1;
else if(bit=='1')
num=(num<<1)+1;
else
break;
}
printf("Hexadecimal : %x\n", num);
printf("Decimal : %d\n", num);
return 0;

** Back exercises for chapter 14:

409

**

/*E14.1*/
#include <stdio.h>
int main(void)
{
int x=7,y=19;
printf("%d %d ",x&y,x&&y);
printf("%d %d ",x|y,x||y);
printf("%d\n",x^y);
return 0;
}
/*E14.2*/
#include <stdio.h>
void displayBits(int x);
int main(void)
{
unsigned int x,y,z;
displayBits(0xFFFF);
x=y=z=0xFFFF;
x=(x>>5)<<5;
displayBits(x);
y=(y>>3)<<3;
displayBits(y);
z=(z>>2)<<2;
displayBits(z);
return 0;
}
void displayBits(int x)
{
int i,mask;
for(i=31; i>=0; i--)
{
mask = 1<<i;
putchar((x & mask)?'1':'0'); /*Test and print ith bit*/
if(i%8==0)
putchar(' '); /*Space after 8 bits*/
}
printf("\n");
}
/*E14.3*/
#include <stdio.h>
int main(void)
410

int k;
k=((3<<4)^(96>>1));
printf("%d\n",k);
return 0;

/*E14.4*/
#include <stdio.h>
int main(void)
{
int x=0x1F;
x<<2;
printf("%X ",x);
x>>2;
printf("%X\n",x);
return 0;
}

/*E14.5*/
#include <stdio.h>
int main(void)
{
unsigned int arr_mask[]={0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80, 0x100, 0x2
0x400, 0x800, 0x1000,0x2000, 0x4000, 0x8000, 0x10000, 0x20000, 0x40000, 0x80000,
0x100000, 0x200000,0x400000, 0x800000, 0x1000000, 0x2000000, 0x4000000, 0x8000000,
0x10000000, 0x20000000, 0x40000000, 0x80000000};

int i,x=0x54038F;
for(i=31; i>=0; i--)
x&arr_mask[i] ? putchar('1'): putchar('0');
return 0;

/*E14.6*/
#include <stdio.h>
int main(void)
{
unsigned int num=0xA01D,pos=3,bit;
unsigned int mask=1<<pos;
411

bit=(num&mask)>>pos;
printf("%u\n", bit);
return 0;

/*E14.7*/
#include <stdio.h>
int main(void)
{
unsigned int num=0x1F,pos=3,bit;
bit=(num>>pos)&1;
printf("%u\n",bit);
return 0;
}
/*E14.8*/
#include <stdio.h>
int main(void)
{
int i,num=0xA0DF;
for(i=31; i>=0; i--)
printf("%d",(num>>i)&1);
return 0;
}
/*E14.9*/
#include <stdio.h>
int main(void)
{
int i,num=0x1A3B;
unsigned int mask=1<<31;
for(i=31; i>=0; i--)
{
(num & mask) ? printf("1") : printf("0");
mask=mask>>1;
}
return 0;
}
/*E14.10*/
#include <stdio.h>
412

void func(int x);


int main(void)
{
func(0x1AE3);
}
void func(int x)
{
int i,mask;
mask=1<<31;
for(i=1; i<=32; i++)
{
putchar((x&mask)?'1':'0');
x<<=1;
if(i%8==0)
putchar(' ');
}
printf("\n");
return 0;
}
/*E14.11*/
#include <stdio.h>
int func(unsigned int x);
int main(void)
{
printf("%d\n",func(0x1AE3));
return 0;
}
int func(unsigned x)
{
int count=0,mask=1,i;
for(i=0; i<32; i++)
{
if((x&mask)!=0) /*Check ith bit*/
count++;
mask<<=1;
}
return count;
}
/*E14.12*/
413

#include <stdio.h>
unsigned int func(unsigned int x);
void displayBits(int x);
int main(void)
{
unsigned int x=0x1AE3;
displayBits(x);
x=func(x);
printf("%X\n",x);
displayBits(x);
return 0;
}
unsigned int func(unsigned int num)
{
unsigned int i,r=0;
for(i=0; num!=0; i++)
{
r=(r<<1)|num & 1;
num>>=1;
}
r<<=32-i;
return r;
}
void displayBits(int x)
{
int i,mask;
for(i=31; i>=0; i--)
{
mask = 1<<i;
putchar((x & mask)?'1':'0'); /* Test and print ith bit*/
if(i%8==0)
putchar(' '); /*Space after 8 bits*/
}
printf("\n");
}
/*E14.13*/
#include <stdio.h>
unsigned int func(unsigned int x);
void displayBits(int x);
414

int main(void)
{
unsigned int x=0x1AE3;
displayBits(x);
x=func(x);
printf("%X\n",x);
displayBits(x);
return 0;
}
unsigned int func(unsigned int num)
{
unsigned int lmask,rmask,mask;
lmask=1<<31;
rmask=1;
while(lmask > rmask)
{
mask=lmask|rmask;
if((num&mask)!=0 && (num&mask)!=mask)
num^=mask;
lmask>>=1;
rmask<<=1;
}
return num;
}
void displayBits(int x)
{
int i,mask;
for(i=31; i>=0; i--)
{
mask = 1<<i;
putchar((x & mask)?'1':'0'); /* Test and print ith bit*/
if(i%8==0)
putchar(' '); /*Space after 8 bits*/
}
printf("\n");
}
/*E14.14*/
#include <stdio.h>
void displayBits(int x);
415

int main(void)
{
unsigned int x=0x123F4;
displayBits(x);
printf("(i) Set most significant bit\n");
x|=(1<<31);
displayBits(x);
printf("(ii) Clear most significant bit\n");
x&=~(1<<31);
displayBits(x);
printf("(iii) Invert all bits\n");
x^=~0;
displayBits(x);
printf("(iv) Set all bits\n");
x|=~0; displayBits(x);
printf("(v) Invert least significant byte\n");
x^=0xFF; displayBits(x);
printf("(vi) Invert all bits at even positions 0,2,4,6,8..\n");
x^=0x55555555;displayBits(x);
printf("(vii) Invert all bits at odd positions 1,3,5,7,9..\n");
x^=0xAAAAAAAA;displayBits(x);
printf("(viii) Clear all bits at even positions 0,2,4,6,8..\n");
x&=0xAAAAAAAA;displayBits(x);
printf("(ix) Clear all bits at odd positions 1,3,5,7,9..\n");
x&=0x55555555;displayBits(x);
printf("\n\n");
x=0x123FF;
displayBits(x);
printf("(x)Insert 3 trailing zeros \n");
x=(x>>3)<<3;
displayBits(x);
printf("(xi) Find if every bit is set \n");
(x^~0) ? printf("Not all Set\n"): printf("All Set\n");
416

(x&~0)==~0 ? printf("All Set\n"): printf("Not all Set\n");


printf("\n\n");
x=4;
printf("x=%d\n",x);
printf("(xii) Multiply by 7\n");
x=(x<<3)-x;
printf("x=%d\n",x);
printf("(xiii) Multiply by 9\n");
x=(x<<3)+x;
printf("x=%d\n",x);
printf("(xiv) Multiply by 3.5\n");
x=((x<<3)-x)>>1;
printf("x=%d\n",x);
return 0;

}
void displayBits(int x)
{
int i,mask;
for(i=31; i>=0; i--)
{
mask = 1<<i;
putchar((x & mask)?'1':'0'); /* Test and print ith bit*/
if(i%8==0)
putchar(' '); /*Space after 8 bits*/
}
printf("\n");
}
/*E14.15*/
#include <stdio.h>
int wordlength(void);
int main(void)
{
printf("%d ",wordlength());
return 0;
}
int wordlength(void)
417

unsigned x;
int count=0;
for(x=~0; x!=0; x=x<<1)
count++;
return count;

/*E14.16*/
#include <stdio.h>
int main(void)
{
unsigned x=1434,y=32,r;
r=x&(y-1);
printf("%d %d",x%y,r);
return 0;
}
/*E14.17*/
#include <stdio.h>
int isMultiple(int x,int n);
int main(void)
{
int x,i;
printf("Enter x and i : ");
scanf("%d%d",&x,&i);
if(isMultiple(x,i) )
printf("%d is multiple of 2 to the power of %d\n",x,i);
else
printf("%d is not multiple of 2 to the power of %d\n",x,i);
return 0;
}
int isMultiple(int x,int i)
{
return !(x & (~(~0<<i)));
}
/*E14.18*/
#include <stdio.h>
void displayBits(int x);
418

int count_setbits2(unsigned x);


int main(void)
{
unsigned x=1034,y=1083;
displayBits(x);
displayBits(y);
printf("%d\n",count_setbits2(x^y));
return 0;
}
int count_setbits2(unsigned x)
{
int count=0;
while(x!=0)
{
count++;
x=x&(x-1);
}
return count;
}
void displayBits(int x)
{
int i,mask;
for(i=31; i>=0; i--)
{
mask=1<<i;
putchar((x & mask)?'1':'0'); /* Test and print ith bit*/
if(i%8==0)
putchar(' '); /*Space after 8 bits*/
}
printf("\n");
}
/*E14.19*/
#include <stdio.h>
void displayBits(int x);
int main(void)
{
int count,x=0x1F,y=0xF1,z;
displayBits(x);
displayBits(y);
419

count=0;
for(z=x^y; z!=0; z=z&(z-1))
count++;
printf("%d\n",count);

count=0;
for(z=x^y; z!=0; z>>=1)
count+=z&1;
printf("%d\n",count);
return 0;

void displayBits(int x)
{
int i,mask;
for(i=31; i>=0; i--)
{
mask = 1<<i;
putchar((x & mask)?'1':'0'); /* Test and print ith bit*/
if(i%8==0)
putchar(' '); /*Space after 8 bits*/
}
printf("\n");
}
/*E14.20*/
#include <stdio.h>
void displayBits(int x);
#include <math.h>
int main(void)
{
int mask,p=7,n=4,x=103145;
displayBits(x);
if(n<0)
mask = ~(~(~0<<abs(n))<<p);
else
mask = ~(~(~0<<n)<<p-n+1);
displayBits(mask);
x=x&mask;
420

displayBits(x);
p=7,n=-4,x=103145;
displayBits(x);
if(n<0)
mask = ~(~(~0<<abs(n))<<p);
else
mask = ~(~(~0<<n)<<p-n+1);
displayBits(mask);
x=x&mask;
displayBits(x);
return 0;

}
void displayBits(int x)
{
int i,mask;
for(i=31; i>=0; i--)
{
mask = 1<<i;
putchar((x & mask)?'1':'0'); /* Test and print ith bit*/
if(i%8==0)
putchar(' '); /*Space after 8 bits*/
}
printf("\n");
}
/*E14.21*/
#include <stdio.h>
void displayBits(int x);
int main(void)
{
unsigned int x=103145, p=7, n=5;
displayBits(x);
x=func(x,p,n);
displayBits(x);
return 0;
}
unsigned int func(unsigned int x, int p, int n)
{
return (x>>(p+1-n)) & ~(~0<<n) ;
421

}
void displayBits(int x)
{
int i,mask;
for(i=31; i>=0; i--)
{
mask = 1<<i;
putchar((x & mask)?'1':'0'); /* Test and print ith bit*/
if(i%8==0)
putchar(' '); /*Space after 8 bits*/
}
printf("\n");
}
/*E14.22*/
#include <stdio.h>
void displayBits(int x);
int main(void)
{
unsigned x,y,r,mask,i=9;
x=0x123;
y=0xffffff;
mask=~0<<i+1;
r=(x&~mask) | (y&mask);
displayBits(x);
displayBits(y);
displayBits(r);
return 0;

}
void displayBits(int x)
{
int i,mask;
for(i=31; i>=0; i--)
{
mask = 1<<i;
putchar((x & mask)?'1':'0'); /* Test and print ith bit*/
if(i%8==0)
putchar(' '); /*Space after 8 bits*/
}
422

printf("\n");

/*E14.23*/
#include <stdio.h>
void displayBits(int x);
unsigned clear(unsigned x,int i,int j);
int main(void)
{
unsigned x = 0x23173b4;
displayBits(x);
x = clear(x,3,7) ;
displayBits(x);
return 0;
}
unsigned clear(unsigned x,int i,int j)
{
unsigned mask = ~0<<(j+1) | (1<<i)-1;
return x&mask;
}
void displayBits(int x)
{
int i,mask;
for(i=31; i>=0; i--)
{
mask = 1<<i;
putchar((x & mask)?'1':'0'); /* Test and print ith bit*/
if(i%8==0)
putchar(' '); /*Space after 8 bits*/
}
printf("\n");
}
/*E14.24*/
#include <stdio.h>
unsigned set(int x,int i,int j);
void displayBits(int x);
int main(void)
{
423

unsigned x=0x23172b0;
displayBits(x);
x=set(x,3,7);
displayBits(x);
return 0;

}
unsigned set(int x,int i,int j)
{
int mask=0,p;
for(p=i; p<j; p++)
mask=mask | 1<<p;
return x|mask;
}
void displayBits(int x)
{
int i,mask;
for(i=31; i>=0; i--)
{
mask = 1<<i;
putchar((x & mask)?'1':'0'); /* Test and print ith bit*/
if(i%8==0)
putchar(' '); /*Space after 8 bits*/
}
printf("\n");
}
/*P14.25*/
#include <stdio.h>
int main(void)
{
int x=511;
if((x&(x+1))==0)
printf("Yes\n");
else
printf("No\n");
return 0;
}
/*P14.26*/
#include <stdio.h>
424

void displayBits(int x);


int increment(int x);
int decrement(int x);
int main(void)
{
int a=79,b=20;
displayBits(a);
a=increment(a);
displayBits(a);
printf("\n");
displayBits(b);
b=decrement(b);
displayBits(b);
printf("%d %d\n",a,b);
return 0;

}
int increment(int x)
{
int i;
for(i=0; (x&(1<<i))!=0; i++)
x=x^(1<<i);
x=x^(1<<i);
return x;
}
int decrement(int x)
{
int i;
for(i=0; (x&(1<<i))==0; i++)
x=x^(1<<i);
x=x^(1<<i);
return x;
}
void displayBits(int x)
{
int i,mask;
for(i=31; i>=0; i--)
{
mask = 1<<i;
425

putchar((x & mask)?'1':'0'); /* Test and print ith bit*/


if(i%8==0)
putchar(' '); /*Space after 8 bits*/

}
printf("\n");

/*E14.27*/
#include <stdio.h>
int main(void)
{
int x=245;
x=-(~x);
printf("%d\t", x);
x=~(-x);
printf("%d\n", x);
return 0;
}
/*E14.28*/
#include <stdio.h>
void displayBits(int x);
int main(void)
{
int x=0x12E8;
displayBits(x);
x = x & ~(x-1);
displayBits(x);
x=0x12E8;
displayBits(x);
x = x & -x; /*in two's complement machine*/
displayBits(x);
return 0;

}
void displayBits(int x)
{
int i,mask;
for(i=31; i>=0; i--)
{

426

mask = 1<<i;
putchar((x & mask)?'1':'0'); /* Test and print ith bit*/
if(i%8==0)
putchar(' '); /*Space after 8 bits*/

}
printf("\n");

/*E14.29*/
#include <stdio.h>
#include <math.h>
unsigned func(unsigned int n);
unsigned func1(unsigned int n);
int main(void)
{
unsigned x=8;
printf("%d %d\n",func(x), func1(x));
x=35;
printf("%d %d\n",func(x), func1(x));
return 0;
}
unsigned func(unsigned int n)
{
int count=0;
while(n!=0)
{
n>>=1;
count++;
}
return count-1;
}
unsigned func1(unsigned int n)
{
return log(n)/log(2);
}
/*E14.30*/
#include <stdio.h>
void displayBits(int x);
unsigned parity(int x);
427

int main(void)
{
unsigned int n=67;
displayBits(n);
printf("%d\n",parity(n));
return 0;
}
unsigned parity(int x)
{
unsigned parity=0;
while(x)
{
parity=!parity;
x=x&(x-1);
}
return parity;
}
void displayBits(int x)
{
int i,mask;
for(i=31; i>=0; i--)
{
mask = 1<<i;
putchar((x & mask)?'1':'0'); /* Test and print ith bit*/
if(i%8==0)
putchar(' '); /*Space after 8 bits*/
}
printf("\n");
}
/*E14.31*/
#include <stdio.h>
unsigned mult(unsigned int x,unsigned int y);
int main(void)
{
printf("%d\n",mult(9,8));
return 0;
}
unsigned mult(unsigned int x,unsigned int y)
{
428

unsigned z=0;
while(y!=0)
{
if((y&1)!=0)
z=z+x;
x<<=1;
y>>=1;
}
return z;

/*E14.32*/
#include <stdio.h>
int main(void)
{
unsigned num=0xf000000f;
printf("%d\n",count1(num));
printf("%d\n",count2(num));
printf("%d\n",count3(num));
printf("%d\n",count4(num));
return 0;
}
int count1(unsigned x)
{
int count=0;
while(x!=0)
{
count++;
x=x&(x-1);
}
return count;
}
int count2(int x)
{
return 32-count1(x);
}
int count3(int x)
{
return count1(~x);
}
429

int count4(int x)
{
int c=0;
for(x=~x; x!=0; x=x&(x-1))
c++;
return c;
}
/*E14.33*/
#include <stdio.h>
void swap(int *a,int *b);
void swap1(int *a,int *b);
int main(void)
{
int x=2,y=2;
int arr[5]={1,2,5,3,4},i,j,n=5,min;
for(i=0; i<n-1; i++)
{
min=i;
for(j=i+1; j<n; j++)
{
if(arr[min]>arr[j])
min=j ;
}
swap(&arr[i],&arr[min]);
/*swap1(&arr[i],&arr[min]);*/
}
printf("Sorted list is : \n");
for(i=0; i<n; i++)
printf("%d ",arr[i]);
printf("\n");
return 0;
}
void swap(int *a,int *b)
{
int temp;
temp=*a;
*a=*b;
*b=temp;
}
430

void swap1(int *x,int *y)


{
*x = *x ^ *y;
*y = *x ^ *y;
*x = *x ^ *y;
}
/*E14.34*/
#include <stdio.h>
void displayBits(int x);
int main(void)
{
unsigned n=123456;
displayBits(n);
n=n|(n-1);
displayBits(n);
return 0;
}
void displayBits(int x)
{
int i,mask;
for(i=31; i>=0; i--)
{
mask = 1<<i;
putchar((x & mask)?'1':'0'); /* Test and print ith bit*/
if(i%8==0)
putchar(' '); /*Space after 8 bits*/
}
printf("\n");
}
/*E14.35*/
#include <stdio.h>
void displayBits(int x);
int main(void)
{
unsigned n=0x1000010;
displayBits(n);
n|=n>>1;
n|=n>>2;
431

n|=n>>4;
n|=n>>8;
n|=n>>16;
displayBits(n);
return 0;

}
void displayBits(int x)
{
int i,mask;
for(i=31; i>=0; i--)
{
mask = 1<<i;
putchar((x & mask)?'1':'0'); /* Test and print ith bit*/
if(i%8==0)
putchar(' '); /*Space after 8 bits*/
}
printf("\n");
}
/*E14.36*/
#include <stdio.h>
void displayBits(int x);
unsigned nextHighestPow2(unsigned int n);
int main(void)
{
unsigned n=250,x;
displayBits(n);
x=nextHighestPow2(n);
displayBits(x);
printf("%d\n",x);
return 0;
}
unsigned nextHighestPow2(unsigned int n)
{
n--;
n|=n>>1;
n|=n>>2;
n|=n>>4;
n|=n>>8;
n|=n>>16;
432

n++;
return n;

}
void displayBits(int x)
{
int i,mask;
for(i=31; i>=0; i--)
{
mask = 1<<i;
putchar((x & mask)?'1':'0'); /* Test and print ith bit*/
if(i%8==0)
putchar(' '); /*Space after 8 bits*/
}
printf("\n");
}
/*E14.37*/
#include <stdio.h>
int leadingZeros(int x);
int count_setbits(x);
int rightProp(int n);
int main(void)
{
int x=0xFF;
printf("%d\n",leadingZeros(x));
return 0;
}
int leadingZeros(int x)
{
x=rightProp(x);
return count_setbits(~x);
}
int rightProp(int n)
{
n|=n>>1;
n|=n>>2;
n|=n>>4;
n|=n>>8;
n|=n>>16;
return n;
433

}
int count_setbits(int x)
{
int count=0;
while(x!=0)
{
count++;
x=x&(x-1);
}
return count;
}
/*E14.38*/
#include <stdio.h>
void displayBits(int x);
int func(int x);
int main(void)
{
int x=0x123;
displayBits(x);
x=func(x);
displayBits(x);
return 0;
}
int func(int x)
{
return x|(x+1);
}
void displayBits(int x)
{
int i,mask;
for(i=31; i>=0; i--)
{
mask = 1<<i;
putchar((x & mask)?'1':'0'); /*Test and print ith bit*/
if(i%8==0)
putchar(' '); /*Space after 8 bits*/
}
printf("\n");
}
434

/*E14.39*/
#include <stdio.h>
void displayBits(int x);
int main(void)
{
unsigned x=0x12E;
displayBits(x);
displayBits(swap(x));
return 0;
}
unsigned int swap(unsigned int x)
{
return ((x & 0x55555555)<<1) | ((x & 0xAAAAAAAA)>>1);
}
void displayBits(int x)
{
int i,mask;
for(i=31; i>=0; i--)
{
mask = 1<<i;
putchar((x & mask)?'1':'0'); /* Test and print ith bit*/
if(i%8==0)
putchar(' '); /*Space after 8 bits*/
}
printf("\n");
}
/*E14.40*/
#include <stdio.h>
void displayBits(int x);
unsigned swap4Bits(int x);
int main(void)
{
unsigned x=0x15F93A7;
displayBits(x);
displayBits(swap4Bits(x));
return 0;
}
unsigned swap4Bits(int x)
{
435

return ((x & 0x0F0F0F0F)<<4) | ((x & 0xF0F0F0F0)>>4);


}
void displayBits(int x)
{
int i,mask;
for(i=31; i>=0; i--)
{
mask = 1<<i;
putchar((x & mask)?'1':'0'); /* Test and print ith bit*/
if(i%8==0)
putchar(' '); /*Space after 8 bits*/
}
printf("\n");
}
/*E14.41*/
#include <stdio.h>
void displayBits(int x);
unsigned swapBytes(unsigned x);
int main(void)
{
unsigned x = 0x15F93A7;
displayBits(x);
displayBits(swapBytes(x));
return 0;
}
unsigned swapBytes(unsigned x)
{
return ((x & 0x00ff00ff) << 8) | ((x & 0xff00ff00) >> 8);
}
void displayBits(int x)
{
int i,mask;
for(i=31; i>=0; i--)
{
mask = 1<<i;
putchar((x & mask)?'1':'0'); /* Test and print ith bit*/
if(i%8==0)
putchar(' '); /*Space after 8 bits*/
}
436

printf("\n");

/*E14.42*/
#include <stdio.h>
void displayBits(int a);
unsigned reverseBytes(unsigned x);
int main(void)
{
unsigned x = 0xFA12CD04;
displayBits(x);
displayBits(reverseBytes(x));
return 0;
}
unsigned reverseBytes(unsigned x)
{
return (x>>24) | ((x & 0xFF0000)>>8) | ((x & 0xFF00)<<8) | (x<<24);
}
void displayBits(int x)
{
int i,mask;
for(i=31; i>=0; i--)
{
mask = 1<<i;
putchar((x & mask)?'1':'0'); /* Test and print ith bit*/
if(i%8==0)
putchar(' '); /*Space after 8 bits*/
}
printf("\n");
}
/*E14.43*/
#include <stdio.h>
void displayBits(int a);
unsigned func(int x);
int main(void)
{
unsigned x=0xFA2E4;
displayBits(x);
displayBits(func(x));
437

return 0;
}
unsigned func(int x)
{
x = ((x&0x55555555) << 1) | ((x&0xaaaaaaaa) >> 1);
x = ((x&0x33333333) << 2) | ((x&0xcccccccc) >> 2);
x = ((x&0x0f0f0f0f) << 4) | ((x&0xf0f0f0f0) >> 4);
x = ((x&0x00ff00ff) << 8) | ((x&0xff00ff00) >> 8);
x = ((x&0x0000ffff) << 16) | ((x&0xffff0000) >> 16);
return x;
}
void displayBits(int x)
{
int i,mask;
for(i=31; i>=0; i--)
{
mask = 1<<i;
putchar((x & mask)?'1':'0'); /*Test and print ith bit*/
if(i%8==0)
putchar(' '); /*Space after 8 bits*/
}
printf("\n");
}
/*E14.44*/
#include <stdio.h>
void displayBits(int a);
unsigned func(unsigned x);
int main(void)
{
unsigned x=12345678;
displayBits(x);
displayBits(func(x));
printf("%d\n",func(x));
return 0;
}
unsigned func(unsigned x)
{
x = (x & 0x55555555) + ((x & 0xaaaaaaaa) >> 1);
x = (x & 0x33333333) + ((x & 0xcccccccc) >> 2);
438

x = (x
x = (x
x = (x
return

& 0x0f0f0f0f) + ((x & 0xf0f0f0f0) >> 4);


& 0x00ff00ff) + ((x & 0xff00ff00) >> 8);
& 0x0000ffff) + ((x & 0xffff0000) >> 16);
x;

}
void displayBits(int x)
{
int i,mask;
for(i=31; i>=0; i--)
{
mask = 1<<i;
putchar((x & mask)?'1':'0'); /*Test and print ith bit*/
if(i%8==0)
putchar(' '); /*Space after 8 bits*/
}
printf("\n");
}
/*E14.45*/
#include <stdio.h>
void displayBits(int x);
int pack(int empid, int jobid, char jstatus, char gender, int age, char mstatus);
int main(void)
{
int emp;
int empid,jobid,age,mstatus;
char gender,jstatus;
emp=pack(2048,80,'P','F',50,3);
displayBits(emp);
/*Unpack*/
empid = emp & 0xFFF;
jobid = (emp & 0x7F000)>>12;
jstatus = (emp & 0x80000)>>19;
gender = (emp & 0x100000)>>20;
age = (emp & 0xFE00000)>>21;
mstatus = (emp & 0x30000000)>>28;
printf("%d\n%d\n%d\n%d\n%d\n%d\n",empid,jobid,jstatus,gender,age,mstatus);
return 0;
}
int pack(int empid, int jobid, char jstatus, char gender, int age, char mstatus)
439

int emp=0;
emp = emp |
emp = emp |
emp = emp |
emp = emp |
emp = emp |
emp = emp |
return emp;

empid;
jobid<<12;
(jstatus == 'T' ? 0 : 1)<<19;
(gender == 'F' ? 0 : 1)<<20;
age<<21;
mstatus<<28;

}
void displayBits(int x)
{
int i,mask;
for(i=31; i>=0; i--)
{
mask = 1<<i;
putchar((x & mask)?'1':'0'); /* Test and print ith bit*/
if(i%8==0)
putchar(' '); /*Space after 8 bits*/
}
printf("\n");
}
/*E14.46*/
#include <stdio.h>
void displayBits(int x);
int convertToBCD(int n);
int convertToBinary(int bcd);
int main(void)
{
int bcd,bin;
printf("Enter a number :");
scanf("%d",&bin);
displayBits(bin);
bcd=convertToBCD(bin);
displayBits(bcd);
bin=convertToBinary(bcd);
440

displayBits(bin);
return 0;

int convertToBCD(int n)
{
int rem,i,bcd=0;
for(i=0; n>0; i++)
{
rem=n%10;
/*taking last digit of number*/
bcd = bcd | ( (rem & 0xF)<< i*4 );
n/=10;
/*skipping last digit*/
}
return bcd;
}
int convertToBinary(int bcd)
{
int i,bin=0,d=1;
for(i=0; i<32; i+=4)
{
bin+=d*(bcd>>i & 0xF);
d*=10;
}
return bin;
}
void displayBits(int x)
{
int i,mask;
for(i=31; i>=0; i--)
{
mask = 1<<i;
putchar((x & mask)?'1':'0'); /* Test and print ith bit*/
if(i%8==0)
putchar(' '); /*Space after 8 bits*/
}
printf("\n");
}
441

/*E14.47*/
#include <stdio.h>
char unpack(int n, int p);
unsigned pack_chars1(char c1,char c2,char c3,char c4);
unsigned pack_chars2(char c1,char c2,char c3,char c4);
int main(void)
{
int p1,p2;
p1 = pack_chars1('p','q','r','s');
p2 = pack_chars2('p','q','r','s');
printf("%c %c %c %c\n",unpack(p1,0),unpack(p1,1), unpack(p1,2), unpack(p1,3));
printf("%c %c %c %c\n",unpack(p2,0),unpack(p2,1), unpack(p2,2), unpack(p2,3));
return 0;
}
unsigned pack_chars1(char c1,char c2,char c3,char c4)
{
int n;
n = c1;
n = n | c2<<8;
n = n | c3<<16;
n = n | c4<<24;
return n;
}
unsigned pack_chars2(char c1,char c2,char c3,char c4)
{
int n;
n = c1;
n = (n<<8) | c2;
n = (n<<8) | c3;
n = (n<<8) | c4;
return n;
}
char unpack(int n, int p)
{
unsigned mask = 0xFF << p*8;
return (n & mask)>>p*8;
}

442

14

Chapter 15

** In chapter exercises for chapter 15:

**

/*P15.1 Program to print the value of enum variables*/


#include <stdio.h>
int main(void)
{
enum month{Jan,Feb,Mar,Apr,May,Jun}m1,m2;
m1=Mar;
printf("m1=%d\n",m1);
printf("Enter value for m2 : ");
scanf("%d",&m2);
printf("m2=%d\n",m2);
return 0;
}
/*P15.2 Program to understand automatic variables*/
#include <stdio.h>
void func(void);
int main(void)
{
func();
func();
func();
return 0;
}
void func(void)
{
int x=2,y=5;
printf("x=%d,y=%d\n",x,y);
x++;
y++;
}
/*P15.3*/
#include <stdio.h>
void func(void);
int main(void)
{
int x=5;
443

printf("x=%d\t",x);
func();
return 0;

}
void func(void)
{
int x=15;
printf("x=%d\n",x);
}
/*P15.4 Program to understand automatic variables*/
#include <stdio.h>
int main(void)
{
int x=3;
printf("%d\t",x);
{
int x=10;
printf("%d\t",x);
}
{
int x=26;
printf("%d\t",x);
}
printf("%d\n",x);
return 0;
}
/*P15.5*/
#include <stdio.h>
int main(void)
{
register int i;
for(i=0; i<20000; i++)
printf("%d\n",i);
return 0;
}
/*P15.6 Program to understand the use of local static variables*/
#include <stdio.h>
444

void func(void);
int main(void)
{
func();
func();
func();
return 0;
}
void func(void)
{
static int x=2, y=5;
printf("x=%d, y=%d\n",x,y);
x++;
y++;
}
/*P15.7 Program to understand the use of local static variable */
#include <stdio.h>
void func(int n);
int main(void)
{
int n,i ;
printf("Enter a number : ");
scanf("%d",&n);
for(i=1; i<=10; i++)
func(n);
printf("\n");
return 0;
}
void func(int n)
{
static int step; /*Automatically initialized to 0*/
step=step+n;
printf("%d\t",step);
}
/*P15.8 Program to find out sum of integers*/
#include <stdio.h>
#include <stdarg.h>
int sum(int,...);
445

int main(void)
{
printf("Total = %d\n",sum(2,99,68));
printf("Total = %d\n",sum(3,11,79,32));
printf("Total = %d\n",sum(5,23,34,45,56,78));
return 0;
}
int sum(int num,...)
{
int i;
va_list ap;
int arg,total=0;
va_start(ap,num);
for(i=0; i<num; i++)
{
arg = va_arg(ap,int);
printf("%d ",arg);
total+=arg;
}
va_end(ap);
return total;
}
/*P15.9 Program that uses a function similar to printf()*/
#include <stdarg.h>
#include <stdio.h>
#include <string.h>
void i_to_str(int num,char str[],int b);
void d_to_str(double num,char str[]);
void print(char *format,...);
int main(void)
{
int a=125;
float b=563.66;
char c='Q';
char name[10]="Ranju";
print("Value of a in binary = %b\n",a);
print("Value of a in octal = %o\n",a);
print("Value of a in decimal = %d\n",a);
print("Value of a in hexadecimal = %x\n",a);
446

print("Value of b = %f\n",b);
print("Value of c = %c\n",c);
print("Value of name = %s\n",name);
return 0;

}
void print(char *format,...)
{
char *p,str[50],*ptr;
int k;
float l;
va_list ap;
va_start(ap,format);

for(p=format; *p!='\0'; p++)


{
if((*p)=='%')
{
p++;
switch(*p)
{
case 'b':
k = va_arg(ap,int);
i_to_str(k,str,2);
fputs(str,stdout);
break;
case 'd':
k = va_arg(ap,int);
i_to_str(k,str,10);
fputs(str,stdout);
break;
case 'o':
k = va_arg(ap,int);
i_to_str(k,str,8);
fputs(str,stdout);
break;
case 'x':
k = va_arg(ap, int);
i_to_str(k,str,16);
fputs(str,stdout);
break;
447

}
}
else
}

case 'c':
k = va_arg(ap,int);
putchar(k);
break;
case 's':
ptr=va_arg(ap,char *);
fputs(ptr,stdout);
break;
case 'f':
l = va_arg(ap,double);
d_to_str(l,str);
fputs(str,stdout);
break;
case '%':
putchar('%');
break;

putchar(*p);

}
void i_to_str(int num,char str[],int b)
{
int i=0,temp,rem,j,sign;
sign = num<0? -1: 1;
if(sign==-1)
num=-num;
while(num>0)
{
rem = num%b;
num/=b;
if(rem>9 && rem<16)
str[i++]= rem-10+'A';
else
str[i++]=rem+'0';
}
if(sign==-1)
str[i++]='-';
448

str[i]='\0';
for(i=0,j=strlen(str)-1; i<j; i++,j--) /*Reverse the string*/
{
temp = str[i];
str[i] = str[j];
str[j] = temp;
}

}
void d_to_str(double num,char str[])
{
int i,k;
double d;
i=num;
i_to_str(i,str,10);
str[strlen(str)+1] = '\0';
str[strlen(str)] = '.';
d = num-i;
k = d*1000000;
if(k<0)
k=-k;
i_to_str(k,str+strlen(str),10);
}

/*P15.10 Program in which the variable length list is passed to another function */
#include <stdio.h>
#include <stdarg.h>
int sum(int, ...);
void display(int,va_list);
int main(void)
{
printf("Total= %d\n",sum(2,99,68));
printf("Total =%d\n",sum(3,11,79,32));
printf("Total= %d\n",sum(5,23,34,45,56,78));
return 0;
}
int sum(int num, ...)
{
int i;
va_list ap;
449

int arg,total = 0;
va_start(ap,num);
display(num,ap);
for(i=0; i<num; i++)
{
arg=va_arg(ap,int);
total+=arg;
}
va_end(ap);
return total;

}
void display(int num,va_list ap)
{
int i,arg;
for(i=0; i<num; i++)
{
arg=va_arg(ap,int);
printf("%d ",arg);
}
}

** Back exercises for chapter 15:

/*E15.1*/
#include <stdio.h>
enum month{jan,feb,mar,apr,may};
int main(void)
{
enum month m;
m = ++feb;
printf("%d\n",m);
return 0;
}
/*E15.2*/
#include <stdio.h>
enum day{sun=1,mon,tue,wed};
int main(void)
{
enum day d1;
printf("%d\t",mon);
450

**

d1 = mon+2;
printf("%d\n",d1);
return 0;

/*E15.3*/
#include <stdio.h>
struct tag
{
auto int x;
static int y;
};
int main(void)
{
struct tag s;
s.x=4;
s.y=5;
return 0;
}
/*E15.4*/
#include <stdio.h>
int var=6;
int main(void)
{
int var=18;
printf("%d\n",var);
return 0;
}
/*E15.5*/
#include <stdio.h>
int main(void)
{
int i,sum=0;
for(i=0; i<5; i++)
{
int k=10;
sum = sum + k++;
}
451

printf("sum=%d\n",sum);
return 0;

/*E15.6*/
#include <stdio.h>
int main(void)
{
int i,sum=0;
for(i=0; i<5; i++)
{
static int k=10;
sum = sum + k++;
}
printf("sum=%d\n",sum);
return 0;
}
/*E15.7*/
#include <stdio.h>
int x=89;
void func1(int x);
void func2(void);
int main(void)
{
func1(x);
printf("%d\t",x);
func2();
printf("%d\n",x);
return 0;
}
void func1(int x)
{
x++;
}
void func2(void)
{
x++;
}
/*E15.8*/
452

#include <stdio.h>
void func(void);
int x=2;
static int y=5;
int main(void)
{
int x=3;
func();
func();
printf("Inside main() : x=%d, y=%d\n",x,y);
return 0;
}
void func(void)
{
static int x;
x=x+2;
printf("Inside func(): x=%d, y=%d\n",x,y);
}
/*E15.9*/
#include <stdio.h>
void func1(void);
void func2(void);
int main(void)
{
func1();
func2();
return 0;
}
void func1(void)
{
extern int x;
x++;
printf("%d\t",x);
}
int x=89;
void func2(void)
{
x++;
printf("%d\n",x);
453

}
/*E15.10*/
#include <stdio.h>
#include <stdlib.h>
int *func(void);
int main(void)
{
const int *ptr=func();
*ptr=7;
printf("*ptr=%d",*ptr);
return 0;
}
int *func(void)
{
int *p=(int *)malloc(sizeof(int));
return p;
}
/*E15.11*/
#include <stdio.h>
int main(void)
{
char str1[]="hockey";
char str2[]="Cricket";
char const *p=str1;
*p='j';
p=str2;
return 0;
}
/*E15.12*/
#include <stdio.h>
int main(void)
{
char str1[]="hockey";
char str2[]="Cricket";
char *const p=str1;
*p='j';
p=str2;
454

return 0;

/*E15.13*/
#include <stdio.h>
void func(int a[],const int b[],int c[]);
int main(void)
{
int a[]={1,2,3,4};
int b[]={5,6,7,8};
int c[]={9,10,11,12};
func(a,b,c);
return 0;
}
void func(int a[],const int b[],int c[])
{
a=c;
a[0]++;
b=c;
b[0]++;
}
/*E15.14*/
#include <stdio.h>
int thrice(int i);
int main(void)
{
const int i=23;
const int j=thrice(i);
printf("j=%d\n",j);
return 0;
}
int thrice(int i)
{
return 3*i;
}
/*E15.15*/
#include <stdio.h>
int func(void);
455

int main(void)
{
int i=3;
const int j=i;
const int k=func();
int *ptr=&k;
const int m=*ptr;
printf("%d\t%d\t%d\t%d\n",i,j,k,m);
return 0;
}
int func(void)
{
return 4;
}
/*E15.16*/
#include <stdio.h>
#include <stdlib.h>
int *func(int *psize);
int main(void)
{
int i,size;
const int *arr=func(&size);
for(i=0; i<size; i++)
{
printf("Enter a[%d] : ", i);
scanf("%d",&arr[i]);
}
for(i=0; i<size; i++)
printf("%d\t",arr[i]);
return 0;
}
int *func(int *psize)
{
int *p;
printf("Enter size : ");
scanf("%d",psize);
p =(int *) malloc(*psize * sizeof(int));
return p;
}
456

/*E15.17*/
#include <stdio.h>
#include <stdarg.h>
void func(int n,...);
int main(void)
{
int count=4;
func(count,2,3,4,5);
return 0;
}
void func(int n,...)
{
va_list ap;
int a,i;
for(i=0; i<n; i++)
{
a=va_arg(ap,int);
printf("%d ",a);
}
}
/*E15.18*/
#include <stdio.h>
#include <stdarg.h>
void func(int a, ... ,int b);
int main(void)
{
int a=2,b=3,c=4,d=5;
func(4,2,3,8,5);
return 0;
}
void func(int a, ... ,int b)
{
va_list *ap;
va_start(ap,a);
for(i=0; i<b; i++)
printf("%d",va_arg(ap,int));
va_end;
}
/*E15.19*/
457

#include <stdio.h>
int main(void)
{
int x=6;
++x++;
printf("%d\n",x);
return 0;
}

15

Chapter 16

** In chapter exercises for chapter 16:

**

/*To add days to a date*/


void addDays(char *date,int days,char *newDate)
{
int d1,m1,y1,d2,m2,y2;
int j1,x,j2,k;
splitDate(date,&y1,&m1,&d1);
j1=julian(d1,m1,y1);
x = isLeap(y1) ? 366-j1 : 365-j1;
if(days<=x)
{
j2=j1+days;
y2=y1;
}
else
{
days=days-x;
y2=y1+1;
k = isLeap(y2) ? 366 : 365;
while(days>=k)
{
if(isLeap(y2))
days=days-366;
else
days=days-365;
y2++;
k=isLeap(y2)?366:365;
458

}/*End of while*/
j2=days;
}/*End of else*/
revJulian(j2,y2,&d2,&m2);
formDate(newDate,y2,m2,d2);
}/* End of addDays()*/
/*To add months to a date*/
void addMonths(char *date,int imonth,char *newDate)
{
int d,m,y,quot,rem;
splitDate(date, &y, &m,&d);
quot=imonth/12;
rem=imonth%12;
y=y+quot;
m=m+rem;
if(m>12)
{
y=y+1;
m=m-12;
}
if(m==2 && d>=29)
{
if(!isLeap(y))
d=28;
if(isLeap(y))
d=29;

}
if((m==4 || m==6 || m==9 || m==11) && d==31)
d=30;
formDate(newDate,y,m,d);
}/*End of addMonths()*/
/* To add years to a date */
void addYears(char *date, int iyear,char *newDate)
{
int d,m,y;
splitDate(date,&y,&m,&d);
y=y+iyear;
459

if(d==29 && m==2 && !isLeap(y))


d=28;
formDate(newDate,y,m,d);
}/* End of addYears()*/
/*To compare two dates*/
int cmpDate(char *date1,char *date2)
{
int d1,m1,y1,d2,m2,y2;
splitDate(date1,&y1,&m1,&d1);
splitDate(date2,&y2,&m2,&d2);
if(y1<y2)
return
if(y1>y2)
return
if(m1<m2)
return
if(m1>m2)
return
if(d1<d2)
return
if(d1>d2)
return
return 0;
}/*End of cmpDate()*/

1;
-1;
1;
-1;
1;
-1;

void splitDate(char *date,int *y,int *m,int *d)


{
date[2]=date[5]='\0';
*d=atoi(date);
*m=atoi(date+3);
*y=atoi(date+6);
date[2]=date[5]='/';
}/*End of splitDate()*/
void formDate(char *date,int y,int m,int d)
{
char arr[9][3]={"01","02","03","04","05","06","07","08","09"};
if(d<10)
460

else

strcpy(date,arr[d-1]);

sprintf(date,"%d",d);
if(m<10)
strcpy(date+3,arr[m-1]);
else
sprintf(date+3,"%d",m);
sprintf(date+6,"%d",y);
date[2]=date[5]='/';
}/*End of formDate()*/
int diffDays(char *date1,char *date2)
{
int d1,m1,y1,d2,m2,y2,j1,j2;
int y,d,i,days;
d=0;
splitDate(date1,&y1,&m1,&d1);
splitDate(date2,&y2,&m2,&d2);
j1=julian(d1,m1,y1);
j2=julian(d2,m2,y2);
if(y1==y2)
return j2-j1;
for(i=y1+1; i<=y2-1; i++)
{
if(isLeap(i))
d=d+366;
else
d=d+365;
}
if(isLeap(y1))
days=(366-j1)+d+j2;
else
days=(365-j1)+d+j2;
return days;
}/*End of diffDays()*/
/*To get difference of two dates in years, months and days*/
void diffYMD(char *date1, char *date2,int *y,int *m,int *d)
{
int d1,m1,y1,d2,m2,y2;
461

splitDate(date1,&y1,&m1,&d1);
splitDate(date2,&y2,&m2,&d2);
if(d2<d1)
{
if(m2==3)
{
if(isLeap(y2))
d2=d2+29;
else
d2=d2+28;
}
else if(m2==5 || m2==7 || m2==10 || m2==12)
d2=d2+30;
else
d2=d2+31;
m2=m2-1;
}
if(m2<m1)
{
y2=y2-1;
m2=m2+12;
}
*y=y2-y1;
*m=m2-m1;
*d=d2-d1;
}/*End of diffYMD()*/
/*Function to calculate julian days*/
int julian(int d,int m,int y)
{
int j=d;
switch(m-1)
{
case 11: j+=30;
case 10: j+=31;
case 9:
j+=30;
case 8:
j+=31;
case 7:
j+=31;
case 6:
j+=30;
case 5:
j+=31;
462

case
case
case
case

4:
3:
2:
1:

j+=30;
j+=31;
j+=28;
j+=31;

}
if(isLeap(y) && m>2)
j=j+1;
return j;
}/*End of julian()*/

/*Function to get the value of day and month from julian days */
void revJulian(int j,int y,int *d,int *m)
{
int i;
int month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
if(isLeap(y))
month[2]=29;
for(i=1; i<=12; i++)
{
if(j<=month[i])
break;
j=j-month[i];
}
*d=j;
*m=i;
}/* End of revJulian()*/
int isLeap(int year)
{
if(year%100!=0 && year%4==0 || year%400==0)
return 1;
else
return 0;
}/*End of isLeap()*/
#include <stdio.h>
#include <stdlib.h>
#include "dtmanip.h"
main()
{
463

int choice;
char date[11],date1[11],date2[11];
char dayWeek[10],newDate[11];
int iyear,imonth,dyear,dmonth,days;
int y,m,d;
while(1)
{
printf("1. Date validation\n");
printf("2. Compare dates\n");
printf("3. Difference of Dates in days\n");
printf("4. Difference of Dates in years,months,days\n");
printf("5. Day of week\n");
printf("6. Add years\n");
printf("7. Add months\n");
printf("8. Add days\n");
printf("9. Subtract years\n");
printf("10. Subtract months\n");
printf("11. Subtract days\n");
printf("12. Exit\n");
printf("Enter your choice : ");
scanf("%d",&choice);
switch(choice)
{
case 1:
printf("Enter date(dd/mm/yyyy) : ");
scanf("%s",date);
if(isValid(date))
printf("Valid date\n");
else
printf("Not a Valid Date\n");
break;
case 2:
printf("Enter first date(dd/mm/yyyy) : ");
scanf("%s",date1);
printf("Enter second date(dd/mm/yyyy) : ");
scanf("%s",date2);
if(!isValid(date1) || !isValid(date2))
{
464

printf("Enter only valid dates\n");


break;

case 3:

case 4:

}
if(cmpDate(date1,date2)==0)
printf("Date : %s and Date : %s are same.\n",date1, dat
else if(cmpDate(date1,date2)==1)
printf("Date : %s < Date : %s \n",date1,date2);
else if(cmpDate(date1,date2)==-1)
printf("Date : %s > Date : %s \n",date1,date2);
break;
printf("Enter first date(dd/mm/yyyy) : ");
scanf("%s",date1);
printf("Enter second date(dd/mm/yyyy) : ");
scanf("%s",date2);
if(!isValid(date1) || !isValid(date2))
{
printf("Enter only valid dates\n");
break;
}
if(cmpDate(date1,date2)==1)
days=diffDays(date1,date2);
else
days=diffDays(date2, date1);
printf("Difference in days = %d\n",days);
break;
printf("Enter first date(dd/mm/yyyy) : ");
scanf("%s",date1);
printf("Enter second date(dd/mm/yyyy) : ");
scanf("%s",date2);
if(!isValid(date1) || !isValid(date2))
{
printf("Enter only valid dates\n");
break;
}
if(cmpDate(date1,date2)==1)
diffYMD(date1, date2, &y, &m, &d);
else
diffYMD(date2,date1,&y,&m,&d);
465

case 5:

case 6:

case 7:

case 8:

printf("Difference of the two dates is : ");


printf("%d years %d months %d days\n",y, m, d);
break;
printf("Enter date(dd/mm/yyyy) : ");
scanf("%s",date);
weekDay(date,dayWeek);
printf("Day of week is %s\n",dayWeek);
break;
printf("Enter date(dd/mm/yyyy) : ");
scanf("%s",date);
if( !isValid(date))
{
printf("Enter a valid date\n");
break;
}
printf("Enter the number of years to be added : ");
scanf("%d",&iyear);
addYears(date,iyear,newDate);
printf("New date is %s\n",newDate);
break;
printf("Enter date(dd/mm/yyyy) : ");
scanf("%s",date);
if(!isValid(date))
{
printf("Enter a valid date\n");
break;
}
printf("Enter the number of months to be added : ");
scanf("%d",&imonth);
addMonths(date,imonth,newDate);
printf("New date is %s\n",newDate);
break;
printf("Enter date(dd/mm/yyyy) : ");
scanf("%s",date);
if(!isValid(date))
{
466

printf("Enter a valid date\n");


break;

case 9:

}
printf("Enter the number of days to be added : ");
scanf("%d",&days);
addDays(date,days,newDate);
printf("New date is %s\n",newDate);
break;

printf("Enter date(dd/mm/yyyy) : ");


scanf("%s",date);
if(!isValid(date))
{
printf("Enter a valid date\n");
break;
}
printf("Enter the number of years to be subtracted : ");
scanf("%d",&dyear);
subYears(date,dyear,newDate);
printf("New date is %s\n",newDate);
break;
case 10:
printf("Enter date(dd/mm/yyyy) : ");
scanf("%s",date);
if(!isValid(date))
{
printf("Enter a valid date\n");
break;
}
printf("Enter the number of months to be subtracted : ");
scanf("%d",&dmonth);
subMonths(date,dmonth,newDate);
printf("New date is %s\n",newDate);
break;
case 11:
printf("Enter date(dd/mm/yyyy) : ");
scanf("%s",date);
if(!isValid(date))
{
printf("Enter a valid date\n");
467

break;
}
printf("Enter the number of days to be subtracted : ");
scanf("%d",&days);
subDays(date,days,newDate);
printf("New date is %s\n",newDate);
break;
case 12:
exit(1);
default:
printf("Wrong choice\n");
}/*End of switch*/
}/*End of while*/
}/*End of main()*/
/* To subtract days from a date*/
void subDays(char *date,int days,char *newDate)
{
int d1,m1,y1,d2,m2,y2;
int j1,j2,x,k;
splitDate(date,&y1,&m1,&d1);
j1=julian(d1,m1,y1);
if(days<j1)
{
j2=j1-days;
y2=y1;
}
else
{
days=days-j1; /*Now subtract days from 1st Jan y1*/
y2=y1-1;
k = isLeap(y2) ? 366 : 365;
while(days>=k )
{
if(isLeap(y2))
days=days-366;
else
days=days-365;
y2--;
k = isLeap(y2) ? 366 : 365;
468

}
j2=isLeap(y2) ? 366-days : 365-days;

}
revJulian(j2,y2,&d2,&m2);
formDate(newDate,y2,m2,d2);
}/*End of subDays()*/

/*To subtract months from a date*/


void subMonths(char *date,int dmonth,char *newDate)
{
int d,m,y,quot,rem;
splitDate(date,&y,&m,&d);
quot=dmonth/12;
rem=dmonth%12;
y=y-quot;
m=m-rem;
if(m<=0)
{
y=y-1;
m=m+12;
}
if(m==2 && d>=29)
{
if(!isLeap(y))
d=28;
if(isLeap(y))
d=29;
}
if((m==4 || m==6 || m==9 || m==11) && d==31)
d=30;
formDate(newDate,y,m,d);
}/*End of subMonths()*/
/*To subtract years from a date*/
void subYears(char *date,int dyear,char *newDate)
{
int d,m,y;
splitDate(date,&y,&m,&d);
y=y-dyear;
if(d==29 && m==2 && !isLeap(y))
469

d=28;
formDate(newDate,y,m,d);
}/*End of subYears()*/
int isValid(char *date)
{
int d,m,y;
if(date[2]!='/' || date[5]!='/' || strlen(date)!=10)
return 0;
splitDate(date,&y,&m,&d);

if(d==0 || m==0 || y==0)


return 0;
if(d<1 || d>31 || m<1 || m>12)
return 0;
if(m==2)
/*check for number of days in February*/
{
if(d==30 || d==31 || (d==29 && !isLeap(y)))
return 0;
}
else if(m==4 || m==6 || m==9 || m==11) /*Check for days in April,June,Sept,Nov*
{
if(d==31)
return 0;
}
return 1;
}/*End of isValid()*/
void weekDay(char *date,char *dayWeek)
{
int d,m,y,j,f,h,fh,day;
splitDate(date,&y,&m,&d);
j=julian(d,m,y);
f=(y-1)/4;
h=(y-1)/100;
fh=(y-1)/400;
day=(y+j+f-h+fh)%7;
switch(day)
470

case
case
case
case
case
case
case

}
}/*End of weekDay()*/

0:
1:
2:
3:
4:
5:
6:

strcpy(dayWeek,"Saturday");
strcpy(dayWeek,"Sunday");
strcpy(dayWeek,"Monday");
strcpy(dayWeek,"Tuesday");
strcpy(dayWeek,"Wednesday");
strcpy(dayWeek,"Thursday");
strcpy(dayWeek,"Friday");

471

break;
break;
break;
break;
break;
break;
break;

You might also like